From d57e1adcf26ec70f2e82c48587364fbf8691a867 Mon Sep 17 00:00:00 2001 From: Bernd Hahnebach Date: Tue, 23 Jul 2019 21:45:34 +0200 Subject: [PATCH] Arch: ifc import, move reading ifc attributes in separate method --- src/Mod/Arch/importIFC.py | 55 +++++++++++++++++++++------------------ 1 file changed, 30 insertions(+), 25 deletions(-) diff --git a/src/Mod/Arch/importIFC.py b/src/Mod/Arch/importIFC.py index 8fc099810c..26ccbf836a 100644 --- a/src/Mod/Arch/importIFC.py +++ b/src/Mod/Arch/importIFC.py @@ -877,31 +877,7 @@ def insert(filename,docname,skip=[],only=[],root=None): # 0.18 behaviour: properties are saved as pset;;type;;value in IfcProperties d = obj.IfcProperties - for pset in properties[pid].keys(): - #print("adding pset",pset,"to object",obj.Label) - psetname = ifcfile[pset].Name - if six.PY2: - psetname = psetname.encode("utf8") - for prop in properties[pid][pset]: - e = ifcfile[prop] - pname = e.Name - if six.PY2: - pname = pname.encode("utf8") - if e.is_a("IfcPropertySingleValue"): - if e.NominalValue: - ptype = e.NominalValue.is_a() - if ptype in ['IfcLabel','IfcText','IfcIdentifier','IfcDescriptiveMeasure']: - pvalue = e.NominalValue.wrappedValue - if six.PY2: - pvalue = pvalue.encode("utf8") - else: - pvalue = str(e.NominalValue.wrappedValue) - if hasattr(e.NominalValue,'Unit'): - if e.NominalValue.Unit: - pvalue += e.NominalValue.Unit - d[pname+";;"+psetname] = ptype+";;"+pvalue - #print("adding property: ",pname,ptype,pvalue," pset ",psetname) - obj.IfcProperties = d + obj.IfcProperties = getIfcProperties(ifcfile, pid, properties, d) elif hasattr(obj,"IfcData"): @@ -1275,6 +1251,35 @@ def insert(filename,docname,skip=[],only=[],root=None): # ************************************************************************************************ # ********** helper for import IFC ************** +def getIfcProperties(ifcfile, pid, properties, d): + + for pset in properties[pid].keys(): + #print("reading pset: ",pset) + psetname = ifcfile[pset].Name + if six.PY2: + psetname = psetname.encode("utf8") + for prop in properties[pid][pset]: + e = ifcfile[prop] + pname = e.Name + if six.PY2: + pname = pname.encode("utf8") + if e.is_a("IfcPropertySingleValue"): + if e.NominalValue: + ptype = e.NominalValue.is_a() + if ptype in ['IfcLabel','IfcText','IfcIdentifier','IfcDescriptiveMeasure']: + pvalue = e.NominalValue.wrappedValue + if six.PY2: + pvalue = pvalue.encode("utf8") + else: + pvalue = str(e.NominalValue.wrappedValue) + if hasattr(e.NominalValue,'Unit'): + if e.NominalValue.Unit: + pvalue += e.NominalValue.Unit + d[pname+";;"+psetname] = ptype+";;"+pvalue + #print("adding property: ",pname,ptype,pvalue," pset ",psetname) + return d + + class recycler: "the compression engine - a mechanism to reuse ifc entities if needed"