Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'precision_drawing_tools/pdt_cad_module.py')
-rw-r--r--precision_drawing_tools/pdt_cad_module.py92
1 files changed, 54 insertions, 38 deletions
diff --git a/precision_drawing_tools/pdt_cad_module.py b/precision_drawing_tools/pdt_cad_module.py
index 21a5c6c7..6e6294e6 100644
--- a/precision_drawing_tools/pdt_cad_module.py
+++ b/precision_drawing_tools/pdt_cad_module.py
@@ -3,7 +3,7 @@
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
+# of the License, or (at your ointersect_pointion) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -28,19 +28,20 @@ from mathutils import Vector
from mathutils.geometry import intersect_line_line, intersect_point_line
from .pdt_functions import debug
-def point_on_edge(p, edge):
+
+def point_on_edge(point, edge):
"""Find Point on Edge.
Args:
- p: vector
+ point: vector
edge: tuple containing 2 vectors.
Returns:
True if point p happens to lie on the edge, False otherwise.
"""
- pt, _percent = intersect_point_line(p, *edge)
- on_line = (pt - p).length < 1.0e-5
+ intersect_point, _percent = intersect_point_line(point, *edge)
+ on_line = (intersect_point - point).length < 1.0e-5
return on_line and (0.0 <= _percent <= 1.0)
@@ -56,8 +57,10 @@ def line_from_edge_intersect(edge1, edge2):
Output of intersect_line_line.
"""
- [p1, p2], [p3, p4] = edge1, edge2
- return intersect_line_line(p1, p2, p3, p4)
+ [intersect_point1, intersect_point2], [intersect_point3, intersect_point4] = edge1, edge2
+ return intersect_line_line(
+ intersect_point1, intersect_point2, intersect_point3, intersect_point4
+ )
def get_intersection(edge1, edge2):
@@ -73,6 +76,7 @@ def get_intersection(edge1, edge2):
line = line_from_edge_intersect(edge1, edge2)
if line:
return (line[0] + line[1]) / 2
+ return None
def test_coplanar(edge1, edge2):
@@ -92,50 +96,53 @@ def test_coplanar(edge1, edge2):
line = line_from_edge_intersect(edge1, edge2)
if line:
return (line[0] - line[1]).length < 1.0e-5
+ return None
-def closest_idx(pt, e):
+def closest_idx(intersect_point, edge):
"""Get Closest Vertex to input point.
- If both points in e are equally far from pt, then v1 is returned.
+ If both points in e are equally far from intersect_point, then v1 is returned.
Args:
- pt: vector
- e: bmesh edge
+ intersect_point: vector
+ edge: bmesh edge
Returns:
- Index of vertex closest to pt.
+ Index of vertex closest to intersect_point.
"""
- if isinstance(e, bmesh.types.BMEdge):
- ev = e.verts
- v1 = ev[0].co
- v2 = ev[1].co
- distance_test = (v1 - pt).length <= (v2 - pt).length
- return ev[0].index if distance_test else ev[1].index
+ if isinstance(edge, bmesh.types.BMEdge):
+ edge_verts = edge.verts
+ vector_a = edge_verts[0].co
+ vector_b = edge_verts[1].co
+ distance_test = (vector_a - intersect_point).length <= (vector_b - intersect_point).length
+ return edge_verts[0].index if distance_test else edge_verts[1].index
- debug(f"Received {e}, check expected input in docstring ")
+ debug(f"Received {edge}, check expected input in docstring ")
+ return None
-def closest_vector(pt, e):
+def closest_vector(intersect_point, edge):
"""Return Closest Vector to input Point.
- If both points in e are equally far from pt, then v1 is returned.
+ If both points in e are equally far from intersect_point, then v1 is returned.
Args:
- pt: vector
- e: tuple containing 2 vectors
+ intersect_point: vector
+ edge: tuple containing 2 vectors
Returns:
- Vector closest to pt.
+ Vector closest to intersect_point.
"""
- if isinstance(e, tuple) and all([isinstance(co, Vector) for co in e]):
- v1, v2 = e
- distance_test = (v1 - pt).length <= (v2 - pt).length
- return v1 if distance_test else v2
+ if isinstance(edge, tuple) and all([isinstance(co, Vector) for co in edge]):
+ vector_a, vector_b = edge
+ distance_test = (vector_a - intersect_point).length <= (vector_b - intersect_point).length
+ return vector_a if distance_test else vector_b
- debug(f"Received {e}, check expected input in docstring ")
+ debug(f"Received {edge}, check expected input in docstring ")
+ return None
def coords_tuple_from_edge_idx(bm, idx):
@@ -159,8 +166,8 @@ def vertex_indices_from_edges_tuple(bm, edge_tuple):
The vertex indices of edge_tuple.
"""
- def k(v, w):
- return bm.edges[edge_tuple[v]].verts[w].index
+ def k(ind_v, ind_w):
+ return bm.edges[edge_tuple[ind_v]].verts[ind_w].index
return [k(i >> 1, i % 2) for i in range(4)]
@@ -182,29 +189,38 @@ def get_vert_indices_from_bmedges(edges):
return temp_edges
-def num_edges_point_lies_on(pt, edges):
+def num_edges_point_lies_on(intersect_point, edges):
"""Returns the number of edges that a point lies on."""
- res = [point_on_edge(pt, edge) for edge in [edges[:2], edges[2:]]]
+ res = [point_on_edge(intersect_point, edge) for edge in [edges[:2], edges[2:]]]
return len([i for i in res if i])
-def find_intersecting_edges(bm, pt, idx1, idx2):
+def find_intersecting_edges(bm, intersect_point, idx1, idx2):
"""Find Intercecting Edges.
Args:
- pt: Vector
+ intersect_point: Vector
idx1, ix2: edge indices
Returns:
- The list of edge indices where pt is on those edges.
+ The list of edge indices where intersect_point is on those edges.
"""
- if not pt:
+ if not intersect_point:
return []
idxs = [idx1, idx2]
edges = [coords_tuple_from_edge_idx(bm, idx) for idx in idxs]
- return [idx for edge, idx in zip(edges, idxs) if point_on_edge(pt, edge)]
+ return [idx for edge, idx in zip(edges, idxs) if point_on_edge(intersect_point, edge)]
def vert_idxs_from_edge_idx(bm, idx):
+ """Find Vertex Indices form Edge Indices.
+
+ Args:
+ Object Bmesh as bm
+ Selection Index as idx
+
+ Returns:
+ Vertex Indices of Edge.
+ """
edge = bm.edges[idx]
return edge.verts[0].index, edge.verts[1].index