Está en la página 1de 18

Universitat Jaume I

Diseo y Fabricacin Asistido por Ordenador

PROGRAMACION DE AUTOCAD CON VBA.


Se trata de una programacin orientada a objetos y conducida por eventos. El usuario realiza
acciones sobre dichos objetos. Segn el objeto y la accin de que se trate se ejecutara la rutina
asociada. Las aplicaciones contienen una coleccin de bloques de instrucciones a los que se
denomina procedimientos que se pueden agrupar en mdulos. La estructura completa se muestra en
la figura 1:
Mtodos

Sentencias

Eventos
Mdulo

Objeto
Propiedades

Sentencias

Procedimientos

Figura 1: Estructura general de una aplicacin orientada a objetos

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
Aplicacin o Programa: Conjunto de bloques de instrucciones y de objetos de control que realizan
una funcin o tarea. Se divide en mdulos.
Mdulo: Pueden ser de tres clases:
Formulario: Ventanas que sirven de interfaz de la aplicacin. Contiene controles, eventos,
declaraciones de variables y procedimientos.
Estndar: Contiene declaraciones de variables y procedimientos.
Clase: Contiene definiciones de nuevos objetos con sus mtodos y propiedades.
Procedimiento: Conjunto de instrucciones que forman el cdigo. Pueden ser subrutinas o funciones.
Objeto: Cada uno de los elementos sobre los que acta el programa. Se agrupan por clases:
Objetos del sistema: objetos especiales del sistema operativo (Err, Printer, Debug, etc.).
Objetos de formulario: Contiene el propio formulario y todos los controles contenidos en l.
Objetos de Autocad: Objetos de dibujo, tablas de smbolos, objetos no grficos y
preferencias.
Evento: Cdigo que se ejecuta cada vez que se realiza una accin sobre un objeto: clic, doble clic,
arrastrar, cargar, modificar, etc.
Propiedad: Atributos de los objetos: nombre, color, fuente, posicin, etc.
Mtodo: Funcin que realiza una accin sobre un objeto. As por ejemplo Add, Close o GetFormat
para los objetos de formulario o AddCircle, Move, Copy o GetAngle para los objetos de AutoCAD.
1.2 EL EDITOR VBA:
En la figura 2 se muestran los componentes tpicos de la interfaz:
Barra de Mens
Barra de herramientas estndar: Contiene los botones con las herramientas mas comunes.
Ventana Project: Estructura en rbol con la informaron referente al proyecto actual: Objetos,
Formularios y Mdulos
Ventana UserForm (Cdigo) contiene el cdigo correspondiente al formulario UserForm
Ventana UseForm (UserForm) contiene el formulario y los controles de UserForm.
Ventana Propiedades: Muestra las propiedades del objeto seleccionado.
Cuadro de herramientas: Contiene los controles con los que se disean los formularios.
1.3 APLICACIONES EN VBA
Estn compuestas de mdulos, como mnimo uno, pudiendo tener varios de cada uno de los tres
tipos posibles. Dichos mdulos contienen el cdigo de la aplicacin, 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 cdigo
como cualquier otro modulo, declaraciones, eventos y procedimientos.

Prctica 9

Pg: 1

Universitat Jaume I

Diseo y Fabricacin Asistido por Ordenador

Figura 2 El editor VBA (IDEVBA)

Modulo de Formulario: Sirven de interfaz con el usuario. Contienen objetos grficos denominados
controles (botones, cuadros de texto, listas, etc.) mediante los que se puede mostrar e introducir
informacin. Adems tambin contienen cdigo: 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 botn.
Modulo estndar: Contiene cdigo 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
mtodos. VBA emplea este tipo de mdulos para definir los objetos que son propios de Autocad y que
no existen en Visual Basic.
La programacin 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 ejecucin. El cdigo de la
aplicacin se encuentra repartido por los distintos mdulos. Para acceder a la ventana de cdigo hay
varias opciones:
1. En la ventana Proyecto pulsar el botn derecho sobre algn objeto de los que componen la aplicacin y
elegir Ver Cdigo.
2. En el men desplegadle elegir Ver y luego Cdigo
3. Hacer doble clic sobre un objeto de la ventana Proyecto
4. Pulsar F7.
Al acceder a la ventana de cdigo aparecen dos listas desplegables. La de la izquierda para
seleccionar el objeto y la de la derecha para seleccionar el evento al que se va a asociar el cdigo
que se introduzca. Por ejemplo, en el cdigo de se puede elegir AcadDocument y ObjectErased para
acceder a la rutina AcadDocument_ObjectErased que se ejecutara cada vez que se borre un objeto
del dibujo actual. En todos los mdulos aparece en la lista de la izquierda el elemento General y al
elegirlo aparece en la derecha el elemento Declaraciones. En esta seccin es donde deben definirse
las variables y procedimientos que se van a usar en todo el modulo.

Prctica 9

Pg: 2

Universitat Jaume I

Diseo y Fabricacin Asistido por Ordenador

En el men de edicin aparecen las tpicas opciones (cortar, pegar, etc.) y adems hay cinco
herramientas que resultan muy tiles:
Lista de propiedades y mtodos: del objeto con el que se esta trabando.
Lista de constantes: que se pueden asignar al valor de una propiedad.
Informacin rpida: ayuda sobre la sintaxis del elemento que se esta escribiendo.
Informacin de parmetros: sintaxis de los parmetros de la funcin que se esta escribiendo.
Palabra completa: termina de escribir la palabra que se ha empezado.
Comentarios: Se indican poniendo un apstrofe delante del texto. Pueden estar al principio o en
medio de una lnea.
Constantes: Se indican con la palabra reservada Const delante del identificador. Opcionalmente se
puede escribir su tipo despus 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, bolanos, strings,..) y adems de toda
una serie de tipos de datos especficos llamados tipos de objetos que permiten definir variables para
contener elementos como entidades de dibujo, objetos grficos de formulario (cuadros de texto,
botones..), objetos HTML, OLE, etc. La estructura de objetos de VBA se muestran en la figura 3

