en los ejercicios anteriores, la funcionalidad de selección nos proponemos crear una herramienta propia que permita ahorrar pasos en la realización de piezas mecánicas. El problema propuesto es el siguiente: Una vez conseguida, Se desea crear una herramienta que permita seleccionar una cara circular en una pieza que se está diseñando y que cree en torno a su centro una matriz de agujeros cuyas caracterÃsticas se definirán mediante la interfaz de usuario diseñada al efecto. Los requisitos que debe cumplir el programa son:
Propiedades del objeto FACE.La manera más efectiva de estudiar las propiedades de cualquier objeto consiste en establecer una referencia al mismo como variable local y abrir la ventana Locales del entorno de desarrollo VBA (ver Figura 1). Aquà se muestra una estructura de árbol con sus propiedades en tiempo de ejecución del programa. Para comprobar si la cara seleccionada es realmente circular debemos examinar su propiedad Edges, que nos devuelve las aristas que definen su contorno. De entrada si la cara es circular, el número de aristas será 1, lo que puede comprobarse mediante la propiedad Count:
Pero esto no nos asegura que sea una arista circular, por lo que debemos comprobar su tipo. Este dato está contenido en la propiedad CurveType que deberá corresponder a la constante de enumeración kCircleCurve.
Como podemos ver en la Figura 1, la propiedad Geometry de la arista contiene todos los datos necesarios para las comprobaciones que deberá hacer nuestro programa en su interfaz de usuario, y que no es más que el radio:
Figura 1. Propiedades de una cara circular seleccionada tal como se muestra en la ventana Locales.5.1.1. La Interfaz de Usuario.Se propone como objetivo inicial la preparación de la interfaz de usuario con los controles necesarios para:
Figura 2. Interfaz de usuario. Crearemos un UserForm (que en nuestro código identificamos como frmMatrizAg). En ese formulario colocaremos cuatro controles TextBox:
Además colocaremos cuatro botones de comando (CommandButton) con las siguientes propiedades:
Incluiremos un control Label de nombre lblInfo destinado a enviar mensajes al usuario. El formulario de la Figura 2 incluye un control de imagen (Image) y un control Frame que son opcionales y cuyo fin es exclusivamente el mejorar el aspecto de la interfaz gráfica de usuario. Declararemos dos variables globales, en el código del formulario: Option Explicit Public oCara As Face Public oUOM As UnitsOfMeasure 5.1.2. Selección de la Cara.La primera operación a implementar será la selección de la cara al pulsar el botón Selección Cara (cmdSeleccionar). La selección deberá utilizar el módulo de clase que desarrollamos en el ejercicio 4.2. Selección Interactiva. Para ello podemos simplemente exportar el módulo de clase desde aquél royecto e importarlo en el nuevo proyecto (ver Figura 3).Figura 3. Exportación del módulo de clase. Una vez disponible este módulo en nuestro proyecto implementaremos el procedimiento de respuesta al evento Click del botón cmdSeleccionar. La selección implica la creación de una nueva instancia de la clase, establecer los valores de sus propiedades Filtro y Mensaje e invocar a continuación el método Designa, que devolverá el objeto Face seleccionado por el usuario. Para permitir la selección el formulario, en este caso definido como modal, se ocultará. Private Sub cmdSeleccionar_Click()    oSelecc.Filtro = kPartFaceFilter    oSelecc.Mensaje = "seleccione una cara"    Me.Hide    Set oCara = oSelecc.Designa(1) Una vez devuelta la selección se deberá comprobar que se trate de una cara plana circular, según se explica más arriba. Ya con esto bastarÃa, pero haremos algo más, que será calcular una serie de valores predefinidos de acuerdo con las dimensiones de la cara que sirvan de orientación al usuario. Estas opciones serán las siguientes:
Una vez hecha la selección y comprobado que se trate de una cara circular, se calculan los valores por defecto según los criterios expuestos: If oCara.Edges.Count = 1 And oCara.Edges.Item(1).CurveType = kCircleCurve Then    Dim dblRadMat As Double    Dim dblDiam As Double
 ' se calculan valores por defecto a partir de las dimensiones de la cara.    txtCant.Value = 6                     ' número de agujeros    dblRadio = oCara.Edges.Item(1).Geometry.Radius   ' radio de la cara    dblRadMat = dblRadio * 2 / 3                     ' radio de la matriz    dblDiam = 3.1416 * dblRadMat / 6                 ' diámetro del agujero    If dblDiam > 1 Then         dblDiam = Fix(dblDiam)                     ' diámetro a entero    End If Ahora, para pasar los valores a los cuadros de texto será necesario convertirlos a las unidades del documento recurriendo al objeto UnitsOfMeasure (ver lo explicado en el ejercicio 2.4. Expresión de las unidades en los valores predeterminados del dibujo). El objeto UnitsOfMeasure estará referenciado por la variable oUOM, declarada como global y a la que se puede asignar su valor en el evento Initialize del formulario. txtRadio.Text = oUOM.GetStringFromValue(dblRadMat, kDefaultDisplayLengthUnits) txtDiam.Text = oUOM.GetStringFromValue(dblDiam, kDefaultDisplayLengthUnits) txtProf.Text = oUOM.GetStringFromValue(dblDiam * 2, kDefaultDisplayLengthUnits) Y se presentarán los datos de la cara seleccionada en la etiqueta lblInfo. EStos datos serán el radio y las coordenadas del centro de la cara. Dim dblCentroX As Double Dim dblCentroY As Double dblCentroX = oCara.Edges.Item(1).Geometry.Center.X dblCentroY = oCara.Edges.Item(1).Geometry.Center.Y lblInfo.Caption = "Radio de la cara seleccionada: " & _   oUOM.GetStringFromValue(dblRadio, kDefaultDisplayLengthUnits) & _   vbCrLf & "Coordenadas locales del centro: (" & _   oUOM.GetValueFromExpression(dblCentroX, kDefaultDisplayLengthUnits) & "," & _   oUOM.GetValueFromExpression(dblCentroY, kDefaultDisplayLengthUnits) & ")" En caso de que la selección no sea de una cara plana circular se deberá advertir de ello al usuario mediante un mensaje en la etiqueta lblInfo. Para llamar la atención se podrá colorear de rojo el texto, lo que habrá que tener en cuenta posteriormente para restituir el color original. Else         lblInfo.ForeColor = vbRed         lblInfo.Caption = "ERROR: Debe seleccionar una cara plana circular" End If Me.Show End Sub Parte 2. 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). 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 Sketches. 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.
|