Nieuwe eigenschappensets voor IFC-export maken

Tekla Structures
Aangepast: 11 dec 2023
2023
Tekla Structures

Nieuwe eigenschappensets voor IFC-export maken

U kunt extra eigenschappensets maken van templateattributen en gebruikersattributen, definities van eigenschappen voor de attributen definiëren en de Tekla Structures-eigenschappensets koppelen aan IFC-entiteiten voor IFC-export.

Tekla Structures slaat extra eigenschappensets op in configuratiebestanden. U kunt meerdere configuratiebestanden op meerdere locaties bewaren. Als Tekla Structures een IFC-bestand exporteert, dan leest het de vooraf gedefinieerde eigenschappensets en de extra eigenschappensets.

Een configuratiebestand voor IFC-eigenschappensets toevoegen

  1. Klink in het menu Bestand op Exporteren > IFC of Exporteren > IFC4.
  2. Selecteer <nieuw> in de lijst Extra eigenschappensets en klik dan op Bewerken.

    Het dialoogvenster Definities eigenschappensets wordt geopend.

  3. Voer in het vak Configuratiebestandsnaam eigenschappenset een naam in voor het configuratie bestand.
  4. Klik op de knop toevoegen onder Eigenschappenset om een nieuwe eigenschappenset toe te voegen.

    U kunt verschillende eigenschappensets in één configuratiebestand maken. U kunt bijvoorbeeld zwaartepunten en start- en eindpunten op het onderdeelniveau en planningsgegevens op het merkniveau toevoegen.

  5. Voer in het dialoogvenster dat opent een naam en beschrijving in voor de eigenschappenset en klik dan op Maken.

    De naam eigenschappenset kan willekeurige tekst bevatten, inclusief spaties. De maximumlengte van de eigenschappensetnaam is 255 tekens. De prefix "Pset_" is gereserveerd voor de standaard eigenschappensets van BuildingSMART. Gebruik deze prefix niet in de naam van uw aangepaste gebruikerseigenschappensets.

  6. Selecteer de categorie entiteittypen in de lijst Entiteiten.

    Structureel is de standaardcategorie. Als u de categorie selecteert, dan worden de gerelateerde IFC-entiteiten weergegeven in de lijst Entiteittypen selecteren.

  7. Selecteer een entiteittype in de lijst Entiteittypen.

    De lijst Attributen selecteren geeft de attributen weer die beschikbaar zijn voor het geselecteerde entiteittype.

  8. Selecteer een of meer attributen in de lijst Attributen selecteren.

    Het attribuut wordt aan de rechterzijde aan de Lijst met alle geselecteerde eigenschappen toegevoegd. Deze lijst geeft weer welke attributen worden geëxporteerd:

    • Als u een attribuut in de lijst selecteert, dan worden de eigenschappen weergegeven onder Eigenschap maken/wijzigen.
    • U kunt nieuwe attributen toevoegen door een attribuutnaam in het vak Attribuut in het gebied Eigenschap maken/wijzigen in te voeren en op de knop Toevoegen te klikken.
    • U kunt attributen in de lijst wijzigen en verwijderen door de attributen in de lijst te selecteren en op Wijzigen of Verwijderen te klikken.
  9. Definieer onder Eigenschap maken/wijzigen de attribuuteigenschappen.
    1. Selecteer Eigenschapstype voor het geselecteerde attribuut.

      Selecteer hier altijd Template-attribuut voor gebruikersattributen waarvan de naam meer dan 19 tekens bevat. Selecteer bijvoorbeeld Template-attribuut voor ASSEMBLY.USERDEFINED.PLANS_STATUS.

    2. Voer de naam van het geselecteerd attribuut in het vak Naam in.
    3. Selecteer het Type van het attribuut.

      Het Type kan een van de volgende zijn:

      • String: sequence van tekens

      • Booleaans: true of false

      • Integer: een heel nummer

      • Afmeting

      • Werkelijk: een getal dat een decimale weergave heeft

      • Tijdstempel

    4. Als het type van het gebruikersattribuut Meting is, geldt het volgende:
      • U kunt het Meettype selecteren: Lengte, Gebied, Volume, Massa, Positieve lengte of Aantal.
      • U kunt de Conversie-factor en de Nauwkeurigheid selecteren.

        Om de waarde voor Conversie te kunnen definiëren, moet u de eenheid weten die in Tekla Structures wordt gebruikt voor een bepaalde eigenschap (bijvoorbeeld lengte) en de eenheid die voor de eigenschap wordt gebruikt in IFC. Voor de lengte is de eenheid bijvoorbeeld mm in zowel Tekla Structures als IFC, wat betekent dat de conversiewaarde 1 is. Als de eenheid m was in Tekla Structures, dan moet de conversiewaarde 1000 zijn.

        In de conversie van de gebiedseigenschap wordt de factor 1E-06 gebruikt en 1E-06 = 0,000001. 1 m2 is bijvoorbeeld 1000000 mm2 in Tekla Structures. In IFC is de gebiedseenheid m2 en moet de Tekla Structures-waarde worden geconverteerd met 1E-06: 1000000 mm2 x 1E-6 = 1 m2.

        In de conversie van de volume-eigenschap wordt de factor 1E-09 gebruikt en 1E-09 = 0,000000001.

        Nauwkeurigheid geeft de nauwkeurigheid aan die wordt gebruikt bij het schrijven van de eigenschap naar IFC; hier worden decimalen gebruikt. Als de nauwkeurigheid bijvoorbeeld 0,1 is, met een IFC-bestand van 1000 mm, dan is de waarde 1000,0. Als de nauwkeurigheid 0,01 was, dan zou de waarde 1000,00 zijn. Als de nauwkeurigheid 0,5 was, dan zou de Tekla Structures-waarde 1000,6 1000,5 zijn, 1000,8 zou 1001,0 zijn en is 1000,2 zou 1000,0 zijn.

        Met door de gebruiker gedefinieerde nauwkeurigheid kunt u de IFC-bestandsgrootte beter optimaliseren.

  10. Klik op Opslaan.

