DOCE.6. LA APLICACIÓN AutoCAD

La aplicación AutoCAD 14 como tal es uno de los objetos definidos en VBA. Si nos fijamos en la plantilla de objetos proporcionada al principio de este MÓDULO, nos daremos cuenta de que se encuentra en el más alto escalafón de la jerarquía y por él vamos a comenzar.

Este objeto recibe el nombre de Application y dice relación a la ventana de la aplicación principal, es decir, el propio programa AutoCAD 14 en sí. Si recordamos, a este objeto hemos hecho referencia en multitud de ocasiones cuando escribimos, por ejemplo:

Set AcadDoc = GetObject(, "AutoCAD.Application")

Como objeto que es, posee propiedades y métodos. A continuación veremos como siempre la relación completa de ambos y pasaremos seguidamente a estudiarlos.

Propiedades del objeto de aplicación:

ActiveDocument
Application
Caption
FullName
Height
Left
LocaleID
Name
Path
Preferences
Top
Version
Visible
Width

Métodos del objeto de aplicación:

GetInterfaceObject
ListADS
ListARX
LoadADS
LoadARX
Quit
UnloadADS
UnloadARX
Update

Pasemos pues a comentar las propiedades primero.

· ActiveDocument. Obtiene el objeto de documento activo. La sintaxis es:

Set ObjDocumento = ObjAplicación.ActiveDocument

La sintaxis la conocemos de sobra, ya que la utilizamos en todos los programas al hacer:

Set AcadDoc = GetObject(, "AutoCAD.Application").ActiveDocument

Nos preguntaremos la necesidad de esta propiedad cuando en AutoCAD 14 únicamente se puede tener un documento abierto cada vez (es una aplicación SDI). Y es que ActiveDocument está preparada para futuras versiones de AutoCAD, en el que el entorno sea MDI (múltiples documentos abiertos) y el programa afecte únicamente al activo actualmente (uno cada vez evidentemente).

El retorno de esta propiedad aplicada a la aplicación es un objeto de documento, del que se hablará en la siguiente sección.

· Caption. Obtiene el texto de la barra de título (generalmente azul) de la aplicación. La sintaxis es:

StrTítulo = ObjAplicación.Caption

Siendo StrTítulo declarado como String.

Veamos el siguiente ejemplo de una macro VBA:

Option Explicit

Dim Acad As Object
Dim AcadDoc As Object
Dim AcadModel As Object


Sub Macro()
  Set Acad = GetObject(, "AutoCAD.Application")
  Set AcadDoc = Acad.ActiveDocument
  Set AcadModel = AcadDoc.ModelSpace
  Dim TitApli As String
  TitApli = Acad.Caption
  MsgBox TitApli
End Sub

Como vemos hemos introducido un objeto nuevo, hemos desglosado la llamada a los objetos principales de AutoCAD en una rama más: la aplicación en sí. De esta manera, podemos utilizar este nuevo objeto (Acad) para extraer el texto de la ventana de título de AutoCAD en un momento concreto, para después mostrarlo con un MsgBox.

Un resultado posible de esta macro podría ser:

 

· FullName. Obtiene el nombre de la aplicación y su camino —o ruta de acceso— completo. La sintaxis es:

StrNombre = ObjAplicación.Fullname

Siendo StrTítulo declarado como String.

Si las tres últimas líneas de la macro de ejemplo anterior se cambiaran por las siguientes:

Dim NomApli As String
NomApli = Acad.FullName
MsgBox NomApli

un resultado posible sería:

 

· Left. Esta propiedad permite obtener y/o asignar la distancia desde el lado izquierdo de la ventana principal de la aplicación hasta el lado izquierdo de la pantalla; se refiere pues a la coordenada X de la esquina superior izquierda de la ventana de la aplicación.

NOTA: El origen de coordenadas en los monitores comienza en la esquina superior izquierda de la pantalla (coordenada 0,0).

La sintaxis para asignar una distancia con Left es:

ObjAplicación.Left = IntDistanciaL

y para obtener la actual:

IntDistanciaL = ObjAplicación.Left

· LocaleID. Obtiene el ID (identificador) local para la sesión actual de AutoCAD. El ID local es definido por Miscrosoft para los entornos Windows 95/98 y Windows NT.

La sintaxis es:

LngID = ObjAplicación.LocaleID

Una respuesta coherente puede ser, por ejemplo: 1033.

· Path. Obtiene el camino o ruta de acceso a la aplicación (o documento), sin el nombre de archivo incluido. La sintaxis es:

StrCamino = ObjNoGráfico.Path

StrCamino se declarará como String evidentemente.

· Preferences. Obtiene el objeto de preferencias de aplicación (del que ya hablaremos). La sintaxis es:

ObjPreferencias = ObjAplicación.Preferences

· Top. Esta propiedad permite obtener y/o asignar la distancia desde el lado superior de la ventana principal de la aplicación hasta el lado superior de la pantalla; se refiere pues a la coordenada Y de la esquina superior izquierda de la ventana de la aplicación.

NOTA: El origen de coordenadas en los monitores comienza en la esquina superior izquierda de la pantalla (coordenada 0,0).

La sintaxis para asignar una distancia con Top es:

ObjAplicación.Top = IntDistanciaT

y para obtener la actual:

