Autodesk Inventor‎ > ‎Autodesk Inventor VBA.‎ > ‎5. Proyecto de la Aplicación‎ > ‎

5.4. Boceto 2D y Operaciones de Modelado.

Creación del Boceto.

Para crear las operaciones será necesaria la creación de un boceto sobre la cara seleccionada. Pero se debe tener en cuenta que los sistemas de coordenadas del boceto y del modelo no son los mismos. El alumno deberá estudiar los métodos para la conversión entre ambos sistemas de coordenadas (ModelToSketchSpace y SketchToModelSpace).

Figura 1. Caso general de un Boceto creado sobre una cara de forma irregular.

Independientemente de esta posibilidad, la definición de las operaciones se facilita si se controla el origen y la orientación del boceto. Esto se logra mediante el método AddWithOrientation de la colección PlanarSketches.

AddWithOrientation

Método que crea un nuevo boceto a partir de una entidad plana e información sobre la orientación.

Sintaxis:

Function AddWithOrientation( _
    ByVal EntidadPlana As Object, _
    ByVal EntidadEje As Object, _
    ByVal DireccionNatualDelEje As Boolean, _
    ByVal EjeEsX As Boolean, _
    ByVal Origen As Object, _
    Opcional ByVal UsarAristasDeCara As Boolean = False _
) As PlanarSketch

Parámetros:

EntidadPlana :
Objeto plano sobre el cual se construirá el boceto. Son entradas válidas las caras planas y los planos de trabajo.
EntidadEje :
Objeto que define el eje X o el eje Y del plano del boceto (el argumento EjeEsX define cuál). Las entradas válidas incluyen las aristas lineales, líneas tomadas de otro boceto y ejes de trabajo. A continuación se muestra la manera de establecer una variable de objeto para un eje de trabajo que será empleado como eje X para la creación de un boceto con orientación. El ítem 1 de la colección predeterminada de ejes corresponde al eje X del modelo.
Dim oDoc As PartDocument
Set oDoc = ThisApplication.ActiveDocument
Dim oEjeX As WorkAxis
Set oEjeX = oDoc.ComponentDefinition.WorkAxes.Item(1)
DireccionNatualDelEje :
Argumento Booleano que define si el eje X o Y del boceto posee la misma dirección que la definida por EntidadEje. Verdadero (True) indica que la dirección es la misma.
EjeEsX :
Argumento Booleano que especifica si la entidad eje define el eje X o el eje Y. Verdadero (True) indica que el eje definido es el X.
Origen :
Objeto que define el origen del Plano del Boceto. Puede emplearse para ello un vértice (Vertex), un punto de trabajo (WorkPoint) o un punto de boceto (SketchPoint) tomado de otro boceto. A continuación se muestra la manera de crear un WorkPoint en el centro de la cara para utilizarla como origen del nuevo boceto. Observe que las coordenadas del centro obtenidas a partir de la geometría de la cara corresponden al espacio del modelo, por lo que no es necesaria su transformación.
Dim oWPoints As WorkPoints
Set oWPoints = oDoc.ComponentDefinition.WorkPoints
Dim oWPt As WorkPoint
Set oWPt = oWPoints.AddFixed(oCara.Edges.Item(1).Geometry.Center)
Obsérvese que utilizamos el método AddFixed para añadir el WorkPoint ya que otros métodos no aceptan un punto genérico, sino que exigen un objeto SketchPoint o un objeto Vertex.
UsarAristasDeCara :
Argumento Booleano opcional que especifica si deben incorporarse como geometría del boceto las aristas de la cara tomada como base. Esto reproduce el comportamiento usual al crear un boceto de manera interactiva en Autodesk Inventor. Este argumento no se toma en cuenta si EntidadPlana es un plano de trabajo. El valor predeterminado es Falso, lo que indica que no se creará la geometría a partir de las aristas de la cara base.

A continuación se muestra la manera de invocar el método AddWithOrientation empleando la cara seleccionada (oCara) y los objetos eje (oEjeX) y origen (oWPt) definidos más arriba.

Dim oBoceto As PlanarSketch
Set oBoceto = oDoc.ComponentDefinition.Sketches. _
AddWithOrientation(oCara, oEjeX, True, True, oWPt, False)

Simplificación para el caso de una cara circular: Add.

En el caso del proyecto que hemos propuesto, se simplifican las cosas, ya que en ese caso el boceto que se crea tendrá siempre su origen en el centro de la cara y por otra parte no estamos poniendo como condición el que los agujeros estén orientados según ángulos específicos. En este caso podemos simplificar la creación del boceto utilizando el método Add.
Figura 2. Boceto creado sobre una cara circular.

Sintaxis:

Function Add(EntidadPlana As Object, [UsarAristasDeCara As Boolean = Falso])
As PlanarSketch

Los parámetros corresponden a las explicaciones hechas para el método AddWithOrientation. Para crear el boceto sobre la cara circular seleccionada obtenemos una referencia al documento actual a partir de la global ThisApplication, del documento accedemos a la colección ComponentDefinition, de ahí a la colección Sketches e invocamos su método Add suministrándole como argumento el objeto Face seleccionado.

Dim oDoc As PartDocument
Dim oBoceto As PlanarSketch
Set oDoc = ThisApplication.ActiveDocument
Set oBoceto = oDoc.ComponentDefinition.Sketches.Add(oCara, False)

Una vez creado el Boceto debemos crear los centros de agujeros. Estos centros de agujeros se crearán a partir de puntos 2d mediante el método CreatePoint2d del objeto TransientGeometry. Para ello debemos referenciar los objetos necesarios:

