创建新的属性设置以用于 IFC 输出

Tekla Structures
2023
Tekla Structures

创建新的属性设置以用于 IFC 输出

您可以根据模板属性和用户定义的属性创建其他特性设置,为属性定义特性,并将 Tekla Structures 特性设置绑定到 IFC 实体以用于 IFC 输出。

Tekla Structures 将附加属性设置保存在配置文件中。您可以在多个位置保留多个配置文件。当 Tekla Structures 输出 IFC 文件时,它会读取预定义的属性设置和附加属性设置。

添加 IFC 属性设置配置文件

  1. 文件菜单上,单击输出 > IFC输出 > IFC4
  2. 附加属性设置列表中,选择<新建>,然后单击编辑

    此时将打开属性设置定义对话框。

  3. 属性设置配置文件名框中,输入配置文件的名称。
  4. 要添加新的属性设置,请在属性设置下,单击添加按钮

    您可以在一个配置文件中创建多个属性设置。例如,您可以添加 COG、零件层次的起点和终点以及构件层次的预定信息。

  5. 在打开的对话框中,输入属性设置的名称和描述,然后单击创建

    属性设置名称可以包含任意文本,包括空格。属性设置名称的最大长度为 255 个字符。“Pset_”前缀是为标准 BuildingSMART 属性设置保留的。不要在自定义属性设置的名称中使用此前缀。

  6. 实体列表中,选择实体类型类别。

    结构型是默认类别。当您选择该类别时,相关的 IFC 实体将显示在选择实体类型列表中。

  7. 选择实体类型列表中,选择一个实体类型。

    选择属性列表会显示可供所选实体类型使用的属性。

  8. 选择属性列表中,选择一个或多个属性。

    该属性将添加到右侧的所有选定属性的列表列表中。此列表显示输出了哪些属性:

    • 当您在列表中选择一个属性时,其特性将显示在创建/修改特性下。
    • 您可以通过在创建/修改属性区域的属性框中输出属性名称并单击添加按钮来添加新的属性。
    • 可以通过在列表中选择属性并单击修改删除来修改和删除列表中的属性。
  9. 创建/修改属性下,定义属性特性:
    1. 为所选属性选择属性类型

      在此处,始终为名称中所包含字符数超过 19 个的用户定义的属性选择模板属性。例如,为 ASSEMBLY.USERDEFINED.PLANS_STATUS 选择模板属性

    2. 名称框中输入所选属性的名称。
    3. 选择属性的类型

      类型可以为以下值之一:

      • 字符串:字符序列

      • 布尔:true 或 false

      • 整数:整数

      • 测量

      • 实数[型]:以十进制表示的数字

      • 时间戳

    4. 如果用户定义的属性的类型为测量
      • 您可以选择测量类型长度面积体积质量正长度数量
      • 您可以选择转换系数和精度

        要能够定义转换的值,您需要知道 Tekla Structures 中用于特定属性(例如长度)的单位以及 IFC 中用于属性的单位。例如,对于长度,Tekla Structures 和 IFC 中的单位都是 mm,这意味着转换值为 1。如果 Tekla Structures 中的单位是 m,那么转换值就需要为 1000。

        在面积属性转换中,使用 1E-06 系数,1E-06 = 0.000001。例如,在 Tekla Structures 中,1 m2 为 1000000 mm2。在 IFC 中,面积单位为 m2Tekla Structures 值需要乘以 1E-06 进行转换:1000000 mm2 x 1E-6 = 1 m2

        在体积属性转换中,使用 1E-09 系数,1E-09 = 0.000000001。

        精度表示将属性写入 IFC 时使用的精度,此处使用小数。例如,对于长度,当精度为 0.1 时,对于 1000 mm IFC 文件,该值将为 1000.0。如果精度为 0.01,则该值将为 1000.00。如果精度为 0.5,则 Tekla Structures 值 1000.6 将为 1000.5,1000.8 将为 1001.0,而 1000.2 将为 1000.0。

        用户可定义的精度可以实现更好的 IFC 文件大小优化。

  10. 单击保存

1) 在其中将 Tekla Structures 属性写入到所导出 IFC 文件中的实体组

2) 要为所选实体导出的模板属性或用户定义的属性

3) 显示所选属性的列表

4) 您可以为属性定义的特性

提示:

在根据 UDA 定义属性设置时,请务必选择正确的类型。例如,如果 UDA 属性是普通文本,请选择字符串。如果 UDA 属性是整数,请选择整数。如果选择了错误的类型,属性设置输出将失败。请注意,您可以获取用户定义的属性的字符串值,以便将前缀 USERDEFINED. 添加到用户定义的属性,将属性类型更改为模板属性,并将类型更改为字符串

示例:

IFC2x3 导出中的预定义属性集配置文件