IntDistanciaT = ObjAplicación.Top

· Version. Devuelve la versión de AutoCAD que se está utilizando. Es igual a la variable de sistema ACADVER del programa. Su sintaxis:

StrVersión = ObjAplicación.Version

Veremos ahora los métodos de este objeto Application.

· GetInterfaceObject. Acepta el ID de un programa e intenta cargarlo en AutoCAD como un InProcServer.

Esta propiedad permite conectar un servidor ActiveX Automation. Su sintaxis:

Set ObjInterfaz = ObjAplicación.GetInterfaceObject(IDPrograma)

ObjInterfaz es un objeto declarado como Object.

Dim Poly as Object
Set Poly = Acad.GetInterfaceObject("Polycad.Application")

· ListADS. Devuelve una lista de las aplicaciones ADS cargadas. Su sintaxis es:

VarListaADS = ObjAplicación.ListADS

VarListaADS estará declarada como Variant. Guardará una matriz de elementos con cada uno de los valores de la lista. Para acceder a ellos recordemos que podemos utilizar índices.

· ListARX. Devuelve una lista de las aplicaciones ARX cargadas. Su sintaxis es:

VarListaARX = ObjAplicación.ListARX

Las mismas consideraciones que para el método anterior.

· LoadADS. Carga una aplicación ADS. Deberemos proporcionarle el nombre y ruta (si fuera necesaria) de la aplicación en cuestión. Veamos la sintaxis.

Call ObjAplicación.LoadADS(StrNombreAplicADS)

Nombre y ruta habrán de ser una cadena.

· LoadARX. Carga una aplicación ARX. Deberemos proporcionarle el nombre y ruta (si fuera necesaria) de la aplicación en cuestión. Veamos la sintaxis.

Call ObjAplicación.LoadARX(StrNombreAplicARX)

Nombre y ruta habrán de ser una cadena.

· Quit. Cierra la aplicación AutoCAD. Sintaxis:

ObjAplicación.Quit

· UnloadADS. Las mismas consideraciones que para LoadADS pero para descargar la aplicación ADS.

· UnloadARX. Las mismas consideraciones que para LoadARX pero para descargar la aplicación ARX.

 

DOCE.7. EL DOCUMENTO ACTUAL ACTIVO

Tras acceder al más alto escalafón que es la aplicación (así como a sus propiedades y métodos) descenderemos un escalón para adentrarnos en el documento actual activo: ActiveDocument. Según la sintaxis de declaraciones y asignaciones que veminos manejando desde el principio del MÓDULO:

Dim AcadDoc As Object
Dim AcadModel As Object

y

Set AcadDoc = GetObject(, "AutoCAD.Application").ActiveDocument
Set AcadModel = AcadDoc.ModelSpace


y dejando aparte la utilizada anteriormente para acceder a la propia aplicación,
AcadDoc es como vemos nuestra variable para acceder al documento actual activo.

Al documento actual como tal también pueden aplicársele una serie de propiedades y métodos que operarán con él; son los puntos que estudiaremos bajo este epígrafe. Vamos pues.

Propiedades del objeto de documento actual:

ActiveDimStyle
ActiveLayer
ActiveLinetype
ActivePViewport
ActiveSelectionSet
ActiveSpace
ActiveTextStyle
ActiveUCS
ActiveViewport

Application
Blocks
Dictionaries
DimStyles
ElevationModelSpace
ElevationPapersSpace
FullName
Groups
Layers
Limits
Linetypes
ModelSpace
Path
Plot
ReadOnly
RegisteredApplications
Saved
SelectionSets
TextStyles
UserCoordinateSystems
Utility
ViewPorts
Views

Métodos del objeto de documento actual:

AuditInfo
Export
GetVariable
HandleToObject
Import
LoadShapeFile
New
ObjectIDToObject
Open
PurgeAll
Regen
Save
SaveAs
Setvariable
WBlock

Veamos primero, como siempre, las propiedades.

· ActiveDimStyle. Asigna u obtiene el estilo de acotación actual. Se estudiarán más detalles sobre los estilos de acotación en su sección correspondiente.

La sintaxis para asignar:

ObjDocumento.ActiveDimStyle = ObjEstiloAcotación

La sintaxis para obtener:

Set ObjEstiloAcotación = ObjDocumento.ActiveDimStyle

ObjEstiloAcotación es un objeto de estilo de acotación del que ya se hablará.

· ActiveLayer. Asigna u obtiene la capa actual. Se estudiarán más detalles sobre las capas en su sección correspondiente.

La sintaxis para asignar:

ObjDocumento.ActiveLayer = ObjCapa

La sintaxis para obtener:

Set ObjCapa = ObjDocumento.ActiveLayer

ObjCapa es un objeto de capa del que ya se hablará.

· ActiveLinetype. Asigna u obtiene el tipo de línea actual. Se estudiarán más detalles sobre los tipos de línea en su sección correspondiente.

La sintaxis para asignar:

ObjDocumento.ActiveLinetype = ObjTipoLínea

La sintaxis para obtener:

Set ObjTipoLínea = ObjDocumento.ActiveLinetype

ObjTipoLínea es un objeto de tipo de línea del que ya se hablará.

