+ 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:
parent
9dcfe40a73
commit
1ca9395fd9
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue
Block a user