IfcOpenShell:尝试返回包含ifcopenshell对象及其对应形状的字典时出现Segfault

问题描述

im试图从ifc文件提取所有IfcProduct形状,并将它们(及其对应的Product)返回到程序的另一部分。问题是,当我尝试返回包含这些对象及其相应形状的字典时,程序退出并出现分段错误。在调试时,我看到数据已保存在数据结构中,但在返回后或尝试访问此dict中包含的数据时,调试器会退出并出现段错误

我通过conda安装了ifcopenshell并在ubuntu docker vm中运行。

这是我正在尝试运行的代码

def create_shapes_from_ifcopenshell_object(ifcopenshell_object) -> dict:
"""Creates a shape from the given IfcopenShell Object and returns a dictionary containing the GlobalId as the key
and the product and shape as dictionary."""
try:
    print("Creating shape-objects from IfcProducts.")
    settings = ifcopenshell.geom.settings()
    products = ifcopenshell_object
    product_shapes_dict = {}
    for product in products:
        if product.is_a("IfcopeningElement") or product.is_a("IfcSite") or product.is_a("IfcAnnotation"):
            continue
        if product.Representation is not None:
            try:
                shape = ifcopenshell.geom.create_shape(settings,product).geometry
            except Exception as e:
                print(str(e) + ". Product:" + str(product))
                continue
            shape_entry = {"guid": product.GlobalId,"product": product,"shape": shape}
            product_shapes_dict[shape_entry["guid"]] = shape_entry
except RuntimeError as re:
    print("Runtime error" + str(re))
    return {"ERROR": str(e)}
except Exception as e:
    print("ERROR during shape creation.")
    return {"ERROR": str(e)}
# pprint(product_shapes_dict) <-- THIS SHOWS THE CORRECT DICT
return product_shapes_dict # <-- Segfault directly after this

解决方法

通过将shape_entry词典中的产品解析为字符串来解决我的代码中的问题。

shape_entry = {"guid": product.GlobalId,"product": str(product),"shape": shape}