[IFC] What is IfcDimensionalExponents?

edited October 2023 in General

In IfcSIUnit there is the comment with "1* Dimensions IfcDimensionalExponents This attribute is formally derived. "

I don't understand for what purpose the IfcDimensionalExponents exists.

Tagged:

Comments

  • It's needed to define more complex units. Perhaps an example could help:

  • edited October 2023

    If I want to define specific heat capacity (Joule / kg Kelvin) for example, I don't need IfcDimensionalExponents. IfcDerivedUnitElement is used for the exponent part.

    #1=IFCPROJECT('abcdefghijklmnopqrst09', #100, '', $, $, $, $, (#101), #2);
    #2=IFCUNITASSIGNMENT((#3));
    #3=IFCDERIVEDUNIT((#5, #6, #4), .SPECIFICHEATCAPACITYUNIT., $);
    #4=IFCDERIVEDUNITELEMENT(#7, 1);
    #5=IFCDERIVEDUNITELEMENT(#8, -1);
    #6=IFCDERIVEDUNITELEMENT(#9, -1);
    #7=IFCSIUNIT(*, .ENERGYUNIT., $, .JOULE.);
    #8=IFCSIUNIT(*, .MASSUNIT., .KILO., .GRAM.);
    #9=IFCSIUNIT(*, .THERMODYNAMICTEMPERATUREUNIT., $, .KELVIN.);
    

    Example from section 3.3.2.3 Derived units as global units from IFC2x Edition 3 Model Implementation Guide, Version 2.0, T. Liebich, 2009/05

    Is there some helper function in IfcOpenShell to get all unit defined in an IFC file?

  • edited October 2023

    You can get all assigned units by doing model.by_type('IfcUnitAssignment')[0].

    Dimensional exponents are used when defining conversion based units (e.g. imperial) or context dependent units.

    The ability for it to be auto-derived for SI units and derived units is useful: this allows us to display values in the users preferred unit. Note that we don't yet have a simple util function for this yet though.

Sign In or Register to comment.