Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Obtener
Obtener
Módulo
Objeto
Las aplicaciones VBA se realizan mediante el editor VBA que se encuentra en el menú Herramientas,
Macro, Editor Visual Basic. Mediante Alt+F11 se puede ir del editor VBA a Autocad y viceversa. La
interfaz del editor VBA es la siguiente:
1.1 DEFINICIONES
Están compuestas de módulos, como mínimo uno, pudiendo tener varios de cada uno de los tres
tipos posibles. Dichos módulos contienen el código de la aplicación, formado por declaraciones de
variables u objetos, procedimientos y eventos (solo en formularios o en el objeto ThisDrawing). El
objeto ThisDrawing es el documento de Autocad asociado con el proyecto, que puede llevar código
como cualquier otro modulo, declaraciones, eventos y procedimientos.
Práctica 9 Pág: 1
Universitat Jaume I Diseño y Fabricación Asistido por Ordenador
Modulo de Formulario: Sirven de interfaz con el usuario. Contienen objetos gráficos denominados
controles (botones, cuadros de texto, listas, etc.) mediante los que se puede mostrar e introducir
información. Además también contienen código: definiciones de variables, de procedimientos y de
eventos. Los eventos se autoejecutan al detectarse acciones sobre los controles como por ejemplo, al
hacer clic sobre un botón.
Modulo estándar: Contiene código únicamente: definiciones de variables y procedimientos. Estas
definiciones son publicas (pueden ser utilizadas en cualquier modulo), mientras que las definiciones
de un modulo formulario son privadas para ese modulo.
Modulo clase: Se emplea únicamente para crear nuevos tipos objetos con sus propiedades y sus
métodos. VBA emplea este tipo de módulos para definir los objetos que son propios de Autocad y que
no existen en Visual Basic.
La programación en VBA esta guiada por eventos. Esto significa que son los propios objetos y
controles, junto con las intervenciones del usuario los que dirigen la ejecución. El código de la
aplicación se encuentra repartido por los distintos módulos. Para acceder a la ventana de código hay
varias opciones:
1. En la ventana Proyecto pulsar el botón derecho sobre algún objeto de los que componen la aplicación y
elegir Ver Código.
2. En el menú desplegadle elegir Ver y luego Código
3. Hacer doble clic sobre un objeto de la ventana Proyecto
4. Pulsar F7.
Práctica 9 Pág: 2
Universitat Jaume I Diseño y Fabricación Asistido por Ordenador
En el menú de edición aparecen las típicas opciones (cortar, pegar, etc.) y además hay cinco
herramientas que resultan muy útiles:
Lista de propiedades y métodos: del objeto con el que se esta trabando.
Lista de constantes: que se pueden asignar al valor de una propiedad.
Información rápida: ayuda sobre la sintaxis del elemento que se esta escribiendo.
Información de parámetros: sintaxis de los parámetros de la función que se esta escribiendo.
Palabra completa: termina de escribir la palabra que se ha empezado.
Comentarios: Se indican poniendo un apóstrofe delante del texto. Pueden estar al principio o en
medio de una línea.
Constantes: Se indican con la palabra reservada Const delante del identificador. Opcionalmente se
puede escribir su tipo después de As
Const PI As Double = 3,141592
Variables: Se definen con Dim. As indica el tipo
Dim Apellido As String
Los nombres de variables deben comenzar con una letra y pueden tener hasta 255 caracteres.
VBA dispone de los tipos de datos habituales (enteros, reales, boléanos, strings,..) y además de toda
una serie de tipos de datos específicos llamados tipos de objetos que permiten definir variables para
contener elementos como entidades de dibujo, objetos gráficos de formulario (cuadros de texto,
botones..), objetos HTML, OLE, etc. La estructura de objetos de VBA se muestran en la figura 3
Práctica 9 Pág: 3
Universitat Jaume I Diseño y Fabricación Asistido por Ordenador
2. EJERCICIO DE INTRODUCCIÓN
Extraído del Manual del desarrollador de ActiveX y VBA Capítulo 1
Una vez introducidos los conceptos básicos de la programación en AutoCAD VBA, podemos intentar
crear un sencillo ejemplo de "Hola a todos". En este ejercicio creará un dibujo de AutoCAD, le añadirá
una línea de texto y lo guardará, todo ello desde VBA.
• VBAIDE: Abre el IDE de VBA. Permite editar, ejecutar y depurar programas de forma interactiva.
Aunque sólo se llama al IDE de VBA mientras se ejecuta AutoCAD, es posible minimizarlo, abrirlo
y cerrarlo con independencia de la ventana de aplicación de AutoCAD.
• VBACARGAR: Carga un proyecto VBA en la sesión actual de AutoCAD.
• VBAEJECUTAR: Ejecuta una macro de VBA desde el cuadro de diálogo Macros o desde la línea
de comando de AutoCAD.
• VBADESCARGAR: Descarga un proyecto VBA de la sesión actual de AutoCAD. Si el proyecto
VBA está modificado, pero no se ha guardado, se pregunta al usuario si desea guardarlo en el
cuadro de diálogo Guardar proyecto (o el equivalente de la línea de comando).
• VBADMIN: Muestra el Administrador de VBA, donde puede ver, crear, cargar, cerrar, incrustar y
extraer proyectos.
• VBAENUN: Ejecuta una declaración de VBA desde la línea de comando de AutoCAD.
Práctica 9 Pág: 4
Universitat Jaume I Diseño y Fabricación Asistido por Ordenador
En el capítulo 4 del Manual del desarrollador de ActiveX y VBA se amplia la información sobre:
Creación de objetos
Edición de objetos
Uso de capas, colores y tipos de línea
Añadir texto a los dibujos
5. UTILIZACIÓN DE EVENTOS
Los eventos son notificaciones o mensajes que AutoCAD envía para informarle del estado actual de
la sesión o para alertarle de que ha sucedido algo. Por ejemplo, al abrir un dibujo se activa el evento
BeginOpen. Este evento contiene el nombre del dibujo de AutoCAD que se ha abierto. Cuando se
cierra un dibujo se activa otro evento. Con esta información, podría escribir una subrutina o
controlador de eventos que utilice los eventos para realizar el seguimiento del tiempo que un usuario
trabaja en un dibujo determinado.
En el capítulo 7 del Manual del desarrollador de ActiveX y VBA se amplia la información sobre:
Descripción de los eventos de AutoCAD
Directrices para escribir controladores de eventos
Control de eventos de aplicación
Control de eventos de documento
Control de eventos de objeto
Recuerde que la documentación de Microsoft para VBA contiene más información sobre estos temas.
Más terminología de VBA
Utilización de formularios en VBA
Gestión de errores
Protección de los módulos de código de VBA
Ejecución de macros de VBA desde un menú o una barra de herramientas
Carga automática de proyectos de VBA
Ejecución automática de una macro de VBA
Apertura automática del entorno de desarrollo de VBA al cargar un proyecto
Utilización de un estado de cero documentos
Distribución de aplicaciones
En este ejercicio se muestra cómo añadir una macro nueva a AutoCAD, se explica cómo funcionan
ActiveX y Visual Basic for Applications (VBA) y se enseña la manera de sacar el mayor partido
posible a estas tecnologías. El aprendizaje está concebido para la arquitectura paisajística, pero los
conceptos que se aprenderán serán de gran importancia independientemente del campo en que se
apliquen. Este ejercicio está diseñado para usuarios con experiencia en AutoCAD que empiezan a
utilizar la programación en VBA.
Práctica 9 Pág: 5
Universitat Jaume I Diseño y Fabricación Asistido por Ordenador
En primer lugar, la macro solicita al usuario que escriba el punto inicial y el punto final para especificar
la línea de centro del camino. A continuación, pide al usuario que introduzca la mitad de la anchura
del camino y el radio de las baldosas circulares. Por último, se introduce el intervalo entre baldosas.
Se especifica la mitad de la anchura del camino en lugar de la anchura completa porque desde la
línea central del camino resulta más fácil visualizar la mitad de la anchura.
En VBA, seleccione en el menú Ver la opción Código, o pulse F7 para abrir la ventana Código. Si hay
algún procedimiento en dicha ventana, bórralo.
Observe el código. En primer lugar, la constante pi está definida con un valor 3.14159. Esto permite
utilizar la palabra pi en vez de tener que escribir 3.14159 cada vez que se necesita utilizar este valor.
A continuación se va a definir una función llamada dtr (convertir grados en radianes). Esta función
acepta un solo argumento, a, que es el ángulo en grados. El resultado se obtiene dividiendo los
grados por 180 y multiplicando el cociente por pi. La línea que comienza por una comilla simple es un
comentario; VBA pasa por alto todo el texto que se encuentra precedido por este signo. Ahora puede
utilizar esta función en otras subrutinas del proyecto.
Éste es un buen momento para guardar el trabajo. Seleccione el comando Archivo Guardar. El
nombre predeterminado del proyecto es project.dvb, pero puede modificarlo si lo desea. Asigne al
proyecto el nombre gardenpath.dvb.
Práctica 9 Pág: 6
Universitat Jaume I Diseño y Fabricación Asistido por Ordenador
La siguiente subrutina utiliza varias variables globales. Todas las variables globales deben estar
declaradas para que la subrutina pueda acceder a ellas.
Observe ahora las dos listas desplegables de la parte superior de la ventana Código. Se trata de los
cuadros de lista Objeto y Procedimiento, que actualmente presentan, respectivamente, los términos
(General) y (Declaraciones). Estas listas presentan la sección actual del código con el que se está
trabajando, y permiten pasar rápidamente a una sección distinta con sólo seleccionar un elemento de
la lista. La sección (Declaraciones) es el lugar adecuado para declarar variables que se van a utilizar
en más de una subrutina.
Observe la línea Option Explicit que se encuentra en la parte superior de la sección (Declaraciones).
Cuando aparece la instrucción Option Explicit en un módulo es necesario declarar de forma explícita
las variables por medio de una instrucción Dim, Private, Public, ReDim o Static. Si se intenta utilizar
un nombre de variable sin declarar se produce un error. Si no se utiliza la instrucción Option Explicit,
todas las variables sin declarar son del tipo Variant, excepto si se indica otro tipo. Se recomienda
utilizar siempre Option Explicit para evitar la escritura incorrecta de los nombres de variables y para
evitar la confusión del código en que no está claro el alcance de la variable.
La subrutina gpuser solicita al usuario toda la información necesaria para la construcción del camino
de jardín. Añada las líneas de código siguientes después de la función distance:
' Acquire information for garden path
Private Sub gpuser()
Dim varRet As Variant
varRet = ThisDrawing.Utility.GetPoint( , "Start point of path: ")
sp(0) = varRet(0)
sp(1) = varRet(1)
sp(2) = varRet(2)
varRet = ThisDrawing.Utility.GetPoint( , "Endpoint of path: ")
ep(0) = varRet(0)
ep(1) = varRet(1)
ep(2) = varRet(2)
hwidth = ThisDrawing.Utility.GetDistance(sp, "Half width of path: ")
trad = ThisDrawing.Utility.GetDistance(sp, "Radius of tiles: ")
tspac = ThisDrawing.Utility.GetDistance(sp, "Spacing between tiles: ")
pangle = ThisDrawing.Utility.AngleFromXAxis( sp, ep)
totalwidth = 2 * hwidth
Práctica 9 Pág: 7
Universitat Jaume I Diseño y Fabricación Asistido por Ordenador
Acaba de definir una función llamada gpuser. No requiere argumentos y solicita al usuario que escriba
la información deseada. La línea Dim varRet As Variant declara únicamente la variable varRet. Dado
que esta variable se utiliza únicamente en esta subrutina, se puede declarar aquí localmente, en vez
de colocarla en la sección (Declaraciones) del código.
La línea siguiente, varRet = ThisDrawing.Utility.GetPoint( , "Start point of path: "), llama al método
GetPoint. El guión bajo al final de una línea indica a VBAIDE que continúe leyendo la línea siguiente
como si se tratara de la misma. Es innecesario. Se puede eliminar colocando todo el código en una
línea. No obstante, esto hace más fáciles de leer las líneas de código largas.
Para acceder al método GetPoint se debe pasar antes por el objeto ThisDrawing, que representa el
dibujo actual. Después de ThisDrawing se coloca un punto (.), que significa que se va a acceder a
algo que se encuentra dentro de ese objeto. Después del punto se escribe Utility y otro punto. De
nuevo, se va a acceder a algo que se encuentra dentro del objeto Utility. Por último, escriba GetPoint,
que es el nombre del método al que se está llamando.
El método GetDistance se utiliza para obtener la mitad de la anchura del camino (hwidth), el radio de
las baldosas (trad) y el intervalo entre baldosas (tspac). El método GetDistance tiene dos parámetros. El
primero es un punto de base. Para este valor se proporciona el punto inicial. El segundo parámetro es
la solicitud, y tiene como valor una cadena que solicita al usuario que introduzca los datos adecuados.
El aspecto más interesante del método GetDistance es que puede devolver un valor introducido en la
línea de comando o la distancia entre un punto seleccionado en AutoCAD y el punto inicial.
La subrutina pasa a calcular una serie de variables que se utiliza más adelante en la macro. El valor
de la variable pangle es el ángulo comprendido entre el punto inicial y el final, que se encuentra con el
método AngleFromXAxis. La anchura del camino se obtiene multiplicando por dos la mitad de la
anchura. La variable plength se define como la longitud del camino y se encuentra por medio de la
función distance introducida antes. Por último, se calcula y se guarda el ángulo del camino más y
menos 90 grados en angp90 y angm90, respectivamente.
Práctica 9 Pág: 8
Universitat Jaume I Diseño y Fabricación Asistido por Ordenador
Esta subrutina dibuja el contorno del camino utilizando el método AddLightweightPolyline. Este método
tiene un parámetro: una matriz de puntos que componen la polilínea. Debe encontrar todos los puntos
que componen el objeto de polilínea y organizarlos en una matriz, en el mismo orden en que deban
trazarse. Para esta polilínea, los puntos que se necesitan son las esquinas del camino.
Para encontrarlas, utilice el método PolarPoint. Este método busca un punto con un ángulo y una
distancia respecto al punto base determinados. Empiece por el punto inicial (sp) y busque la primera
esquina del camino, en sentido contrario a las agujas del reloj. Esta esquina se encuentra a una
distancia de la mitad de la anchura del camino (hwidth) y a -90 grados del ángulo del camino. Dado
que se desea dibujar un rectángulo cerrado para el camino, este punto es el primero y el último de la
matriz. Por tanto, las coordenadas X e Y que devuelve el método PolarPoint se desplazan a las
posiciones primera y última de la matriz de puntos.
Las demás esquinas del camino se buscan de la misma forma, utilizando la longitud y la anchura del
camino (plength y width) y el ángulo del camino. Cada vez que se llama al método PolarPoint, las
coordenadas devueltas (varRet) se copian en la matriz de puntos.
Cuando se han identificado las cuatro esquinas en la matriz de puntos, se llama al método
AddLightweightPolyline. Observe que se llama a este método desde el objeto ModelSpace. Si se
ejecutara esta macro también se observaría que la polilínea no es aún visible en AutoCAD. No será
visible hasta que se actualice la presentación, cosa que se hará más adelante.
Ahora que ha desarrollado y la subrutina de introducción de datos por parte del usuario y la que
dibuja el contorno, está listo para rellenar el camino con las baldosas circulares. Esta tarea requiere el
uso de la geometría. En el IDE de VBA, escriba el código siguiente en la ventana de código, después
de la subrutina drawout:
' Place one row of tiles the given distance along path and possibly offset it
Private Sub drow(pd As Double, offset As Double)
Dim pfirst(0 To 2) As Double
Dim pctile(0 To 2) As Double
Dim pltile(0 To 2) As Double
Práctica 9 Pág: 9
Universitat Jaume I Diseño y Fabricación Asistido por Ordenador
Práctica 9 Pág: 10
Universitat Jaume I Diseño y Fabricación Asistido por Ordenador
La subrutina drow localiza la posición de la primera fila utilizando el método PolarPoint para
desplazarse por el camino la distancia indicada en el primer argumento. A continuación, vuelve a
emplear PolarPoint para desplazarse en sentido perpendicular al camino a fin de obtener el desfase. A
continuación, la subrutina utiliza la instrucción While para continuar dibujando círculos hasta llegar al
borde del camino. El método PolarPoint de la primera instrucción While pasa a la posición de la
siguiente baldosa, avanzando la distancia correspondiente al radio de dos baldosas (trad) y un
intervalo entre baldosas (tspac). A continuación, un segundo bucle while dibuja las baldosas de la fila
de la otra dirección hasta que encuentra el otro extremo del camino.
La subrutina drawtiles llama repetidamente a drow para dibujar todas las filas de baldosas. La
subrutina del bucle While avanza por el camino, llamando a drow para cada fila. Las baldosas de las
filas adyacentes forman triángulos equiláteros, como se muestra en la figura anterior. Los lados de los
triángulos son iguales a dos veces el radio de la baldosa más el intervalo entre ellas. Por tanto, según
la trigonometría, la distancia entre las filas del camino es el seno de 60 grados multiplicado por esta
cantidad, y el desfase de las filas impares es el coseno de 60 grados multiplicado por esta cantidad.
La instrucción If se emplea en drawtiles para desfasar filas alternas. En este caso, si el desfase es
igual a cero, defínalo como el intervalo entre los centros de las baldosas multiplicado por el coseno de
60, tal como se ha explicado anteriormente. Si no es igual a cero, defínalo en 0. Esto alterna el
desfase de las filas de la forma deseada. Guarde el archivo.
La subrutina path llama a gpuser para obtener los datos necesarios. A continuación se utiliza el método
GetVariable para obtener los valores actuales de las variables de sistema BLIPMODE y CMDECHO y
estos valores se guardan como sblip y scmde. Después, la subrutina utiliza el método SetVariable para
asignar el valor 0 a estas variables de sistema, desactivando así las marcas auxiliares y la
reproducción de comandos. A continuación se dibuja el camino por medio de las subrutinas drawout y
drawtiles. Por último se utiliza el método SetVariable para devolver a las variables de sistema sus
valores originales.
Puede observar que ésta es la única subrutina introducida que no empieza con la palabra clave
Private, que impide que se llame a la subrutina desde un módulo distinto al actual. Dado que la
subrutina gardenpath debe estar a disposición del usuario, se debe omitir la palabra clave Private.
El entorno de desarrollo de VBA aparece en primer plano, con la primera línea de la macro
gardenpath resaltada. Se trata de la línea de código que se va a ejecutar en primer lugar. Para
ejecutarla, pulse F8. La siguiente línea de código que se va a ejecutar es la subrutina gpuser. Para
pasar a la subrutina gpuser vuelva a pulsar F8.
Práctica 9 Pág: 11
Universitat Jaume I Diseño y Fabricación Asistido por Ordenador
Ahora se encuentra al principio de la rutina gpuser. Si pulsa de nuevo F8 resaltará el primer método
GetPoint. Antes de ejecutar esta línea, seleccione Ver Ventana Locales. Esta ventana aparecerá en la
parte inferior del entorno de VBA. Mientras la macro se ejecuta, todas las variables locales y sus
valores se presentan en la ventana Locales.
Pulse ahora F8 para ejecutar el método GetPoint. Observará que desaparece el texto resaltado y no
se presenta más código. Esto se debe a que el método GetPoint está esperando a que el usuario
introduzca un punto en AutoCAD. Vuelva a la ventana de AutoCAD. Verá la solicitud establecida en la
llamada a GetPoint de la línea de comando. Indique un punto.
El control vuelve a la macro. Regrese al entorno de desarrollo de VBA. Ahora verá que la línea
siguiente a la llamada a GetPoint está resaltada. Siga recorriendo el código, pulsando F8. Recuerde
volver a la ventana de AutoCAD cuando deba introducir información.
Ejecución de la macro
No es necesario recorrer el código paso a paso siempre que se ejecute la macro. Puede ejecutar la
macro desde la ventana Macros elija Ejecutar en vez de Entrar. Esto permite ver el transcurso de la
ejecución tal y como se presentará ante el usuario. Ejecute la macro desde AutoCAD e introduzca los
siguientes valores:
El entorno de desarrollo integrado de VBA se puede utilizar para añadir cuadros de diálogo a la macro
de VBA. La macro gardenpath acepta entradas en la línea de comando. Es muy fácil añadir una
interfaz de cuadro de diálogo a esta macro. Los cuadros de diálogo resultan útiles para permitir que
los usuarios elijan entre varias opciones.
Dado que la macro gardenpath tiene muy pocas opciones de momento, ahora va a añadir algunas
características adicionales. Una de ellas es una función que permite a los usuarios especificar la
forma de las baldosas del camino.
Los cuadros de diálogo se crean en VBA por medio de formularios. El cuadro de diálogo que va a
crear contendrá dos casillas de opción (si se selecciona una, se anula la selección de la otra) para
elegir la forma de las baldosas: círculo o polígono. También contendrá tres casillas de edición para la
introducción de los siguientes valores numéricos: el radio de las baldosas, el intervalo entre las
baldosas y el número de lados (éste último sólo estará disponible si se selecciona el botón de opción
Polygon).
Práctica 9 Pág: 12
Universitat Jaume I Diseño y Fabricación Asistido por Ordenador
2- Seleccione uno a uno los siguientes controles del cuadro de herramientas y arrástrelos al
formulario. Debe colocar dos botones de opción ( ), tres etiquetas ( ), tres cuadros de texto ( ) y
dos botones de comando ( ), como se muestra en la siguiente ilustración:
Práctica 9 Pág: 13
Universitat Jaume I Diseño y Fabricación Asistido por Ordenador
Para definir las propiedades de los controles de los cuadros de edición de texto
1- En el formulario, seleccione el control TextBox1. En la ventana Propiedades, cambie las siguientes
propiedades de TextBox1:
(Name) = gp_trad
Ahora, resalte ThisDrawing en la ventana Proyecto. De nuevo, puede mostrar el código pulsando el
botón Ver código. En esta ventana aparece todo el código que ya se ha introducido. La ventana
Proyecto sirve para recorrer el código e identificar dónde se está trabajando en la actualidad.
Práctica 9 Pág: 14
Universitat Jaume I Diseño y Fabricación Asistido por Ordenador
De este modo, las definiciones de variable de trad y tspac se hacen públicas en vez de privadas. Las
variables privadas sólo están disponibles dentro del módulo en el que están definidas. Esto era lo
conveniente antes, pero ahora el código del formulario necesita acceder a estas variables, por lo que
se deben hacer públicas. Además se han añadido dos nuevas variables, tsides y tshape. Estas
variables contienen el número de lados de las baldosas poligonales y la forma de baldosa elegida por
el usuario: círculo o polígono.
Añada las líneas que cargan y muestran el formulario. Añada las siguientes líneas en el lugar de las
que ha eliminado arriba:
Load gpDialog
gpDialog.Show
A continuación debe añadir una subrutina que dibuje las baldosas circulares o poligonales. Añada las
siguientes líneas al final del archivo de código:
'Draw the tile with the designated shape
Sub DrawShape(pltile)
Dim angleSegment As Double
Dim currentAngle As Double
Dim angleInRadians As Double
Práctica 9 Pág: 15
Universitat Jaume I Diseño y Fabricación Asistido por Ordenador
Esta subrutina utiliza una instrucción Select Case para asignar el control del programa según el tipo
de forma que se va a dibujar. La variable tshape se utiliza para determinar el tipo de forma.
Actualización de la subrutina drow para dibujar una baldosa con la forma adecuada
A continuación, vaya a la subrutina drow. En los dos lugares en los que aparece la siguiente línea:
Set cir = ThisDrawing.ModelSpace.AddCircle(pltile, trad)
Observe que las subrutinas, gp_poly_Click() y gp_circ_Click() se basan en el nombre de los dos
controles de opción que se crearon antes, aunque se les ha añadido "_Click". Estas subrutinas son
especiales, porque se ejecutan automáticamente cuando el usuario hace clic en el control que lleva
su nombre.
Observe los cuadros Objeto y Procedimiento, en la parte superior de la ventana Código. Abra el
cuadro Objeto y observe la lista desplegable. Verá una lista de todos los controles añadidos al
formulario, ordenados por orden alfabético según su propiedad Name.
Práctica 9 Pág: 16
Universitat Jaume I Diseño y Fabricación Asistido por Ordenador
Observe el código introducido para estos dos controladores de eventos. El primero de ellos responde
al evento Click del control gp_poly de casilla de opción. La primera línea de código activa el cuadro de
texto correspondiente al número de lados. Este cuadro de texto sólo está disponible para los
polígonos, por lo que se activa únicamente si se selecciona el control Polygon. La siguiente línea de
código establece la variable tshape en Polygon.
El segundo controlador de eventos responde al evento Click del control gp_circ de casilla de opción.
Este controlador desactiva el cuadro de edición de texto correspondiente al número de lados y
establece la variable tshape en Circle.
Aquí es donde se efectúa realmente el trabajo del formulario. Este controlador de sucesos comprueba
en primer lugar si se ha elegido la forma poligonal. Si es así, recupera el número de lados del
polígono del control gp_tsides. El valor introducido por el usuario se almacena en la propiedad Text.
Dado que se almacena como cadena de texto, se puede convertir en su equivalente en enteros por
medio de la función CInt de Visual Basic. Después de obtener este valor, el controlador de sucesos
comprueba el alcance del valor para asegurarse de que se encuentra comprendido entre 3 y 1024. Si
no es así presenta un mensaje de error y deja de ejecutarse. El resultado es un mensaje que ofrece
al usuario la oportunidad de modificar el valor. Cuando se vuelve a pulsar el botón Aceptar el
controlador de sucesos vuelve a comprobar el valor.
Práctica 9 Pág: 17
Universitat Jaume I Diseño y Fabricación Asistido por Ordenador
Los valores del radio y el espacio entre baldosas se obtienen de la misma forma, aunque son valores
dobles y no enteros, y se obtienen por medio de la función CDbl. También se verifican estos valores
para comprobar que son positivos.
Después de obtener y verificar los valores, la instrucción gpDialog.Hide oculta el formulario y
devuelve el control a la subrutina que lo abrió.
Este código establece los valores iniciales del formulario y de la variable tsides. El valor de tsides
debe ser un número positivo mayor de 3, incluso si el usuario selecciona un círculo. Para entender
esto, observe la subrutina DrawShape introducida anteriormente. En ella hay una variable llamada
points que se define a partir del número de lados del polígono. Se asigna memoria a esta variable
tanto si se solicita una forma poligonal como si no es así. Por tanto, es necesario definir un valor
válido para tsides. El usuario puede modificarlo a voluntad durante la ejecución de la macro.
Práctica 9 Pág: 18