Draft: revise findMidpoint function

The findMidpoint function (used by Draft_Snap_Midpoint) only worked for straight and circular edges. With this revision the midpoint of all edges can be found.
This commit is contained in:
Roy-043
2021-11-10 20:54:11 +01:00
committed by Chris Hennes
parent 69fd6d35ec
commit 6e1874eede

View File

@@ -164,36 +164,11 @@ def invert(shape):
def findMidpoint(edge):
"""Return the midpoint of a straight line or circular edge."""
first = edge.Vertexes[0].Point
last = edge.Vertexes[-1].Point
if geomType(edge) == "Circle":
center = edge.Curve.Center
radius = edge.Curve.Radius
if len(edge.Vertexes) == 1:
# Circle
dv = first.sub(center)
dv = dv.negative()
return center.add(dv)
axis = edge.Curve.Axis
chord = last.sub(first)
perp = chord.cross(axis)
perp.normalize()
ray = first.sub(center)
apothem = ray.dot(perp)
sagitta = radius - apothem
startpoint = App.Vector.add(first, chord.multiply(0.5))
endpoint = DraftVecUtils.scaleTo(perp, sagitta)
return App.Vector.add(startpoint, endpoint)
elif geomType(edge) == "Line":
halfedge = (last.sub(first)).multiply(0.5)
return App.Vector.add(first, halfedge)
else:
"""Return the midpoint of an edge."""
if edge.Length == 0:
return None
else:
return edge.valueAt(edge.Curve.parameterAtDistance(edge.Length/2, edge.FirstParameter))
def getTangent(edge, from_point=None):
@@ -248,4 +223,4 @@ def get_referenced_edges(property_value):
isLine = is_line
## @}
## @}