Está en la página 1de 37

MÓDULO DOCE

Programación en Visual Basic orientada a AutoCAD 14 (VBA)
DOCE.1. INTRODUCCIÓN
En este MÓDULO vamos a estudiar una nueva característica muy importante a la hora de realizar programas para AutoCAD 14, la cual es la programación en Visual Basic. AutoCAD 14proporciona una nueva interfaz de desarrollo en Visual Basic, uno de los lenguajes de programación más potentes que existen y que se está convirtiendo en un estándar a la hora de realizar programas en entorno Windows. Si el desarrollador dispone de una versión de Visual Basic instalada en su ordenador podrá crear programas en este leguaje que, tras compilarlos, podrán correr bajo AutoCAD, siempre que sigan una normas básicas para manejar los objetos del programa. Sin embargo esto no es imprescindible, ya que el propio AutoCAD 14 implementa un módulo VBA (Visual Basic for Aplications), el cual dispone de la sintaxis completa del leguaje (en su versión 5.0), un depurador y un entorno de desarrollo integrado. De esta forma es totalmente factible crear un programa e irlo probando mientras se va depurando en una sesión de AutoCAD. El objetivo de este MÓDULO no es explicar a fondo el lenguaje de programación Visual Basic, ya que para ello se necesitaría como mínimo un curso completo, y existen muchos y muy buenos; por ello, eso escapa a las pretensiones de este curso. Al lector se le suponen ya unos conocimientos medios o avanzados de programación en dicho lenguaje y simplemente habrá de actualizarse al manejo de los objetos incluidos en AutoCAD 14 para Visual Basic.