预定义的配置文件是只读文件,从 ..\ProgramData\Trimble\Tekla Structures\<version>\Environments\Common\inp 中读取。位置因环境而异。

  • IfcPropertySetConfigurations_CV2.xml(默认属性设置)/IfcPropertySetConfigurations_CV2_1.xml(最小属性设置)包含输出类型 坐标视图 2.0的属性设置。

  • IfcPropertySetConfigurations_SG.xml(默认属性设置)/IfcPropertySetConfigurations_CV2_1.xml(最小属性设置)包含输出类型 表面几何的属性设置。

  • IfcPropertySetConfigurations_AISC.xml(默认属性设置)/IfcPropertySetConfigurations_AISC_1.xml(最小属性设置)包含输出类型 钢结构视图的属性设置。

同一文件夹中的 IfcPropertySetConfigurations_CV1.xsd 文件是一个方案文件,它描述了 XML 文件的结构,用于验证 XML 文件。软件启动时读取此文件。

IFC2x3 和 IFC4 输出中的附加属性设置配置文件

注:

建议您在属性设置定义对话框中定义附加属性设置,而不是修改文件本身,以确保 XML 配置文件有效。默认情况下,您创建的附加属性设置会保存到模型文件夹下的 \AdditionalPSets 文件夹中。您还可以从以下文件夹读取附加属性设置:

  • XS_SYSTEM

  • XS_PROJECT

  • XS_FIRM

您可以为 IFC2x3 输出和 IFC4 输出定义自己的属性设置。当您以 XML 格式配置 IFC 输出的属性设置时,需要以下两个文件:

  • IfcPropertySetConfigurations.xsd 是一个方案文件,它描述 XML 文件的结构并用于验证 XML 文件。软件启动时读取此文件。

  • IfcPropertySetConfigurations.xml 是实际的属性设置配置文件。

如果使用上面的文件夹,请将文件保存到系统、工程或公司文件夹下的 \AdditionalPSets 文件夹中。

属性设置配置文件内容

配置文件包括属性设置的结构和属性设置内各个属性的数据定义。

    • 模板属性或 UDA 名称。模板属性从 contentattributes_global.lst 读取,用户定义的属性从环境数据库读取。

    • 数据类型,例如字符串、整数、浮点、时间戳、布尔、逻辑或 planeanglemeasure。

    • 单位类型,例如长度、面积、体积或质量。

    • 无单位 UDA 值的单位值比例。添加了转换系数,因此可以转换无单位的值以便与 IFC 文件中的全局单位相对应。面积和体积单位需要这些系数。

    • 如果需要选项类型 UDA 值与用户界面中相同,则可以在属性设置定义对话框中将类型从用户定义的属性更改为字符串类型模板属性

    • 使用默认值的可能性。

    • 模板属性或 UDA 没有值时忽略要输出的设置的可能性。

  • 配置文件包含 IFC 实体的属性设置绑定规则:

    • 绑定到 IFC 实体类型层次,不仅支持建筑元素,而且支持螺栓、钢筋和构件。

    • 使用限制规则的可能性,例如用于数字的 Equal(等于)、NotEqual(不等于)、LessThan(小于)、GreaterThan(大于)、LessThanOrEqual(小于或等于)和 GreaterThanOrEqual(大于或等于),用于文本的 Equal(等于)和 NotEqual(不等于)。

      如果要添加这些限制规则,则需要使用合适的编辑器修改附加的属性设置配置文件。

    • 任何属性设置都可以有任意多个绑定规则,但每个 ReferenceId 只有一个属性设置定义。

    • 您可以将不同的属性设置绑定到不同的 IFC 实体类型。例如,板可能具有不同于梁的属性设置。

  • 如果输出中未找到某个属性的值,则输出根本不会写入该属性设置。为了避免发生这种情况,请在属性设置中为该属性添加 optional=true

下面是 IfcPropertySetConfigurations_CV2.xml 文件内容的示例。

下面是 IfcPropertySetConfigurations.xml 文件内容的示例。

硬编码 IFC4 属性和数量

在 IFC4 导出中,导出的属性和数量均为硬编码。默认情况下会输出这些属性和数量。

