diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index 73aa0a50ba..8c5487c1af 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -1216,7 +1216,7 @@ def makeSketch(objectslist,autoconstraints=False,addTo=None,name="Sketch"): if fcgeo.hasOnlyWires(obj.Shape): for w in obj.Shape.Wires: for edge in w.Edges: - nobj.addGeometry(edge.Curve) + nobj.addGeometry(fcgeo.geom(edge)) if autoconstraints: last = nobj.GeometryCount segs = range(last-len(w.Edges),last-1) @@ -1230,7 +1230,7 @@ def makeSketch(objectslist,autoconstraints=False,addTo=None,name="Sketch"): nobj.addConstraint(Constraint("Coincident",last-1,EndPoint,segs[0],StartPoint)) else: for edge in obj.Shape.Edges: - nobj.addGeometry(edge.Curve) + nobj.addGeometry(fcgeo.geom(edge)) if autoconstraints: last = nobj.GeometryCount - 1 if fcgeo.isAligned(nobj.Geometry[last],"x"): diff --git a/src/Mod/Draft/draftlibs/fcgeo.py b/src/Mod/Draft/draftlibs/fcgeo.py index 93e2ba8eb4..500203bff3 100755 --- a/src/Mod/Draft/draftlibs/fcgeo.py +++ b/src/Mod/Draft/draftlibs/fcgeo.py @@ -355,6 +355,22 @@ def findIntersection(edge1,edge2,infinite1=False,infinite2=False,ex1=False,ex2=F else : print "fcgeo: Unsupported curve type: (" + str(edge1.Curve) + ", " + str(edge2.Curve) + ")" +def geom(edge): + "returns a Line, ArcOfCircle or Circle geom from the given edge" + if isinstance(edge.Curve,Part.Line): + return edge.Curve + elif isinstance(edge.Curve,Part.Circle): + if len(edge.Vertexes) == 1: + return edge.Curve + else: + v1 = edge.Vertexes[0].Point + v2 = edge.Vertexes[-1].Point + c = edge.Curve.Center + a1 = -fcvec.angle(v1.sub(c)) + a2 = -fcvec.angle(v2.sub(c)) + return Part.ArcOfCircle(edge.Curve,a1,a2) + else: + return edge.Curve def mirror (point, edge): "finds mirror point relative to an edge"