通过 IFCOpenShell 生成 IFCRoad

问题描述 投票:0回答:1

我有这个型号

class Tramif_PCI_agrup(models.Model):
    id = models.AutoField(primary_key=True)    
    pci = models.FloatField(null=True)
    geom = models.LineStringField(geography=True, srid=4326, null=True)

我想使用 IFCOpenShell 库转换为 IFCRoad,以获得最终的 IFC 文件,其中每个对象及其几何和 PCI 值。

这是我尝试过的,但没有成功

# Get all objects from the Tramif_PCI_agrup model
            tramif_pci_agrups = Tramif_PCI_agrup.objects.all()
            

            # Create a blank model
            ifc_file = ifcopenshell.file(schema='IFC4X3')

            # Create an IfcRoad entity
            road = ifc_file.create_entity("IfcRoad")
            road.Name = "Simple Road"

            # Fetch objects from the model and iterate over them
            
            for tramif_object in tramif_pci_agrups:
                # Extract geometry and PCI values from the model object
                geom = tramif_object.geom
                pci = tramif_object.pci

                # Convert the geometry to WKT format
                wkt_geom = geom.wkt

                # Create an IfcAlignment entity for each object
                alignment = ifc_file.create_entity("IfcAlignment")
                alignment.Name = f"Alignment {tramif_object.id}"
                alignment.Description = f"PCI: {pci}"

                # Create an IfcAlignmentCurve entity for the geometry
                curve = ifc_file.create_entity("IfcAlignmentCurve")
                curve.Axis = ifc_file.create_entity("IfcCurve")
                curve.Axis.Points = ifc_file.create_entity("IfcPointList")
                curve.Axis.Points.Coordinates = [(coord[0], coord[1], 0) for coord in GEOSGeometry(wkt_geom)]

                # Add the alignment curve to the alignment entity
                alignment.Representation = curve

                # Add the alignment entity to the road
                road.Representation = alignment

            # Write the IFC file
            ifc_file.write("/images/road_test.ifc")

但是它给了我错误

Entity with name 'IfcAlignmentCurve' not found in schema 'IFC4X3'

我做错了什么?有什么解决办法吗?我寻找了一个通过 IFCOpenShell 生成 IFCRoad 的示例,但什么也没有

python django geometry postgis ifc
1个回答
0
投票

当前的IFC4.3版本(Add 2)没有定义类型

IfcAlignmentCurve
。我认为您应该将
IfcCurve
实体直接设置为
IfcAlignment
实体的表示项。这是通过
IfcShapeRepresentation
(多个产品表示的集合)和
IfcRepesentation
(保存表示上下文和相应的表示项目,例如曲线)来完成的。另请注意,
IfcCurve
是抽象的。我假设您想使用它的子类型
IfcPolyline
,它是对齐表示允许的表示项目类型之一。

您可以在官方文档中找到示例,例如IfcAlignment 的示例。您还可以咨询buildingSMART论坛的开发人员部分,了解与模式相关的具体问题。

© www.soinside.com 2019 - 2024. All rights reserved.