/*! Hard coded IfcBeam properties */
    { ENTITY_IfcBeam, Pset_BeamCommon {
        Quantity(Quantity::Enum, L"Status", L"USERDEFINED.RENOVATION_STATUS"),
        Quantity(Quantity::Boolean, L"IsExternal", L"USERDEFINED.IS_EXTERNAL"),
        Quantity(Quantity::Boolean, L"LoadBearing", L"USERDEFINED.LOAD_BEARING"),
        Quantity(Quantity::Identifier, L"Reference", L"USERDEFINED.REF_ID"),
        Quantity(Quantity::Label, L"FireRating", L"USERDEFINED.FIRE_RATING"),
        Quantity(Quantity::Angle, L"Slope", L"SLOPE"),
        Quantity(Quantity::Angle, L"Roll", L"ROLL"),
        Quantity(Quantity::PositiveLength, L"Span", L"USERDEFINED.SPAN"),
        Quantity(Quantity::Thermal, L"ThermalTransmittance", L"USERDEFINED.THERMAL_TRANSMITTAN") }
    },
    /*! Hard coded IfcBuildingElementProxy properties */
    { ENTITY_IfcBuildingElementProxy, Pset_BuildingElementProxymCommon  {
        Quantity(Quantity::Enum, L"Status", L"USERDEFINED.RENOVATION_STATUS"),
        Quantity(Quantity::Identifier, L"Reference", L"USERDEFINED.REF_ID"),
        Quantity(Quantity::Boolean, L"IsExternal", L"USERDEFINED.IS_EXTERNAL"),
        Quantity(Quantity::Thermal, L"ThermalTransmittance", L"USERDEFINED.THERMAL_TRANSMITTAN"),
        Quantity(Quantity::Boolean, L"LoadBearing", L"USERDEFINED.LOAD_BEARING"),
        Quantity(Quantity::Label, L"FireRating", L"USERDEFINED.FIRE_RATING")}
    },
    /*! Hard coded IfcMember properties */
    { ENTITY_IfcMember, Pset_MemberCommon  {
        Quantity(Quantity::Enum, L"Status", L"USERDEFINED.RENOVATION_STATUS"),
        Quantity(Quantity::Boolean, L"IsExternal", L"USERDEFINED.IS_EXTERNAL"),
        Quantity(Quantity::Boolean, L"LoadBearing", L"USERDEFINED.LOAD_BEARING"),
        Quantity(Quantity::Identifier, L"Reference", L"USERDEFINED.REF_ID"),
        Quantity(Quantity::Label, L"FireRating", L"USERDEFINED.FIRE_RATING"),
        Quantity(Quantity::Angle, L"Slope", L"SLOPE"),
        Quantity(Quantity::Angle, L"Roll", L"ROLL"),
        Quantity(Quantity::PositiveLength, L"Span", L"USERDEFINED.SPAN"),
        Quantity(Quantity::Thermal, L"ThermalTransmittance", L"USERDEFINED.THERMAL_TRANSMITTAN") }
    },
    /*! Hard coded IfcColumn properties */
    { ENTITY_IfcColumn, Pset_ColumnCommon   {
        Quantity(Quantity::Enum, L"Status", L"USERDEFINED.RENOVATION_STATUS"),
        Quantity(Quantity::Boolean, L"IsExternal", L"USERDEFINED.IS_EXTERNAL"),
        Quantity(Quantity::Boolean, L"LoadBearing", L"USERDEFINED.LOAD_BEARING"),
        Quantity(Quantity::Identifier, L"Reference", L"USERDEFINED.REF_ID"),
        Quantity(Quantity::Label, L"FireRating", L"USERDEFINED.FIRE_RATING"),
        Quantity(Quantity::Angle, L"Slope", L"SLOPE"),
        Quantity(Quantity::Angle, L"Roll", L"ROLL"),
        Quantity(Quantity::Thermal, L"ThermalTransmittance", L"USERDEFINED.THERMAL_TRANSMITTAN") }
    },
    /*! Hard coded IfcPile properties */
    { ENTITY_IfcPile, Pset_PileCommon    {
        Quantity(Quantity::Enum, L"Status", L"USERDEFINED.RENOVATION_STATUS"),
        Quantity(Quantity::Boolean, L"LoadBearing", L"USERDEFINED.LOAD_BEARING"),
        Quantity(Quantity::Identifier, L"Reference", L"USERDEFINED.REF_ID") }
    },
    /*! Hard coded IfcFooting properties */
    { ENTITY_IfcFooting, Pset_FootingCommon     {
        Quantity(Quantity::Enum, L"Status", L"USERDEFINED.RENOVATION_STATUS"),
        Quantity(Quantity::Boolean, L"LoadBearing", L"USERDEFINED.LOAD_BEARING"),
        Quantity(Quantity::Identifier, L"Reference", L"USERDEFINED.REF_ID") }
    },
    /*! Hard coded IfcElementAssembly properties */
    { ENTITY_IfcElementAssembly, Pset_ElementAssemblyCommon {
        Quantity(Quantity::Enum, L"Status", L"USERDEFINED.RENOVATION_STATUS"),
        Quantity(Quantity::Identifier, L"Reference", L"ASSEMBLY_POS") }
    },
    /*! Hard coded IfcSlab properties */
    { ENTITY_IfcSlab, Pset_SlabCommon  {
        Quantity(Quantity::Identifier, L"Reference", L"USERDEFINED.REF_ID"),
        Quantity(Quantity::Label, L"AcousticRating", L"USERDEFINED.ACOUSTIC_RATING"),
        Quantity(Quantity::Boolean, L"IsExternal", L"USERDEFINED.IS_EXTERNAL"),
        Quantity(Quantity::Boolean, L"LoadBearing", L"USERDEFINED.LOAD_BEARING"),
        Quantity(Quantity::Enum, L"Status", L"USERDEFINED.RENOVATION_STATUS"),
        Quantity(Quantity::Angle, L"PitchAngle", L"USERDEFINED.PITCH_ANGLE"),
        Quantity(Quantity::Boolean, L"Combustible", L"USERDEFINED.COMBUSTIBLE"),
        Quantity(Quantity::Label, L"SurfaceSpreadOfFlame", L"USERDEFINED.SPREAD_OF_FLAME"),
        Quantity(Quantity::Label, L"FireRating", L"USERDEFINED.FIRE_RATING"),
        Quantity(Quantity::Boolean, L"Compartmentation", L"USERDEFINED.COMPARTMENT"),
        Quantity(Quantity::Thermal, L"ThermalTransmittance", L"USERDEFINED.THERMAL_TRANSMITTAN") }
    },
        /*! Hard coded IfcRoof properties */
    { ENTITY_IfcRoof, Pset_RoofCommon   {
        Quantity(Quantity::Identifier, L"Reference", L"USERDEFINED.REF_ID"),
        Quantity(Quantity::Enum, L"Status", L"USERDEFINED.RENOVATION_STATUS"),
        Quantity(Quantity::Label, L"AcousticRating", L"USERDEFINED.ACOUSTIC_RATING"),
        Quantity(Quantity::Boolean, L"IsExternal", L"USERDEFINED.IS_EXTERNAL"),
        Quantity(Quantity::Boolean, L"LoadBearing", L"USERDEFINED.LOAD_BEARING"),
        Quantity(Quantity::Label, L"FireRating", L"USERDEFINED.FIRE_RATING"),
        Quantity(Quantity::Thermal, L"ThermalTransmittance", L"USERDEFINED.THERMAL_TRANSMITTAN") }
    },
    /*! Hard coded IfcWall properties */
    { ENTITY_IfcWall, Pset_WallCommon    {
       Quantity(Quantity::Identifier, L"Reference", L"USERDEFINED.REF_ID"),
       Quantity(Quantity::Enum, L"Status", L"USERDEFINED.RENOVATION_STATUS"),
       Quantity(Quantity::Label, L"AcousticRating", L"USERDEFINED.ACOUSTIC_RATING"),
       Quantity(Quantity::Label, L"FireRating", L"USERDEFINED.FIRE_RATING"),
       Quantity(Quantity::Boolean, L"IsExternal", L"USERDEFINED.IS_EXTERNAL"),
       Quantity(Quantity::Boolean, L"LoadBearing", L"USERDEFINED.LOAD_BEARING"),
       Quantity(Quantity::Boolean, L"Combustible", L"USERDEFINED.COMBUSTIBLE"),
       Quantity(Quantity::Label, L"SurfaceSpreadOfFlame", L"USERDEFINED.SPREAD_OF_FLAME"),
       Quantity(Quantity::Boolean, L"Compartmentation", L"USERDEFINED.COMPARTMENT"),
       Quantity(Quantity::Boolean, L"ExtendToStructure", L"USERDEFINED.EXTEND_TO_STRUCTURE"),
       Quantity(Quantity::Thermal, L"ThermalTransmittance", L"USERDEFINED.THERMAL_TRANSMITTAN")}
    },
    /*! Hard coded IfcWallStandardCase properties */
    { ENTITY_IfcWallStandardCase, Pset_WallCommon     {
        Quantity(Quantity::Identifier, L"Reference", L"USERDEFINED.REF_ID"),
        Quantity(Quantity::Enum, L"Status", L"USERDEFINED.RENOVATION_STATUS"),
        Quantity(Quantity::Label, L"AcousticRating", L"USERDEFINED.ACOUSTIC_RATING"),
        Quantity(Quantity::Label, L"FireRating", L"USERDEFINED.FIRE_RATING"),
        Quantity(Quantity::Boolean, L"IsExternal", L"USERDEFINED.IS_EXTERNAL"),
        Quantity(Quantity::Boolean, L"LoadBearing", L"USERDEFINED.LOAD_BEARING"),
        Quantity(Quantity::Boolean, L"Combustible", L"USERDEFINED.COMBUSTIBLE"),
        Quantity(Quantity::Label, L"SurfaceSpreadOfFlame", L"USERDEFINED.SPREAD_OF_FLAME"),
        Quantity(Quantity::Boolean, L"Compartmentation", L"USERDEFINED.COMPARTMENT"),
        Quantity(Quantity::Boolean, L"ExtendToStructure", L"USERDEFINED.EXTEND_TO_STRUCTURE"),
        Quantity(Quantity::Thermal, L"ThermalTransmittance", L"USERDEFINED.THERMAL_TRANSMITTAN")}
    },
     /*! Hard coded IfcPlate properties */
    { ENTITY_IfcPlate, Pset_PlateCommon {
       Quantity(Quantity::Label, L"AcousticRating", L"USERDEFINED.ACOUSTIC_RATING"),
       Quantity(Quantity::Enum, L"Status", L"USERDEFINED.RENOVATION_STATUS"),
       Quantity(Quantity::Boolean, L"IsExternal", L"USERDEFINED.IS_EXTERNAL"),
       Quantity(Quantity::Boolean, L"LoadBearing", L"USERDEFINED.LOAD_BEARING"),
       Quantity(Quantity::Identifier, L"Reference", L"USERDEFINED.REF_ID"),
       Quantity(Quantity::Label, L"FireRating", L"USERDEFINED.FIRE_RATING"),
       Quantity(Quantity::Thermal, L"ThermalTransmittance", L"USERDEFINED.THERMAL_TRANSMITTAN") }
    },
    /*! Hard coded IfcCovering properties */
    { ENTITY_IfcCovering, Pset_CoveringCommon  {
        Quantity(Quantity::Label, L"AcousticRating", L"USERDEFINED.ACOUSTIC_RATING"),
        Quantity(Quantity::Label, L"FlammabilityRating", L"FLAMMABILITY_RATING"),
        Quantity(Quantity::Label, L"FragilityRating", L"FRAGILITY_RATING"),
        Quantity(Quantity::Boolean, L"Combustible", L"USERDEFINED.COMBUSTIBLE"),
        Quantity(Quantity::Label, L"SurfaceSpreadOfFlame", L"USERDEFINED.SPREAD_OF_FLAME"),
        Quantity(Quantity::Label, L"Finish", L"FINISH") }
    },
    /*! Hard coded IfcOpeningElement properties */
    { ENTITY_IfcOpeningElement, Pset_OpeningElementCommon {
        Quantity(Quantity::Label, L"Purpose", L"PURPOSE"),
        Quantity(Quantity::Boolean, L"FireExit", L"FIRE_EXIT"),
        Quantity(Quantity::Boolean, L"ProtectedOpening", L"PROTECTED_OPENING") }
    },
    /*! Hard coded IfcTendon properties */
    { ENTITY_IfcTendon, Pset_TendonCommon  {
        Quantity(Quantity::Identifier, L"Reference", L"USERDEFINED.REF_ID"),
        Quantity(Quantity::PositiveLength, L"NominalDiameter", L"DIAMETER_NOMINAL") }
    },
    /*! Hard coded IfcTendon anchor properties */
    { ENTITY_IfcTendonAnchor, Pset_TendonAnchorCommon   > {
        Quantity(Quantity::Identifier, L"Reference", L"USERDEFINED.REF_ID"),
        Quantity(Quantity::Enum, L"Status", L"USERDEFINED.RENOVATION_STATUS") }
    },
    /*! Hard coded IfcReinforcingBar properties */
    { ENTITY_IfcReinforcingBar, Pset_ReinforcingBarCommon    {
        Quantity(Quantity::Identifier, L"Reference", L"REBAR_POS"),
        Quantity(Quantity::Enum, L"Status", L"USERDEFINED.RENOVATION_STATUS"),
        Quantity(Quantity::PositiveLength, L"NominalDiameter", L"SIZE"),
        Quantity(Quantity::PositiveLength, L"BarLength", L"LENGTH"),
        Quantity(Quantity::PositiveLength, L"BarSpacing", L"CC_EXACT"),
        Quantity(Quantity::Identifier, L"BendingShapeCode", L"SHAPE") }
    },
    /*! Hard coded IfcReinforcingMesh properties */
    { ENTITY_IfcReinforcingMesh, Pset_ReinforcingMeshCommon     {
        Quantity(Quantity::Identifier, L"Reference", L"MESH_POS"),
        Quantity(Quantity::Enum, L"Status", L"USERDEFINED.RENOVATION_STATUS"),
        Quantity(Quantity::PositiveLength, L"MeshLength", L"LENGTH"),
        Quantity(Quantity::PositiveLength, L"MeshWidth", L"WIDTH"),
        Quantity(Quantity::PositiveLength, L"LongitudinalBarNominalDiameter", L"CC_DIAMETER_MIN_LONG"),
        Quantity(Quantity::PositiveLength, L"LongitudinalBarSpacing", L"CC_MIN_LONG"),
        Quantity(Quantity::PositiveLength, L"TransverseBarNominalDiameter", L"CC_DIAMETER_MIN_CROSS"),
        Quantity(Quantity::PositiveLength, L"TransverseBarSpacing", L"CC_MIN_CROSS"),
        Quantity(Quantity::Enum, L"LongitudinalBarSurface", SET_CONSTANT_VALUE("TEXTURED").c_str()),
        Quantity(Quantity::Enum, L"TransverseBarSurface", SET_CONSTANT_VALUE("TEXTURED").c_str()),
        Quantity(Quantity::Identifier, L"LongitudinalBarBendingShapeCode", SET_CONSTANT_VALUE("A").c_str()),
        Quantity(Quantity::Identifier, L"TransverseBarBendingShapeCode", SET_CONSTANT_VALUE("A").c_str()),
        Quantity(Quantity::Label, L"LongitudinalBarBendingParameters", L"{LENGTH}"),
        Quantity(Quantity::Label, L"TransverseBarBendingParameters", L"{WIDTH}") }
    }
};

