如何使用Xbim从IFC文件中检索几何图形?或者这个任务还有其他选择吗?



我想从原始IFC文件中检索数据。 我正在用Xbim尝试这个。我能够检索元素,但无法获取特定于几何的数据。我需要位置,边界框。

是否可以使用 xbim 执行此操作? 有没有xbim的替代品?

就我而言, IFC 包括墙壁、开口、板、横梁和螺柱。 我需要它们相关的几何形状和位置。 横梁和螺柱有钻孔。 但这些钻孔不属于任何ifc实体,如IfcOpenElement或Ifc Void。

有没有办法让我得到这些孔的几何形状 以镶嵌形式?

我所需要的只是访问IFC实体的几何数据。

我还尝试使用Revit来获取数据。但是转换存在问题,例如它在很大程度上取决于 Ifc 实体与 revit 类别的映射方式。对于映射到不同类别的所有其他新模型 ifc 元素。

在Revit中,我导入了ifc文件并为Revit创建了插件。 这些插件可以读取所有元素并获取其几何数据。 有没有其他这样的应用程序,但比Revit轻,我可以尝试构建这样的插件,应用程序也必须正确分类元素?

Revit 是一个繁重的程序,请改用 xbim,请尝试以下代码以获取几何信息:

using (var model = IfcStore.Open("ifc_file.ifc"))
{
Xbim3DModelContext context = new Xbim3DModelContext(model);
context.CreateContext();
List<XbimShapeGeometry> geometrys = context.ShapeGeometries().ToList();
List<XbimShapeInstance> instances = context.ShapeInstances().ToList();
//Check all the instances
foreach (var instance in instances)
{
var transfor = instance.Transformation; //Transformation matrix (location point inside)
XbimShapeGeometry geometry = context.ShapeGeometry(instance);   //Instance's geometry
XbimRect3D box = geometry.BoundingBox; //bounding box you need
byte[] data = ((IXbimShapeGeometryData)geometry).ShapeData;
//If you want to get all the faces and trinagulation use this
using (var stream = new MemoryStream(data))
{
using (var reader = new BinaryReader(stream))
{
var mesh = reader.ReadShapeTriangulation();
List<XbimFaceTriangulation> faces = mesh.Faces as List<XbimFaceTriangulation>;
List<XbimPoint3D> vertices = mesh.Vertices as List<XbimPoint3D>;
}
}
}
}

相关内容

  • 没有找到相关文章

最新更新