DOCE.2. Visual Basic Y ActiveX Automation
Visual Basic es la desembocadura de lo que en un principio se llamó lenguaje BASIC (Beginner's All-purpose Symbolic Instruction Code, algo así como código de instrucción simbólica para todo propósito del principiante), que fue diseñado para iniciados en EE.UU. en 1964. Fue una derivación del lenguaje FORTRAN que se caracterizaba por su sencillez de manejo y curva de aprendizaje. Microsoft a lo largo de su historia ha venido proporcionando una serie de editores BASIC cuyos más altos exponentes sin duda fueron GWBASIC y, sobre todo, QuickBASIC. Cuando apareció Windows como entorno las cosas comenzaron a cambiar: aparecen los lenguajes visuales. La programación visual, conocida como

orientada a objetos y conducida por eventos, permite desarrollar aplicaciones para Windows de una manera sencilla e intuitiva. Visual Basic, a lo largo de su historia, ha ido creciendo en importancia y potencia, llegando en muchos momentos a no tener nada que envidiar a su más temible competidor, probablemente el lenguaje visual más potente que existe: Visual C++. Hoy en día, esta programación orientada a objetos se sirve de una de las últimas tecnologías de programación, esto es ActiveX Automation. La tecnología ActiveX, presente en las últimas versiones de Windows, supera con creces al sistema anterior OLE, proporcionando una interfaz de programación que permite manejar los objetos de una aplicación desde fuera de la misma. La intercomunicación ahora entre aplicaciones que manejen objetos ActiveX es total: nosotros seremos capaces desde un programa en Visual Basic de abrir una sesión de AutoCAD, añadir una serie de líneas a modo de tabla y, a continuación abrir una sesión en Excel, por ejemplo, para leer determinados datos, operar con ellos y volver a AutoCAD para añadir los datos a la tabla. Y todo esto mediante letreros de diálogo, botones y demás componentes típicos y sencillos de manejar de Microsoft Windows. Los objetos propios de una aplicación son así expuestos a las demás aplicaciones como objetos Automation. En AutoCAD 14 son objetos Automation todos los objetos de dibujo, las denominadas tablas de símbolos como bloques, capas, estilos de cota, etc. y también las Preferencias. Las aplicaciones que proporcionan un entorno de programación en el que los desarrolladores o usuarios pueden escribir macros y rutinas para acceder y controlar objetos ActiveX se denominan controladores de Automation. Estos controladores pueden ser aplicaciones de Windows como Word y Excel, o entornos de programación como Visual Basic o Visual C++. Los objetos ActiveX exponen para su control dos conceptos específicos: métodos y propiedades. Los métodos son funciones que ejercen una acción sobre los objetos. Las propiedades son funciones que definen o devuelven información sobre el estado de un objeto. Las propiedades y métodos dependen de cada tipo de objeto y se describen a través de una biblioteca de tipos. Los desarrolladores o usuarios tienen a su disposición un examinador de biblioteca de tipos, para saber en todo momento los métodos y propiedades existentes. AutoCAD 14 dispone de sus propios objetos ActiveX para ser manejados desde un programa. La biblioteca de tipos donde se encuentran definidos los métodos y propiedades a través de los cuales expone AutoCAD sus objetos Automation se encuentra en el archivo ACAD.TLB. Las referencias se establecen desde el editor de VBA, desde el menú Herramientas>Referencias..., activando la casilla AutoCAD Object Library. Los objetos de una aplicación pueden usarse sin hacer referencia a la biblioteca de objetos, pero es preferible añadir dicha referencia por motivos de facilidad, fiabilidad y comprobación. Es posible acceder a objetos Automation desde muchas aplicaciones de Windows. Estas aplicaciones pueden ser ejecutables independientes, archivos de bibliotecas de enlace dinámico.DLL y macros dentro de aplicaciones como Word y Excel. Mediante Automation resulta muy sencillo desarrollar y mantener una interfaz gráfica de usuario. La interfaz puede ir desde un solo cuadro de diálogo o una barra de herramientas que mejore una aplicación existente, hasta una aplicación propia completa.

DOCE.2.1. La línea de productos de Visual Basic
El lenguaje de programación Visual Basic como tal está dividido en diferentes productos que el usuario adquiere según sus propias necesidades. En líneas generales podemos dividir estos productos en tres grandes grupos: — Visual Basic. Es la herramienta de más alto nivel dentro de la gama. Posee todas las características del leguaje y está dividida en cuatro ediciones: Creación de Controles (Control Creation), que permite únicamente —que no es poco— el desarrollo de controles ActiveX, por lo que no permite la creación de aplicaciones autónomas; Estándar (Learning), con acceso de alta velocidad a bases de datos y que ya sirve para el desarrollo de aplicaciones; Profesional (Professional), con herramientas avanzadas para el diseño de aplicaciones profesionales; y Empresarial (Enterprise), con todas las herramientas disponibles para desarrolladores e investigadores. — VBA (Visual Basic for Applications). Es una herramienta menos avanzada que la anterior y diseñada para ser implementada en las distintas aplicaciones Windows y poder desarrollar programas para ellas. Incluye importantes implementaciones para macros y guiones, la casi completa sintaxis de programación Visual Basic, un depurador y un entorno de desarrollo integrado. Es la incluida en AutoCAD 14. — VBScript (Visual Basic Scripting Edition). Es la herramienta de inferior nivel. Contiene un subconjunto del lenguaje Visual Basic, pero sin acceso a sistema operativo ni a operaciones de entrada y salida de archivos. Se ha concebido fundamentalmente como herramienta de diseñoscript para páginas Web de Internet en HTML (al estilo de JavaScript).

DOCE.3. EL MÓDULO VBA DE AutoCAD 14
Como ya se ha comentado, AutoCAD 14 proporciona un módulo VBA que es una versión preview, sin embargo podríamos decir que funciona completamente bien (en la versión 14.01 de AutoCADya se da una versión final del editor VBA). Este módulo no se instala en la instalación general del programa, sino que hay que hacerlo después de ella. Para este menester deberemos acudir al directorio \VBAINST\ del CD-ROM de instalación de AutoCAD 14, y ejecutar el archivoSETUP.EXE, que instalará el módulo VBA. Una vez instalado, y tras quizá reiniciar el equipo mejor, aparecerá un nuevo menú desplegable enAutoCAD denominado VBA (entre Herr. y Dibujo). Este menú dispone de las siguientes opciones:  Run Macro (ejecutar macro) ejecuta una macro o rutina. Debe haberse cargado previamente algún proyecto con la opción siguiente. El comando en línea de comandos es VBARUN.

si bien existen ausencias —sobre todo— en VBA con respecto a Visual Basic. Load Project (cargar proyecto) permite cargar un nuevo proyecto (.. COMENZANDO CON VBA Lo primero que quizá nos haya llamado la atención es la entrada por defecto que aparece en el Explorador de proyectos: ThisDrawing. dentro de una carpeta llamada AutoCAD Objetos. Al cargar un proyecto existente. El Cuadro de herramientas no aparece por ningún lado. de compilar proyectos o de abrir proyectos. ya que siempre que hagamos algo será evidentemente referenciado y ejecutado en el documento actual activo.  Unload Project (descargar proyecto) descarga un proyecto previamente cargado. Dado que.. AutoCAD muestra el editor VBA con el contenido del proyecto (formularios. módulos de código. En general la estructura de menús y barra de herramientas es muy parecida.. Antes de comenzar a programar tenemos que asegurarnos —para evitarnos problemas posteriores— que la referencia a la librería de objetos de AutoCAD 14 (ACAD. NOTA: En la versión 14. por defecto el Explorador de proyectos y la Ventana de Propiedades aparecen anclados a la izquierda. y no puede ser eliminado. y sólo desde ahí. por lo que no debemos preocuparnos si dominamos Visual Basic y creemos no sentirnos a gusto en VBA. entre otras. El objeto ThisDrawing se refiere al documento actual activo de AutoCAD.  Show VBA IDE (mostrar editor VBA) permite mostrar el editor de VBA. El comando en línea de comandos es VBAIDE. llamadoMacro. y no a la derecha.4.TLB) está activada. En principio. Para ello acudiremos al menús Herramientas>Referencias. Decir que el módulo VBA únicamente puede ser abierto desde una sesión de AutoCAD. se suponen conocimientos previos por parte del lector.. A él nos referiremos a la hora de gestionar objetos de AutoCAD. DOCE..DVB). El comando en línea de comandos es VBALOAD. y no independientemente. si es que estamos familiarizados con él. Esto último se realiza desde el menú desplegable de AutoCAD. Todas la nuevas características se irán aprendiendo a lo largo de este MÓDULO. como por ejemplo la capacidad de incluir formularios MDI. El comando en línea de comandos es VBAUNLOAD.01 de AutoCAD se añade un menú de persiana al menú Herr. El módulo VBA de AutoCAD 14 es ligeramente distinto al entorno Visual Basic habitual.). ya que sólo se pone de manifiesto cuando estamos trabajando con un formulario. nos meteremos de lleno ya mismo con la programación exclusivamente dirigida a AutoCAD 14. como hemos dicho. .

4. comprimido en formato ZIP aquí --> PLANTILLA.. de estilos de texto. al igual que los demás. el Espacio Papel y los bloques. capa. límites. En AutoCADnormalmente trabajaremos con un único formulario (cuadro de diálogo) al estilo DCL + AutoLISP que realizará determinada función. regenerar. además de otras colecciones como el conjunto de capas.) y métodos (copiar. Estos objetos tienen sus propiedades y métodos. .). Empezar un programa El primer paso que vamos a dar al realizar un programa en VBA será casi siempre el mismo. y sus métodos para. Y todo ello está incluido en el objeto más exterior. Dentro de él se encuentran los mencionados anteriormente.. Lo que se ha hecho en VBA es precisamente eso. Estos se consideran una colección de objetos de entidades individuales de dibujo y tienen también sus propiedades para. DOCE. El propio documento actual de AutoCAD está definido como un objeto y tiene sus propiedades (camino de acceso. saber cuántas entidades simples contienen. círculos.. arcos. ya que establece dicha jerarquía.DWG). y muchísimo menos los módulos de clase..4. La plantilla de objetos Los objetos ActiveX que proporciona AutoCAD 14 para su manejo desde programas VBA están divididos según una jerarquía que deberemos seguir a la hora de llamarlos o referirnos a ellos... DOCE. La plantilla que muestra toda la jerarquía se proporciona en el archivo siguiente para AutoCAD 14(PLANTILLA. ya que hay gente que utiliza bastante los módulos de código y otra gente que incluye todo el código en el propio formulario. mover.) y métodos (guardar. escalar). También se han definido otros objetos no gráficos como son el Espacio Modelo..ZIP.) con sus propiedades (color. En Visual Basic es factible añadir al entorno nuevos objetos creados por nosotros para luego ser utilizados.2. por ejemplo. que es la aplicación de AutoCAD. y se refiere a la declaración de las variables de objeto que serán necesarias para acceder a los distintos aspectos de AutoCAD. por ejemplo. tipo de línea.. Es por ello que se utilizarán muy poco los módulos de código (excepto para macros). Existen objetos de entidades individuales de dibujo (líneas. etcétera.La forma de programar en Visual Basic es muy personal.1. La plantilla que se muestra a continuación nos será muy útil a la hora de programar. A los programadores avanzados les puede ser muy interesante el disponer de estas características en VBA. cada una con propiedades y métodos. añadir nuevas entidades a la colección.

Pero parece lógico utilizar. son objetos que hemos de definir en un principio para luego poder referirnos a ellos a lo largo del programa fácilmente. No se incluye el camino por encontrarse el archivo ACAD. entre otros. para añadir valores a variables del tipo Object.PaperSpace NOTA: Como sabemos.Según la plantilla de la página anterior. así por ejemplo. Las líneas restantes hacen referencia a los demás objetos que. El documento activo (ActiveDocument) cuelga directamente de la aplicación AutoCAD.Application") AcadApp. como se ve. la coma necesaria de la función GetObject que separa los dos parámetros es imprescindible incluirla. Esta jerarquía la podemos apreciar perfectamente en la plantilla anteriormente expuesta. "AutoCAD. la primera línea es la que realmente hace referencia a la librería o biblioteca de objetos de AutoCAD. esto es.ModelSpace = AcadDoc. Esta asignación de objetos no es necesaria realizarla.ActiveDocument = AcadDoc. . el documento activo. Como vemos. la propia aplicación AutoCAD. Sin embargo. la aplicación en sí la podríamos declarar así (enGeneral_Declaraciones): AcadApp as Object el documento activo: AcadDoc as Object y el Espacio Modelo y Papel: AcadModel as Object y AcadPapel as Object Esto en sí no tiene mucho sentido hasta que no le demos unos valores coherentes. que utilizar la secuencia entera hasta ModelSpace. un nombre de variable comoAcadModel cada vez que nos tengamos que referirnos al Espacio Papel (que serán muchas veces).TLB en el directorio principal de instalación de AutoCAD. Como objetos que son los declararemos como tales. y tanto el Espacio Modelo (ModelSpace) como el Espacio Papel (PaperSpace) del documento actual. ya que habrán de tomar valores al iniciar el programa. por estar en directorio de archivos de soporte. por ejemplo. así: Set Set Set Set AcadApp = AcadDoc = AcadModel AcadPapel GetObject(. no es una macro). ya que podemos referirnos a ellos con toda la secuencia de nombres. cuelgan todos del primero. el Espacio Modelo o el Espacio Papel. Para ello utilizaremos el procedimiento UserForm_Initialize (si nuestro programa dispone de formulario. es necesario utilizar la instrucción Set.

La manera de dibujar entidades dice relación a métodos que pertenecen a las colecciones de Espacio Modelo. A la hora de añadir un círculo. que utilizaremos el documento actual activo y. su Espacio Modelo. que será referenciado como ActiveDocument. Para que esta función responda adecuadamente es necesario queAutoCAD esté cargado y con un dibujo abierto (en la versión 14 no es posible cerrar un dibujo). que engloba a todo el modelo de objetos. por ejemplo compilarlo (que ya lo veremos). en nuestro caso a AutoCAD. métodos. por ejemplo. los textos en cursiva son mnemotécnicos que han de ser sustituidos por su valor. las sintaxis en colores: métodos en azul y propiedades en verde. En el momento en que queramos abrir nuestro programa en un entorno Visual Basic externo para.Application. los textos no en cursiva deben escribirse coma tales. si no nunca funcionará. Espacio Papel y bloques (como se ve en la plantilla de objetos). Dibujo y representación de entidades A continuación. Es por ello que es mejor acostumbrarse a esta técnica mucho más versátil y elegante. DOCE. Líneas NOTA IMPORTANTE DE SINTAXIS: La sintaxis que se utiliza en este MÓDULO es similar a la deMÓDULOS anteriores: instrucciones. propiedades y demás términos reservados como aparecen en el editor VBA una vez aceptados. bajo esta sección. Estas colecciones también tienen propiedades. cuya finalidad consiste en devolver una referencia al objeto que se le solicita. sobre todo si trabajamos con un Visual Basic externo o el archivo está ya compilado. estudiaremos los diferentes métodos que tenemos de añadir entidades individuales de dibujo mediante programas en VBA. Todo esto es necesario porque debemos decirle a VBA que vamos a trabajar con una aplicación denominada AutoCAD.5.1. DOCE.Además si trabajamos directamente en VBA podemos sustituir las llamadas al documento actual por ThisDrawing así: Set AcadDoc = ThisDrawing o incluso utilizar ThisDrawing posteriormente en las llamadas durante el programa. Se emplea en estas declaraciones la función GetObject. necesitaremos realizar las llamadas pertinentes a la librería de objetos. por ejemplo.5. El problema de esto reside en que sólo el VBA de AutoCAD sabe lo que es ThisDrawing. deberemos indicar que ha de ser al Espacio Modelo del documento actual de AutoCAD. pero eso lo veremos más adelante. en las listas las propiedades y métodos de objetos nuevos (sin . funciones.

Para ello deberemos definir un nombre de variable que almacenará el objeto. una barra vertical indica una dualidad de valores. La sintaxis del método AddLine para dibujar líneas es la que sigue: Set ObjLínea = ObjColección. Esta variable puede ser declarada como Object simplemente o como un objeto especial de VBA paraAutoCAD que representa el tipo de objeto que almacenará. DblPtoFinal) Propiedades de los objetos de línea: Application Color EndPoint EntityName EntityType Handle Layer Linetype LinetypeScale Normal ObjectID StartPoint Thickness Visible Métodos de los objetos de línea: ArrayPolar ArrayRectangular Copy Erase GetBoundingBox GetXData Highlight IntersectWith Mirror Mirror3D Move Offset Rotate Rotate3D ScaleEntity SetXData TransformBy Update Los objetos gráficos de dibujo hemos de declararlos previamente como tales. los listados de programas se muestran como aparecen en el editor. los ya explicados no.explicar) en negrita. Este objeto especial tiene diferentes nombres según el objeto que almacene. . su sintaxis podría definirse así: IAcadObjeto. es a lo que se refiere ObjLínea.AddLine(DblPtoInicial. primero la cadena fija IAcad y luego el nombre del objeto. es decir.

. una variable que tuviera que guardar una línea podría declararse como Object o como IAcadLine. La diferencia es que si la declaramos como Object podrá almacenar cualquier objeto a lo largo del programa: una línea. La macro se ejecutará sin necesidad de letrero de diálogo. Para ejecutar una macro podemos hacerlo desde el mismo cuadro de creación (eligiendo una) o desde el menú de AutoCAD VBA>Run Macro. Veremos casi al final de este MÓDULO que esto no es rigurosamente cierto.. han de ser guardadas en una variable de objeto. por lo tanto con Set. generalmente.Application").. o si formará parte de un bloque. cada uno de ellos de tipo Double. sino a veces hay problemas. si se dibujará en Espacio Modelo o Espacio Papel. un círculo. Es recomendable hacerlo con la primera opción (Object). un rayo.ActiveDocument Set AcadModel = AcadDoc. editar o ejecutar una existente). Y.ModelSpace PuntoInicial(1) = 100: PuntoInicial(2) = 100: PuntoInicial(3) = 0 PuntoFinal(1) = 200: PuntoFinal(2) = 200: PuntoFinal(3) = 0 . Las entidades de AutoCAD.De esta manera. para ser dibujadas desde VBA. Por ahora lo haremos así. Para realizar nuestra primera prueba de dibujo de una línea crearemos una macro que así lo haga. A continuación añadiremos las siguientes líneas de código: NOTA: Cuidado con lo que va tras General_Declaraciones (siempre hasta la primera línea de división) y el resto (en estos casos se muestra el nombre de procedimiento Sub en el encabezado). ObjColección se refiere a la colección donde se almacenará la línea.. y Z). pero sólo líneas. Una macro en VBA se crea y se añade automáticamente al módulo estándar de código existente si existe. Creemos pues una macro llamada DibujoLínea.. es decir. Tras pulsar el botón Crear se añadirá un nuevo procedimiento Sub al módulo de código existente (o se creará uno). si no existe se crea una nuevo. por lo tanto han de definirse como matrices (arrays o tablas) de tres elementos. Para crear un macro VBA lo haremos desde el menú Herramientas>Macros. esto último arranca un cuadro de diálogo que permite elegir el módulo estándar en cuestión donde se encuentra la macro y la macro por su nombre (en el caso de que hubiera varias dentro de un mismo módulo).. Dicho procedimiento tendrá el nombre de la macro. una o varias a lo largo de la ejecución. un texto.. Si la declaramos comoIAcadLine esa variable única y exclusivamente podrá almacenar entidades de línea de AutoCAD 14. Option Explicit Dim AcadDoc As Object Dim AcadModel As Object Dim ObjLínea As IAcadLine Dim PuntoInicial (1 To 3) As Double Dim PuntoFinal (1 To 3) As Double Sub DibujoLínea() Set AcadDoc = GetObject( .. Los puntos inicial y final de la línea (DblPtoInicial y DblPtoFinal) deben ser agrupaciones de tres coordenadas (X. Esto abre un cuadro que permite introducir un nombre para la nueva macro (también se puede eliminar."Autocad.

ya que estas propiedades son comunes a muchos otros objetos VBA. ObjGráfico sería la variable ObjLínea. PuntoFinal) End Sub NOTA: Como en la mayoría de los programas en Visual Basic se recomienda el uso de Option Explicit para depurar errores en tiempo de corrida. un signo de igual y el nuevo valor. es decir. como un objeto de línea de AutoCAD. la que contendrá la línea. únicamente deberíamos añadir la siguiente línea al programa (tras Set ObjLínea. dice relación a su posterior utilización para la aplicación de propiedades.AddLine(PuntoInicial. El color se representa como un número entero de 0 a 256 (colores de AutoCAD).): ObjLínea. Solo habremos de correr la macro por alguno de los métodos explicados para comprobar el resultado. seguido de un punto de separación. La sintaxis es: Set ObjAplicación = ObjGráfico. por lo que lo único que hacemos es cambiarle el valor como a cualquier otra propiedad en Visual Basic: indicando el objeto. pero se recomienda la sintaxis utilizada en el ejemplo para estos objetos. Obtiene y/o asigna el color de/a una entidad. NOTA: Existen los correspondientes objetos IAcadModelSpace e IAcadDocument. ya que dichas propiedades se relacionan directamente con sus objetos. La que representa al documento actual y la del Espacio Modelo. como a los puntos inicial y final. sin referirse a las líneas en sí. tras Option Explicit que nos obliga a declarar todas las variables utilizadas. como ya se había explicado. La ventaja que lleva implícita el almacenamiento en una variable de objeto de la entidad dibujada. Obtiene el objeto Application de la entidad. Algunas propiedades se tratan de otra forma. Se explican de manera ambigua. la propiedad.Color = 1 Color es una propiedad de la línea (véase en la lista tras la sintaxis). Este objeto representa la aplicación de AutoCAD. como matrices del tipo Double. Así de simple. es definir o declarar las variables que vamos a usar. y las del punto inicial y final de la línea.. En el cuerpo de la macro propiamente dicha se asigna su valor a cada variable. En el caso de nuestro ejemplo anterior de dibujo de una línea.  Color.Set ObjLínea = AcadModel. Así por ejemplo. Lo primero que hacemos en General_Declaraciones. tanto a las de la aplicación y el dibujo actual.. si tras trazar la línea del ejemplo anterior quisiéramos cambiarla al color rojo.  Application. También se pueden emplear algunas constantes predefinidas como: . A continuación se explican a fondo cada una de las propiedades de los objetos de línea.Application siendo ObjAplicación una variable definida como Object y ObjGráfico un objeto gráfico. Ahora no es necesario (como hacíamos en AutoLISP) acceder a la Base de Datos interna de AutoCAD para modificar las propiedades de un objeto. Por fin se utiliza el método explicado para dibujar la línea en el Espacio Modelo.

se lo hemos dado nosotros. Obtiene el punto final de un objeto arco. y si existe una instrucción Option Explicit. habremos de declarar la variableNúmeroColor como Integer. la sintaxis para obtener el punto final de los objetos mencionados es: VarPtoFinal = ObjGráfico. Si lo que deseamos es asignar un punto final (sólo para líneas) utilizaremos la siguiente sintaxis: ObjLínea. aunque esto no tiene mucho sentido (como con el color) porque ya sabemos su punto final. también puede asignarse. En nuestro caso anterior la línea estaba almacenada en ObjLínea (tipo IAcadLine). es decir una matriz de tres valores tipo Double. Si quisiéramos objeter su color y guardarlo en una variable denominada NúmeroColor habríamos de hacer.  EndPoint. elipse o línea y.EndPoint = DblPtoFinal donde ObjLínea es una variable tipo objeto que contiene una línea y DblPtoFinal es una variable que contiene un punto.Color Antes de esto.EndPoint siendo VarPtoFinal una variable que almacena un punto. NOTA: Recordemos que el color 0 es PorBloque y el color 256 PorCapa. en el caso de las líneas. Existe otra sintaxis para obtener el color de un objeto dibujado y guardado en una variable: IntNumColor = ObjGráfico.Color donde IntNumColor es ahora la variable (tipo Integer) que guardará el número de color yObjGráfico la variable (tipo Object) que almacena la línea. Así pues. Esta es la forma en que hemos cambiado el color a nuestra línea en el ejemplo. .Color = IntNumColor Siendo IntNumColor el número de color o alguna de las constantes.AcByBlock AcByLayer AcCyan AcRed AcBlue AcYellow AcMagenta AcGreen AcWhite La sintaxis para esta propiedad es ObjGráfico. por ejemplo: NúmeroColor = ObjLine. En el caso de nuestra línea podríamos haber obtenido su punto final así. Estas variables de punto siempre han de definirse como Variant.

Obtiene el tipo de entidad. Este nombre es el que la clase a la que pertenece el objeto.EntityName donde ObjNombre es una variable de tipo String que guardará el nombre del objeto.EntityName NombreLínea guardaría la cadena AcDbLine. Obtiene el nombre de un objeto. EntityName. Éste ha de ser guardado en una variable de tipoInteger así: IntNumTipo = ObjGráfico. Si en el ejemplo de nuestra línea. Cuando se pregunta por objetos de AutoCAD se puede emplear la siguiente propiedadEntityType. yObjGráfico es la variable que guarda el objeto. escribiríamos al final: NombreLínea = ObjLínea. y tras definir una variable llamada por ejemplo NombreLínea como String. La sintaxis de obtención de un nombre es: StrNombre = ObjGráfico.EntityType El número de tipo devuelto se corresponde con los expuestos en la siguiente tabla: Tipo de entidad 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 Descripción AcDB3DFace AcDB3DPolyLine AcDB3DSolid AcDBArc AcDBAttribute AcDBAttributeReference AcDBBlockReference AcDBCircle AcDBDimAligned AcDBDimAngular AcDBDimDiametric AcDBDimOrdinate AcDBDimRadial AcDBDimRotated AcDBEllipse AcDBGroup AcDBHatch AcDBLeader AcDBLine AcDBMText AcDBPoint AcDBPolyline AcDBPolylineLight . y no al código 0 que es el que utilizábamos nosotros para obtener el nombre de la entidad. En concreto se refiere al código 100 en la definición de la entidad en Base de Datos cuando accedíamos con AutoLISP.  EntityType. nombre de clase del objeto de entidad línea.

si existiera una capa llamada CUERPO en el dibujo actual y hubiésemos querido colocar o introducir dicha línea en esa capa.Layer = "Cuerpo" La sintaxis para obtener la capa de un objeto es: StrNomCapa = ObjGráfico. es decir una cadena alfanumérica. Si éste no . La sintaxis para asignar una capa a un objeto ya dibujado es: ObjGráfico. Obtiene el rótulo o código del objeto. Para asignar un tipo de línea: ObjGráfico. En nuestro ejemplo de la línea.Layer StrNomCapa habrá de ser una variable del tipo String. Permite obtener y/o asignar la capa de/a un objeto. Para evitar eso habría que crearla previamente con un método que veremos bastante más adelante. una sentencia de este tipo nos devolvería en código 19.  Linetype. Se trata de una cadena de texto que identifica el objeto durante toda la vida de ese objeto en el dibujo.Linetype = StrNombreTipoLínea siendo ObjGráfico el objeto en cuestión (como nuestra línea en ObjLínea) y StrNomTipoLíneauna cadena que especifica el nombre del tipo de línea. Para los demás casos es preferible usar Handle. habríamos hecho: ObjLínea. Si la capa no existe VBA proporciona un error de ejecución. mediante su ObjectID (visto más adelante).  Layer. Permite obtener y/o asignar un tipo de línea de/a una entidad de dibujo. Existe otra manera de identificar una entidad. Algunas funciones de ARX requieren unObjectID en lugar de Handle.24 25 26 27 28 29 30 31 32 33 34 35 AcDBPolyMesh AcDBPViewPort AcDBRaster AcDBRay AcDBRegion AcDBShape AcDBSolid AcDBSpline AcDBText AcDBTolerance AcDBTrace AcDBXLine En nuestro ejemplo. La sintaxis pues de esta propiedad es: StrRótulo = ObjGráfico.  Handle.Handle StrRotulo es una cadena (String).Layer = StrNombreCapa donde ObjGráfico es la variable que guarda el objeto y StrNomCapa una cadena de texto con el nombre de una capa existente.

En estos dos último casos sólo se puede obtener su valor. Para obtenerlo: LngNúmeroID = ObjGráfico. Para asignar un nuevo punto inicial a una línea la sintaxis es: . el número del código –1. Para asignar una normal: ObjGráfico.está cargado se producirá un error (cómo cargar tipos de línea se verá más adelante). Extrae el identificador interno de una entidad. arcos y elipses.  Normal. Para obtener: RealEscalaTipoLínea = ObjGráfico.Normal = DblVector Para obtener una normal: VarVector = ObjGráfico. Funciona igual que EndPoint pero para el punto inicial de líneas. con las líneas se puede modificar. Obtiene y asigna la escala de tipo de línea de/a un objeto. Como tipos de línea especiales se pueden indicar: ByLayer ByBlock Continuous Para obtener el tipo de línea de un objeto: StrNomTipoLínea = ObjGráfico. Obtiene y asigna la normal de/a una entidad.  LinetypeScale.ObjectID Donde LngNúmeroID es una variable que habrá sido declarada como Long.  StartPoint. El vector se almacena en una variable del tipo Variant. que recogerá una matriz de tres elementos Double.LinetypeScale = RealEscalaTipoLínea RealEscalaTipoLínea es el valor de la nueva escala. La normal es un vector unitario que indica la dirección Z en el SCE (Sistema de Coordenadas de la Entidad). Para asignar: ObjGráfico.Linetype StrNomTipoLínea será una cadena (String).LinetypeScale RealEscalaTipoLínea es una variable positiva y real del tipo Double. devuelto en notación decimal. Este número. se corresponde con el valor hexadecimal que aparecía tras Entity name en la definición de una entidad en Base de datos cuando accedíamos con AutoLISP.Normal  ObjectID.

Obtiene y/o asigna un valor que representa la altura en Z de un objeto 2D. como norma general. Veremos a continuación todos los métodos para las líneas uno por uno. pero permanecería invisible. NOTA: Al igual que para las propiedades. como Boolean. Para asignar. la línea se habría dibujado. en el caso de la macro que dibujaba una línea. Esta propiedad es del tipo Boolean. los métodos de los objetos son muchos de ellos comunes. los nuevos objetos VBA para AutoCAD 14 también poseen métodos.Visible donde BooEstadoVis habrá sido declarado.StartPoint VarPtoInic habrá sido declarada como Variant. Para obtener el punto inicial de los objetos mencionados: VarPtoInic = ObjLínea. por lo que sus resultados sólo podrán ser True o False.Visible = BooEstadoVis Por ejemplo.ObjLínea. no como particulares de la creación de líneas.  Thickness.StartPoint = DblPtoInic Donde ObjLínea sólo puede ser un objeto de línea exclusivamente y DblPtoInic una variable que almacene un punto o una matriz de tres valores tipo Double. Si queremos asignar un estado de visibilidad a un objeto utilizaremos la siguiente sintaxis: ObjGráfico. Obtiene y/o asigna la visibilidad de/a una entidad. Si queremos extraer el estado de visibilidad de un objeto utilizaremos la sintaxis que sigue: BooEstadoVis = ObjGráfico.Thickness = DblAlturaObjeto y para obtener la elevación de un objeto: DblAlturaObjeto = ObjGráfico.Thickness DblAlturaObjeto habrá sido declarada como Double. la sintaxis es la siguiente: ObjGráfico. A parte de las propiedades.Visible = False y la ejecutáramos. A veces puede ser interesante mantener objetos invisibles para mostrarlos en un momento dado. . por lo que nos referiremos aquí a ellos como globales.  Visible. si al final del cuerpo de la macro (antes de End Sub) escribiéramos: ObjLínea.

3. El número de elementos y los ángulos cubiertos pueden ser también variables. DblÁngulo los ángulos cubiertos en radianes (Double) y DblCentro el centro de la matriz (un punto de tres elementos Double).14159. DblCentro) Donde VarMatriz ha de ser una variable declarada como Variant que guardará todos los objetos de la matriz o array. Así. evidentemente declaradas como Integer y Double respectivamente.IntNúmero es el número de objetos de la matriz (Integer). únicamente deberemos añadir las siguientes dos líneas al listado (antes de End Sub): Dim Línea6 As Object Set Línea6 = MatrizLin(6) para guardar en la variable Línea6 la sexta de las líneas de la matriz en este caso. Podemos acceder a la tabla que guarda los objetos mediante índices para obtener los propios objetos de la matriz. Esta variable tiene que ser declarada como Object porque va a guardar un objeto.ArrayPolar(10.ModelSpace PuntoInicial(1) = 100: PuntoInicial(2) = 100: PuntoInicial(3) = 0 PuntoFinal(1) = 200: PuntoFinal(2) = 200: PuntoFinal(3) = 0 Set ObjLínea = AcadModel. ArrayPolar. y retomando el ejemplo que hemos visto de dibujo de una línea."Autocad.AddLine(PuntoInicial. Después se realiza la matriz (tras dar valores a PuntoBase). En el ejemplo anterior.ActiveDocument Set AcadModel = AcadDoc. Este método crea una matriz polar del objeto indicado. PuntoBase) End Sub En este nuevo ejemplo. DblÁngulo.ArrayPolar(IntNúmero.Application"). sino se produce un error de ejecución en el módulo VBA. veámoslo ampliado a continuación: Option Explicit Dim AcadDoc As Object Dim AcadModel As Object Dim ObjLínea As Object Dim PuntoInicial (1 To 3) As Double Dim PuntoFinal (1 To 3) As Double Dim MatrizLin As Variant Dim PuntoBase (1 To 3) As Double Sub DibujoLínea() Set AcadDoc = GetObject( . especificando un centro. PuntoFinal) PuntoBase(1) = 10: PuntoBase(2) = 10: PuntoBase(3) = 0 MatrizLin = ObjLínea. ObjGráfico es el objeto ya creado del que se realizará la matriz polar. Además el índice habrá de ser coherente con el número de objetos claro está. La sintaxis de este método es la siguiente: VarMatriz = ObjGráfico. . a parte de lo anterior se declara la variable MatrizLin como Variant yPuntoBase como una tabla de tres valores Double. los grados abarcados y el número de objetos.

Hay que indicar el número de filas. VarSupDcha) La forma de trabajar este método es un poco extraña. Las demás consideraciones.Copy Para copiar un objeto y moverlo a su vez. IntNumNiv. DblDistCol. VarInfIzq y VarSupDcha han de ser forzosamente dos variables declaradas.GetBoundingBox(VarInfIzq. Al final de la ejecución guardarán las coordenadas en cuestión. IntNumCol.Erase Para borrar por ejemplo la línea sexta. Este método crea una matriz polar de dos o tres dimensiones repitiendo el objeto al que se le aplica. son las mismas que para ArrayPolar. la cual habíamos guardado en Línea6. que veremos después.  Erase. La sintaxis de GetBoundingBox es: Call ObjGráfico. Si deseamos ahora utilizar esos puntos para por ejemplo dibujar una línea. como Variant. ArrayRectangular.Erase  GetBoundingBox. así como las distancias correspondientes. DblDistNiv) Los números de filas. utilizaremos primero este método y luego el métodoMove. de la siguiente manera: VarMatriz = ObjGráfico. Método que copia la entidad a la que se aplica en la misma posición que el objeto original. DblDistFil. por lo que estará definido como tal. no podremos . guardada en Línea6haremos: Línea6.ArrayRectangular(IntNúmFil. columnas y niveles. Elimina la entidad a la que se aplica el método. columnas y niveles serán enteros (Integer) y las distancias lo más lógico es que sean de doble precisión (Double). antes de llamar al método. del ejemplo que venimos manejando.  Copy. pero al no necesitar argumentos no hace falta. Para copiar la línea sexta de la matriz del último ejemplo. Esta caja de abarque es el rectángulo que se ajusta al objeto abarcándolo por completo. Su sintaxis es pues: ObjGráfico. podemos llamar al método con Call. Este método devuelve las coordenadas inferior izquierda y superior derecha de la caja de abarque del objeto al que se le aplique. haríamos por ejemplo: Dim Copia6 As Object Set Copia6 = Línea6. Como en este caso no hemos de guardar objeto ni valor alguno en ninguna variable. Su sintaxis es simplemente: Set ObjCopia = ObjGráfico.Copy ObjCopia será un objeto. así como la manera de acceder a los objetos simples de la matriz.

PuntoFinal) PuntoBase(1) = 10: PuntoBase(2) = 10: PuntoBase(3) = 0 MatrizLin = ObjLínea. Si embargo.Application").AddLine(PuntoInicial. PuntoBase) Dim Línea6 As Object Set Línea6 = MatrizLin(6) Dim EsqInfIzq As Variant Dim EsqSupDch As Variant Call Línea6. no pueden ser utilizados directamente para. VarValorXDato) Los datos extendidos no los crea AutoCAD sino una aplicación AutoLISP o ADS. sin embargo en EsqInfIzq y EsqSupDch se utiliza el rango 0 a 2. 3. que ya estudiaremos).  GetXData. . las hemos definido con un rango de 1 a 3. En el caso de las variables Pto1 y Pto2. Permite recuperar los datos extendidos de una entidad. Aspecto que debe solucionarse. estos datos se almacenan en la base de datos con los restantes del dibujo. dibujar entidades.AddLine(Pto1.ArrayPolar(10. Pto2) End Sub Véase cómo se realiza el trasvase de variables."Autocad.14159. que da la casualidad de que son las variables de salida de métodos como este visto u otros más importantes (como el equivalente al GETPOINT de AutoLISP. por lo que los índices están desfasados una unidad. Su sintaxis es la que sigue: Call ObjGráfico. sino que habremos de realizar un trasvase de variables e introducir los diferentes valores en una matriz de tres elementos. NOTA: Este mecanismo lo deberemos utilizar bastantes veces.ModelSpace PuntoInicial(1) = 100: PuntoInicial(2) = 100: PuntoInicial(3) = 0 PuntoFinal(1) = 200: PuntoFinal(2) = 200: PuntoFinal(3) = 0 Set ObjLínea = AcadModel. Inexplicablemente los puntos guardados en variables Variant.GetXData(StrNomAplicación. por ejemplo.utilizarlos como tales. VarTipoXDato. EsqSupDch) Dim Pto1 (1 To 3) As Double Dim Pto2 (1 To 3) As Double Pto1(1) = EsqInfIzq(0): Pto1(2) = EsqInfIzq(1): Pto1(3) = EsqInfIzq(2) Pto2(1) = EsqSupDch(0): Pto2(2) = EsqSupDch (1): Pto2(3) = EsqSupDch(2) Set ObjLínea = AcadModel. Veamos una ampliación más de nuestro ejemplo de la línea: Option Explicit Dim AcadDoc As Object Dim AcadModel As Object Dim ObjLínea As Object Dim PuntoInicial (1 To 3) As Double Dim PuntoFinal (1 To 3) As Double Dim MatrizLin As Variant Dim PuntoBase (1 To 3) As Double Sub DibujoLínea() Set AcadDoc = GetObject( .GetBoundingBox(EsqInfIzq. como veremos.ActiveDocument Set AcadModel = AcadDoc.

Si no hay puntos de intersección. NOTA: Recordemos la función de la variable MIRRTEXT a la hora de hacer simetrías de textos. DblPto2) Los objetos no originales no son eliminados y. La sintaxis es la siguiente: ObjGráfico. Asigna lo que se denomina puesta en relieve de una entidad.  IntersectWith. El valor devuelto es un nuevo objeto simétrico al inicial (variable tipo Object). ambos arrays de tres elementos tipo Double. Produce una simetría de la entidad en cuestión con respecto a un eje de siemetría que viene definido por dos puntos. La sintaxis es: VarMatrizPtos = ObjGráfico1. La mayoría de las veces no hace falta.Mirror(DblPto1. deberíamos utilizar el métodoErase tras la ejecución de la simetría. Esta variables almacenarán un array de códigos de tipo de datos y un array con el tipo de dato para cada código respectivamente.IntersectWith(ObjGráfico2. si deseáramos hacerlo. es una cadena (String). OpciónExt) Se indican los objetos gráficos con los que se desea calcular las intersecciones y una opción de extensión cuyos valores son: Opción AcExtendNone AcExtendThisEntity AcExtendOtherEntity AcExtendBoth Descripción No Se Se Se se prolonga ninguna entidad prolonga ObjGráfico1 prolonga ObjGráfico2 prolongan ambas entidades El resultado es una matriz de valores de puntos tipo Variant. Si se especifica un cadena vacía se devuelven todos los datos extendidos de todas las aplicaciones.  Mirror.  Highlight. Calcula todos los puntos de intersección de dos entidades y los devuelve en forma de matriz de puntos. VarTipoXDato y VarValorXDato son obligatoriamente dos variables de salida definidas comoVariant antes de llamar al método. su resalte o designación (línea de trazos en lugar de continua). La sintaxis de este método es: Set ObjSimétrico = ObjGráfico. su valor es nulo. A veces puede ser necesario realizar una regeneración o utilizar el método Update para que los resultados sean visibles. El valor True hace que la entidad se resalte y False que no se resalte. Veremos más adelante cómo dar valores a variables de sistema de AutoCAD 14. .StrNomAplicación es el nombre de la aplicación que ha creado los datos extendido.Highlight(BooRelieve) BooRelieve es Boolean. es decir.

claro está): VarEquidist = ObjGráfico. Este método crea un copia paralela o equidistante a un objeto y según una distancia dada.AddLine(PuntoInicial. PuntoFinal) PuntoSim(1) = 200: PuntoSim (2) = 100: PuntoSim (3) = 0 Set SimLin = ObjLínea. De manera similar al método anterior. Ambos puntos son matrices de tres elementos del tipo Double.Mirror(PuntoFinal.Veamos un ejemplo de este método: Option Explicit Dim Dim Dim Dim Dim Dim Dim AcadDoc As Object AcadModel As Object ObjLínea As Object PuntoInicial(1 To 3) As Double PuntoFinal(1 To 3) As Double PuntoSim(1 To 3) As Double SimLin As Object Sub DibujoLínea() Set AcadDoc = GetObject(. lo más lógico es que la distancia sea una variable Double (si es variable y no se indica directamente un valor. PuntoFinal)  Offset. La copia será un matriz de objetos Variant.Offset(DblDistancia) . tras dibujar una línea se realiza una simetría de la misma. "Autocad.ActiveDocument Set AcadModel = AcadDoc. llevando el segundo punto del eje de simetría al último punto de la primera línea. DblPto3)  Move. Como no obtenemos ningún objeto. deberemos llamar al método con Call. apoyándonos en un punto propio de la línea origen y en otro recién creado.Move(DblPto1.ModelSpace PuntoInicial(1) = 100: PuntoInicial(2) = 100: PuntoInicial(3) = 0 PuntoFinal(1) = 200: PuntoFinal(2) = 200: PuntoFinal(3) = 0 Set ObjLínea = AcadModel.  Mirror3D. PuntoSim) End Sub En este ejemplo. La sintaxis de este método es: Call ObjGráfico. Veamos la sintaxis de Mirror3D: Set ObjSimétrico3D = ObjGráfico. Los tipos de datos son iguales que en Mirror. Se utiliza para desplazar un objeto apoyándose en un punto de base que se moverá a otro punto indicado. sino simplemente un desplazamiento. habríamos añadido el siguiente renglón tras la simetría: Call SimLin.Mirror3D(DblPto1. DblPto2) Si en el último ejemplo hubiésemos querido desplazar el objeto simétrico. matriz de puntos o valor como devolución.Application").Move(PuntoSim. Mirror3D produce una simetría tridimensional de un objeto con respecto a un plano definido por tres puntos. DblPto2.

ScaleEntity(DblPtoBase. Se suministra un array Integer con el código para cada tipo de dato y un array Variant con los datos. por poner un ejemplo. VarValorXDato)  TransformBy. DblÁngulo)  ScaleEntity.  Rotate. Su sintaxis es: Call ObjGráfico. Los elementos de la matriz son de tipo Double y deben tener una disposición concreta: R00 R10 R20 0 R01 R11 R21 0 R02 R12 R22 0 T0 T1 T2 1 La rotación se indica en la submatriz 33 que lleva la letra R. y en la columna marcada con T se indica la traslación. Aplica un factor de escala al objeto con el cual esté asociado y a partir de un punto base indicado. La sintaxis de TransformBy es: Call ObjGráfico. Al igual que Rotate gira un entidad. Mueve. pero es lógico que sea Double.Rotate(DblPtoBase.TransformBy(DblMatriz)  Update.14159 / 2))  Rotate3D.Rotate3D(DblPto1. Permite asignar datos extendidos a una entidad. DblÁngulo) Para girar. (3. Su sintaxis es la que sigue: ObjGráfico. escala y gira el objeto mediante una matriz de transformación de 4 4. Su sintaxis es: Call ObjGráfico. añadiremos al código del programa: Call SimLin.Update . Los tipos de datos son los mismos. Su sintaxis es la que sigue: Call ObjGráfico. esta vez en el espacio 3D y tomando como eje de giro el que determinan dos puntos.Rotate(PuntoFinal. así: Call ObjGráfico.Para acceder posteriormente a cada objeto podemos utilizar la técnica de las matrices. Gira el objeto en cuestión con respecto a un punto base (tabla o array de tres elementos Double) y según un ángulo indicado en radianes (Double). la simetría que hemos movido en el ejemplo anterior. DblFactorEscala)  SetXData. Actualiza el objeto al que se le aplica. DblPto2.SetXData(IntTipoXDato. que puede ser una entidad o incluso todo el dibujo. El tipo de dato de la escala dependerá de nuestra conveniencia. También en la submatriz de 33 es donde se indica el factor de escala.

"AutoCAD.Update En este caso declararíamos el objeto de documento activo simplemente así: Set AcadDoc = AcadApp. DblRadio) Propiedades de los objetos de círculo: . Círculos El método AddCircle permite dibujar círculos en la colección de objetos de Espacio Modelo. Espacio Papel o formando parte de un bloque. por lo que. Es decir. iremos aprendiendo las características nuevas de cada objeto gráfico sino se han visto con anterioridad en otro.AddCircle(DblCentro.ActiveDocument Después de estudiar todas las propiedades y todos los métodos del objeto de línea.Realizar una actualización del un objeto puede ser necesario en determinadas ocasiones en que una operación en cuestión no produce el efecto deseado hasta que se actualiza. La sintaxis de AddCircle es: Set ObjCírculo = ObjColección. y el radio del círculo.2.5. DOCE. Hay que indicar las coordenadas del punto del centro. habríamos de definir un objeto así por ejemplo: Dim AcadApp As Object para darle un valor así: Set AcadApp = GetObject(. únicamente se expondrán aquellos que no se hayan visto ya. de aquí en adelante. pasaremos ahora a ver los demás métodos de las estas colecciones existentes para la creación de objetos o entidades gráficas de dibujo desde VBA. que será un matriz de tres elementos (coordenadas X. que también será Double. resaltando en negrita los que se explican en la sección en curso. de cada objeto se proporcionan listadas todas sus propiedades y listados sus métodos.Update Si lo que queremos es actualizar la aplicación. Si quisiéramos por ejemplo actualizar la primera línea dibujada del ejemplo que venimos manejando hasta ahora haríamos: ObjLínea. Muchas propiedades y/o métodos son comunes a todos los objetos gráficos. Y y Z) de tipo de dato Double.Application") y luego: AcadApp. Aún así.

arco. La sintaxis de esta propiedad es: DblÁrea = ObjGráfico. La variable que guarde el dato de salida habrá sido declarado como Double. Obtiene y asigna el centro de la entidad. los métodos son los mismos que para las líneas. que son las que vamos a comentar a continuación.Application Area Center Color EntityName EntityType Handle Layer Linetype LinetypeScale Normal ObjectID Radius Thickness Visible Métodos de los objetos de círculo: ArrayPolar ArrayRectangular Copy Erase GetBoundingBox GetXData Highlight IntersectWith Mirror Mirror3D Move Offset Rotate Rotate3D ScaleEntity SetXData TransformBy Update Como podemos observar.Center = DblPtoCentro siendo DblPtoCentro un array de tres elementos Double que guarda las coordenadas X. Para obtener el centro utilizaremos la sintaxis siguiente: . región o spline).Area  Center. Obtiene el área de una entidad cerrada (círculo. Y y Z del nuevo centro. polilínea. elipse. La sintaxis para asignar un nuevo centro es: ObjGráfico. Radiusy Center.  Area. En cuestión de propiedades desaparecen dos evidentemente (StartPoint y EndPoint) y aparecen Area.

Obtiene y asigna el radio de un círculo (o de un arco). Recordemos que para utilizar luego estás coordenadas.Center donde VarPtoCentro será una variable declarada como Variant que guardará las coordenadas del centro. según el botón excluyente que esté activado. dibujar un círculo en el Espacio Modelo o Espacio Papel.  Radius. El cuadro de diálogo es el siguiente: El listado del código es el que sigue: Option Explicit Dim Dim Dim Dim Dim Dim AcadDoc As Object AcadModel As Object AcadPapel As Object DibujoEn As Object CírculoObj As Object PtoCentro(1 To 3) As Double . mediante una serie de casillas de edición y un botón de acción. a la hora de suministrarlas como puntos de dibujo para objetos gráficos. El valor en cuestión.Radius En el siguiente pequeño programa se crea un sencillo cuadro de diálogo (formulario en Visual Basic) que permite. pero el asignar no es obligatorio) deberán declararse como de doble precisión. Por lo que si se utilizan variables (al obtener seguro. La sintaxis para asignar un radio es: ObjGráfico.Radius = DblRadio y la sintaxis para obtener el radio de una entidad ya dibujada es: DblRadio = ObjGráfico. será del tipo Double. tanto uno nuevo para asignar como el que recogerá una variable al obtener. habrá que realizar un trasvase de variables y guardarlas en una matriz o array de tres elementos tipo Double.VarPtoCentro = ObjGráfico.

Text) PtoCentro(3) = Val(boxZ. DblRelación es un valor Double que es la relación entre la medida del eje menor y del eje mayor (valor máximo igual a 1 se corresponde con un círculo). También se realiza lo mismo con el radio (casilla boxRadio).Application"). que lo que hace es almacenar un objeto u otro (Modelo o Papel) según qué botón excluyente o de opción esté marcado (optionModelo u optionPapel). DblRelación) El centro ha de indicarse como una matriz de elementos Double (DblCentro). Por último se dibuja el círculo en el Espacio Modelo o en el Espacio Papel según el valor de la variable de objetoDibujoEn. pasarlos a valores numéricos e introducirlos en la matriz que será el punto centro del círculo. DblPtoEjeMayor.Value = True Then Set DibujoEn = AcadModel Else Set DibujoEn = AcadPapel End If Set CírculoObj = DibujoEn.Text) Radio = Val(boxRadio. NOTA: Se podrían haber introducido también diversos controles de errores.AddCircle(PtoCentro. La acción al pulsar el botónDibujar (buttonDibujar es su nombre) pasa por extraer los valores de las casillas de coordenadas (boxX. boxY y boxZ). La sintaxis de AddEllipse es: Set ObjElipse = ObjColección. "AutoCAD.PaperSpace End Sub Como vemos. Espacio Papel o en la colección de bloques. DblPtoEjeMayor es un punto (matriz de tres valores Double) en uno de los extremos del eje mayor. tras inicializar todas las variables se muestra el cuadro.ModelSpace Set AcadPapel = AcadDoc. Propiedades de los objetos de elipse: .5. DOCE.Text) formPrincipal. Radio) End End Sub Private Sub UserForm_Initialize() Set AcadDoc = GetObject(.AddElipse(DblCentro.ActiveDocument Set AcadModel = AcadDoc. considerando las coordenadas en el SCO y relativas al centro.Text) PtoCentro(2) = Val(boxY.Hide If optionModelo. Elipses El método AddEllipse permite dibujar elipses o arcos de elipse en la colección de objetos de Espacio Modelo.3.Dim Radio As Double Private Sub buttonDibujar_Click() PtoCentro(1) = Val(boxX.

Obtiene y/o asigna el ángulo final en radianes de un objeto elipse (o arco). Un círculo cerrado serían 6. La sintaxis para asignar un ángulo final a una elipse (o arco) ya dibujada será pues: ObjGráfico.EndAngle = DblÁngulo . Recorriendo el arco en el sentido antihorario.28 radianes. pero hay propiedades nuevas. El ángulo se considera desde el cero trigonométrico.Application Area Center Color EndAngle EndParameter EndPoint EntityName EntityType Handle Layer LineType LinetypeScale MajorAxis MinorAxis Normal ObjectID RadiusRatio StartAngle StartParameter StartPoint Visible Métodos de los objetos de elipse: ArrayPolar ArrayRectangular Copy Erase GetBoundingBox GetXData Highlight IntersectWith Mirror Mirror3D Move Offset Rotate Rotate3D ScaleEntity SetXData TransformBy Update Los métodos son los mismos que lo ya estudiados.  EndAngle. el primer extremo será el punto inicial y el segundo extremo el final.

EndParameter  MajorAxis. Sólo aplicable a elipses. Para asignar un parámetro final: ObjGráfico. La sintaxis para asignar una relación: ObjGráfico.  EndParámeter.MajorAxis = DblPtoEjeMayor Para obtener un punto extremo de eje mayor de una elipse. Sus coordenadas toman como origen el centro de la elipse y se miden en el SCO (Sistema de Coordenadas del Objeto). El parámetro final tiene un rango de 0 a 2  PI. . obtiene y asigna el parámetro final de una elipse (variable de tipo Double). obtiene y asigna el punto extremo del eje mayor (es una matriz de tres elementos tipo Double). la sintaxis es: DblPtoEjemayor = ObjGráfico. define la relación entre el tamaño del eje menor de la elipse y el tamaño del eje menor. pero obtiene el punto extremo del eje menor de una elipse. Los parámetros inicial y final de una elipse se calculan según la ecuación P( ) = A  cos ( ) + B  sen ( ). Se pueden emplear los ángulos o los parámetros para crear una elipse.MinorAxis  RadiusRatio. El ángulo  será el inicial o final.y la sintaxis para obtener el ángulo de una entidad ya dibujada será: DblÁngulo = ObjGráfico.MayorAxis  MinorAxis.RadiusRatio El valor máximo admitido para la variable Double DblRelación es 1.EndAngle DblÁngulo es Double. Enteramente similar a la propiedad anterior. La sintaxis para asignar un punto extremo de eje mayor a una elipse es: ObjGráfico.RadiusRatio = DblRelación Para obtener la relación de una elipse: DblRelación = ObjGráfico. donde A y B son la mitad del eje mayor y del menor respectivamente. Sólo aplicable a elipses. No se puede asignar un punto extremo de eje menor. que significa que ambos ejes son iguales y por lo tanto se trata de un círculo. únicamente obtener: DblPtoEjeMenor = ObjGráfico.EndParameter = DblParamFinal Para obtener un parámetro final: DblParamFinal = ObjGráfico. Sólo aplicable a elipses.

 StartParámeter.5.AddArc(DblCentro. el ángulo inicial (Double) en radianes y el ángulo final (Double) también en radianes. Para asignar uno: ObjGráfico. Arcos El método AddArc permite crear un arco de circunferencia que se dibuja desde el punto inicial al final en sentido contrario a las agujas del reloj. Igual que EndAngle pero para el ángulo inicial. DblÁngInic.StartParameter DOCE.StartAngle DblÁngulo es Double. DblÁngFin) Propiedades de los objetos de arco: Application Area Center Color EndAngle EndPoint EntityName EntityType Handle Layer LineType LinetypeScale Normal ObjectID Radius StartAngle .StartParameter = DblParamInicial Para obtener uno: DblParamInicial = ObjGráfico. el radio (Double). Para asignar uno: ObjGráfico. StartAngle. Estos puntos se calculan a partir de las propiedades StartAngle. La sintaxis deAddArc es: Set ObjArco = ObjColección. EndAngle y Radius. Igual que EndParameter pero para el parámetro inicial. DblRadio. Para crear un arco hay que indicar el centro (array de tres valores Double).4.StartAngle = DblÁngulo Para obtener uno: DblÁngulo = ObjGráfico.

La sintaxis para este método es: Set ObjPunto = ObjColección. Puntos Para añadir puntos como entidades gráficas se utiliza el método AddPoint. ya que únicamente hay que suministrar al método un punto que es. Papel o bloques).StartPoint Thickness Visible Métodos de los objetos de arco: ArrayPolar ArrayRectangular Copy Erase GetBoundingBox GetXData Highlight IntersectWith Mirror Mirror3D Move Offset Rotate Rotate3D ScaleEntity SetXData TransformBy Update Todos los métodos y propiedades de los arcos han sido ya explicados en las secciones anteriores. Y y Z) de tipo de dato Double.5. como siempre.AddPoint(DblPunto) Propiedades de los objetos de punto: Application Color Coordinates EntityName EntityType Handle Layer LineType LinetypeScale . una matriz o array de tres elementos (coordenadas X. DOCE. ya sea en cualquiera de las colecciones que lo poseen (Espacio Modelo. La manera es sencilla.5.

Coordinates Donde VarVértices es una variable declarada como Variant.6. Texto . donde n es el número de vértices o puntos. Recordemos que si queremos utilizar después las coordenadas habrá que hacer un trasvase a una matriz de tres elementosDouble. DOCE. Obtiene y/o asigna una matriz con las coordenadas de cada uno de los vértices del objeto dado.5.Normal ObjectID Thickness Visible Métodos de los objetos de punto: ArrayPolar ArrayRectangular Copy Erase GetBoundingBox GetXData Highlight IntersectWith Mirror Mirror3D Move Rotate Rotate3D ScaleEntity SetXData TransformBy Update Los métodos han sido ya estudiados y las propiedades se han visto todas excepto una nueva.  Coordinates. La variable que se asigna a estos vértices (si la hubiera) se declara con una sentencia tipo Dim Vértices (1 To n * 3) As Double.Coordinates = DblMatrizVértices Y para obtenerla: VarVértices = ObjGráfico. Para asignar una matriz de coordenadas a un objeto punto: ObjGráfico. en el caso del punto hay un único vértice.

. las nuevas propiedades se estudian a continuación. DblAltura) Propiedades de los objetos de texto: Application Color EntityName EntityType Handle Heigth HorizontalAlignment InsertionPoint Layer LineType LinetypeScale Normal ObjectID ObliqueAngle Rotation ScaleFactor StyleName TextAlignmentPoint TextGenerationFlag TextString Thickness VerticalAlignment Visible Métodos de los objetos de texto: ArrayPolar ArrayRectangular Copy Erase GetBoundingBox GetXData Highlight IntersectWith Mirror Mirror3D Move Rotate Rotate3D ScaleEntity SetXData TransformBy Update Los métodos se han visto todos ya. Hemos de indicar la cadena de texto en cuestión (variable String). DblPtoIns. el punto de inserción en el SCU (matriz Double de tres valores) y la altura (Double).AddText(StrTexto. La sintaxis es pues que sigue: Set ObjTexto = ObjColección.El método AddText permite añadir texto en una línea al dibujo.

los valores negativos se transforman en su equivalente positivo para almacenarlos. En el caso del texto se refiere a la altura de las letras mayúsculas. Para asignar un ángulo de oblicuidad: ObjTexto. Asigna y obtiene el ángulo de oblicuidad de un texto medido en radianes.HorizontalAlignment = IntAlineaciónH para obtener: IntAlineaciónH = ObjTexto.InsertionPoint  ObliqueAngle. Para valores positivos se produce una inclinación a la derecha. para ello se les suma 2PI. Obtiene o asigna la alineación horizontal de y a los textos exclusivamente. como cualquier otro punto: ObjGráfico. Heigth. Obtiene y/o asigna la altura de un objeto. Esta propiedad obtiene y asigna el punto de inserción de una entidad. Para extraer u obtener el punto de inserción de una entidad (ahora Variant) utilizaremos: VarPtoIns = ObjGráfico.HorizontalAlignment siendo los valores para IntAlineaciónH del tipo Integer.ObliqueAngle = DblÁngulo . El punto de inserción es una matriz de tres elementos Double.  HorizontalAlignment. aunque también se admiten las siguientes constantes: acHorizontalAlignmentLeft acHorizontalAlignmentCenter acHorizontalAlignmentRight acHorizontalAlignmentAligned acHorizontalAlignmentMiddle acHorizontalAlignmentFit  InsertionPoint.InsertionPoint = DblPtoIns Con esta sintaxis asignamos un nuevo punto de inserción a un objeto.Heigth Siendo DblAltura una variable declarada como Double. Las sintaxis son: para asignar: ObjTexto. La sintaxis para asignar una altura a un objeto es: ObjGráfico.Heigth = DblAltura Y para obtenerla: DblAltura = ObjGráfico.

TextAlignmentPoint = DblPtoAlineación Para obtener: .Rotation  ScaleFactor. Para asignar pues: ObjTexto.  Rotation. Obtiene y/o asigna la posición del punto de alineación del texto. Para asignar: ObjTexto. medido a partir del eje X y en sentido antihorario.Rotation = DblÁngulo Para obtener: DblÁngulo = ObjTexto. si no es así se producirá un error.StyleName  TextAlignmentPoint. Se trata pues de un array de tres elementos de tipo Double a la hora de asignar. Si no se asigna estilo se asume por defecto el actual.ScaleFactor = DblEscala Para obtener: DblEscala = ObjTexto. Obtiene y/o asigna un ángulo de rotación en radianes ( Double) para un texto. Obtiene y/o asigna el nombre (String) de estilo de texto (o acotación) empleado para el objeto.ObliqueAngle DblÁngulo es un variable de doble precisión Double. Para asignar: ObjGráfico. A definir un estilo desde VBA ya aprenderemos más adelante. Para asignar: ObjTexto.StyleName = StrEstilo Para obtener: StrEstilo = ObjGráfico. y de una variableVariant a la hora de recoger los valores de un objeto texto. Obtiene y/o asigna el factor de escala de anchura (Double) para una entidad de texto.ScaleFactor  StyleName.Para obtener el ángulo de oblicuidad de un texto: DblÁngulo = ObjTexto. El estilo deberá estar definido en el dibujo.

Obtiene y/o asigna el tipo de generación del texto. Obtiene y/o asigna la cadena de texto de una entidad texto. una con cada valor. aunque también se admiten las siguientes constantes: acVerticalAlignmentBaseline acVerticalAlignmentBottom acVerticalAlignmentMiddle acVerticalAlignmentTop . Para asignar una cadena la sintaxis es: ObjTexto. Para asignar pues: ObjTexto. TextString  VerticalAlignment. Se pueden incluir en la cadena (valor tipo String) los caracteres especiales de AutoCAD (los precedidos por %%). Las sintaxis son: para asignar: ObjTexto.TextGenerationFlag = IntGeneración Para obtener: IntGeneración = ObjTexto. TextGenerationFlag  TextString.VerticalAlignment = IntAlineaciónV para obtener: IntAlineaciónV = ObjTexto. Es un valor Integerpero que posee también estas dos constantes: acTextFlagBackward acTextFlagUpsideDown para aplicar una generación de "atrás hacia adelante" y de "arriba a abajo" respectivamente. Obtiene o asigna la alineación vertical de y a los textos exclusivamente.VarPtoAlineación = ObjTexto. VerticalAlignment siendo los valores para IntAlineaciónV del tipo Integer. TextAlignmentPoint  TextGenerationFlag. Si se quieren aplicar los dos efectos se deben ejecutar dos instrucciones.TextString = StrTexto Para obtener una cadena la sintaxis es: StrTexto = ObjTexto.

Text TipoLinV = UCase(TipoLin.Value = True Then AlV = "acVerticalAlignmentBottom" Set ObjTexto = AcadModel.Linetype = TipoLinV ObjTexto.Value = True Then AlH = "acHorizontalAlignmentRight" If AlIzquierda.AddText(TextoV.Text) PuntoIns(3) = Val(Z.Value = True Then AlV = "acVerticalAlignmentBaseLine" If AlInferior.Value = True Then AlV = "acVerticalAlignmentTop" If AlMitad.Text Select Case LCase(Color.Text) OblicuidadV = (Val(Oblicuidad.VerticalAlignment = AlV End End Sub Private Sub Cancelar_Click() End End Sub .Veamos a continuación un ejemplo de un programa que maneja textos. Primero mostraremos es código del programa: Option Explicit Dim Dim Dim Dim Dim Dim Dim Dim Dim Dim AcadDoc As Object AcadModel As Object ObjTexto As Object PuntoIns(1 To 3) As Double TextoV As String ColorV As Integer: Dim CapaV As String: Dim TipoLinV As String EstiloV As String: Dim AlturaV As Double: Dim OblicuidadV As Double AlV As String AlH As String PI As Double Private Sub Aceptar_Click() On Error Resume Next PuntoIns(1) = Val(X.ObliqueAngle = OblicuidadV ObjTexto.Layer = CapaV ObjTexto.Value = True Then AlH = "acHorizontalAlignmentLeft" If AlCentro.Text) * 2 * PI) / 360 If AlDerecha.StyleName = EstiloV ObjTexto.Color = ColorV ObjTexto. PuntoIns.Text) EstiloV = UCase(Estilo.Text) TextoV = Texto.Text) AlturaV = Val(Altura.Value = True Then AlH = "acHorizontalAlignmentCenter" If AlSuperior. AlturaV) ObjTexto.Text) Case "porcapa" ColorV = 256 Case "porbloque" ColorV = 0 Case Else ColorV = Val(Color) If ColorV < 0 Or ColorV > 256 Then MsgBox ("Color no válido") Exit Sub End If End Select CapaV = Capa.Value = True Then AlV = "acVerticalAlignmentMiddle" If AlLíneaBase.HorizontalAlignment = AlH ObjTexto.Text) PuntoIns(2) = Val(Y.

ActiveDocument Set AcadModel = AcadDoc. Veamos a continuación el cuadro diálogo perteneciente a este código: NOTA: Recordemos poner a True la propiedad MultiLine de la casilla de edición en la que introducimos el texto.Application"). Únicamente decir que estaría un poco incompleto. se estudiará más adelante.14159 End Sub Como vemos es bastante sencillo de entender. estilos de texto existentes. según lo estudiado ya acerca de los textos. ya que sólo se controla —como ejemplo— que el usuario introduzca bien el número de color.ModelSpace PI = 3.Private Sub UserForm_Initialize() Set AcadDoc = GetObject(. . "AutoCAD. Los demás controles (casillas vacías. NOTA: La manera de controlar si un estilo de texto existe.) deberían introducirse para que el programa estuviera completo. entre otros muchos controles...