Figura 3: Modelo de datos y estructura de objetos de VBA

Prctica 9

Pg: 3

Universitat Jaume I

Diseo y Fabricacin Asistido por Ordenador

2. EJERCICIO DE INTRODUCCIN
Extrado del Manual del desarrollador de ActiveX y VBA Captulo 1
Una vez introducidos los conceptos bsicos de la programacin en AutoCAD VBA, podemos intentar
crear un sencillo ejemplo de "Hola a todos". En este ejercicio crear un dibujo de AutoCAD, le aadir
una lnea de texto y lo guardar, todo ello desde VBA.
1. Abre el IDE de VBA desde la lnea de comando de AutoCAD:
Comando:VBAIDE
o pulsando Alt+F11
2. Abre la ventana de cdigo seleccionando la opcin Cdigo de del men Ver en el IDEVBA.
3. Para crear un procedimiento nuevo en el proyecto, elige la opcin Procedimiento en el men
Insertar en el IDE de VBA.
4. Cuando se solicite informacin del procedimiento, escribe un nombre, por ejemplo,
Hola_a_todos. Asegrate de que el tipo seleccionado sea Procedimiento y el mbito Pblico.
5. Elige Aceptar.
6. Escribe el cdigo siguiente (que abre un dibujo nuevo) entre las lneas Public Sub
Hola_a_todos() y End Sub.
ThisDrawing.Application.Documents.Add
7. Escribe el cdigo siguiente (que crea la cadena de texto y define el punto donde se inserta)
inmediatamente despus del cdigo introducido en el paso 6.
Dim insPoint(0 To 2) As Double 'Declare insertion point
Dim textHeight As Double
'Declare text height
Dim textStr As String
'Declare text string
Dim textObj As AcadText
'Declare text object
insPoint(0) = 2 'Set insertion point x coordinate
insPoint(1) = 4
'Set insertion point y coordinate
insPoint(2) = 0
'Set insertion point z coordinate
textHeight = 1
'Set text height to 1.0
textStr = "Hello World!"
'Set the text string
'Create Text object
Set textObj = ThisDrawing.ModelSpace.AddText (textStr, insPoint, textHeight)
8. Escribe el cdigo que guarda el dibujo despus del cdigo introducido en el paso 6.
ThisDrawing.SaveAs("Hello.dwg")
9. Para ejecutarlo elige la opcin Ejecutar Sub/UserForm en el men Ejecutar del IDE de VBA.
Cuando termine la ejecucin del programa, pon la aplicacin de AutoCAD en primer plano. Ahora
podrs ver el texto 'Hola a todos' en el dibujo. Se habr creado un nuevo dibujo cuyo nombre
debe ser Hello.dwg.

3. COMANDOS DE AUTOCAD VBA

VBAIDE: Abre el IDE de VBA. Permite editar, ejecutar y depurar programas de forma interactiva.
Aunque slo se llama al IDE de VBA mientras se ejecuta AutoCAD, es posible minimizarlo, abrirlo
y cerrarlo con independencia de la ventana de aplicacin de AutoCAD.
VBACARGAR: Carga un proyecto VBA en la sesin actual de AutoCAD.
VBAEJECUTAR: Ejecuta una macro de VBA desde el cuadro de dilogo Macros o desde la lnea
de comando de AutoCAD.
VBADESCARGAR: Descarga un proyecto VBA de la sesin 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 dilogo Guardar proyecto (o el equivalente de la lnea de comando).
VBADMIN: Muestra el Administrador de VBA, donde puede ver, crear, cargar, cerrar, incrustar y
extraer proyectos.
VBAENUN: Ejecuta una declaracin de VBA desde la lnea de comando de AutoCAD.

Prctica 9

Pg: 4

Universitat Jaume I

Diseo y Fabricacin Asistido por Ordenador

4. CREACIN Y EDICIN DE ENTIDADES DE AUTOCAD


En AutoCAD puede crear una variada gama de objetos, tan sencillos como una lnea o un crculo, o
tan complejos como curvas spline, elipses y sombreados asociativos. En general, los objetos se
aaden al espacio modelo mediante uno de los mtodos Add. Tambin puede crear objetos en el
espacio papel o en un bloque. Una vez creado un objeto, puede cambiar su capa, color y tipo de
lnea. Tambin puede aadirle texto para incluir anotaciones.
En el captulo 4 del Manual del desarrollador de ActiveX y VBA se amplia la informacin sobre:
Creacin de objetos
Edicin de objetos
Uso de capas, colores y tipos de lnea
Aadir texto a los dibujos

5. UTILIZACIN DE EVENTOS
Los eventos son notificaciones o mensajes que AutoCAD enva para informarle del estado actual de
la sesin 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 informacin, podra 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 captulo 7 del Manual del desarrollador de ActiveX y VBA se amplia la informacin sobre:
Descripcin de los eventos de AutoCAD
Directrices para escribir controladores de eventos
Control de eventos de aplicacin
Control de eventos de documento
Control de eventos de objeto

6. DESARROLLO DE APLICACIONES CON VBA


