¿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.
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;
}
Manuel Antúnez
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.
Ivan
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