· ActivePViewport. Asigna u obtiene la ventana de Espacio Papel actual. Se estudiarán más detalles sobre las ventanas de Espacio Papel en su sección correspondiente.

La sintaxis para asignar:

ObjDocumento.ActivePViewport = ObjVentanaPapel

La sintaxis para obtener:

Set ObjVentanaPapel = ObjDocumento.ActivePViewport

ObjVentanaPapel es un objeto de ventana de Espacio Papel del que ya se hablará.

· ActiveSelectionSet. Obtiene exclusivamente el conjunto de selección actual. Se estudiarán más detalles sobre los conjuntos de selección en su sección correspondiente.

La sintaxis para asignar:

ObjDocumento.ActiveSelectionSet = ObjConjuntoSel

La sintaxis para obtener:

Set ObjConjuntoSel = ObjDocumento.ActiveSelectionSet

ObjConjuntoSel es un objeto de conjunto de selección del que ya se hablará.

· ActiveSpace. Conmuta el espacio actual entre Espacio Modelo Mosaico y Espacio Papel/Modelo Flotante.

La sintaxis para realizar la conmutación:

ObjDocumento.ActiveSpace = IntEspacio

Si el actual es Espacio Modelo Mosaico se cambia a Espacio Papel/Modelo Flotante, y viceversa.

La sintaxis para obtener el valor del espacio actual:

IntEspacio = ObjDocumento.ActiveSpace

IntEspacio es un valor Integer que puede almacenar las siguientes constantes:

acModelSpace
acPaperSpace

· ActiveTextStyle. Asigna u obtiene el estilo de texto actual. Se estudiarán más detalles sobre los estilos de texto en su sección correspondiente.

La sintaxis para asignar:

ObjDocumento.ActiveTextstyle = ObjEstiloText

La sintaxis para obtener:

Set ObjEstiloTexto = ObjDocumento.ActiveTextStyle

ObjEstiloTexto es un objeto de estilo de texto del que ya se hablará.

· ActiveUCS. Asigna u obtiene el SCP actual. Se estudiarán más detalles sobre los SCP en su sección correspondiente.

La sintaxis para asignar:

ObjDocumento.ActiveUCS = ObjSCP

La sintaxis para obtener:

Set ObjSCP = ObjDocumento.ActiveUCS

ObjSCU es un objeto de SCP (Sistema de Coordenadas Personal) del que ya se hablará.

· ActiveViewport. Asigna u obtiene la ventana mosaico actual. Se estudiarán más detalles sobre las ventanas de Espacio Modelo Mosaico en su sección correspondiente.

La sintaxis para asignar:

ObjDocumento.ActiveViewport = ObjVentanaModelo

La sintaxis para obtener:

Set ObjVentanaModelo = ObjDocumento.ActiveViewport

ObjVentanaModelo es un objeto de ventana de Espacio Modelo Mosaico del que ya se hablará.

· Blocks. Obtiene exclusivamente el objeto de colección de bloques del dibujo. Acerca de los bloques hablaremos largo y tendido en su momento.

La sintaxis para utilizar esta propiedad es:

Set ObjColBloques = ObjDocumento.Block

ObjColBloques es un objeto de colección de bloques del que ya se hablará.

· Dictionaries. Obtiene exclusivamente el objeto de colección de diccionarios del documento activo. Acerca de los diccionarios hablaremos en su momento.

La sintaxis para utilizar esta propiedad es:

Set ObjColDiccionarios = ObjDocumento.Dictionaries

ObjColDiccionarios es un objeto de colección de diccionario del que ya se hablará.

· DimStyles. Obtiene exclusivamente el objeto de colección de estilos de acotación del dibujo. Acerca de los estilos de acotación hablaremos en su momento.

La sintaxis para utilizar esta propiedad es:

Set ObjColEstilosAcotación = ObjDocumento.DimStyles

ObjColEstilosAcotación es un objeto de colección de estilos de acotación del que ya se hablará.

· ElevationModelSpace. Obtiene y/o asigna la elevación en el Espacio Modelo.

La sintaxis para asignar:

ObjDocumento.ElevationModelSpace = DblElevaciónM


La sintaxis para obtener:

DblElevaciónM = ObjDocumento.ElevationModelSpace

DblElevaciónM será declarada como Double (doble precisión).

· ElevationPaperSpace. Obtiene y/o asigna la elevación en el Espacio Papel.

La sintaxis para asignar:

ObjDocumento.ElevationPaperSpace = DblElevaciónP

La sintaxis para obtener:

DblElevaciónP = ObjDocumento.ElevationPaperSpace

DblElevaciónP será declarada como Double.

· Groups. Obtiene el objeto de colección de grupos. Sobre los grupos se hablará más adelante.

La sintaxis para utilizar esta propiedad es:

Set ObjColGrupos = ObjDocumento.Groups

ObjColGrupos es un objeto de colección de estilos de acotación del que ya se hablará.

· Layers. Obtiene el objeto de colección de capas. Sobre las capas se hablará más adelante.

La sintaxis para utilizar esta propiedad es:

Set ObjColCapas = ObjDocumento.Layers

ObjColCapas es un objeto de colección de capas del que ya se hablará.

· Limits. Permite asignar y obtener los límites del dibujo actual.

La sintaxis para asignar unos límites es:

ObjDocumento.Limits = DblLímites