Existen muchas tareas de programacin para las que no basta con trabajar con el modelo de objetos
ActiveX de AutoCAD En este captulo se proporciona una breve presentacin general de la creacin
de cuadros de dilogo, la rutina de control de errores, el control del foco de la ventana y la distribucin
de aplicaciones.
Recuerde que la documentacin de Microsoft para VBA contiene ms informacin sobre estos temas.
Ms terminologa de VBA
Utilizacin de formularios en VBA
Gestin de errores
Proteccin de los mdulos de cdigo de VBA
Ejecucin de macros de VBA desde un men o una barra de herramientas
Carga automtica de proyectos de VBA
Ejecucin automtica de una macro de VBA
Apertura automtica del entorno de desarrollo de VBA al cargar un proyecto
Utilizacin de un estado de cero documentos
Distribucin de aplicaciones

7. EJERCICIO GUIADO: DISEO CAMINO DE JARDN


Extrado del Manual del desarrollador de ActiveX y VBA Captulo 13.
En este ejercicio se muestra cmo aadir una macro nueva a AutoCAD, se explica cmo funcionan
ActiveX y Visual Basic for Applications (VBA) y se ensea la manera de sacar el mayor partido
posible a estas tecnologas. El aprendizaje est concebido para la arquitectura paisajstica, pero los
conceptos que se aprendern sern de gran importancia independientemente del campo en que se
apliquen. Este ejercicio est diseado para usuarios con experiencia en AutoCAD que empiezan a
utilizar la programacin en VBA.

Prctica 9

Pg: 5

Universitat Jaume I

Diseo y Fabricacin Asistido por Ordenador

Definicin del objetivo


El objetivo de este ejercicio consiste en desarrollar una macro nueva para AutoCAD que dibuje un
camino de jardn y lo rellene con baldosas circulares de hormign. La nueva macro contar con la
siguiente secuencia de comandos:
Comando: gardenpath
Punto inicial del camino: El usuario determina el punto inicial.
Punto final del camino: El usuario determina el punto final.
Anchura media del camino: El usuario introduce un nmero.
Radio de las baldosas: El usuario introduce un nmero.
Intervalo entre las baldosas: El usuario introduce un nmero.
En primer lugar, la macro solicita al usuario que escriba el punto inicial y el punto final para especificar
la lnea de centro del camino. A continuacin, 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
lnea central del camino resulta ms fcil visualizar la mitad de la anchura.
Escritura de la primera funcin
Esta macro se va a desarrollar por medio de una serie de funciones y subrutinas. Muchas de estas
subrutinas requieren la manipulacin de ngulos. Dado que ActiveX mide los ngulos en radianes
pero la mayora de los usuarios mide los ngulos en grados, empiece por definir una funcin para
convertir grados en radianes. Si an no est abierto el entorno de desarrollo de VBA, bralo
escribiendo el comando VBAIDE.
En VBA, seleccione en el men Ver la opcin Cdigo, o pulse F7 para abrir la ventana Cdigo. Si hay
algn procedimiento en dicha ventana, brralo.
Conversin de grados a radianes
Escriba el cdigo siguiente en la ventana Cdigo:
Option Explicit
Const pi = 3.14159 ' Convert angle in degrees to radians
Function dtr(a As Double) As Double
dtr = (a / 180) * pi
End Function
Observe el cdigo. 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 continuacin se va a definir una funcin llamada dtr (convertir grados en radianes). Esta funcin
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 lnea 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 funcin 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.
Clculo de la distancia entre dos puntos
A continuacin, aada una funcin para calcular la distancia entre puntos. Aada las lneas de cdigo
siguientes despus de la funcin dtr:
' Calculate distance between two points
Function distance(sp As Variant, ep As Variant) As Double
Dim x As Double
Dim y As Double
Dim z As Double
x = sp(0) - ep(0)
y = sp(1) - ep(1)
z = sp(2) - ep(2)
distance = Sqr((Sqr((x ^ 2) + (y ^ 2)) ^ 2) + (z ^ 2))
End Function

Prctica 9

Pg: 6

Universitat Jaume I

Diseo y Fabricacin Asistido por Ordenador

Obtencin de los datos


Esta macro pregunta al usuario dnde desea dibujar el camino, su anchura, el tamao de las
baldosas de hormign y el intervalo entre ellas. Ahora va a definir una funcin que solicita esta
informacin al usuario y calcula varios nmeros para su uso en el resto de la macro.
En esta subrutina se van a utilizar los mtodos de introduccin de datos por parte del usuario que se
encuentran en el objeto Utility.
La siguiente subrutina utiliza varias variables globales. Todas las variables globales deben estar
declaradas para que la subrutina pueda acceder a ellas.
Declaracin de variables globales
En el IDE de VBA, escriba el cdigo siguiente en la ventana de cdigo, inmediatamente despus de la
lnea Const pi = 3.14159:
' Variables used to store garden path parameters
Private sp(0 To 2) As Double
Private ep(0 To 2) As Double
Private hwidth As Double
Private trad As Double
Private tspac As Double
Private pangle As Double
Private plength As Double
Private totalwidth As Double
Private angp90 As Double
Private angm90 As Double
Observe ahora las dos listas desplegables de la parte superior de la ventana Cdigo. Se trata de los
cuadros de lista Objeto y Procedimiento, que actualmente presentan, respectivamente, los trminos
(General) y (Declaraciones). Estas listas presentan la seccin actual del cdigo con el que se est
trabajando, y permiten pasar rpidamente a una seccin distinta con slo seleccionar un elemento de
la lista. La seccin (Declaraciones) es el lugar adecuado para declarar variables que se van a utilizar
en ms de una subrutina.
Observe la lnea Option Explicit que se encuentra en la parte superior de la seccin (Declaraciones).
Cuando aparece la instruccin Option Explicit en un mdulo es necesario declarar de forma explcita
las variables por medio de una instruccin 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 instruccin 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 confusin del cdigo en que no est claro el alcance de la variable.
Solicitud de datos de usuario
La subrutina gpuser solicita al usuario toda la informacin necesaria para la construccin del camino
de jardn. Aada las lneas de cdigo siguientes despus de la funcin 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

