使用 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 库创建自定义多边形墙的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 golang 实现自定义裁剪

关于Unity实现自定义多边形图片效果

来自自定义多边形 MySQL 的纬度经度搜索

AmCharts4:来自 GeoJSON 的自定义地图的 getPolygonById 方法?

Android 自定义图像视图形状

使用 Align 时自定义剪裁器不移动