La sintaxis para obtener unos límites es:

VarLímites = ObjDocumento.Limits

Para asignar límites al dibujo deberemos crear una matriz de cuatro valores tipo Double. Para recoger unos límites habilitaremos una variable definida como Variant. Sabemos que después mediante índices podemos acceder a cada valor. El primer par de valores define las coordenadas X e Y del límite inferior izquierdo y, el segundo par de valores, las coordenadas X e Y del límite superior derecho.

· Linetypes. Devuelve el objeto de colección de tipos de línea. De los tipos de línea hablaremos más adelante.

La sintaxis para utilizar esta propiedad es:

Set ObjColTiposLínea = ObjDocumento.Linetypes

ObjColTiposLínea es un objeto de colección de tipos de línea del que ya se hablará.

· ModelSpace. Devuelve el objeto de colección de Espacio Modelo. De esta colección ya hablaremos más adelante, sin embargo es una sintaxis que nos sonará de utilizarla al principio de los programas:

Set ObjColEspacioM = ObjDocumento.ModelSpace

· Plot. Obtiene el objeto de trazado del documento actual. Este objeto será estudiado más adelante. Su sintaxis de uso es:

Set ObjTrazado = ObjDocumento.Plot

ObjTrazado es un objeto de trazado del que ya se hablará.

· ReadOnly. Obtiene la condición que tiene un documento de ser de sólo lectura o de lectura y escritura. La sintaxis para usar esta propiedad, por cierto de sólo lectura, es:

BooCondición = ObjDocumento.ReadOnly

BooCondición habrá sido declarada como Boolean. Si almacena True el documento es de sólo lectura; si almacena False el documento es de lectura y escritura.

· RegisteredApplications. Obtiene la colección de aplicaciones registradas. Esta colección será estudiada más adelante. Su sintaxis de uso es:

Set ObjColAplicReg = ObjDocumento.RegisteredApplications

· Saved. Especifica si el documento actual tiene algún cambio realizado sin guardar. Se recoge en una variable Boolean: si el valor es True el documento posee cambios sin guardar; si es False el documento no posee cambios sin guardar.

BooCambios = ObjDocumento.Saved

· SelectionSets. Obtiene el objeto de colección de conjuntos de selección. Este objeto será estudiado más adelante. Su sintaxis de uso es:

Set ObjColConjuntosSel = ObjDocumento.SelectionSets

ObjColConjuntosSel es un objeto de colección conjuntos de selección del que ya se hablará.

· TextStyles. Obtiene el objeto de colección de estilos de texto. Este objeto será estudiado más adelante. Su sintaxis de uso es:

Set ObjColEstilosTexto = ObjDocumento.TextStyles

ObjColEstilosTexto es un objeto de colección de estilos de texto del que ya se hablará.

· UserCoordinateSystems. Obtiene el objeto de colección de SCPs. Este objeto será estudiado más adelante. Su sintaxis de uso es:

Set ObjColSCPs = ObjDocumento.UserCoordinateSystems

ObjColSCPs es un objeto de colección de Sistemas de Coordenadas Personales del que ya se hablará.

· Utility. Obtiene el objeto de utilidades para el documento actual activo. De este objeto hablaremos largo y tendido en su momento. Su sintaxis de uso es:

Set ObjUtil = ObjDocumento.Utility

ObjUtil es un objeto de utilidades del que ya se hablará.

· Viewports. Obtiene el objeto de colección de ventanas del documento actual activo. Su sintaxis de uso es:

Set ObjColVentanas = ObjDocumento.Viewports

ObjVentanas es un objeto de colección de ventanas del que ya se hablará.

· Views. Obtiene el objeto de colección de vistas del documento actual activo. Su sintaxis de uso es:

Set ObjColVistas = ObjDocumento.Views

ObjVistas es un objeto de colección de vistas del que ya se hablará.

Probablemente no logremos comprender ahora para que nos sirven todas estas propiedades que devuelven objetos y colecciones de objetos, pero en cuanto nos introduzcamos en la materia de las distintas colecciones se nos hará el camino más sencillo.

Básicamente lo que viene a significar lo podemos deducir de una de las propiedades que ya conocíamos: ModelSpace. Lo que en realidad hacemos al llamar a esta propiedad es llamar al objeto de colección de Espacio Modelo (llamado ModelSpace), que se encuentra bajo el documento actual activo (ActiveDocument) y bajo la aplicación (AutoCAD.Application). Tras la llamada podremos utilizar multitud de métodos y propiedades de este objeto de colección. Concretamente, y como ya dijimos, todos los métodos de dibujo de entidades (AddLine, AddCircle, AddRaster...) son métodos de la colección de Espacio Modelo, así como de Espacio Papel y bloques (se puede ver el la jerarquía del cuadro del inicio del MÓDULO). También existen propiedades que ya veremos.

Con los demás objetos y colecciones ocurrirá lo mismo: realizaremos la llamada al objeto de colección de capas, por ejemplo, para crear una nueva capa o para averiguar el número de capas que hay; o realizaremos la llamada a una capa concreta para cambiarle el color, averiguar su nombre, bloquearla... Digamos que todo está basado en algo parecido a las rutas de acceso o caminos de directorios: necesitamos incluir en ellas todas las carpetas y subcarpetas (niveles jerárquicos) en el orden correcto hasta llegar al objetivo final (propiedad o método). Por ello es muy importante entender (que no memorizar) el cuadro jerárquico del principio del MÓDULO; es esencial comprenderlo completa y correctamente.