Prctica 9

Pg: 7

Universitat Jaume I

Diseo y Fabricacin Asistido por Ordenador

plength = distance(sp, ep)


angp90 = pangle + dtr(90)
angm90 = pangle - dtr(90)
End Sub
Acaba de definir una funcin llamada gpuser. No requiere argumentos y solicita al usuario que escriba
la informacin deseada. La lnea 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 seccin (Declaraciones) del cdigo.
La lnea siguiente, varRet = ThisDrawing.Utility.GetPoint( , "Start point of path: "), llama al mtodo
GetPoint. El guin bajo al final de una lnea indica a VBAIDE que contine leyendo la lnea siguiente
como si se tratara de la misma. Es innecesario. Se puede eliminar colocando todo el cdigo en una
lnea. No obstante, esto hace ms fciles de leer las lneas de cdigo largas.
Para acceder al mtodo GetPoint se debe pasar antes por el objeto ThisDrawing, que representa el
dibujo actual. Despus de ThisDrawing se coloca un punto (.), que significa que se va a acceder a
algo que se encuentra dentro de ese objeto. Despus 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 mtodo al que se est llamando.
El mtodo GetPoint tiene dos parmetros. El primero es opcional, y no se va a utilizar. Djelo en
blanco y coloque una coma para marcar su posicin. El segundo parmetro es la solicitud, que
tambin es opcional. Para este parmetro se ha introducido una cadena de caracteres que solicita al
usuario que introduzca el punto inicial. El punto que introduce el usuario se coloca en la variable
varRet. Las tres lneas siguientes de la subrutina copian el punto que devuelve el usuario en la matriz
sp. El punto final se devuelve de la misma forma.
El mtodo 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 mtodo GetDistance tiene dos parmetros. El
primero es un punto de base. Para este valor se proporciona el punto inicial. El segundo parmetro es
la solicitud, y tiene como valor una cadena que solicita al usuario que introduzca los datos adecuados.
El aspecto ms interesante del mtodo GetDistance es que puede devolver un valor introducido en la
lnea 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 ms 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
mtodo 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
funcin distance introducida antes. Por ltimo, se calcula y se guarda el ngulo del camino ms y
menos 90 grados en angp90 y angm90, respectivamente.
En la ilustracin se muestra cmo
las variables obtenidas por gpuser
especifican las dimensiones del
camino.

Prctica 9

Pg: 8

Universitat Jaume I

Diseo y Fabricacin Asistido por Ordenador

Trazado del contorno del camino


Ahora que ha obtenido la posicin y la anchura del camino, puede dibujar el contorno. Aada el
cdigo siguiente a continuacin de la subrutina gpuser:
' Draw outline of path
Private Sub drawout()
Dim points(0 To 9) As Double
Dim pline As AcadLWPolyline
Dim varRet As Variant
varRet = ThisDrawing.Utility.PolarPoint( sp, angm90, hwidth)
points(0) = varRet(0)
points(1) = varRet(1)
points(8) = varRet(0)
points(9) = varRet(1)
varRet = ThisDrawing.Utility.PolarPoint(varRet, pangle, plength)
points(2) = varRet(0)
points(3) = varRet(1)
varRet = ThisDrawing.Utility.PolarPoint(varRet, angp90, totalwidth)
points(4) = varRet(0)
points(5) = varRet(1)
varRet = ThisDrawing.Utility.PolarPoint(varRet, pangle + dtr(180), plength)
points(6) = varRet(0)
points(7) = varRet(1)
Set pline = ThisDrawing.ModelSpace.AddLightWeightPolyline(points)
End Sub
Esta subrutina dibuja el contorno del camino utilizando el mtodo AddLightweightPolyline. Este mtodo
tiene un parmetro: una matriz de puntos que componen la polilnea. Debe encontrar todos los puntos
que componen el objeto de polilnea y organizarlos en una matriz, en el mismo orden en que deban
trazarse. Para esta polilnea, los puntos que se necesitan son las esquinas del camino.
Para encontrarlas, utilice el mtodo PolarPoint. Este mtodo 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 rectngulo 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 mtodo PolarPoint se desplazan a las
posiciones primera y ltima de la matriz de puntos.
Las dems 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 mtodo 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 mtodo
AddLightweightPolyline. Observe que se llama a este mtodo desde el objeto ModelSpace. Si se
ejecutara esta macro tambin se observara que la polilnea no es an visible en AutoCAD. No ser
visible hasta que se actualice la presentacin, cosa que se har ms adelante.
Dibujo de las baldosas
Ahora que ha desarrollado y la subrutina de introduccin 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 geometra. En el IDE de VBA, escriba el cdigo siguiente en la ventana de cdigo, despus
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

Prctica 9

Pg: 9

Universitat Jaume I

Diseo y Fabricacin Asistido por Ordenador

Dim cir As AcadCircle


