我想从原始IFC文件中检索数据。 我正在尝试用Xbim。我能够检索元素,但无法获取特定于几何的数据。我需要位置,boundingbox。
是否可以使用xbim做到这一点? xbim可以替代吗?
就我而言, IFC包括墙壁,开口,平板,横梁和双头螺栓。 我需要它们的相关几何形状和位置。 梁和螺柱上有钻孔。 但是这些钻孔不属于任何ifc实体,例如IfcOpeningElement或Ifc Void。
有没有办法让我获得这些孔的几何形状 呈棋盘格形式?
我所需要做的就是访问IFC实体的几何数据。
我也尝试过使用Revit来获取数据,但是转换存在问题,例如它很大程度上取决于如何将具有revit类别的Ifc实体映射到其他所有新模型中,将ifc元素映射到不同的类别
在revit中,我导入了ifc文件并为revit创建了插件。 这些插件可以读取所有元素并获取其几何数据。 还有其他任何这样的应用程序,但是比revit轻的多,我可以尝试构建这样的插件,而且应用程序必须正确地对元素进行分类?
答案 0 :(得分:0)
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>;
}
}
}
}