问题标签 [ifc-open-shell]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
49 浏览

python - 如何将新实体添加到 ifcopenshell 模块中?

为了解决我的问题,我尝试在 ifcopenshell 模块中添加一些 Etify 类型。我以前没有任何模块经验。我只是尝试:

我不明白这里的 schema_identifier 是什么,以及如何从其他 ifc Entify 获取 schema_identifier 的示例,例如 ifcwall?

0 投票
0 回答
76 浏览

python - IfcOpenShell Python,plt的墙的位置

我刚刚开始使用 Python 分析 IFC 文件。为此,我将 IfcOpenShell 用于 Python。

我已经设法确定了 x、y、z 的位置、墙的长度和厚度。不幸的是,我失败了,因为我只知道墙的起点。墙去的点我找不到或没有办法计算这个。

有人可以告诉我如何做到这一点的例子吗?

目标是我可以将最后来自 IFC 的数据转换为绘图输出。如果这很简单,也请告诉我。

这是我的代码:

谢谢你的帮助

彼得

0 投票
0 回答
20 浏览

python - 使用多处理使用 IfcOpenShell 解析 1 GB 大小的 IFC 文件时遇到问题

我正在使用 Python 的 IfcOpenShell 模块解析 IFC 文件(大小为 1 GB),以获取我将在图形数据库中插入的所有节点、关系和属性。

对于快速 IFC 文件解析,我在 python 中使用多处理。在使用多个进程时(在我的情况下为 8 个,因为我的 CPU 是 8 个内核)我将 IFC 文件数据划分为 8 个列表,然后启动 8 个进程并创建节点和边以用于图形数据库插入

以下是我在使用多处理时面临的问题:

  1. 我需要打开文件以在每个进程中读取,因为我们通过使用“ifcopenshell.open()”方法打开文件获得的文件对象是不可腌制的,因此不能作为参数传递给“multiprocessing.Process()”。
  2. 如果我尝试腌制文件对象,我会得到“无法腌制'SwigPyObject'对象”异常。
  3. 由于我需要打开文件以在每个进程中读取它正在消耗我机器的完整 RAM(32 GB)并导致 VS-Code 编辑器崩溃。

我也尝试过在单线程中运行它,但这需要大量时间。我曾尝试在 Python 中使用多线程选项,但后来发现由于全局解释器锁定,在 Python 中无法使用多线程。这是否有更好的解决方案或方法来解析 1 GB 大小的 IFC 文件并创建节点和边缘?

我一直在考虑以下解决方案:将大型 IFC 文件划分为多个较小文件并单独解析它们以获得最终数据

有可能这样做吗?如果是,如何?

如果您有其他好的方法/解决方案,请提出建议。

先感谢您。