Dim varRet As Variant
varRet = ThisDrawing.Utility.PolarPoint(sp, pangle, pd)
pfirst(0) = varRet(0)
pfirst(1) = varRet(1)
pfirst(2) = varRet(2)
varRet = ThisDrawing.Utility.PolarPoint(pfirst, angp90, offset)
pctile(0) = varRet(0)
pctile(1) = varRet(1)
pctile(2) = varRet(2)
pltile(0) = pctile(0)
pltile(1) = pctile(1)
pltile(2) = pctile(2)
Do While distance(pfirst, pltile) < (hwidth - trad)
Set cir = ThisDrawing.ModelSpace.AddCircle(pltile, trad)
varRet = ThisDrawing.Utility.PolarPoint(pltile, angp90, (tspac + trad + trad))
pltile(0) = varRet(0)
pltile(1) = varRet(1)
pltile(2) = varRet(2)
Loop
varRet = ThisDrawing.Utility.PolarPoint(pctile, angm90, tspac + trad + trad)
pltile(0) = varRet(0)
pltile(1) = varRet(1)
pltile(2) = varRet(2)
Do While distance(pfirst, pltile) < (hwidth - trad)
Set cir = ThisDrawing.ModelSpace.AddCircle(pltile, trad)
varRet = ThisDrawing.Utility.PolarPoint(pltile, angm90, (tspac + trad + trad))
pltile(0) = varRet(0)
pltile(1) = varRet(1)
pltile(2) = varRet(2)
Loop
End Sub
' Draw the rows of tiles
Private Sub drawtiles()
Dim pdist As Double
Dim offset As Double
pdist = trad + tspac
offset = 0
Do While pdist <= (plength - trad)
drow pdist, offset
pdist = pdist + ((tspac + trad + trad) * Sin(dtr(60)))
If offset = 0 Then
offset = (tspac + trad + trad) * Cos(dtr(60))
Else
offset = 0
End If
Loop
End Sub
Para comprender el funcionamiento de estas
subrutinas, consulte la siguiente ilustracin. La
subrutina drow dibuja una fila de baldosas a lo
largo del camino, a la distancia especificada en su
primer argumento, desfasando la fila en sentido
perpendicular al camino segn la distancia indicada
por el segundo argumento. Las baldosas se
desfasan en filas alternas para cubrir ms espacio
y lograr un aspecto ms agradable.

Prctica 9

Pg: 10

Universitat Jaume I

Diseo y Fabricacin Asistido por Ordenador

La subrutina drow localiza la posicin de la primera fila utilizando el mtodo PolarPoint para
desplazarse por el camino la distancia indicada en el primer argumento. A continuacin, vuelve a
emplear PolarPoint para desplazarse en sentido perpendicular al camino a fin de obtener el desfase. A
continuacin, la subrutina utiliza la instruccin While para continuar dibujando crculos hasta llegar al
borde del camino. El mtodo PolarPoint de la primera instruccin While pasa a la posicin de la
siguiente baldosa, avanzando la distancia correspondiente al radio de dos baldosas (trad) y un
intervalo entre baldosas (tspac). A continuacin, un segundo bucle while dibuja las baldosas de la fila
de la otra direccin 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 tringulos equilteros, como se muestra en la figura anterior. Los lados de los
tringulos son iguales a dos veces el radio de la baldosa ms el intervalo entre ellas. Por tanto, segn
la trigonometra, 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 instruccin If se emplea en drawtiles para desfasar filas alternas. En este caso, si el desfase es
igual a cero, defnalo 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, defnalo en 0. Esto alterna el
desfase de las filas de la forma deseada. Guarde el archivo.
Creacin de una subrutina ejecutable gardenpath
En VBA, escriba el cdigo siguiente en la ventana Cdigo, despus de la subrutina drawtiles:
' Execute command, calling constituent functions
Sub gardenpath()
Dim sblip As Variant
Dim scmde As Variant
gpuser
sblip = ThisDrawing.GetVariable("blipmode")
scmde = ThisDrawing.GetVariable("cmdecho")
ThisDrawing.SetVariable "blipmode", 0
ThisDrawing.SetVariable "cmdecho", 0
drawout
drawtiles
ThisDrawing.SetVariable "blipmode", sblip
ThisDrawing.SetVariable "cmdecho", scmde
End Sub
La subrutina path llama a gpuser para obtener los datos necesarios. A continuacin se utiliza el mtodo
GetVariable para obtener los valores actuales de las variables de sistema BLIPMODE y CMDECHO y
estos valores se guardan como sblip y scmde. Despus, la subrutina utiliza el mtodo SetVariable para
asignar el valor 0 a estas variables de sistema, desactivando as las marcas auxiliares y la
reproduccin de comandos. A continuacin se dibuja el camino por medio de las subrutinas drawout y
drawtiles. Por ltimo se utiliza el mtodo 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 mdulo distinto al actual. Dado que la
subrutina gardenpath debe estar a disposicin del usuario, se debe omitir la palabra clave Private.
Comprobacin del cdigo
Ahora ejecute la macro recorriendo el cdigo paso a paso. En el men Herr. de AutoCAD, elija Macro
Macros. En el cuadro de dilogo Macros, seleccione ThisDrawing.gardenpath y pulse el botn Entrar.
El entorno de desarrollo de VBA aparece en primer plano, con la primera lnea de la macro
gardenpath resaltada. Se trata de la lnea de cdigo que se va a ejecutar en primer lugar. Para
ejecutarla, pulse F8. La siguiente lnea de cdigo que se va a ejecutar es la subrutina gpuser. Para
pasar a la subrutina gpuser vuelva a pulsar F8.

Prctica 9

Pg: 11

Universitat Jaume I

Diseo y Fabricacin Asistido por Ordenador