/*! Hard coded quantities by entity type */
const std::unordered_map<IfcParser::IfcTypeAll_t, std::vector<Quantity>> s_Quantities{
    /*! Hard coded IfcBeam quantities */
    { ENTITY_IfcBeam, Qto_BeamBaseQuantities {
        Quantity(Quantity::Length, L"Length", L"LENGTH"),
        Quantity(Quantity::Area, L"CrossSectionArea", L"PROFILE.CROSS_SECTION_AREA", MM2_to_M2),
        Quantity(Quantity::Area, L"OuterSurfaceArea", L"AREA_GROSS", MM2_to_M2),
        Quantity(Quantity::Area, L"GrossSurfaceArea", L"AREA_GROSS", MM2_to_M2),
        Quantity(Quantity::Area, L"NetSurfaceArea", L"AREA_NET", MM2_to_M2),
        Quantity(Quantity::Volume, L"GrossVolume", L"VOLUME_GROSS", MM3_to_M3),
        Quantity(Quantity::Volume, L"NetVolume", L"VOLUME_NET", MM3_to_M3),
        Quantity(Quantity::Weight, L"GrossWeight", L"WEIGHT_GROSS"),
        Quantity(Quantity::Weight, L"NetWeight", L"WEIGHT_NET")} },
    /*! Hard coded IfcMember quantities */
    { ENTITY_IfcMember, Qto_MemberBaseQuantities {
        Quantity(Quantity::Length, L"Length", L"LENGTH"),
        Quantity(Quantity::Area, L"CrossSectionArea", L"PROFILE.CROSS_SECTION_AREA", MM2_to_M2),
        Quantity(Quantity::Area, L"OuterSurfaceArea", L"AREA_GROSS", MM2_to_M2),
        Quantity(Quantity::Area, L"GrossSurfaceArea", L"AREA_GROSS", MM2_to_M2),
        Quantity(Quantity::Area, L"NetSurfaceArea", L"AREA_NET", MM2_to_M2),
        Quantity(Quantity::Volume, L"GrossVolume", L"VOLUME_GROSS", MM3_to_M3),
        Quantity(Quantity::Volume, L"NetVolume", L"VOLUME_NET", MM3_to_M3),
        Quantity(Quantity::Weight, L"GrossWeight", L"WEIGHT_GROSS"),
        Quantity(Quantity::Weight, L"NetWeight", L"WEIGHT_NET")} },
    /*! Hard coded IfcColumn quantities */
    { ENTITY_IfcColumn, Qto_ColumnBaseQuantities {
        Quantity(Quantity::Length, L"Length", L"LENGTH"),
        Quantity(Quantity::Area, L"CrossSectionArea", L"PROFILE.CROSS_SECTION_AREA", MM2_to_M2),
        Quantity(Quantity::Area, L"OuterSurfaceArea", L"AREA_GROSS", MM2_to_M2),
        Quantity(Quantity::Area, L"GrossSurfaceArea", L"AREA_GROSS", MM2_to_M2),
        Quantity(Quantity::Area, L"NetSurfaceArea", L"AREA_NET", MM2_to_M2),
        Quantity(Quantity::Volume, L"GrossVolume", L"VOLUME_GROSS", MM3_to_M3),
        Quantity(Quantity::Volume, L"NetVolume", L"VOLUME_NET", MM3_to_M3),
        Quantity(Quantity::Weight, L"GrossWeight", L"WEIGHT_GROSS"),
        Quantity(Quantity::Weight, L"NetWeight", L"WEIGHT_NET")} },
    /*! Hard coded IfcFooting quantities */
    { ENTITY_IfcFooting, Qto_FootingBaseQuantities {
        Quantity(Quantity::Length, L"Height", L"LENGTH"),
        Quantity(Quantity::Length, L"Length", L"HEIGHT"),
        Quantity(Quantity::Length, L"Width", L"WIDTH"),
        Quantity(Quantity::Area, L"CrossSectionArea", L"PROFILE.CROSS_SECTION_AREA", MM2_to_M2),
        Quantity(Quantity::Area, L"OuterSurfaceArea", L"AREA_GROSS", MM2_to_M2),
        Quantity(Quantity::Area, L"GrossSurfaceArea", L"AREA_GROSS", MM2_to_M2),
        Quantity(Quantity::Volume, L"GrossVolume", L"VOLUME_GROSS", MM3_to_M3),
        Quantity(Quantity::Volume, L"NetVolume", L"VOLUME_NET", MM3_to_M3),
        Quantity(Quantity::Weight, L"GrossWeight", L"WEIGHT_GROSS"),
        Quantity(Quantity::Weight, L"NetWeight", L"WEIGHT_NET")} },
    /*! Hard coded IfcPile quantities */
    { ENTITY_IfcPile, Qto_PileBaseQuantities {
        Quantity(Quantity::Length, L"Length", L"LENGTH"),
        Quantity(Quantity::Area, L"CrossSectionArea", L"PROFILE.CROSS_SECTION_AREA", MM2_to_M2),
        Quantity(Quantity::Area, L"OuterSurfaceArea", L"AREA_GROSS", MM2_to_M2),
        Quantity(Quantity::Area, L"GrossSurfaceArea", L"AREA_GROSS", MM2_to_M2),
        Quantity(Quantity::Volume, L"GrossVolume", L"VOLUME_GROSS", MM3_to_M3),
        Quantity(Quantity::Volume, L"NetVolume", L"VOLUME_NET", MM3_to_M3),
        Quantity(Quantity::Weight, L"GrossWeight", L"WEIGHT_GROSS"),
        Quantity(Quantity::Weight, L"NetWeight", L"WEIGHT_NET")} },
    /*! Hard coded IfcSlab quantities */
    { ENTITY_IfcSlab, Qto_SlabBaseQuantities {
        Quantity(Quantity::Length, L"Depth", L"WIDTH"),
        Quantity(Quantity::Length, L"Length", L"LENGTH"),
        Quantity(Quantity::Length, L"Width", L"HEIGHT"),
        Quantity(Quantity::Area, L"GrossArea", L"AREA_GROSS", MM2_to_M2),
        Quantity(Quantity::Area, L"NetArea", L"AREA_NET", MM2_to_M2),
        Quantity(Quantity::Area, L"SideArea", L"AREA_FORM_SIDE", MM2_to_M2),
        Quantity(Quantity::Volume, L"GrossVolume", L"VOLUME_GROSS", MM3_to_M3),
        Quantity(Quantity::Volume, L"NetVolume", L"VOLUME_NET", MM3_to_M3),
        Quantity(Quantity::Weight, L"GrossWeight", L"WEIGHT_GROSS"),
        Quantity(Quantity::Weight, L"NetWeight", L"WEIGHT_NET"),
        Quantity(Quantity::Length, L"Perimeter", L"PERIMETER")} },
    /*! Hard coded IfcWall quantities */
    { ENTITY_IfcWall, Qto_WallBaseQuantities{
        Quantity(Quantity::Length, L"Width", L"WIDTH"),
        Quantity(Quantity::Length, L"Length", L"LENGTH"),
        Quantity(Quantity::Length, L"Height", L"HEIGHT"),
        Quantity(Quantity::Area, L"NetSideArea", L"AREA_FORM_SIDE", MM2_to_M2),
        //Quantity(Quantity::Area, L"GrossSideArea", L"AREA_FORM_SIDE_GLOBAL", MM2_to_M2), // AREA_FORM_SIDE_GLOBAL not implemented yet.
        Quantity(Quantity::Area, L"NetFootprintArea", L"AREA_PROJECTION_GXY_NET", MM2_to_M2),
        Quantity(Quantity::Volume, L"GrossVolume", L"VOLUME_GROSS", MM3_to_M3),
        Quantity(Quantity::Volume, L"NetVolume", L"VOLUME_NET", MM3_to_M3),
        Quantity(Quantity::Weight, L"GrossWeight", L"WEIGHT_GROSS"),
        Quantity(Quantity::Weight, L"NetWeight", L"WEIGHT_NET")} },
    /*! Hard coded IfcWallStandardCase quantities */
    { ENTITY_IfcWallStandardCase, Qto_WallBaseQuantities{
        Quantity(Quantity::Length, L"Width", L"WIDTH"),
        Quantity(Quantity::Length, L"Length", L"LENGTH"),
        Quantity(Quantity::Length, L"Height", L"HEIGHT"),
        Quantity(Quantity::Area, L"NetSideArea", L"AREA_FORM_SIDE", MM2_to_M2),
        // Quantity(Quantity::Area, L"GrossSideArea", L"AREA_FORM_SIDE_GLOBAL", MM2_to_M2), // AREA_FORM_SIDE_GLOBAL not implemented yet.
        Quantity(Quantity::Area, L"NetFootprintArea", L"AREA_PROJECTION_GXY_NET", MM2_to_M2),
        Quantity(Quantity::Volume, L"GrossVolume", L"VOLUME_GROSS", MM3_to_M3),
        Quantity(Quantity::Volume, L"NetVolume", L"VOLUME_NET", MM3_to_M3),
        Quantity(Quantity::Weight, L"GrossWeight", L"WEIGHT_GROSS"),
        Quantity(Quantity::Weight, L"NetWeight", L"WEIGHT_NET")} },
     /*! Hard coded IfcPlate quantities */
    { ENTITY_IfcPlate, Qto_PlateBaseQuantities {
        Quantity(Quantity::Length, L"Width", L"WIDTH"),
        Quantity(Quantity::Area, L"GrossArea", L"AREA_GROSS", MM2_to_M2),
        Quantity(Quantity::Area, L"NetArea", L"AREA_NET", MM2_to_M2),
        Quantity(Quantity::Area, L"SideArea", L"AREA_FORM_SIDE", MM2_to_M2),
        Quantity(Quantity::Volume, L"GrossVolume", L"VOLUME_GROSS", MM3_to_M3),
        Quantity(Quantity::Volume, L"NetVolume", L"VOLUME_NET", MM3_to_M3),
        Quantity(Quantity::Weight, L"GrossWeight", L"WEIGHT_GROSS"),
        Quantity(Quantity::Weight, L"NetWeight", L"WEIGHT_NET"),
        Quantity(Quantity::Length, L"Perimeter", L"PERIMETER")} },
    /*! Hard coded IfcBuildingElementProxy quantities */
    { ENTITY_IfcBuildingElementProxy, Qto_BuildingElementProxyQuantities {
        Quantity(Quantity::Area, L"NetSurfaceArea", L"AREA_NET", MM2_to_M2),
        Quantity(Quantity::Volume, L"NetVolume", L"VOLUME_NET", MM3_to_M3)} },
    /*! Hard coded IfcCovering quantities */
    { ENTITY_IfcCovering, Qto_CoveringBaseQuantities {
        Quantity(Quantity::Length, L"Width", L"WIDTH"),
        Quantity(Quantity::Area, L"GrossArea", L"AREA_GROSS", MM2_to_M2),
        Quantity(Quantity::Area, L"NetArea", L"AREA_NET", MM2_to_M2)} },
    /*! Hard coded IfcReinforcingBar quantities */
    { ENTITY_IfcReinforcingBar, Qto_ReinforcingElementBaseQuantities {
        Quantity(Quantity::Length, L"Length", L"LENGTH"),
        Quantity(Quantity::Weight, L"Weight", L"WEIGHT") } },
    /*! Hard coded IfcOpeningElement quantities */
    { ENTITY_IfcOpeningElement, Qto_OpeningBaseQuantities {
        Quantity(Quantity::Length, L"Width", L"WIDTH"),
        Quantity(Quantity::Length, L"Height", L"HEIGHT"),
        Quantity(Quantity::Area, L"Area", L"AREA", MM2_to_M2),
        Quantity(Quantity::Volume, L"Volume", L"VOLUME", MM3_to_M3)} },
    /*! Hard coded IfcRoof quantities */
    { ENTITY_IfcRoof, Qto_RoofBaseQuantities {
        Quantity(Quantity::Area, L"GrossArea", L"AREA_GROSS", MM2_to_M2),
        Quantity(Quantity::Area, L"NetArea", L"AREA_NET", MM2_to_M2),
        Quantity(Quantity::Area, L"ProjectedArea", L"AREA_PROJECTION_GXY_NET", MM2_to_M2)} },
    /*! Hard coded IfcRailing quantities */
    { ENTITY_IfcRailing, Qto_RailingBaseQuantities{
        Quantity(Quantity::Length, L"Length", L"LENGTH")} },
    /*! Hard coded IfcRampFlight quantities */
    { ENTITY_IfcRampFlight, Qto_RampFlightBaseQuantities{
        Quantity(Quantity::Length, L"Length", L"LENGTH"),
        Quantity(Quantity::Length, L"Width", L"WIDTH"),
        Quantity(Quantity::Area, L"GrossArea", L"AREA_GROSS", MM2_to_M2),
        Quantity(Quantity::Area, L"NetArea", L"AREA_NET", MM2_to_M2),
        Quantity(Quantity::Volume, L"GrossVolume", L"VOLUME_GROSS", MM3_to_M3),
        Quantity(Quantity::Volume, L"NetVolume", L"VOLUME_NET", MM3_to_M3)} },
    /*! Hard coded IfcStairFlight quantities */
    { ENTITY_IfcStairFlight, Qto_StairFlightBaseQuantities{
        Quantity(Quantity::Length, L"Length", L"LENGTH"),
        Quantity(Quantity::Volume, L"GrossVolume", L"VOLUME_GROSS", MM3_to_M3),
        Quantity(Quantity::Volume, L"NetVolume", L"VOLUME_NET", MM3_to_M3)} }
};
这些内容是否有用?
上一步
下一步