1) De entiteitsgroepen waar Tekla Structures-attributen naar het geëxporteerde IFC-bestand worden geschreven

2) De templateattributen of de gebruikersattributen die u voor de geselecteerde entiteit wilt exporteren

3) Lijst die de geselecteerde attributen weergeeft

4) De eigenschappen die u voor de attributen kunt definiëren

Tip:

Let erop dat u het juiste Type selecteert bij het definiëren van eigenschappensets vanuit UDA´s. Als de UDA-eigenschappen bijvoorbeeld normale tekst zijn, selecteert u String. Als uw UDA-eigenschappen hele getallen zijn, selecteert u Integer. Als het verkeerde Type wordt geselecteerd, mislukt de export van de eigenschappenset. U kunt een tekenreekswaarde voor een gebruikersattribuut krijgen, zodat u de prefix USERDEFINED. aan het gebruikersattribuut toevoegt, het eigenschapstype wijzigt in template-attribuut en het type naar String.

Voorbeeld:

Vooraf gedefinieerde configuratiebestanden van eigenschappensets in IFC2x3-export

De vooraf gedefinieerde configuratiebestanden zijn alleen-lezen en ze worden gelezen vanuit ..\ProgramData\Trimble\Tekla Structures\<version>\Environments\Common\inp. De locatie kan afhankelijk van uw omgeving variëren.

  • IfcPropertySetConfigurations_CV2.xml (standaard eigenschappensets)/IfcPropertySetConfigurations_CV2_1.xml (minimale eigenschappensets) bevat de eigenschappensets voor Exporttype Volledige weergave 2.0.

  • IfcPropertySetConfigurations_SG.xml (standaard eigenschappensets)/IfcPropertySetConfigurations_CV2_1.xml (minimale eigenschappensets) bevat de eigenschappensets voor Exporttype Oppervlaktegeometrie.

  • IfcPropertySetConfigurations_AISC.xml (standaard eigenschappensets)/IfcPropertySetConfigurations_AISC_1.xml (minimale eigenschappensets) bevat de eigenschappensets voor Exporttype Staalfabricagevenster.

Het bestand IfcPropertySetConfigurations_CV1.xsd in dezelfde map is een schemabestand dat de structuur beschrijft van het XML-bestand en dat wordt gebruikt voor de validatie van het XML-bestand. Dit bestand wordt gelezen wanneer de software wordt gestart.

Extra configuratiebestanden van eigenschappensets in IFC2x3- en IFC4-export

Opmerking:

We bevelen aan om de extra eigenschappensets te definiëren in het dialoogvenster Definities eigenschappensets in plaats ven het wijzigen van het bestand zelf om ervoor te zorgen dat de XML-configuratiebestanden geldig zijn. De extra eigenschappensets die u maakt, worden standaard in de map \AdditionalPSets onder de modelmap opgeslagen. U kunt ook extra eigenschappensets uit de volgende mappen lezen:

  • XS_SYSTEM

  • XS_PROJECT

  • XS_FIRM

U kunt uw eigen eigenschappensets definiëren voor zowel de IFC2x3-export als de IFC4-export. Wanneer u eigenschappensets voor IFC-export wilt configureren in XML-indeling, hebt u twee bestanden nodig:

  • IfcPropertySetConfigurations.xsd is een schemabestand dat de structuur beschrijft van het XML-bestand en dat wordt gebruikt voor de validatie van het XML-bestand. Dit bestand wordt gelezen wanneer de software wordt gestart.

  • IfcPropertySetConfigurations.xml is het werkelijke configuratiebestand eigenschappenset.

Als u de bovenstaande mappen gebruikt, moet u de bestanden in een map met de naam \AdditionalPSets onder de systeem-, project- of bedrijfsmap opslaan.

Inhoud van het configuratiebestand eigenschappenset

Een configuratiebestand bevat de structuur van eigenschappensets en de gegevensdefinities voor de eigenschappen in de eigenschappensets.

    • Templateattribuut of UDA-naam. Templateattributen worden gelezen vanuit contentattributes_global.lst en de gebruikersattributen van de omgevingsdatabase.

    • Gegevenstype zoals string, integer, zwevend, tijdstempel, Boolean, logisch of planeanglemeasure.

    • Type eenheid, zoals lengte, gebied, volume of massa.

    • Verschaling van eenheidswaarden van UDA-waarden zonder eenheid. Conversiefactor wordt toegevoegd zodat waarden zonder eenheid kunnen worden geconverteerd om te corresponderen met de globale eenheden in de IFC-bestanden. Gebieds- en volume-eenheden hebben deze factoren nodig.

    • Als u wilt dat het optietype UDA-waarde hetzelfde is als in de gebruikersinterface, kunt u het type van Gebruikersattribuut naar stringtype Templateattribuut wijzigen in het dialoogvenster Definities eigenschappenset.

    • Mogelijkheid om standaardwaarden te gebruiken.

    • Mogelijkheid om de set die moet worden geëxporteerd te negeren als templateattributen of UDA geen waarde hebben.

  • Een configuratiebestand bevat eigenschappensets die voorwaarden koppelen aan IFC-entiteiten:

    • Hiërarchietype voor koppeling met IFC-entiteiten met inbegrip van ondersteuning niet uitsluitend voor gebouwelementen, maar ook voor bouten, wapeningsstaven en merken.

    • De mogelijkheid om beperkende regels te gebruiken, zoals Equal, NotEqual, LessThan, GreaterThan, LessThanOrEqual en GreaterThanOrEqual voor getallen en Equal en NotEqual voor tekst.

      Als u deze beperkende regels wilt toevoegen, dan moet u uw configuratiebestand met de extra eigenschappensets wijzigen met een geschikte editor.

    • Er kan een willekeurig aantal koppelingsregels bestaan voor een eigenschappenset, maar slechts één eigenschappensetdefinitie voor elk ReferenceId.

    • U kunt verschillende eigenschappensets koppelen aan verschillende typen IFC-entiteiten. Een plaat kan bijvoorbeeld een andere eigenschappenset hebben dan een ligger.

  • Als er geen waarde wordt gevonden voor een eigenschap in export, dan wordt de eigenschappenset helemaal niet geschreven in de export. Voeg optional=true toe voor die eigenschap in de eigenschappenset om dit te voorkomen.

Hieronder is een voorbeeld van het inhoud van het IfcPropertySetConfigurations_CV2.xml-bestand:

Hieronder is een voorbeeld van het inhoud van het IfcPropertySetConfigurations.xml-bestand:

Hardcoded IFC4 eigenschappen en hoeveelheden

In de IFC4-export hebben de geëxporteerde eigenschappen en hoeveelheden vaste waarden. Deze eigenschappen en hoeveel heden worden standaard geëxporteerd.

/*! 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)} }
};
Was dit nuttig?
Vorige
Volgende