Ahora se encuentra al principio de la rutina gpuser. Si pulsa de nuevo F8 resaltar el primer mtodo
GetPoint. Antes de ejecutar esta lnea, 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 mtodo GetPoint. Observar que desaparece el texto resaltado y no
se presenta ms cdigo. Esto se debe a que el mtodo 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 lnea de comando. Indique un punto.
El control vuelve a la macro. Regrese al entorno de desarrollo de VBA. Ahora ver que la lnea
siguiente a la llamada a GetPoint est resaltada. Siga recorriendo el cdigo, pulsando F8. Recuerde
volver a la ventana de AutoCAD cuando deba introducir informacin.
Ejecucin de la macro
No es necesario recorrer el cdigo 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
ejecucin tal y como se presentar ante el usuario. Ejecute la macro desde AutoCAD e introduzca los
siguientes valores:
Herramientas Macros Ejecutar: ThisDrawing.gardenpath
Punto inicial del camino: 2, 2
Punto final del camino: 9, 8
Mitad de la anchura del camino: 2
Radio de las baldosas: .2
Intervalo entre las baldosas: .1
En este ejemplo se debe dibujar un camino de jardn como se
muestra en la figura. Puede experimentar con la macro
gardenpath introduciendo los distintos valores por medio del
ratn y el teclado.

Adicin de una interfaz de cuadro de dilogo


El entorno de desarrollo integrado de VBA se puede utilizar para aadir cuadros de dilogo a la macro
de VBA. La macro gardenpath acepta entradas en la lnea de comando. Es muy fcil aadir una
interfaz de cuadro de dilogo a esta macro. Los cuadros de dilogo 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 aadir algunas
caractersticas adicionales. Una de ellas es una funcin que permite a los usuarios especificar la
forma de las baldosas del camino.
Empiece por copiar la versin completa de gardenpath.dvb en otro archivo, gpdialog.dvb.
1. Guarde el proyecto actual en el entorno de VBA.
2. Con Guardar como de VBA, guarde el proyecto con el nombre gpdialog.dvb.
Creacin del cuadro de dilogo
Los cuadros de dilogo se crean en VBA por medio de formularios. El cuadro de dilogo que va a
crear contendr dos casillas de opcin (si se selecciona una, se anula la seleccin de la otra) para
elegir la forma de las baldosas: crculo o polgono. Tambin contendr tres casillas de edicin para la
introduccin de los siguientes valores numricos: el radio de las baldosas, el intervalo entre las
baldosas y el nmero de lados (ste ltimo slo estar disponible si se selecciona el botn de opcin
Polygon).

Prctica 9

Pg: 12

Universitat Jaume I

Diseo y Fabricacin Asistido por Ordenador

Para crear un cuadro de dilogo desde el entorno de desarrollo de VBA:


1- Abra un formulario nuevo, seleccionando en el men Insertar la opcin UserForm. Este comando
abre dos ventanas. La primera es un cuadro de herramientas que contiene todos los controles
disponibles para la creacin del cuadro de dilogo. La segunda es un formulario en blanco en el que
se pueden colocar los controles de la forma deseada.
2- Seleccione uno a uno los siguientes controles del cuadro de herramientas y arrstrelos al
formulario. Debe colocar dos botones de opcin ( ), tres etiquetas ( ), tres cuadros de texto ( ) y
dos botones de comando ( ), como se muestra en la siguiente ilustracin:

3- Cierre el cuadro de herramientas.


Para definir las propiedades de los controles de los botones de opcin
1- En el formulario, seleccione el control OptionButton1. En la ventana Propiedades, cambie las
siguientes propiedades de OptionButton1: (si esta ventana no est abierta, use Ver Ventana
Propiedades):
(Name) = gp_poly
Caption = Polygon
ControlTipText = Polygon Tile Shape
Accelerator = P
2- En el formulario, seleccione el control OptionButton2. En la ventana Propiedades, cambie las
siguientes propiedades de OptionButton2:
(Name) = gp_circ
Caption = Circle
ControlTipText = Circle Tile Shape
Accelerator = I
Para definir las propiedades de los controles de etiqueta
1- En el formulario, seleccione el control Label1. En la ventana Propiedades, cambie las siguientes
propiedades de Label1:
(Name) = label_trad
Caption = Radius of tiles
TabStop = True
2- En el formulario, seleccione el control Label2. En la ventana Propiedades, cambie las siguientes
propiedades de Label2:
(Name) = label_tspac
Caption = Space between tiles
TabStop = True
3- En el formulario, seleccione el control Label3. En la ventana Propiedades, cambie las siguientes
propiedades de Label3:
(Name) = label_tsides
Caption = Number of sides
TabStop = True

Prctica 9

Pg: 13

Universitat Jaume I

Diseo y Fabricacin Asistido por Ordenador

Para definir las propiedades de los controles de los cuadros de edicin de texto
1- En el formulario, seleccione el control TextBox1. En la ventana Propiedades, cambie las siguientes
propiedades de TextBox1:
(Name) = gp_trad
2- En el formulario, seleccione el control TextBox2. En la ventana Propiedades, cambie las siguientes
propiedades de TextBox2:
(Name) = gp_tspac
3- En el formulario, seleccione el control TextBox3. En la ventana Propiedades, cambie las siguientes
propiedades de TextBox3:
(Name) = gp_tsides
Para definir las propiedades de los botones de comando y de la ventana de formulario
1- En el formulario, seleccione el control CommandButton1. En la ventana Propiedades, cambie las
siguientes propiedades de CommandButton1:
(Name) = accept
Caption = Aceptar
ControlTipText = Accept the options
Accelerator = O
Default = True
2- En el formulario, seleccione el control CommandButton2. En la ventana Propiedades, cambie las
siguientes propiedades de CommandButton2:
(Name) = cancel
Caption = Cancel
ControlTipText = Cancel the operation
Accelerator = C
3- En la ventana del formulario, seleccione el objeto UserForm1
haciendo clic en el fondo del formulario, fuera de los controles. En
la ventana Propiedades, cambie la siguiente propiedad de
UserForm1:
(Name) = gpDialog
Caption = Garden Path
El formulario deber presentar este aspecto.

