[Bf-extensions-cvs] [4f3a6caf] master: PDT: Revise Tangent Functions
Alan Odom
noreply at git.blender.org
Sat Mar 28 18:59:43 CET 2020
Commit: 4f3a6cafc07f0f29cb17949ddf037db24c81d148
Author: Alan Odom
Date: Mon Feb 17 14:57:11 2020 +0000
Branches: master
https://developer.blender.org/rBA4f3a6cafc07f0f29cb17949ddf037db24c81d148
PDT: Revise Tangent Functions
This commit is still WIP.
Added Enumerator for Tangent Types, refactored code, revised DocStrings.
This section of PDT still requires extensive testing, currently underway, but not complete.
===================================================================
M pdt_tangent.py
M precision_drawing_tools/__init__.py
M precision_drawing_tools/pdt_menus.py
M precision_drawing_tools/pdt_msg_strings.py
===================================================================
diff --git a/pdt_tangent.py b/pdt_tangent.py
index a00be313..e5f32e0b 100644
--- a/pdt_tangent.py
+++ b/pdt_tangent.py
@@ -47,6 +47,7 @@ from .pdt_msg_strings import (
)
from . import pdt_exception
+
PDT_ObjectModeError = pdt_exception.ObjectModeError
PDT_SelectionError = pdt_exception.SelectionError
@@ -184,37 +185,42 @@ def make_vectors(coords, a1, a2, a3, pg):
tangent_vector_o4[a3] = coords[8]
if pg.plane == "LO":
- tangent_vector_o1 = view_coords(tangent_vector_o1[a1], tangent_vector_o1[a2],
- tangent_vector_o1[a3])
- tangent_vector_o2 = view_coords(tangent_vector_o2[a1], tangent_vector_o2[a2],
- tangent_vector_o2[a3])
- tangent_vector_o3 = view_coords(tangent_vector_o3[a1], tangent_vector_o3[a2],
- tangent_vector_o3[a3])
- tangent_vector_o4 = view_coords(tangent_vector_o4[a1], tangent_vector_o4[a2],
- tangent_vector_o4[a3])
+ tangent_vector_o1 = view_coords(
+ tangent_vector_o1[a1], tangent_vector_o1[a2], tangent_vector_o1[a3]
+ )
+ tangent_vector_o2 = view_coords(
+ tangent_vector_o2[a1], tangent_vector_o2[a2], tangent_vector_o2[a3]
+ )
+ tangent_vector_o3 = view_coords(
+ tangent_vector_o3[a1], tangent_vector_o3[a2], tangent_vector_o3[a3]
+ )
+ tangent_vector_o4 = view_coords(
+ tangent_vector_o4[a1], tangent_vector_o4[a2], tangent_vector_o4[a3]
+ )
+
+ return (tangent_vector_o1, tangent_vector_o2, tangent_vector_o3, tangent_vector_o4)
- return ((tangent_vector_o1, tangent_vector_o2, tangent_vector_o3, tangent_vector_o4))
def tangent_setup(context, pg, plane, obj_data, centre_0, centre_1, centre_2, radius_0, radius_1):
# Depth is a3
a1, a2, a3 = set_mode(plane)
+ mode = pg.tangent_mode
if plane == "LO":
centre_0 = view_coords_i(centre_0[a1], centre_0[a2], centre_0[a3])
centre_1 = view_coords_i(centre_1[a1], centre_1[a2], centre_1[a3])
centre_2 = view_coords_i(centre_2[a1], centre_2[a2], centre_2[a3])
- if pg.tangent_from_point:
+ if pg.tangent_mode == "point":
vector_difference = centre_2 - centre_0
distance = sqrt(vector_difference[a1] ** 2 + vector_difference[a2] ** 2)
else:
vector_difference = centre_1 - centre_0
distance = sqrt(vector_difference[a1] ** 2 + vector_difference[a2] ** 2)
- if distance > radius_0 + radius_1 and not pg.tangent_from_point:
- mode = "inner"
- elif distance > radius_0 and distance > radius_1 and not pg.tangent_from_point:
- mode = "outer"
- elif distance > radius_1 and pg.tangent_from_point:
- mode = "point"
- else:
+
+ if (
+ (distance <= radius_0 and mode in {"point"}) or
+ (distance <= (radius_0 + radius_1) and mode in {"inner", "both"}) or
+ (distance <= radius_0 or distance <= radius_1 and mode in {"outer", "both"})
+ ):
# Cannot execute, centres are too close.
pg.error = f"{PDT_ERR_BADDISTANCE}"
context.window_manager.popup_menu(oops, title="Error", icon="ERROR")
@@ -222,12 +228,10 @@ def tangent_setup(context, pg, plane, obj_data, centre_0, centre_1, centre_2, ra
if mode == "point":
if (
- ((centre_2[a1] - centre_0[a1]) ** 2 +
- (centre_2[a2] - centre_0[a2]) ** 2 -
- radius_0 ** 2) > 0
- ):
- hloc_to1, hloc_to2, vloc_to1, vloc_to2 = get_tangent_points(context,
- centre_0[a1], centre_0[a2], radius_0, centre_2[a1], centre_2[a2]
+ (centre_2[a1] - centre_0[a1]) ** 2 + (centre_2[a2] - centre_0[a2]) ** 2 - radius_0 ** 2
+ ) > 0:
+ hloc_to1, hloc_to2, vloc_to1, vloc_to2 = get_tangent_points(
+ context, centre_0[a1], centre_0[a2], radius_0, centre_2[a1], centre_2[a2]
)
else:
pg.error = PDT_ERR_MATHSERROR
@@ -244,16 +248,18 @@ def tangent_setup(context, pg, plane, obj_data, centre_0, centre_1, centre_2, ra
tangent_vector_o2[a3] = centre_2[a3]
if pg.plane == "LO":
centre_2 = view_coords(centre_2[a1], centre_2[a2], centre_2[a3])
- tangent_vector_o1 = view_coords(tangent_vector_o1[a1], tangent_vector_o1[a2],
- tangent_vector_o1[a3])
- tangent_vector_o2 = view_coords(tangent_vector_o2[a1], tangent_vector_o2[a2],
- tangent_vector_o2[a3])
- tangent_vectors = ((centre_2, tangent_vector_o1, tangent_vector_o2))
+ tangent_vector_o1 = view_coords(
+ tangent_vector_o1[a1], tangent_vector_o1[a2], tangent_vector_o1[a3]
+ )
+ tangent_vector_o2 = view_coords(
+ tangent_vector_o2[a1], tangent_vector_o2[a2], tangent_vector_o2[a3]
+ )
+ tangent_vectors = (centre_2, tangent_vector_o1, tangent_vector_o2)
draw_tangents(tangent_vectors, obj_data)
return {"FINISHED"}
- if mode in {"outer", "inner"}:
+ if mode in {"outer", "both"}:
# Outer Tangents
if radius_0 == radius_1:
# No intersection point for outer tangents
@@ -272,25 +278,17 @@ def tangent_setup(context, pg, plane, obj_data, centre_0, centre_1, centre_2, ra
centre_0[a1], centre_0[a2], centre_1[a1], centre_1[a2], radius_0, radius_1
)
- if (
- ((hloc_po - centre_0[a1]) ** 2 +
- (vloc_po - centre_0[a2]) ** 2 -
- radius_0 ** 2) > 0
- ):
- hloc_to1, hloc_to2, vloc_to1, vloc_to2 = get_tangent_points(context,
- centre_0[a1], centre_0[a2], radius_0, hloc_po, vloc_po
+ if ((hloc_po - centre_0[a1]) ** 2 + (vloc_po - centre_0[a2]) ** 2 - radius_0 ** 2) > 0:
+ hloc_to1, hloc_to2, vloc_to1, vloc_to2 = get_tangent_points(
+ context, centre_0[a1], centre_0[a2], radius_0, hloc_po, vloc_po
)
else:
pg.error = PDT_ERR_MATHSERROR
context.window_manager.popup_menu(oops, title="Error", icon="ERROR")
return {"FINISHED"}
- if (
- ((hloc_po - centre_0[a1]) ** 2 +
- (vloc_po - centre_0[a2]) ** 2 -
- radius_1 ** 2) > 0
- ):
- hloc_to3, hloc_to4, vloc_to3, vloc_to4 = get_tangent_points(context,
- centre_1[a1], centre_1[a2], radius_1, hloc_po, vloc_po
+ if ((hloc_po - centre_0[a1]) ** 2 + (vloc_po - centre_0[a2]) ** 2 - radius_1 ** 2) > 0:
+ hloc_to3, hloc_to4, vloc_to3, vloc_to4 = get_tangent_points(
+ context, centre_1[a1], centre_1[a2], radius_1, hloc_po, vloc_po
)
else:
pg.error = PDT_ERR_MATHSERROR
@@ -298,35 +296,36 @@ def tangent_setup(context, pg, plane, obj_data, centre_0, centre_1, centre_2, ra
return {"FINISHED"}
dloc_p = centre_0[a3]
- coords_in = ((hloc_to1, vloc_to1, hloc_to2, vloc_to2, hloc_to3, vloc_to3,
- hloc_to4, vloc_to4, dloc_p))
+ coords_in = (
+ hloc_to1,
+ vloc_to1,
+ hloc_to2,
+ vloc_to2,
+ hloc_to3,
+ vloc_to3,
+ hloc_to4,
+ vloc_to4,
+ dloc_p,
+ )
tangent_vectors = make_vectors(coords_in, a1, a2, a3, pg)
draw_tangents(tangent_vectors, obj_data)
- if mode == "inner":
+ if mode in {"inner", "both"}:
# Inner Tangents
hloc_pi, vloc_pi = get_tangent_intersect_inner(
centre_0[a1], centre_0[a2], centre_1[a1], centre_1[a2], radius_0, radius_1
)
- if (
- ((hloc_pi - centre_0[a1]) ** 2 +
- (vloc_pi - centre_0[a2]) ** 2 -
- radius_0 ** 2) > 0
- ):
- hloc_to1, hloc_to2, vloc_to1, vloc_to2 = get_tangent_points(context,
- centre_0[a1], centre_0[a2], radius_0, hloc_pi, vloc_pi
+ if ((hloc_pi - centre_0[a1]) ** 2 + (vloc_pi - centre_0[a2]) ** 2 - radius_0 ** 2) > 0:
+ hloc_to1, hloc_to2, vloc_to1, vloc_to2 = get_tangent_points(
+ context, centre_0[a1], centre_0[a2], radius_0, hloc_pi, vloc_pi
)
else:
pg.error = PDT_ERR_MATHSERROR
context.window_manager.popup_menu(oops, title="Error", icon="ERROR")
return {"FINISHED"}
- if (
- ((hloc_pi - centre_0[a1]) ** 2 +
- (vloc_pi - centre_0[a2]) ** 2 -
- radius_0 ** 2) > 0
- ):
- hloc_to3, hloc_to4, vloc_to3, vloc_to4 = get_tangent_points(context,
- centre_1[a1], centre_1[a2], radius_1, hloc_pi, vloc_pi
+ if ((hloc_pi - centre_0[a1]) ** 2 + (vloc_pi - centre_0[a2]) ** 2 - radius_0 ** 2) > 0:
+ hloc_to3, hloc_to4, vloc_to3, vloc_to4 = get_tangent_points(
+ context, centre_1[a1], centre_1[a2], radius_1, hloc_pi, vloc_pi
)
else:
pg.error = PDT_ERR_MATHSERROR
@@ -334,8 +333,17 @@ def tangent_setup(context, pg, plane, obj_data, centre_0, centre_1, centre_2, ra
return {"FINISHED"}
dloc_p = centre_0[a3]
- coords_in = ((hloc_to1, vloc_to1, hloc_to2, vloc_to2, hloc_to3, vloc_to3,
- hloc_to4, vloc_to4, dloc_p))
+ coords_in = (
+ hloc_to1,
+ vloc_to1,
+ hloc_to2,
+ vloc_to2,
+ hloc_to3,
+ vloc_to3,
+ hloc_to4,
+ vloc_to4,
+ dloc_p,
+ )
tangent_vectors = make_vectors(coords_in, a1, a2, a3, pg)
draw_tangents(tangent_vectors, obj_data)
@@ -402,7 +410,7 @@ def analyse_arc(context, pg):
context.window_manager.popup_menu(oops, title="Error", icon="ERROR")
raise PDT_SelectionError
vector_a = verts[0].co
- vector_b = verts[int(floor(len(verts)/2))].co
+ vector_b = verts[int(floor(len(verts) / 2))].co
vector_c = verts[-1].co
vector_delta, radius = arc_centre(vector_a, vector_b, vector_c)
@@ -410,
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-extensions-cvs
mailing list