¿Cómo hacer la conversión de la Unidad de una IfcPropertySingleValue sin Unit definida?

Trabajando con la librería XBim. Leo una propiedad, IfcPropertySingleValue, de un PropertySet de un Elemento IFC. Obtengo su NominalValue (2000),  su Unit. (null), y su tipo de Unidad (NominalValue.GetType().Name)= «IfcAreaMeasure» .

Al no estar definido Unit en la propiedad, en la lista de IfcUnits del modelo se puede ver la conversión por defecto {#44=IFCSIUNIT(*,.AREAUNIT.,.CENTI.,.SQUARE_METRE.);} con su propiedad Power=0.0001.

¿Existe algún modo de hacer la conversión sin tener hacer una clase propia con un Switch que busque su Unit correspondiente? ya que en la propiedad es IfcAreaMeasure y en Units es AREAUNIT.

Jar Jar BIMks Preguntada on noviembre 13, 2019 en IFC.

Yo estoy trabajando con esa librería también, pero decidí hacer mis propias clases que se alimentan de las clases XBim. Otro problema que te vas a encontrar es hacer tu código compatible con las distintas versiones de Ifc.

on noviembre 13, 2019.

Si, cuando me toque la compatibilidad ya me pelearé.  También estoy haciendo clases para acceder de manera mas fácil a ciertas propiedades, pero creía que el tema de la conversión estaría resuelto. Ahora, estoy viendo una extensión de «IIfcUnitAssignment»  GetUnitFor que creo que me va ha servir   https://csharp.hotexamples.com/examples/Xbim.Ifc2x3.PropertyResource/IfcPropertySingleValue/-/php-ifcpropertysinglevalue-class-examples.html  

on noviembre 13, 2019.
Agregar Comentario
1 Respuesta(s)

    Ya he visto donde esta el problema. Había intentado usar GetUnitFor para  que IfcUnitAssignment devolviera la unit de la propiedad pero me devolvía null, ya que usaba la interface. Si se utiliza según el esquema IFC, devuelve el unit correspondiente:

    switch (propertyX.SchemaVersion)
    {
    case Xbim.Common.Step21.XbimSchemaVersion.Ifc2X3:
    var UnitAssig2x3 = (Xbim.Ifc2x3.MeasureResource.IfcUnitAssignment)UnitAssigment;
    var UnitExist2x3 = UnitAssig2x3.GetUnitFor(propertyX.IfcProperty as Xbim.Ifc2x3.PropertyResource.IfcPropertySingleValue);
    unitX = UnitExist2x3 as IIfcNamedUnit;
    break;

    case Xbim.Common.Step21.XbimSchemaVersion.Ifc4:
    case Xbim.Common.Step21.XbimSchemaVersion.Ifc4x1:
    var UnitAssig4 = (Xbim.Ifc4.MeasureResource.IfcUnitAssignment)UnitAssigment;
    var UnitExist4 = UnitAssig4.GetUnitFor(propertyX.IfcProperty as Xbim.Ifc4.PropertyResource.IfcPropertySingleValue);
    unitX = UnitExist4 as IIfcNamedUnit;
    break;

    case Xbim.Common.Step21.XbimSchemaVersion.Unsupported:
    unitX = null;
    break;
    }

    Jar Jar BIMks Respondida on noviembre 20, 2019.
    Agregar Comentario

    Tu Respuesta

    No olvides identificarte en hardclash antes de publicar tu respuesta. SI LO QUE QUIERES es hacer un comentario a una respuesta este NO es el sitio, utiliza el sistema de comentarios de cada respuesta concreta, por favor. Al publicar tu respuesta, confirmas estar de acuerdo con la política de privacidad y los términos de servicio.