Uso de la ventana Proyecto para desplazarse por el proyecto


Dedique un momento a orientarse en el entorno actual. Observe la ventana Proyecto del IDE de VBA.
Puede ver el nombre y la posicin del proyecto, una carpeta llamada AutoCAD Objetos y otra llamada
Formularios. Si abre la carpeta AutoCAD Objetos ver el icono de dibujo de AutoCAD y el nombre
ThisDrawing. Si abre la carpeta Formularios ver un icono de formulario con el nombre gpDialog. ste
es el formulario que acaba de crear.
Para ver el cdigo asociado al formulario, resalte
gpDialog en la ventana Proyecto del IDE de VBA.
En la ventana Proyecto, haga clic en el botn Ver
cdigo ( ) o pulse F7. Se abre la ventana de
cdigo del formulario. Dado que an no ha escrito
ningn cdigo para el formulario, esta ventana
est en blanco. Puede volver a presentar el
formulario haciendo clic en el botn Ver objeto de
la ventana Proyecto o pulsando MAYUS+F7.
Ahora, resalte ThisDrawing en la ventana Proyecto. De nuevo, puede mostrar el cdigo pulsando el
botn Ver cdigo. En esta ventana aparece todo el cdigo que ya se ha introducido. La ventana
Proyecto sirve para recorrer el cdigo e identificar dnde se est trabajando en la actualidad.

Prctica 9

Pg: 14

Universitat Jaume I

Diseo y Fabricacin Asistido por Ordenador

Actualizacin del cdigo ya escrito


Ahora que ha creado un cuadro de dilogo puede introducir el cdigo que lo haga funcionar, pero
antes debe actualizar el cdigo que ya ha introducido. El cdigo de ThisDrawing debe estar abierto.
Actualizacin de variables globales para utilizarlas en un cuadro de dilogo
Actualice o aada las lneas siguientes de la seccin (Declaraciones):
Public trad As Double
' Updated
Public tspac As Double ' Updated
Public tsides As Integer ' Add
Public tshape As String ' Add
De este modo, las definiciones de variable de trad y tspac se hacen pblicas en vez de privadas. Las
variables privadas slo estn disponibles dentro del mdulo en el que estn definidas. Esto era lo
conveniente antes, pero ahora el cdigo del formulario necesita acceder a estas variables, por lo que
se deben hacer pblicas. Adems se han aadido dos nuevas variables, tsides y tshape. Estas
variables contienen el nmero de lados de las baldosas poligonales y la forma de baldosa elegida por
el usuario: crculo o polgono.
Actualizacin de la subrutina gpuser para utilizarla en un cuadro de dilogo
Vaya a la subrutina gpuser. Elimine las dos lneas que obtienen el radio de las baldosas y el intervalo
entre baldosas. Esta informacin va a proceder del formulario. Suprimir
trad = ThisDrawing.Utility.GetDistance(sp, "Radius of tiles: ")
tspac = ThisDrawing.Utility.GetDistance(sp, "Spacing between tiles: ")
Aada las lneas que cargan y muestran el formulario. Aada las siguientes lneas en el lugar de las
que ha eliminado arriba:
Load gpDialog
gpDialog.Show
La nueva subrutina gpuser presenta el siguiente aspecto:
' 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: ")
Load GPDialog
GPDialog.Show
pangle = ThisDrawing.Utility.AngleFromXAxis(sp, ep)
totalwidth = 2 * hwidth
plength = distance(sp, ep)
angp90 = pangle + dtr(90)
angm90 = pangle - dtr(90)
End Sub
A continuacin debe aadir una subrutina que dibuje las baldosas circulares o poligonales. Aada las
siguientes lneas al final del archivo de cdigo:
'Draw the tile with the designated shape
Sub DrawShape(pltile)
Dim angleSegment As Double
Dim currentAngle As Double
Dim angleInRadians As Double

Prctica 9

Pg: 15

Universitat Jaume I

Diseo y Fabricacin Asistido por Ordenador

Dim currentSide As Integer


