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:
Sebastian Hoogen 2014-03-12 13:32:07 +01:00 committed by wmayer
parent 8b901df068
commit 9d93ad760e
2 changed files with 20 additions and 24 deletions

View File

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

View File

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