Dealing with dodgy IFC properties.

Anyone got any clever ideas on how I can remove a Property from a Pset. The catch is that the Property exists twice in the PropertySet, once with the correct Value, once with the string "Error".
So far my attempt with ifcopenshell has stalled as I can't seem to pull Properties from a Pset if they exist twice, IOS just gives me one of the two.

import ifcopenshell
import ifcopenshell.util.element
from pathlib import Path
from pprint import pprint

ifc_path = r"./mdl/"
ifc_glob = Path(ifc_path).glob("*.ifc")

guid_fpid_dict = {}

for ifc_file in ifc_glob:

    mdl = ifcopenshell.open(ifc_file)
    objs = mdl.by_type("IfcBuildingElementProxy")

    for obj in objs:

        guid = obj.GlobalId        
        fpid = ifcopenshell.util.element.get_pset(obj, name="MyPset")

        guid_fpid_dict[guid] = fpid

pprint(guid_fpid_dict["ExampleGlobalID"])

The resulting dict only contains one instance of the Property, rather than the two I know it has. I assume this is because the IFC is so dodgy that IOS wasn't built to expect it.
I would love to fix at source instead but that is just as much of a struggle.

Tagged:

Comments

  • In the end I managed to fix it at source, just a bit of dll decompilation magic needed...

Sign In or Register to comment.