From 44e354bfdd9d3277c7ddd0c72b60e0627cb8ad23 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Fri, 16 May 2014 21:30:00 -0300 Subject: [PATCH] Arch: stronger handling of errors in IFC export --- src/Mod/Arch/ifcWriter.py | 12 ++++++++---- src/Mod/Arch/importIFC.py | 22 +++++++++++++++------- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/src/Mod/Arch/ifcWriter.py b/src/Mod/Arch/ifcWriter.py index 6ed2d8461b09..a11f7281ba07 100644 --- a/src/Mod/Arch/ifcWriter.py +++ b/src/Mod/Arch/ifcWriter.py @@ -470,10 +470,14 @@ def addProduct(self,elttype,shapes,storey=None,placement=None,name="Unnamed elem elt = create(self._fileobject,elttype,[uid(),self._owner,name,description,None,placement,prd,None]+extra) except: print "unable to create an ",elttype, " with attributes: ",[uid(),self._owner,name,description,None,placement,prd,None]+extra - print "supported attributes are: " - o = IfcImport.Entity(elttype) - print getPropertyNames(o) - raise + try: + o = IfcImport.Entity(elttype) + print "supported attributes are: " + print getPropertyNames(o) + except: + print "unable to create an element of type '"+elttype+"'" + print "WARNING: skipping object '"+name+"' of type "+elttype + return None self.BuildingProducts.append(elt) if not storey: if self.Storeys: diff --git a/src/Mod/Arch/importIFC.py b/src/Mod/Arch/importIFC.py index 2c724a58d6f7..3920c9555924 100644 --- a/src/Mod/Arch/importIFC.py +++ b/src/Mod/Arch/importIFC.py @@ -969,6 +969,9 @@ def export(exportList,filename): others.append(obj) objectslist = buildings + floors + others if DEBUG: print "adding ", len(objectslist), " objects" + + global unprocessed + unprocessed = [] # process objects for obj in objectslist: @@ -995,12 +998,6 @@ def export(exportList,filename): ifctype = "ReinforcingBar" if DEBUG: print "adding " + obj.Label + " as Ifc" + ifctype - - # writing text log - spacer = "" - for i in range(36-len(obj.Label)): - spacer += " " - txt.append(obj.Label + spacer + ifctype) # writing IFC data if obj.isDerivedFrom("App::DocumentObjectGroup"): @@ -1074,7 +1071,15 @@ def export(exportList,filename): if DEBUG: print " Type ",ifctype," is not supported by the current version of IfcOpenShell. Exporting as IfcBuildingElementProxy instead" ifctype = "IfcBuildingElementProxy" extra = ["ELEMENT"] - ifc.addProduct( ifctype, representation, storey=parent, placement=placement, name=name, description=descr, extra=extra ) + p = ifc.addProduct( ifctype, representation, storey=parent, placement=placement, name=name, description=descr, extra=extra ) + if p: + # writing text log + spacer = "" + for i in range(36-len(obj.Label)): + spacer += " " + txt.append(obj.Label + spacer + ifctype) + else: + unprocessed.append(obj) else: if DEBUG: print "IFC export: object type ", otype, " is not supported yet." @@ -1103,6 +1108,9 @@ def export(exportList,filename): f.close() FreeCAD.ActiveDocument.recompute() + + if unprocessed: + print "Some objects were not exported. See importIFC.unprocessed" def explore(filename=None):