Dim oTrans As TransientGeometry
Set oTrans = ThisApplication.TransientGeometry

Los puntos (SketchPoints) creados para usar como centros de agujeros debemos empaquetarlos en una colección de objetos (ObjectCollection) para lo cual será necesario referenciar los objetos necesarios:

Dim oPuntos As SketchPoints
Set oPuntos = oBoceto.SketchPoints
Dim oCentrosAgujeros As ObjectCollection
Set oCentrosAgujeros = ThisApplication.TransientObjects.CreateObjectCollection

Y definiremos las variables necesarias para las coordenadas de cada punto y paar el objeto Punto 2D (Point2D). El cálculo de los valores de las coordenadas se deberá realizar en un ciclo de iteraciones que estará controlado por las variables i, j.

Dim ptX As Double
Dim ptY As Double
Dim pto As Point2d

Dim i As Integer
i = 0
Dim j As Integer
j = ((txtCant.Value) - 1)

El cálculo de las coordenadas se hará a partir del seno y el coseno del ángulo que se incrementará en cada iteración. Para cada par X,Y se añadirá un SketchPoint y ese SketchPoint se añadirá a la ObjectCollection.

Err.Clear
On Error Resume Next

Do While (i <= j)
  i = 1 + i
  ptX = oUOM.GetValueFromExpression(txtRadio.Text, kDefaultDisplayLengthUnits) _
        * Cos((i - 1) * (6.2831853 / (j + 1)))

  ptY = oUOM.GetValueFromExpression(txtRadio.Text, kDefaultDisplayLengthUnits) _
        * Sin((i - 1) * (6.2831853 / (j + 1)))

  Call oCentrosAgujeros.Add(oPuntos.Add(oTrans.CreatePoint2d(ptX, ptY), True))
Loop

Para prevenir posibles errores que puedan interrumpir la ejecución se ha colocado una expresión On Error Resume Next. Al termnar, si hubieran errores se abrirá una ventana de mensaje para advertirlo. Cn esto queda terminado el boceto que incluye los centros de agujero necesarios.

Operaciones de Modelado.

Los agujeros se definirán a partir de su diámetro y de su profundidad, datos que aparecen en las correspondientes casillas del formulario. Se convertirán estos valores a las unidades internas del sistema para emplearlas como parámetros del método AddDrilledByDistanceExtent de la colección HoleFeatures.

Function AddDrilledByDistanceExtent(Colocación As Object, Diámetro, Profundidad, DirecciónExtrusión As PartFeatureExtentDirectionEnum, [FondoPlano As Boolean = Verdadero], [AnguloFondo]) As HoleFeature

Parámetros.

 Colocación  Objeto que define los centros de los agujeros. Puede ser uno de los cuatro derivados del HolePlacementDefinition: SketchHolePlacementDefinition, LinearHolePlacementDefinition, ConcentricHolePlacementDefinition, PointHolePlacementDefinition. También admite un ObjectCollection de SketchPoints.
 Diámetro Define ya sea el diámetro del agujero o la información de avellanado (usando un objeto HoleTapInfo o TaperedThreadInfo).
 Profundidad De tipo Variant, define la profundidad del agujero. Puede ser numérico o cadena de caracteres. En este segundo caso pueden especificarse las unidades.
 DirecciónExtrusión  Constante (kPositive o kNegative) que indica a qué lado del plano del boceto se debe realizar la extrusión. kPositive indica la dirección de la normal del plano.
 FondoPlano  Booleano opcional que indica si el fondo del agujero debe ser plano o cónico. El valor predeterminado es Verdadero.
 AnguloFondo Si FondoPlano es Falso indica el valor del ángulo de conicidad.

La llamada a este método se define de la siguiente manera:

Dim dblDiam As Double
Dim dblProf As Double
dblProf = oUOM.GetValueFromExpression(txtProf.Text, kDefaultDisplayLengthUnits)
dblDiam = oUOM.GetValueFromExpression(txtDiam.Text, kDefaultDisplayLengthUnits)

Call oDoc.ComponentDefinition.Features.HoleFeatures.AddDrilledByDistanceExtent _
(oCentrosAgujeros, dblDiam, dblProf, kPositiveExtentDirection)

Y en caso de error, se muestra su descripción. A continuación se descarga el formulario.

If Err.Number <> 0 Then
    MsgBox Err.Description
End If
Unload Me

Conclusiones.

Hemos creado una herramienta personalizada para su uso en Autodesk Inventor. Esta herramienta puede ser enriquecida añadiendo opciones referidas al tipo de agujero, que permitan seleccionar, por ejemplo, entre distintos tipos de avellanado con sus parámetros correspondientes. En este proyecto hemos utilizado el módulo de clase clsSelecc desarrollado en la sección 4.2. Selección Interactiva. Aprovechando las posibilidades incorporadas a las versiones más recientes de Inventor hemos desarrollado una variante que incorpora la gestión de eventos dentro del mismo formulario, prescindiendo de la clase. Esta variante se encuentra en el siguiente capítulo 5.5. Interacción Integrada al Codigo del Formulario.
En el enlace de archivo adjunto más abajo incluimos el proyecto terminado tal como lo hemos descrito en las secciones anteriores y que puede servir como base para que el alumno lo amplíe incluyendo otras prestaciones.
En el siguiente capítulo crearemos un botón en la interfaz de usuario de Inventor para lanzar el programa como una herramienta más de la aplicación.
Reinaldo Togores Fernández,
10 mar 2011, 12:09
v.1