diff --git a/src/Mod/Draft/importDXF.py b/src/Mod/Draft/importDXF.py index a7218a1d6..66d02349f 100644 --- a/src/Mod/Draft/importDXF.py +++ b/src/Mod/Draft/importDXF.py @@ -984,20 +984,12 @@ def getSplineSegs(edge): points.append(edge.valueAt(edge.Length)) return points -class savePoint: - def __init__(self,end_pt): - self.old_pt = end_pt - def old(self): - return self.old_pt - - def getWire(wire,nospline=False): "returns an array of dxf-ready points and bulges from a wire" edges = fcgeo.sortEdges(wire.Edges) points = [] for edge in edges: v1 = edge.Vertexes[0].Point - end_pt = savePoint(edge.Vertexes[-1].Point) if (isinstance(edge.Curve,Part.Circle)): mp = fcgeo.findMidpoint(edge) v2 = edge.Vertexes[-1].Point @@ -1057,6 +1049,7 @@ def writeShape(ob,dxfobject,nospline=False): for e in ob.Shape.Edges: if not(e.hashCode() in processededges): loneedges.append(e) # print "lone edges ",loneedges + edge_index = 0 for edge in loneedges: if (isinstance(edge.Curve,Part.BSplineCurve)) and ((not nospline) or (len(edge.Vertexes) == 1)): # splines points = [] @@ -1068,15 +1061,23 @@ def writeShape(ob,dxfobject,nospline=False): layer=getGroup(ob,exportList))) elif (len(edge.Vertexes) == 1) and (isinstance(edge.Curve,Part.Circle)): # circles center = fcvec.tup(edge.Curve.Center) - radius = ob.Shape.Edges[0].Curve.Radius + radius = ob.Shape.Edges[edge_index].Curve.Radius dxfobject.append(dxfLibrary.Circle(center, radius, color=getACI(ob), layer=getGroup(ob,exportList))) elif (len(edge.Vertexes) == 3) or (isinstance (edge.Curve,Part.Circle)): # arcs - ce = ob.Shape.Edges[0].Curve.Center - radius = ob.Shape.Edges[0].Curve.Radius - ve1 = edge.Vertexes[0].Point - ve2 = edge.Vertexes[-1].Point + ce = ob.Shape.Edges[edge_index].Curve.Center + radius = ob.Shape.Edges[edge_index].Curve.Radius + #find direction of arc + tang1 = edge.Curve.tangent(edge.ParameterRange[0]) + tang2 = edge.Curve.tangent(edge.ParameterRange[1]) + cross1 = Vector.cross(Vector(tang1[0][0],tang1[0][1],tang1[0][2]),Vector(tang2[0][0],tang2[0][1],tang2[0][2])) + if cross1[2] > 0: # >0 ccw <0 cw + ve1 = edge.Vertexes[0].Point + ve2 = edge.Vertexes[-1].Point + else: + ve1 = edge.Vertexes[-1].Point + ve2 = edge.Vertexes[0].Point ang1=-math.degrees(fcvec.angle(ve1.sub(ce))) ang2=-math.degrees(fcvec.angle(ve2.sub(ce))) dxfobject.append(dxfLibrary.Arc(fcvec.tup(ce), radius, @@ -1089,7 +1090,7 @@ def writeShape(ob,dxfobject,nospline=False): dxfobject.append(dxfLibrary.Line([fcvec.tup(ve1), fcvec.tup(ve2)], color=getACI(ob), layer=getGroup(ob,exportList))) - + edge_index = edge_index+1 def writeMesh(ob,dxfobject): "export a shape as a polyface mesh" meshdata = ob.Shape.tessellate(0.5)