+ fix in DXF export (Daniel Falck)

git-svn-id: https://free-cad.svn.sourceforge.net/svnroot/free-cad/trunk@5135 e8eeb9e2-ec13-0410-a4a9-efa5cf37419d
This commit is contained in:
wmayer 2011-11-15 09:02:31 +00:00
parent 9dcfe40a73
commit 1ca9395fd9

View File

@ -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)