1

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

可以用 xbim 做到这一点吗?有没有 xbim 的替代品?

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

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

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

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

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

4

1 回答 1

1

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>;
                    }
                }
            }
        }
于 2019-07-15T15:01:52.090 回答