A continuación estudiaremos los distintos métodos del documento activo.

· AuditInfo. Este método evalúa la integridad del dibujo actual. Para cada error AutoCAD provee de un mensaje de error al usuario. Además se puede elegir la opción de hacer que los errores se corrijan automáticamente.

La sintaxis de este método es:

Call ObjDocumento.AuditInfo(StrNombArch, BooCorregir)

donde StrNombArch es una cadena (tipo de dato String) que contendrá el nombre del archivo que se desea comprobar, y BooCorregir es un valor Boolean que determina si se desea la corrección de errores automática: True corrige automáticamente; False no corrige automáticamente.

· Export. Exporta el dibujo actual de AutoCAD a formato SAT, WMF, EPS, DXF, 3DS y/o BMP.

La sintaxis de este método es:

Call ObjDocumento.Export(StrNombArch, StrExtensión, ObjConjuntoSel)

donde StrNombArch es una cadena (tipo de dato String) que contendrá el nombre del archivo, StrExtensión es otra cadena que contendrá tres caracteres especificando la extensión, y puede ser (mayúsculas o minúsculas):

SAT
WMF
EPS
DXF
3DS
BMP

Y ObjConjuntoSel exporta sólo los objetos contenidos en el conjunto de selección especificado. A crear conjuntos de selección aprenderemos más adelante. Este conjunto de selección no puede estar vacío. Si este valor es Null se exporta el dibujo completo.

· GetVariable. Obtiene el valor de la variable de sistema de AutoCAD especificada. La sintaxis es:

VarValor = ObjDocumento.GetVariable(StrNombVar)

Siendo StrNombVar una cadena (String) que representa el nombre de la variable en cuestión (mayúsculas o minúsculas), y VarValor una variable Variant donde se guardará el valor.

· HandleToObject. Obtiene el objeto que se corresponde con el código de objeto dado. La sintaxis es:

ObjNoGráfico = ObjDocumento.HandleToObject(StrCódigoObj)

ObjNoGráfico es Object y StrCódigoObj es String.

· Import. Funciona de manera inversa a Export, es decir, importa un dibujo en determinado formato gráfico (SAT, WMF, EPS, DXF, 3DS o BMP) a un dibujo de AutoCAD 14 .DWG. La sintaxis de Import es:

Set ObjDocumento2 = ObjDocumento1.Import(StrNombArch, DblPtoIns, DblEsc)

ObjDocumento2 es un objeto (declarado como Object) que es el valor de salida del método. Este objeto es de tipo de documento evidentemente. StrNombArch es una cadena con el nombre y ruta del archivo en cuestión, DblPtoIns un array de tres valores Double que representan las coordenadas del punto de inserción, y DblEsc el factor de escala de inserción (Double también).

· LoadShapeFile. Carga un archivo de formas compilado .SHX. La sintaxis de este método es:

Call ObjDocumento.LoadShapeFile(StrNombArch)

StrNombArch como en métodos anteriores.

NOTA: Para insertar formas de un archivo de formas cargado recordemos el método AddShape de las colecciones de Espacio Modelo, Espacio Papel y bloques.

· New. Crea un nuevo documento y lo establece como documento activo. Para utilizar este método usaremos la sintaxis siguiente:

Set ObjDocumento2 = ObjDocumento1.New(StrNombrePlantilla)

ObjDocumento2 es el valor de salida (un objeto de documento). StrNombrePlantilla es una cadena String que contiene el camino completo y nombre de la plantilla (recordemos: archivos .DWT) con la que se abrirá el dibujo nuevo.

NOTA: Las plantillas por defecto (las que se abren en AutoCAD 14 cuando no se indica plantilla alguna) son ACADISO.DWT o ACAD.DWT, dependiendo de si trabajamos en milímetros (unidades métricas) o pulgadas (unidades inglesas).

· ObjectIDToObject. Obtiene el objeto que se corresponde con el ID de objeto dado. La sintaxis es:

ObjNoGráfico = ObjDocumento.ObjectIDToObject(LngIDObjeto)

ObjNoGráfico es Object y LngIDObject es Long.

· Open. Abre un dibujo existente que se convierte en el documento actual. Hay que pasarle como argumento String la ruta completa y nombre del archivo. La sintaxis de este método es:

Call ObjDocumento.Open(StrNombArch)

· PurgeAll. Limpia todo lo no utilizado en el dibujo. El método realiza la misma acción que utilizar el comando LIMPIA de AutoCAD con la opción TODO (PURGE, en inglés, con la opción ALL). Su sintaxis es:

ObjDocumento.PurgeAll

· Regen. Regenera el dibujo completo y recalcula las coordenadas de la pantalla y la resolución de la vista para todos los objetos. También reindexa la Base de Datos de dibujo para una óptima representación y selección de los objetos. Su sintaxis es:

ObjDocumento.Regen(IntVentanas)

IntVentanas es un valor Integer que admite las siguientes constantes:

acActiveViewport
acAllViewports

