diff --git a/src/Mod/Draft/DraftGeomUtils.py b/src/Mod/Draft/DraftGeomUtils.py index 3fe2577cd4..7bb2be0476 100644 --- a/src/Mod/Draft/DraftGeomUtils.py +++ b/src/Mod/Draft/DraftGeomUtils.py @@ -244,26 +244,7 @@ from draftgeoutils.geometry import isPlanar from draftgeoutils.wires import findWiresOld -def getTangent(edge, frompoint=None): - """ - returns the tangent to an edge. If from point is given, it is used to - calculate the tangent (only useful for an arc of course). - """ - if geomType(edge) == "Line": - return vec(edge) - elif geomType(edge) == "BSplineCurve" or \ - geomType(edge) == "BezierCurve": - if not frompoint: - return None - cp = edge.Curve.parameter(frompoint) - return edge.Curve.tangent(cp)[0] - elif geomType(edge) == "Circle": - if not frompoint: - v1 = edge.Vertexes[0].Point.sub(edge.Curve.Center) - else: - v1 = frompoint.sub(edge.Curve.Center) - return v1.cross(edge.Curve.Axis) - return None +from draftgeoutils.edges import getTangent from draftgeoutils.faces import bind diff --git a/src/Mod/Draft/draftgeoutils/edges.py b/src/Mod/Draft/draftgeoutils/edges.py index 3ddaf64fd0..e8e884e86a 100644 --- a/src/Mod/Draft/draftgeoutils/edges.py +++ b/src/Mod/Draft/draftgeoutils/edges.py @@ -31,7 +31,7 @@ import lazy_loader.lazy_loader as lz import FreeCAD import DraftVecUtils -from draftgeoutils.general import geomType +from draftgeoutils.general import geomType, vec # Delay import of module until first use because it is heavy Part = lz.LazyLoader("Part", globals(), "Part") @@ -179,3 +179,29 @@ def findMidpoint(edge): else: return None + + +def getTangent(edge, from_point=None): + """Return the tangent to an edge, including BSpline and circular arcs. + + If from_point is given, it is used to calculate the tangent, + only useful for a circular arc. + """ + if geomType(edge) == "Line": + return vec(edge) + + elif (geomType(edge) == "BSplineCurve" + or geomType(edge) == "BezierCurve"): + if not from_point: + return None + cp = edge.Curve.parameter(from_point) + return edge.Curve.tangent(cp)[0] + + elif geomType(edge) == "Circle": + if not from_point: + v1 = edge.Vertexes[0].Point.sub(edge.Curve.Center) + else: + v1 = from_point.sub(edge.Curve.Center) + return v1.cross(edge.Curve.Axis) + + return None