Conversión de Unidades.
Como hemos visto antes, internamente se considera siempre que la información dimensional está dada en centímetros, las unidades predeterminadas de Autodesk Inventor. Para obtenerla en milímetros, que es normalmente 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 del API utilizan las unidades de la base de datos (centímetros) tanto para los datos de entrada como para los de salida. Para mostrar los datos al usuario en las unidades del documento los programas pueden utilizar el objeto UnitsOfMeasure con el propósito de generar la cadena de caracteres correcta.Los métodos GetValueFromExpression, GetStringFromValue, GetStringFromType y GetTypeFromString pueden intervenir en estas conversiones. Para una información detallada se puede consultar 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 de unidades 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 las propiedades 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. Admite tanto un valor Enum del listado UnitsTypeEnum o una cadena de caracteres. Para obtener una longitud expresada en el sistema predeterminado de unidades del documento utilizaremos el valor Enum kDefaultDisplayLengthUnits. 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 una constante de enumeración. En ocasiones como ésta tendremos que definir nosotros una variante en forma de cadena de caracteres. El procedimiento para construir el valor a pasar como EspecificadorUnidades se describe a continuación:-
Obtener el valor Enum de la unidad de longitud predeterminada del documento:
Dim eUnidadLongitud As UnitsTypeEnum eUnidadLongitud = oUOM.LengthUnits
En el caso de las plantillas predeterminadas en el entorno métrico obtendríamos el valor Enum 11269 que corresponde a kMillimeterLengthUnits.
- Obtener el equivalente como cadena de caracteres de ese valor Enum:
Dim sUnidadLongitud As String sUnidadLongitud = _
oUOM.GetStringFromType(eUnidadLongitud)
Para el valor obtenido en el paso anterior la cadena asignada a sUnidadLongitud será “millimeter”.
- Crear la cadena de caracteres que define un área empleando la unidad de longitud actual:
Dim sUnidadArea As String sUnidadArea = sUnidadLongitud & "^2"
La cadena de caracteres obtenida es “millimeter^2”.
- Obtener la cadena de caracteres que muestra la superficie en las unidades del dibujo. Por ejemplo para un
valor de 36.567 cm2:
Dim sArea As String sArea = 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
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.

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étodo
GetValueFromExpression 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 del tipo descrito para el caso del método GetStringFromValue que describe el tipo de unidades correspondiente a Expresion.
Como muestra del uso de este método incluimos el código para los eventos BeforeUpdate y AfterUpdate del cuadro de texto txtDimY. Observe la utilización de la variable intOpcion que sirve para determinar cual botón de opción está marcado y obrar en consecuencia.

