From 6e1874eedecc6ed9fdb110d99d73760975b84def Mon Sep 17 00:00:00 2001 From: Roy-043 <70520633+Roy-043@users.noreply.github.com> Date: Wed, 10 Nov 2021 20:54:11 +0100 Subject: [PATCH] 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. --- src/Mod/Draft/draftgeoutils/edges.py | 35 ++++------------------------ 1 file changed, 5 insertions(+), 30 deletions(-) diff --git a/src/Mod/Draft/draftgeoutils/edges.py b/src/Mod/Draft/draftgeoutils/edges.py index 7bfda8256a..d3114b403f 100644 --- a/src/Mod/Draft/draftgeoutils/edges.py +++ b/src/Mod/Draft/draftgeoutils/edges.py @@ -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 -## @} \ No newline at end of file +## @}