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. AddWithOrientationMétodo que crea un nuevo boceto a partir de una entidad plana e información sobre la orientación. Sintaxis:
Parámetros:
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.
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]) 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) _  ptY = oUOM.GetValueFromExpression(txtRadio.Text, kDefaultDisplayLengthUnits) _  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.
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. |