Dim varRet As Variant
Dim aCircle As AcadCircle
Dim aPolygon As AcadLWPolyline
ReDim points(1 To tsides * 2) As Double
'Branch based on the type of shape to draw
Select Case tshape
Case "Circle"
Set aCircle = ThisDrawing.ModelSpace.AddCircle(pltile, trad)
Case "Polygon"
angleSegment = 360 / tsides
currentAngle = 0
For currentSide = 0 To (tsides - 1)
angleInRadians = dtr(currentAngle)
varRet = ThisDrawing.Utility.PolarPoint(pltile,angleInRadians, trad)
points((currentSide * 2) + 1) = varRet(0)
points((currentSide * 2) + 2) = varRet(1)
currentAngle = currentAngle + angleSegment
Next currentSide
Set aPolygon = ThisDrawing.ModelSpace.AddLightWeightPolyline(points)
aPolygon.Closed = True
End Select
End Sub
Esta subrutina utiliza una instruccin Select Case para asignar el control del programa segn el tipo
de forma que se va a dibujar. La variable tshape se utiliza para determinar el tipo de forma.
Actualizacin de la subrutina drow para dibujar una baldosa con la forma adecuada
A continuacin, vaya a la subrutina drow. En los dos lugares en los que aparece la siguiente lnea:
Set cir = ThisDrawing.ModelSpace.AddCircle(pltile, trad)
Actualice estas lneas para asignarles el siguiente texto:
DrawShape (pltile)
' Updated
Adicin de cdigo al cuadro de dilogo
Ahora debe quitar el cdigo de creacin de baldosas circulares y llamar a la subrutina DrawShape
para dibujar la forma adecuada.
Adicin de controladores de eventos a los botones de opcin
Abra la ventana Cdigo de gpDialog. Aada las lneas de cdigo siguientes despus de la instruccin
Option Explicit:
Private Sub gp_poly_Click()
gp_tsides.Enabled = True
ThisDrawing.tshape = "Polygon"
End Sub
Private Sub gp_circ_Click()
gp_tsides.Enabled = False
ThisDrawing.tshape = "Circle"
End Sub
Observe que las subrutinas, gp_poly_Click() y gp_circ_Click() se basan en el nombre de los dos
controles de opcin que se crearon antes, aunque se les ha aadido "_Click". Estas subrutinas son
especiales, porque se ejecutan automticamente 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 Cdigo. Abra el
cuadro Objeto y observe la lista desplegable. Ver una lista de todos los controles aadidos al
formulario, ordenados por orden alfabtico segn su propiedad Name.

Prctica 9

Pg: 16

Universitat Jaume I

Diseo y Fabricacin Asistido por Ordenador

A continuacin, coloque el cursor en la lnea Private Sub gp_poly_Click() y abra el cuadro


Procedimiento. Ver una lista de todos los procedimientos y eventos que se pueden asignar al control
de opcin gp_poly. Las dos subrutinas agregadas hace un momento responden al evento Click.
Tambin se puede aadir cdigo que responda al procedimiento de evento DblClick, ejecutndose
automticamente cuando el usuario haga doble clic en el control. Se puede aadir cdigo para
cualquiera de los eventos de la lista. Estas subrutinas son los controladores de eventos.
Observe el cdigo introducido para estos dos controladores de eventos. El primero de ellos responde
al evento Click del control gp_poly de casilla de opcin. La primera lnea de cdigo activa el cuadro de
texto correspondiente al nmero de lados. Este cuadro de texto slo est disponible para los
polgonos, por lo que se activa nicamente si se selecciona el control Polygon. La siguiente lnea de
cdigo establece la variable tshape en Polygon.
El segundo controlador de eventos responde al evento Click del control gp_circ de casilla de opcin.
Este controlador desactiva el cuadro de edicin de texto correspondiente al nmero de lados y
establece la variable tshape en Circle.
Adicin de controladores de eventos para el botn Aceptar
Ahora, aada el siguiente controlador de eventos para el botn Aceptar:
Private Sub accept_Click()
If ThisDrawing.tshape = "Polygon" Then
ThisDrawing.tsides = CInt(gp_tsides.text)
If (ThisDrawing.tsides < 3#) Or (ThisDrawing.tsides > 1024#) Then
MsgBox "Enter a value between 3 and " & "1024 for the number of sides."
Exit Sub
End If
End If
ThisDrawing.trad = CDbl(gp_trad.text)
ThisDrawing.tspac = CDbl(gp_tspac.text)
If ThisDrawing.trad < 0# Then
MsgBox "Enter a positive value for the radius."
Exit Sub
End If
If (ThisDrawing.tspac < 0#) Then
MsgBox "Enter a positive value for the spacing."
Exit Sub
End If
GPDialog.Hide
End Sub
Aqu es donde se efecta 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 nmero de lados del
polgono 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 funcin CInt de Visual Basic. Despus 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 botn Aceptar el
controlador de sucesos vuelve a comprobar el valor.

Prctica 9

Pg: 17

Universitat Jaume I

Diseo y Fabricacin 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 funcin CDbl. Tambin se verifican estos valores
para comprobar que son positivos.
Despus de obtener y verificar los valores, la instruccin gpDialog.Hide oculta el formulario y
devuelve el control a la subrutina que lo abri.
Adicin de controladores de eventos para el botn Cancelar
Ahora, aada el siguiente controlador de eventos para el botn Cancelar:
Private Sub cancel_Click()
Unload Me
End
End Sub
Este sencillo controlador de eventos descarga el formulario y pone fin a la macro.
Lo nico que queda por hacer es aadir los valores iniciales del formulario. Existe un evento llamado
Initialize aplicable al formulario. Se ejecuta cuando se carga el formulario.
Adicin de controladores de eventos para la inicializacin del formulario:
Aada el siguiente controlador de eventos para la inicializacin del formulario:
Private Sub UserForm_Initialize()
gp_circ.Value = True
gp_trad.Text = ".2"
gp_tspac.Text = ".1"
gp_tsides.Text = "5"
gp_tsides.Enabled = False
ThisDrawing.tsides = 5
End Sub
Este cdigo establece los valores iniciales del formulario y de la variable tsides. El valor de tsides
debe ser un nmero positivo mayor de 3, incluso si el usuario selecciona un crculo. Para entender
esto, observe la subrutina DrawShape introducida anteriormente. En ella hay una variable llamada
points que se define a partir del nmero de lados del polgono. 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
vlido para tsides. El usuario puede modificarlo a voluntad durante la ejecucin de la macro.
Ahora puede ejecutar la macro.

Prctica 9

Pg: 18

También podría gustarte