2.4. Expresión de las unidades en los valores predeterminados del dibujo


Conversión de Unidades.

Como hemos visto antes, internamente se considera siempre que la información dimensional está dada encentímetros, las unidades predeterminadas de Autodesk Inventor. Para obtenerla en milímetros, que esnormalmente la unidad de presentación del interfaz del usuario trabajando en un entorno de diseño mecánico,será necesario recurrir al objeto UnitsOfMeasure para obtener el valor convertido. Todas las funciones delAPI utilizan las unidades de la base de datos (centímetros) tanto para los datos de entrada como para los desalida. Para mostrar los datos al usuario en las unidades del documento los programas pueden utilizar elobjeto UnitsOfMeasure con el propósito de generar la cadena de caracteres correcta.

Los métodos GetValueFromExpression, GetStringFromValue, GetStringFromType yGetTypeFromString pueden intervenir en estas conversiones. Para una información detallada se puedeconsultar la ayuda de programación de Autodesk Inventor.

Para mostrar un valor obtenido a partir de la base de datos como cadena de caracteres en el formato deunidades correcto podemos emplear el método GetStringFromValue.

Su sintaxis es:
UnitsOfMeasure.GetStringFromValue (Valor As Double, _
EspecificadorUnidades As Variant) As String

Este método requiere dos argumentos de entrada y devuelve un valor de tipo String. El primer argumento,Valor, es un número de coma flotante del tipo Double que puede ser leído a partir de alguna de laspropiedades de una entidad del dibujo o el resultado de evaluar una expresión. El segundo argumento,EspecificadorUnidades, no tiene asignado un tipo de dato, lo que significa que es del tipo Variant. Admitetanto un valor Enum del listado UnitsTypeEnum o una cadena de caracteres. Para obtener una longitudexpresada en el sistema predeterminado de unidades del documento utilizaremos el valor EnumkDefaultDisplayLengthUnits. Existen valores de este tipo para las unidades angulares(kDefaultDisplayAngleUnits), las unidades de masa (kDefaultDisplayMassUnits), las de tiempo(kDefaultDisplayTimeUnits) y las de temperatura (kDefaultDisplayTemperatureUnits).

Constantes para Unidades no Predeterminadas.

Cuando se trata de valores de área tenemos una dificultad adicional, ya que en este caso no existe unaconstante de enumeración. En ocasiones como ésta tendremos que definir nosotros una variante en forma decadena de caracteres. El procedimiento para construir el valor a pasar como EspecificadorUnidades sedescribe a continuación:
  1. Obtener el valor Enum de la unidad de longitud predeterminada del documento:
    Dim eUnidadLongitud As UnitsTypeEnumeUnidadLongitud = oUOM.LengthUnits
    En el caso de las plantillas predeterminadas en el entorno métrico obtendríamos el valor Enum 11269 quecorresponde a kMillimeterLengthUnits.
  2. Obtener el equivalente como cadena de caracteres de ese valor Enum:
    Dim sUnidadLongitud As StringsUnidadLongitud = _
    oUOM.GetStringFromType(eUnidadLongitud)

    Para el valor obtenido en el paso anterior la cadena asignada a sUnidadLongitud será “millimeter”.
  3. Crear la cadena de caracteres que define un área empleando la unidad de longitud actual:
    Dim sUnidadArea As StringsUnidadArea = sUnidadLongitud & "^2"
    La cadena de caracteres obtenida es “millimeter^2”.
  4. Obtener la cadena de caracteres que muestra la superficie en las unidades del dibujo. Por ejemplo para unvalor de 36.567 cm2:
    Dim sArea As StringsArea = oUOM.GetStringFromValue(36.567, sUnidadArea)Debug.Print "Area = " & sArea
    El valor obtenido se imprime en la ventana Inmediato:
    Area = 3656,700 mm mm

Implementación del control de unidades.

En primer lugar debemos declarar las variables para el objeto UnitsOfMeasure y para la cadena de caracteres que actuará como especificador de unidades:

Dim oUOM As UnitsOfMeasure
Dim strULong As String

Para la escritura a los cuadros de texto emplearemos el método GetStringFromValue cuya sintaxis es:

UnitsOfMeasure.GetStringFromValue( ByVal Valor As Double, _
ByVal EspecificadorUnidades As Variant) As String
donde Valor siempre está especificado en unidades de la base de datos (centímetros).

EspecificadorUnidades es el argumento que especifica el tipo de unidades en que se devolverá la cadena de caracteres. Se puede especificar un tipo de unidades empleando un valor correspondiente a la enumeración UnitsTypeEnum o una cadena de caracteres que describa la unidad.

Por ejemplo, tanto kMillimeterLengthUnits como ‘mm’ son especificadores de unidades válidos. En particular, los especificadores del tipo cadena de caracteres se emplean para unidades que no están definidas en la lista de enumeración. Por ejemplo, la medida de volumen para milímetros cúbicos que no aparece en la lista de enumeración puede especificarse con la cadena ‘mm mm mm’.

El procedimiento correspondiente al evento Initialize del formulario muestra el uso de este método.

Figura 1. Procedimiento que se ejecuta durante el evento Initialize del formulario.

Pero ahora los valores de los cuadros de textos no serán numéricos, por lo que para trabajar con ellos seránecesario cada vez convertirlos a los valores de la base de datos mediante el métodoGetValueFromExpression cuya sintaxis es:

UnitsOfMeasure.GetValueFromExpression(ByVal Expresion As String, _
ByVal EspecificadorUnidades As Variant) As Double

Donde Expresion es la cadena de caracteres leída del cuadro de texto y EspecificadorUnidades es un valor deltipo descrito para el caso del método GetStringFromValue que describe el tipo de unidades correspondiente aExpresion.

Como muestra del uso de este método incluimos el código para los eventos BeforeUpdate y AfterUpdate delcuadro de texto txtDimY. Observe la utilización de la variable intOpcion que sirve para determinar cual botónde opción está marcado y obrar en consecuencia.

Figura 2. Código para el evento BeforeUpdate que incluye la conversión a unidades del documento.

Figura 3. Código para el evento AfterUpdate que incluye la conversión a unidades del documento.