haciendo referencia a una regeneración en la ventana gráfica actual (REGEN) o en todas las ventanas gráficas (REGENT, REGENALL en inglés).

· Save. Guarda los cambios del documento actual activo. La sintaxis de uso es:

ObjDocumento.Save

· SaveAs. Guarda los cambios del documento actual activo, pasando como argumento el nombre de archivo y camino de acceso completo. El nuevo documento es el documento activo. La sintaxis de uso es:

ObjDocumento.SaveAs(StrNombArch)

StrNombArch es una cadena (tipo String).

· SetVariable. Asigna el valor especificado como segundo argumento a la variable de sistema de AutoCAD especificada como primer argumento. La sintaxis es:

Call ObjDocumento.SetVariable(StrNombVar, VarValor)

Siendo StrNombVar una cadena (String) que representa el nombre de la variable en cuestión (mayúsculas o minúsculas), y VarValor una variable Variant donde se guardará el valor.

NOTA: Tras el siguiente método —que es el último— se estudia un ejemplo completo en el que podremos observar un trato correcto de las variables (el más típico quizá) a la hora de utilizar GetVariable y SetVariable.

· WBlock. Crea un nuevo archivo de dibujo con el contenido del conjunto de selección indicado (al estilo de BLOQUEDISC, WBLOCK en inglés). La sintaxis es:

Call ObjDocumento.WBlock(StrNombArch, ObjConjuntoSel)

Siendo StrNombVar una cadena (String) que representa el nombre del archivo en cuestión (y su ruta), y ObjConjuntoSel un objeto de conjunto de selección que guarda las entidades con las que se creará un nuevo archivo. Este nuevo archivo no pasa a ser el documento activo, evidentemente.

Y una vez vistas propiedades y vistos métodos, exponemos un ejemplo muy interesante en el que, aunque no se encuentren muchas de las características vistas hasta este momento —ya que hemos de estudiar las colecciones para avanzar más—, nos ayudará a comprender un poco más la programación en VBA para AutoCAD 14.

El programa en cuestión consta de una cuadro de diálogo con varias pestañas en las que existen diferentes características de AutoCAD referidas a variables de sistema. Desde este cuadro podremos actuar sobre dichas variables de una forma versátil y rápida:


Y ahora se proporciona el listado completo del programa:

Option Explicit

Dim AcadDoc As Object


