issue 0001469: OpenSCAD import more than one dxf layer
with the same name remove all imported dxf geometry change dxf import object naming to avoid conflicts with group names
This commit is contained in:
parent
8b901df068
commit
9d93ad760e
|
@ -459,31 +459,29 @@ def superWireReverse(debuglist,closed=False):
|
|||
print newedges
|
||||
return Part.Wire(newedges)
|
||||
|
||||
dxfcache = {}
|
||||
def importDXFface(filename,layer=None,doc=None):
|
||||
import FreeCAD,importDXF
|
||||
doc = doc or FreeCAD.activeDocument()
|
||||
global dxfcache
|
||||
layers=dxfcache.get(id(doc),[])
|
||||
if layers:
|
||||
try:
|
||||
groupobj=[go for go in layers if (not layer) or go.Label == layer]
|
||||
except:
|
||||
groupobj= None
|
||||
else:
|
||||
groupobj= None
|
||||
if not groupobj:
|
||||
layers = importDXF.processdxf(doc,filename) or importDXF.layers
|
||||
dxfcache[id(doc)] = layers[:]
|
||||
for l in layers:
|
||||
if FreeCAD.GuiUp:
|
||||
for o in l.Group:
|
||||
o.ViewObject.hide()
|
||||
l.ViewObject.hide()
|
||||
groupobj=[go for go in layers if (not layer) or go.Label == layer]
|
||||
layers = importDXF.processdxf(doc,filename) or importDXF.layers
|
||||
for l in layers:
|
||||
if FreeCAD.GuiUp:
|
||||
for o in l.Group:
|
||||
o.ViewObject.hide()
|
||||
l.ViewObject.hide()
|
||||
groupobj=[go for go in layers if (not layer) or go.Label == layer]
|
||||
edges=[]
|
||||
if not groupobj:
|
||||
raise ValueError, 'import of layer %s failed' % layer
|
||||
for shapeobj in groupobj[0].Group:
|
||||
edges.extend(shapeobj.Shape.Edges)
|
||||
return edgestofaces(edges)
|
||||
faces = edgestofaces(edges)
|
||||
# in order to allow multiple import with the same layer name
|
||||
# we need to remove used objects from the layer group
|
||||
#shapeobj.Document.removeObject(shapeobj.Name)
|
||||
#groupobj[0].Document.removeObject(groupobj[0].Name)
|
||||
for layer in layers: #remove everything that has been imported
|
||||
layer.removeObjectsFromDocument()
|
||||
#for obj in layer.Group:
|
||||
# obj.Document.removeObject(obj.Name)
|
||||
layer.Document.removeObject(layer.Name)
|
||||
return faces
|
||||
|
|
|
@ -710,12 +710,10 @@ def processDXF(fname,layer):
|
|||
if printverbose: print "PathName : "+pathName
|
||||
dxfname = fname+'.dxf'
|
||||
filename = os.path.join(pathName,dxfname)
|
||||
shortname = os.path.split(fname)[1]
|
||||
if printverbose: print "DXF Full path : "+filename
|
||||
face = importDXFface(filename,layer,doc)
|
||||
#obj=doc.addObject("Part::FeaturePython",'import_dxf_%s_%s'%(objname,layera))
|
||||
obj=doc.addObject('Part::Feature',layer or "dxf")
|
||||
#ImportObject(obj,groupobj[0]) #This object is not mutable from the GUI
|
||||
#ViewProviderTree(obj.ViewObject)
|
||||
obj=doc.addObject('Part::Feature','dxf_%s_%s' % (shortname,layer or "all"))
|
||||
obj.Shape=face
|
||||
if printverbose: print "DXF Diagnostics"
|
||||
if printverbose: print obj.Shape.ShapeType
|
||||
|
|
Loading…
Reference in New Issue
Block a user