IFC 通过 python 和 IfcOpenShell 到 Cypher

IFC to Cypher via python and IfcOpenShell

我想将 IFC 文件转换为图形数据库,以提取 IFC 模型中空间的邻接性和可访问性。 我想使用 Neo4j,作为这项工作的一部分,我需要从 IFC 文件中提取 Cypher 代码。 我找到 this code 但当我 运行 它时,我遇到以下错误:

AttributeError                            Traceback (most recent call last)
<ipython-input-1-b13704b3ee10> in <module>
     20 typeDict = IfcTypeDict()
     21 
---> 22 assert typeDict['IfcWall'] == ('GlobalId', 'OwnerHistory', 'Name', 'Description', 'ObjectType', 'ObjectPlacement', 'Representation', 'Tag')
     23 
     24 nodes = []

<ipython-input-1-b13704b3ee10> in __missing__(self, key)
     15 class IfcTypeDict(dict):
     16     def __missing__(self, key):
---> 17         value = self[key] = ifcopenshell.create_entity(key).wrapped_data.get_attribute_names()
     18         return value
     19 

AttributeError: 'str' object has no attribute 'get_attribute_names'

谁能帮我解决这个问题?或者关于我如何执行此任务的任何其他想法? 任何帮助将不胜感激。

此致。

当您使用 IfcOpenShell v0.6 时,此脚本似乎是为 IFC2x3 编译的 IfcOpenShell v0.5 创建的,不幸的是,它不向后兼容。您可以尝试使用 v0.5 或将脚本更新到 v0.6 API.

如果您使用 v0.5,请注意此版本是为特定的 IFC 版本编译的。我相信已发布的包适用于 IFC2x3,因此它不适用于 IFC4 文件。虽然您可以针对 IFC4 进行编译,但随后会失去对 IFC2x3 的支持。该断言不再有效,因为 IFC4 墙还有一个属性 PredefinedType:

assert typeDict["IfcWall"] == ('GlobalId', 'OwnerHistory', 'Name', 'Description', 'ObjectType', 'ObjectPlacement', 'Representation', 'Tag', 'PredefinedType')

或者,如果使用 v0.6,则必须在脚本中进行更多更改。也许像这个updated Gist。再往下还有一个问题,你可能会遇到更多。如有疑问,请尝试联系原作者或以脚本为灵感编写自己的转换。