使用 xbim 库创建自定义多边形墙
Posted
技术标签:
【中文标题】使用 xbim 库创建自定义多边形墙【英文标题】:create custom polygon wall using xbim library 【发布时间】:2020-04-23 06:20:57 【问题描述】:我尝试使用一些多边形点制作 ifc 墙并保存到 ifc 文件。
我找到了一些方法并尝试了,但它不起作用。
https://github.com/xBimTeam/XbimGeometry/issues/117 IFC - Representation of triangle mesh这是我的代码:
private static void CreateCustomPolygonWall(IfcStore model)
using (var txn = model.BeginTransaction("Create Custom Polygon"))
List<double[]> points = new List<double[]>();
points.Add(new double[] 0, 0, 0 );
points.Add(new double[] 100, 0, 0 );
points.Add(new double[] 100, 100, 0 );
var list = new List<IfcCartesianPoint>();
foreach (var coordinates in points.Select(p => p.Select(x => new IfcLengthMeasure(x))))
var point = model.Instances.New<IfcCartesianPoint>();
point.Coordinates.AddRange(coordinates);
list.Add(point);
var faceSet = model.Instances.New<Xbim.Ifc4.TopologyResource.IfcConnectedFaceSet>();
List<int[]> indexes = new List<int[]>();
indexes.Add(new int[] 0, 1, 2 );
foreach (var t in indexes)
var polyLoop = model.Instances.New<Xbim.Ifc4.TopologyResource.IfcPolyLoop>();
polyLoop.Polygon.AddRange(t.Select(k => list[k]));
var bound = model.Instances.New<Xbim.Ifc4.TopologyResource.IfcFaceBound>();
bound.Bound = polyLoop;
var face = model.Instances.New<Xbim.Ifc4.TopologyResource.IfcFace>();
face.Bounds.Add(bound);
faceSet.CfsFaces.Add(face);
var surface = model.Instances.New<IfcFaceBasedSurfaceModel>();
surface.FbsmFaces.Add(faceSet);
txn.Commit();
如果我按照代码保存到 ifc 文件,则该文件具有我描述的多边形点。但它没有显示任何 ifc 查看器。
#23=IFCCARTESIANPOINT((0.,0.,0.));
#24=IFCCARTESIANPOINT((100.,0.,0.));
#25=IFCCARTESIANPOINT((100.,100.,0.));
那么如何使用 xbim 库创建多边形墙并将其保存到 ifc 文件?
有什么提示吗?
最好的问候。
【问题讨论】:
【参考方案1】:您需要创建的不仅仅是几何图形,以创建其他查看器将处理和显示的 IFC 文件。 Here 是 3D 墙创建的工作示例。如果您想将墙定义为任意配置文件,您可以将示例中的 IfcRectangleProfileDef
替换为其他 profile definition,可能将 IfcArbitraryClosedProfileDef 替换为 OuterCurve
是 IfcPolyline。
【讨论】:
以上是关于使用 xbim 库创建自定义多边形墙的主要内容,如果未能解决你的问题,请参考以下文章