Private Sub buttonAceptar_Click()
  Call AcadDoc.SetVariable("surftab1", CInt(Val(boxSurftab1.Text)))
  Call AcadDoc.SetVariable("surftab2", CInt(Val(boxSurftab2.Text)))
  Call AcadDoc.SetVariable("isolines", CInt(Val(boxIsolíneas.Text)))
  Call AcadDoc.SetVariable("facetres", Val(boxSuavizado.Text)
  Call AcadDoc.SetVariable("dispsilh", Abs(checkSilueta.Value))
  Call AcadDoc.SetVariable("delobj", Abs(checkBorrar.Value))
  Call AcadDoc.SetVariable("ltscale", Val(boxEscala.Text)
  Call AcadDoc.SetVariable("filedia", Abs(checkArchivos.Value))
  Call AcadDoc.SetVariable("cmddia", Abs(checkImprimir.Value))
  End
End Sub


Private Sub buttonCancelar_Click()
  End
End Sub


Private Sub buttonDefecto_Click()
  boxSurftab1.Text = "16"
  boxSurftab2.Text = "16"
  boxIsolíneas.Text = "4"
  boxSuavizado.Text = "2.5"
  checkSilueta.Value = 0
  checkBorrar.Value = 1
  boxEscala.Text = "1"
  checkArchivos.Value = 1
  checkImprimir.Value = 1
End Sub


Private Sub UserForm_Initialize()
  Set AcadDoc = GetObject(, "AutoCAD.Application").ActiveDocument

  boxSurftab1.Text = Str(AcadDoc.GetVariable("surftab1"))
  boxSurftab2.Text = Str(AcadDoc.GetVariable("surftab2"))
  boxIsolíneas.Text = Str(AcadDoc.GetVariable("isolines"))
  boxSuavizado.Text = Str(AcadDoc.GetVariable("facetres"))
  checkSilueta.Value = AcadDoc.GetVariable("dispsilh")
  checkBorrar.Value = AcadDoc.GetVariable("delobj")
  boxEscala.Text = Str(AcadDoc.GetVariable("ltscale"))
  checkArchivos.Value = AcadDoc.GetVariable("filedia")
  checkImprimir.Value = AcadDoc.GetVariable("cmddia")
End Sub

Comentémoslo un poco. Tras declarar e inicializar únicamente un objeto para el documento actual (no necesitamos más), se escriben en las distintas casillas (al inicializar el formulario) los diferentes valores de las variables de sistema. Para ello se convierten a cadena con Str. Es conveniente realizar esto, ya que si no utilizamos Str vamos a tener posteriores problemas con la coma (,) y el punto (.) como separadores decimales; convirtiendo con Str pasará todo como tal, es decir, con un punto decimal que es lo que se utiliza normalmente.

Las variables que tienen un valor booleano (0 ó 1) se pueden igualar directamente a la propiedad Value de las casillas de verificación, porque éstas reconocen sin problema alguno los valores y establecen la casilla dependiendo de ellos (1 marcada y 0 sin marcar).

A la hora de realizar la operación inversa, es decir, leer los valores de las casillas e introducirlos en las variables de sistema, deberemos observar algunas consideraciones. Las variables que necesiten un valor Double (tipo FACETRES) pueden ser convertidas a valor numérico directamente con Val; las que necesiten un valor entero (SURFTAB1 por ejemplo) se convierte con Val y se transforman a Integer con Cint; las variables que necesiten un valor booleano (tipo FILEDIA) se suministran directamente leídas de la casilla de verificación. Pero cuidado, cuando una casilla está activada, al leerla para SetVariable se devuelve el valor –1, por lo que habremos de asegurarnos siempre introduciendo una función Abs por delante, que devuelve el valor absoluto sin signo.

Por último y como vemos, el botón Defecto rellena las casillas con unos valores que se estiman por defecto, y el botón Cancelar simplemente termina el programa.

Evidentemente faltaría un pequeño control de errores en el programa que evitara introducir valores decimales donde no se puede y demás. Con ello y algunos detalles más el programa estaría completo.

 

2ª fase intermedia de ejercicios

· Programar un ejercicio que permita descargar las aplicaciones ARX cargadas actualmente. El letrero de diálogo presentará una lista desplegable con las aplicaciones cargadas y, tras escoger una de ellas se procederá a su descarga haciendo clic en un botón de acción. El cuadro puede ser este:

 

 

DOCE.8. LAS COLECCIONES Y SUS OBJETOS

Pasaremos ahora al estudio más profundo de las diversas colecciones de objetos que posee VBA para AutoCAD 14, mencionadas en diversos puntos de la sección anterior.

Un objeto colección es un conjunto de objetos a los que se puede hacer referencia como grupo. Bajo esta sección veremos las distintas maneras de tratar las colecciones VBA para AutoCAD 14, que son: objetos del Espacio Modelo, objetos del Espacio Papel, bloques, diccionarios, estilos de acotación, grupos, capas, tipos de línea, aplicaciones registradas, conjuntos de selección, estilos de texto, SCPs, vistas y ventanas.

Cada colección será explicada con sus métodos, sus propiedades y sus elementos simples. Esto último se refiere a los elementos integrantes de cada colección; así por ejemplo, la colección de capas está formada por objetos simples que son, evidentemente, las capas. Tanto la colección de capas, como cada una de ellas dispondrán de propiedades y métodos propios.

NOTA: Las colecciones nacen directamente del documento actual activo, como se puede ver en la plantilla del comienzo de este MÓDULO.

 

DOCE.8.1. Colección de objetos de Espacio Modelo

La colección de objetos de Espacio Modelo es en realidad una colección especial de bloques que contiene todas las entidades del Espacio Modelo de AutoCAD. Veamos sus propiedades y métodos.

 

Propiedades de la colección de objetos de Espacio Modelo:

Application
Count
Name

Métodos de la colección de objetos de Espacio Modelo:

Add3DFace
Add3DMesh
Add3DPoly
AddArc
AddAttribute
AddBox
AddCircle
AddCone
AddCustomObject
AddCylinder
AddDimAligned
AddDimAngular
AddDimDiametric
AddDimOrdinate
AddDimRadial
AddDimRotated
AddEllipse
AddEllipticalCone
AddEllipticalCylinder
AddExtrudedSolid
AddExtrudedSolidAlongPath
AddHatch
AddLeader
AddLightWeightPolyline
AddLine
AddMText
AddPoint
AddPolyline
AddRaster
AddRay
AddRegion
AddRevolvedSolid
AddShape
AddSolid
AddSphere
AddSpline
AddText
AddTolerance
AddTorus
AddTrace
AddWedge
AddXLine
InsertBlock
Item

Como vemos, al menos los métodos nos suenan casi todos, y es que no son otros que los explicados en la sección DOCE.5. de este MÓDULO. Veamos lo nuevo.

En cuestión de propiedades aparece una nueva:

· Count. Obtiene el número de objetos existentes en una colección (grupo y conjunto de selección también).

Esta propiedad de sólo lectura tiene como sintaxis:

IntNúmero = ObjNoGráfico.Count

Donde IntNúmero será una variable declarada evidentemente como Integer.

La ejecución de la siguiente macro devolvería el número de objetos existente actualmente en el Espacio Modelo:

Option Explicit

Dim Acad As Object
Dim AcadDoc As Object
Dim AcadModel As Object


Sub Macro()
  Set Acad = GetObject(, "AutoCAD.Application")
  Set AcadDoc = Acad.ActiveDocument
  Set AcadModel = AcadDoc.ModelSpace
  Dim Num As Integer
  Num = AcadModel.Count
  MsgBox Num
End Sub

Probemos a dibujar y borrar entidades para ver los distintos resultados de la propiedad Count y comprenderla bien.

Veamos ahora los dos nuevos métodos.

· InsertBlock. Este método inserta un bloque en una colección (Modelo, Papel o bloques) que se encuentre definido en la sesión actual de dibujo.

NOTA: Si se inserta un bloque dentro de otro (en colección de bloques) se crearán bloques anidados.

La sintaxis para utilizar este método es:

Set ObjRefBloque = ObjNoGráfico.InsertBlock(DblPtoIns, StrNombre, DblEscalaX, DblEscalaY, DblRotación)

DblPtoIns es una matriz de tres valores Double que especifica el punto de inserción para el bloque. StrNombre se refiere al nombre del bloque, si es una variable habrá sido declarada como String. DblEscalaX y DblEscalaY son dos valores Double que representan la escala de inserción del bloque en X e Y. DblRotación es una valor Double que dice relación al ángulo de rotación de inserción en radianes.

Veamos la siguiente macro:

Option Explicit

Dim Acad As Object
Dim AcadDoc As Object
Dim AcadModel As Object


Sub Macro()
  Set Acad = GetObject(, "AutoCAD.Application")
  Set AcadDoc = Acad.ActiveDocument
  Set AcadModel = AcadDoc.ModelSpace
  Dim Bloq As Object
  Dim PtoIns(1 To 3) As Double
  PtoIns(1) = 10: PtoIns(2) = 10: PtoIns(3) = 0
  Set Bloq = AcadModel.InsertBlock(PtoIns, "circl", 1, 1, 0)
End Sub

El resultado será la inserción en el punto 10,10,0 (a escala 1:1 y con un ángulo de rotación de 0 radianes) del bloque definido con el nombre de circl. Este bloque deberá existir en el dibujo actual. Este resultado es un objeto de referencia a bloque, que ya vimos, por lo que podrá ser tratado como tal.

· Item. Este método obtiene el objeto especificado por un índice dentro de una colección (o también grupo o conjunto de selección). Su sintaxis es:

Set ObjGráfico = ObjNoGráfico.Item(VarÍndice)

Donde VarÍndice es un valor Variant que puede ser un entero o una cadena. Si es entero va desde 0 (como primer objeto) hasta N-1 (como último objeto), siendo N el total de objetos en la colección (o grupo o conjunto de selección). Si VarÍndice es una cadena será el nombre de un bloque creado o similar.

El resultado es un objeto gráfico, definido como Object.

 

DOCE.8.2. Colección de objetos de Espacio Papel

La colección de objetos de Espacio Papel es, así como la de Espacio Modelo, en realidad una colección especial de bloques que contiene todas las entidades del Espacio Papel de AutoCAD. Las propiedades y los métodos son iguales que para Espacio Modelo.

Propiedades de la colección de objetos de Espacio Papel:

Application
Count
Name

Métodos de la colección de objetos de Espacio Papel:

Add3DFace
Add3DMesh
Add3DPoly
AddArc
AddAttribute
AddBox
AddCircle
AddCone
AddCustomObject
AddCylinder
AddDimAligned
AddDimAngular
AddDimDiametric
AddDimOrdinate
AddDimRadial
AddDimRotated
AddEllipse
AddEllipticalCone
AddEllipticalCylinder
AddExtrudedSolid
AddExtrudedSolidAlongPath
AddHatch
AddLeader
AddLightWeightPolyline
AddLine
AddMText
AddPoint
AddPolyline
AddPViewPort
(*)
AddRaster
AddRay
AddRegion
AddRevolvedSolid
AddShape
AddSolid
AddSphere
AddSpline
AddText
AddTolerance
AddTorus
AddTrace
AddWedge
AddXLine
InsertBlock
Item

Las propiedades y métodos expuestos están ya estudiados.

(*) NOTA: Únicamente un método aparece aquí nuevo (AddPViewport), pero vamos a posponer su estudio a la sección DOCE.8.14.1., pues allí se habla de las ventanas de Espacio Modelo y este método está relacionado, ya que sirve para gestionar ventanas en Espacio Papel.

Veamos un pequeño programa que dibuja una línea desde el punto 100,-50,0 hasta el punto 0,0,0 en Espacio Modelo o Espacio Papel, dependiendo de lo que el usuario elija. El listado es:

Option Explicit

Dim Acad As Object
Dim AcadDoc As Object
Dim AcadModel As Object
Dim AcadPaper As Object
Dim Línea As Object
Dim Pto1(1 To 3) As Double
Dim Pto2(1 To 3) As Double


Private Sub cbDibujar_Click()
  If obModelo.Value = True Then
    Set Línea = AcadModel.AddLine(Pto1, Pto2)
  Else
    Set Línea = AcadPaper.AddLine(Pto1, Pto2)
  End If
  End
End Sub


Private Sub cbSalir_Click()
  End
End Sub


Private Sub UserForm_Initialize()
  Set Acad = GetObject(, "AutoCAD.Application")
  Set AcadDoc = Acad.ActiveDocument
  Set AcadModel = AcadDoc.ModelSpace
  Set AcadPaper = AcadDoc.PaperSpace

  Pto1(1) = 100: Pto1(2) = -50: Pto1(3) = 0
  Pto2(1) = 0: Pto2(2) = 0: Pto2(3) = 0
End Sub

El cuadro de diálogo (formulario) correspondiente podría ser el que se muestra a continuación.

La manera de utilizarlo es simple: sólo hay que escoger a cuál de las dos colecciones se van a añadir los objetos gráficos, a la colección de objetos de Espacio Modelo o a la colección de objetos de Espacio Papel. Tras esto se pulsa el botón Dibujar ahora! Para trazar la línea en el espacio correspondiente.

El botón Salir simplemente termina la ejecución del programa.