我是 .NET xBim Toolkit 的新手,我想知道它是否可以帮助计算 IFC 模型中某些对象的体积。特别是,有一个名为 XbimGeometry 的模块,但我不确定它是否以及如何用于此目的。或者如果它只是用于图形。
是的,可以。在 Xbim.Geometry v5.1(develop/master 中的最新版本)中,您可以计算一些 IFC 几何图元的体积。
通常,几何引擎用于创建细分/网格化的场景,但它也可用于计算更基本的几何数据。
例如在此单元测试中,您可以了解如何获取单个 IfcSweptDiskSolid 对象的体积https://github.com/xBimTeam/XbimGeometry/blob/c1c22812601d0bd506c5f9230b731d0ab0c6e08a/Xbim.Geometry.Engine.Interop.Tests/IfcExtrudedAreaSolidTests.cs# L74
using (var model = MemoryModel.OpenRead("YourModel.ifc"))
{
var sweptDisk = model.Instances.OfType<IIfcSweptDiskSolid>().FirstOrDefault();
// Convert to a solid
var solid = geomEngine.CreateSolid(sweptDisk, logger);
solid.Volume.Should().BeApproximately(1234.56, 1e-7);
}
显然,这是相当低的水平,您需要考虑空隙(孔等 - 使用引擎中的布尔切割功能),并考虑许多不同的几何类型(扫描、布雷普、拉伸等)。请记住,上面的代码是构成对象一部分的单个几何项目,并且可能只是实体形状集的一部分。即对象通常由这些单独表示的组合来表示。
即该窗口由 4 个独立的表示组成:
这只是一个对象,项目要复杂得多。
因此“计算体积”可能需要一些澄清。
最终您的实际答案将取决于您想要如何处理体积数据。您想进行基于材料的数量起飞吗?您是否只想要一个物体的总体积(请记住,像墙这样的东西可能有多种材质和空隙)?您想要边界框体积吗?
v6 Xbim.Geometry 在这方面有相当多的改进,因此可能值得检查 netcore 分支。我相信该版本中有一些更高阶的实现。