Skip to content

Commit

Permalink
issue 0001469: OpenSCAD import more than one dxf layer
Browse files Browse the repository at this point in the history
 with the same name

remove all imported dxf geometry
change dxf import object naming to avoid conflicts with group names
  • Loading branch information
5263 authored and wwmayer committed Mar 12, 2014
1 parent 8b901df commit 9d93ad7
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 24 deletions.
38 changes: 18 additions & 20 deletions src/Mod/OpenSCAD/OpenSCAD2Dgeom.py
Expand Up @@ -459,31 +459,29 @@ def median(v1,v2):
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
6 changes: 2 additions & 4 deletions src/Mod/OpenSCAD/importCSG.py
Expand Up @@ -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
Expand Down

0 comments on commit 9d93ad7

Please sign in to comment.