De estas dos colecciones vistas hasta ahora los objetos componentes simples son todos los ya estudiados: líneas, círculos, arcos, referencias de bloque...
DOCE.8.3. Colección de bloques y el objeto bloque
La colección de bloques (
Blocks) la constituyen todos los bloques del documento actual activo. Las propiedades y métodos de esta colección las vemos seguidamente.Propiedades de la colección de bloques:
Application
Count
Métodos de la colección de bloques:
Add
Sólo un nuevo método hemos de explicar:
·
Add. Este método añade un nuevo objeto a la colección indicada. Su sintaxis específica para la colección de bloques es:Set ObjBloque = ObjColBloques.Add(DblPtoIns, StrNombre)
DblPtoIns
es un valor Double para el punto de inserción (matriz de tres valores Double) y StrNombre es una cadena (String) para el nombre del bloque.El objeto resultante de esta operación es un objeto de bloque, esto es, un bloque. Los objetos de bloque poseen las siguientes propiedades y métodos:
Propiedades de los objetos de bloque:
Application
Name
Origin
Métodos de los objetos de bloque:
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
Delete
InsertBlock
Item
Veamos un ejemplo de macro VBA en el que se crea un bloque con una sola línea:
Option Explicit Dim Acad As Object Dim AcadDoc As Object Dim AcadModel As Object Dim AcadBloq As Object Dim Lin As Object
Sub Macro() Set Acad = GetObject(, "AutoCAD.Application") Set AcadDoc = Acad.ActiveDocument Set AcadModel = AcadDoc.ModelSpace Set AcadBloq = AcadDoc.Blocks Dim Bloq As Object Dim PtoIns(1 To 3) As Double Dim Pto2(1 To 3) As Double PtoIns(1) = 10: PtoIns(2) = 10: PtoIns(3) = 0 Pto2(1) = 100: Pto2(2) = 100: Pto2(3) = 0 Set Bloq = AcadBloq.Add(PtoIns, "pqpq") Set Bloq = Bloq.AddLine(PtoIns, Pto2) End Sub
Lo que se debe hacer en primera instancia es crear el objeto de bloque en la colección de bloques (
Set Bloq = AcadBloq.Add(PtoIns, "pqpq")); es como si creáramos un bloque vacío. Después se le añaden entidades de dibujo, como en este caso una línea (Set Bloq = Bloq.AddLine(PtoIns, Pto2)) con los métodos ya estudiados, ya que estos métodos, como hemos visto, son propios también de la colección de objetos de bloque.El nuevo método no estudiado aún de los objetos que son bloques es:
·
Delete. Delete borra o elimina el objeto indicado. Hemos de indicar el nombre de dicho objeto (bloque, estilo de acotación, SCP...) como una cadena (String), pero esto no es necesario más que para la colección de ventanas:ObjNoGrafico
.Delete(StrNombreObj)
DOCE.8.4. Colección de diccionarios y el objeto
diccionario
La colección de diccionarios (
Dictionaries) la constituyen todos los objetos de diccionario del documento actual activo.Propiedades de la colección de diccionarios:
Application
Count
Métodos de la colección de diccionarios:
Add
Item
Las propiedades y métodos expuestos están ya estudiados.
NOTA: El método
Add hemos visto que tenía una sintaxis especial para la colección de bloques. Pues bien, para ella y para la colección de SCPs existen estas sintaxis especiales (esta última ya se verá en su momento). Para el resto de las colecciones la sintaxis del método Add es la siguiente:Set ObjComponenteCol = ObjColección.Add(StrNombre)
StrNombre
es el nombre (String) del objeto que se añadirá a la colección.Sigamos. El objeto simple de la colección de diccionarios es un objeto de diccionario. Los objetos de diccionario poseen las siguientes propiedades y métodos:
Propiedades de los objetos de diccionario:
Application
Name
Métodos de los objetos de diccionario:
AddObject
Un diccionario es un sistema para almacenar y recuperar objetos con una cadena de palabras clave asociada. El objeto puede ser referenciado en un diccionario mediante su palabra clave. Un diccionario puede contener cualquier tipo de objeto, incluso otro diccionario.
NOTA: Este objeto de diccionario no tiene nada que ver con el diccionario ortográfico de corrección de AutoCAD.
Los nuevos métodos de los objetos de diccionario que hemos de estudiar son los que siguen a continuación.
·
AddObject. Añade un nuevo objeto a un diccionario. Si la entrada ya existe es sustituida por el nuevo objeto, si no simplemente se agrega. Los dos argumentos para este método (nombre de objeto y palabra clave) han de ser cadenas (String). Veamos la sintaxis:Set ObjNoGráfico = ObjDiccionario.AddObject(StrPalClave, StrNomObjeto)
·
GetName. Devuelve el nombre (palabra clave) de un objeto de un diccionario:StrNombre
= ObjDiccionario.GetName(ObjEnDiccionario)·
GetObject. Devuelve el objeto que se corresponde con una palabra clave en un diccionario:ObjEnDiccionario
= ObjDiccionario.GetObject(StrPalClave)·
Remove. Elimina el objeto de un diccionario indicado por su palabra clave:Call ObjDiccionario.Remove(StrPalClave)
·
Rename. Cambia el nombre (palabra clave) del objeto de un diccionario indicado por su palabra clave:Call ObjDiccionario.Rename(StrNombreAntiguo, StrNombreNuevo)
·
Replace. Cambia una entrada en un diccionario por otra dada:Call ObjDiccionario.Replace(StrPalClave, ObjObjetoNuevo)
DOCE.8.5. Colección de estilos de acotación y el
objeto estilo de acotación
La colección de estilos de acotación (
DimStyles) la constituyen todos los objetos de estilos de cota del documento actual activo, es decir, los estilos de acotación que todos conocemos.Propiedades de la colección de estilos de acotación:
Application
Count
Métodos de la colección de estilos de acotación:
Add
Item
Las propiedades y métodos expuestos están ya estudiados.
El objeto simple de esta colección es un objeto de estilo de acotación. Los objetos de estilo de acotación poseen las siguientes propiedades y métodos:
Propiedades de los objetos de estilo de acotación:
Application
Name
Métodos de los objetos de estilo de acotación:
Delete
GetXData
SetXData
Las propiedades y métodos expuestos están ya estudiados.
DOCE.8.6. Colección de grupos y el objeto grupo
La colección de grupos (
Groups) la constituyen todos los objetos de grupo del documento actual activo.Propiedades de la colección de grupos:
Application
Count
Métodos de la colección de grupos:
Add
Item
Las propiedades y métodos expuestos están ya estudiados.
El objeto simple de esta colección es un objeto de grupo. Los objetos de grupo son conjuntos de selección con nombre y poseen las siguientes propiedades y métodos:
Propiedades de los objetos de grupo:
Application
Color
Count
EntityName
EntityType
Handle
Layer
LineType
LinetypeScale
Name
ObjectID
Visible
Métodos de los objetos de grupo:
AppendItems
Los métodos nuevos son:
·
AppendItems. Añade una o más entidades gráficas al grupo:Call ObjGrupo.AppendItems(ObjGráficos)
ObjGráficos
es una matriz de objetos gráficos de AutoCAD.·
RemoveItems. Elimina los objetos especificados de un grupo (o también de un conjunto de selección):Call ObjGrupo.RemoveItems(ObjGráficos)
ObjGráficos
es una matriz de objetos gráficos de AutoCAD.
DOCE.8.7. Colección de capas y el objeto capa
La colección de capas (
Layers) la constituyen todos los objetos de capa del documento actual activo, es decir, las capas del dibujo.Propiedades de la colección de capas:
Application
Count
Métodos de la colección de capas:
Add
Item
Las propiedades y métodos expuestos están ya estudiados.
Por ejemplo, la siguiente macro crearía una nueva capa llamadas
EJES:Option Explicit Dim AcadDoc As Object Dim AcadModel As Object
Sub Macro() Set AcadDoc = GetObject(, "AutoCAD.Application").ActiveDocument Set AcadModel = AcadDoc.ModelSpace Call AcadDoc.Layers.Add("ejes") End Sub
El objeto simple de esta colección es un objeto de capa. Los objetos de capa poseen las siguientes propiedades y métodos:
Propiedades de los objetos de capa:
Application
Color
Freeze
LayerOn
LineType
Lock
Name
Métodos de los objetos de capa:
Delete
GetXData
SetXData
Las nuevas propiedades se explican a continuación.
·
Freeze. La propiedad Freeze congela o descongela una capa. Es lo que se denomina en la versión castellana de AutoCAD 14 la inutilización y reutilización de capas (representado por un Sol o un símbolo de hielo, dependiendo de la condición, en el cuadro de diálogo de capas). También nos permite obtener el estado en que se encuentra una capa con respecto a este aspecto.La sintaxis para asignar un estado con
Freeze a una capa es:ObjCapa
.Freeze = BooEstadoUtilizaciónBooEstadoUtilización
es un valor Boolean que puesto a True indica que la capa se inutiliza (se congela) y puesto a False indica que la capa se reutiliza o utiliza (se descongela).La sintaxis para obtener un estado con
Freeze de una capa es:BooEstadoUtilización
= ObjCapa.FreezeBooEstadoUtilización
es un valor Boolean que si almacena True indica que la capa está inutilizada y si almacena False indica que la capa está reutilizada o utilizada.Recordemos que la ventaja de inutilizar o congelar una capa es que es excluida de la regeneración, lo que no ocurre por ejemplo al desactivarla simplemente. También decir que una capa inutilizada no es trazada (por plotter o impresora).
·
LayerOn. La propiedad LayerOn activa o desactiva una capa (representado por una bombilla encendida o apagada, dependiendo de la condición, en el cuadro de diálogo de capas). También nos permite obtener el estado en que se encuentra una capa con respecto a este aspecto.La sintaxis para asignar un estado con
LayerOn a una capa es:ObjCapa
.LayerOn = BooEstadoActivaciónBooEstadoActivación
es un valor Boolean que puesto a True indica que la capa se activa y puesto a False indica que la capa de desactiva.La sintaxis para obtener un estado con
LayerOn de una capa es:BooEstadoActivación
= ObjCapa.LayerOnBooEstadoActivación
es un valor Boolean que si almacena True indica que la capa está activada y si almacena False indica que la capa está desactivada.Al desactivar un capa no aparecerá en pantalla ni en trazador, pero sus objetos seguirán respondiendo a las regeneraciones del dibujo.
·
Lock. La propiedad Lock bloquea o desbloquea una capa (representado por un candado abierto o cerrado, dependiendo de la condición, en el cuadro de diálogo de capas). También nos permite obtener el estado en que se encuentra una capa con respecto a este aspecto.La sintaxis para asignar un estado con
Lock a una capa es:ObjCapa
.Lock = BooEstadoBloqueoBooEstadoBloqueo
es un valor Boolean que puesto a True indica que la capa se bloquea y puesto a False indica que la capa de desbloquea.La sintaxis para obtener un estado con
Lock de una capa es:BooEstadoBloqueo
= ObjCapa.LockBooEstadoBloqueo
es un valor Boolean que si almacena True indica que la capa está bloqueada y si almacena False indica que la capa está desbloqueada.Al bloquear una capa no se podrá modificar, pero seguirá visible y respondiendo a acciones como, por ejemplo, la utilización de modos de referencia en ella.
Veamos un programa de ejemplo de manejo de capas. Este ejercicio maneja el cuadro de diálogo que se puede observar en esta misma página. Su misión es únicamente informativa, es decir, sólo informa del nombre y propiedades de las diferente capas del dibujo actual.
Al ejecutar el programa deberá rellenar la lista desplegable con las capas de la sesión de AutoCAD en curso y mostrará la primera de ellas (siempre la capa
0) escribiendo en los distintos cuadros de edición sus respectivas propiedades.Al actuar sobre la lista desplegable eligiendo una capa, las casillas de edición se actualizarán con los nuevos valores.
Veamos pues el letrero de diálogo comentado y, a continuación, el listado del programa propiamente dicho.
El listado es el que sigue:
Option Explicit Dim AcadDoc As Object Dim AcadModel As Object Dim AcadCapas As Object Dim NumCapas As Integer
Private Sub cbSalir_Click() End End Sub
Private Sub cbCapas_Change() Dim Índice As Integer Índice = cbCapas.ListIndex tbColor.Text = AcadCapas.Item(Índice).Color tbTipolin.Text = AcadCapas.Item(Índice).Linetype If AcadCapas.Item(Índice).LayerOn = True Then tbAD.Text = "Activada" Else tbAD.Text = "Desactivada" End If If AcadCapas.Item(Índice).Freeze = True Then tbIR.Text = "Inutilizada" Else tbIR.Text = "Utilizada" End If If AcadCapas.Item(Índice).Lock = True Then tbBD.Text = "Bloqueada" Else tbBD.Text = "Desbloqueada" End If End Sub
Private Sub UserForm_Initialize() Set AcadDoc = GetObject(, "AutoCAD.Application").ActiveDocument Set AcadModel = AcadDoc.ModelSpace Set AcadCapas = AcadDoc.Layers NumCapas = AcadCapas.Count Dim i As Integer For i = 0 To Val(NumCapas - 1) cbCapas.AddItem AcadCapas.Item(i).Name Next i cbCapas.Text = AcadCapas.Item(0).Name End Sub
Vemos como en cuanto se corre el programa se hace una llamada al procedimiento
cbCapas_Change. Esto es debido a la línea cbCapas.Text = AcadCapas.Item(0).Name, que en sí ya realiza un cambio en la lista desplegable, por eso se ejecuta el procedimiento anteriormente dicho. Esta línea escribe en la casilla de la lista desplegable el primero de los elementos (la primera capa, la capa 0).Antes de esto se introducen todos los nombres de capas en la lista. Vemos que no tiene ningún misterio y que simplemente es limitarse a seguir las pautas y diversas sintaxis de uso que vamos estudiando.
Con las extracción del color, tipo de línea y demás propiedades, vemos que el proceso es similar. La única variante es que se ha introducido un control para averiguar cuando determinados valores son
True o False y escribir textos en las casillas que resulten más lógicos al usuario que Verdadero y/o Falso.NOTA: Como el cuadro es sólo informativo no nos olvidemos de establecer la propiedad
Style de la lista desplegable a 2 (fmStyleDropDownList) y las propiedades Locked de las casillas de edición a True. Todo ello para no poder editar valores manualmente. Si quisiéramos que el usuario pudiera entrar en las casillas y variar los valores para cambiar las propiedades de las capas, únicamente habríamos de dejar estas propiedades especificadas como están y añadir algo más de código al programa con las diferentes sintaxis para asignar en lugar de obtener las propiedades de las capas.
DOCE.8.8. Colección de tipos de línea y el objeto
tipo de línea
La colección de tipos de línea (
Linetypes) la constituyen todos los objetos de tipo de línea del documento actual activo, es decir, los tipos de línea cargados en el dibujo.Propiedades de la colección de tipos de línea:
Application
Count
Métodos de la colección de tipos de línea:
Add
Item
Load
Como vemos hay un nuevo método:
·
Load. Carga en el dibujo actual el tipo de línea especificado (String) del archivo de definición de tipos de línea (.LIN) especificado (String):Call ObjColTiposDeLínea.Load(StrNombreTipoLínea, StrNombreArchivo)
NOTA
: Si utilizamos el método Add se creará un nuevo tipo de línea con las propiedades por defecto.El objeto simple de esta colección es un objeto de tipo de línea. Los objetos de tipo de línea poseen las siguientes propiedades y métodos:
Propiedades de los objetos de tipo de línea:
Application
Description
Name
Métodos de los objetos de tipo de línea:
Delete
GetXData
SetXData
La nueva propiedad es:
·
Description. Asigna u obtiene una descripción (String) para el tipo de línea. Esta descripción es la que aparece en el archivo de definición .LIN y en el cuadro de gestión de tipos de línea, es la representación de la línea con caracteres ASCII (puntos, guiones, texto, etc...). Como máximo puede tener 47 caracteres.La sintaxis para asignar una descripción es:
ObjTipoLínea
.Description = StrDescripciónLa sintaxis para obtener una descripción es:
StrDescripción
= ObjTipoLínea.DescriptionVeamos la siguiente macro de ejemplo en la que se carga un tipo de línea y se obtiene su descripción:
Option Explicit Dim AcadDoc As Object
Sub Macro() Set AcadDoc = GetObject(, "AutoCAD.Application").ActiveDocument If IsEmpty(AcadDoc.Linetypes.Item("trazo_y_punto")) Then Call AcadDoc.Linetypes.Load("trazo_y_punto", "acadiso.lin") End If Dim TipoLin As Object Set TipoLin = AcadDoc.Linetypes.Item("trazo_y_punto") Dim Descr As String Descr = TipoLin.Description MsgBox Descr End Sub
NOTA
: Podemos comprobar que con la única definición de AcadDoc nos sirve para este programa; no hay por qué declarar más variables de objeto de AutoCAD si no es necesario.Si intentamos cargar un tipo de línea y este ya está cargado (o crear un capa que ya existe, un estilo de texto, etcétera), VBA devuelve un error. Para evitar esto hemos de comprobar primero si dicho tipo de línea en este caso está ya cargado. Para estos menesteres utilizamos la función de Visual Basic
IsEmpty como se puede observar en el listado.Tras cargar el tipo de línea, si no estaba ya cargado, se extrae su descripción y se muestra con un
MsgBox. El resultado es el siguiente:
DOCE.8.9. Colección de aplicaciones registradas y el La colección de aplicaciones registradas ( Propiedades de la colección de aplicaciones registradas:
Application Métodos de la colección de aplicaciones registradas:
Add Las propiedades y métodos expuestos están ya estudiados.
El objeto simple de esta colección es un objeto de aplicación registrada. Los objetos de aplicación registrada poseen las siguientes propiedades y métodos:
Propiedades de los objetos de aplicación registrada:
Application Métodos de los objetos de tipo de aplicación registrada:
Delete Las propiedades y métodos expuestos están ya estudiados.
DOCE.8.10. Colección de conjuntos de selección y el La colección de conjuntos de selección ( Propiedades de la colección de conjuntos de selección:
Application Métodos de la colección de conjuntos de selección:
Add Las propiedades y métodos expuestos están ya estudiados.
El objeto simple de esta colección es un objeto de conjunto de selección. Los objetos de conjunto de selección poseen las siguientes propiedades y métodos:
Propiedades de los objetos de conjunto de selección:
Application Métodos de los objetos de conjunto de selección:
AddItems Veamos estos nuevos métodos aplicables únicamente a conjuntos de selección.
· Call ObjConjuntoSel.AddItems(ObjGráficos)
ObjGráficos NOTA: No confundir El siguiente ejemplo de macro dibuja una línea, un círculo, crea un conjunto de selección y le añade ambos objetos creados:
NOTA: Si el archivo
objeto aplicación registrada
Count
Item
Name
GetXData
SetXData
objeto conjunto de selección
Count
Item
Count
Name
Clear
Delete
Erase
Highlight
Item
RemoveItems
ScaleEntity
Select
SelectAtPoint
SelectByPolygon
SelectOnScreen
Update
Option Explicit Dim AcadDoc As Object Dim AcadModel As Object Dim Línea As Object Dim Círculo As Object Dim Grupo1 As Object
Sub Macro() Set AcadDoc = GetObject(, "AutoCAD.Application").ActiveDocument Set AcadModel = AcadDoc.ModelSpace Dim Pto1(2) As Double Dim Pto2(2) As Double Pto1(0) = 100: Pto1(1) = 100: Pto1(2) = 0 Pto2(0) = 200: Pto2(1) = 200: Pto2(2) = 0 Set Línea = AcadModel.AddLine(Pto1, Pto2) Set Círculo = AcadModel.AddCircle(Pto1, 10) Set Grupo1 = AcadDoc.SelectionSets.Add("Prueba") Dim Objeto(1) As Object Set Objeto(0) = Línea: Set Objeto(1) = Círculo Call Grupo1.AddItems(Objeto) End Sub
Si ahora yo quisiera eliminar por ejemplo ambos objetos guardados en el conjunto de selección
Grupo1, simplemente haría:Grupo1.Erase
·
Clear. Elimina todos los elementos de un conjunto de selección:Call ObjConjuntoSel.Clear
Esto es, vacía el conjunto.
·
Select. Selecciona los objetos designados por el modo indicado y los introduce en un conjunto de selección. Su sintaxis de utilización es:Call ObjConjuntoSel.Select(IntModo, DblPto1, DblPto2, VarTipoFiltro, VarDatoFiltro)
El argumento
IntModo es un valor Integer que define el tipo o modo de selección que se ejecutará sobre los objetos. Admite también las siguientes constantes:
acSelectionSetAll
acSelectionSetCrossing
acSelectionSetCrossingPolygon
acSelectionSetFence
acSelectionSetLast
acSelectionSetPrevious
acSelectionSetWindows
acSelectionSetWindowPolygon
Las cuales se corresponden con los diferentes modos de designación de entidades de AutoCAD 14, esto es: Todo, Captura, Polígono-Captura, Borde, Último, Previo, Ventana y Polígono-Ventana.
Los dos argumentos de punto siguientes (matriz de tres valores
Double) son obligatorios. En el caso de Captura y Ventana representan las dos esquinas opuestas por la diagonal. En el caso de Polígono (Captura o Ventana) y Borde, el primer argumento DblPto1 debe contener una matriz con todos los puntos que definen el polígono o el borde, y se debe suministrar un argumento DblPto2 ficticio; en este caso resulta preferible utilizar el método SelectByPolygon (que luego veremos). En el caso de modos que no necesitan puntos, como Todo, Último y Previo, los dos puntos se deben suministrar como argumentos ficticios que luego no se van a utilizar.El argumento
VarTipoFiltro (Variant) permite especificar un filtro de selección, de manera similar a la función de AutoLISP SSGET. El último argumento permite especificar filtros para los datos extendidos.·
SelectAtPoint. Selecciona el objeto que pasa por el punto indicado y lo añade a un conjunto de selección. Su sintaxis de utilización es:Call ObjConjuntoSel.SelectAtPoint(DblPto, VarTipoFiltro, VarDatoFiltro)
DblPto
es una matriz de tres valores Double. Los dos últimos argumentos como en el método Select.·
SelectByPolygon. Selecciona entidades incluidas dentro de un polígono definido por una lista de puntos suministrada (y las añade a un conjunto de selección). Su sintaxis de utilización es:Call ObjConjuntoSel.SelectByPolygon(IntModo, DblListaPtos, VarTipoFiltro, VarDatoFiltro)
El argumento
IntModo es un valor Integer que define el tipo o modo de selección que se ejecutará sobre los objetos. Admite también las siguientes constantes:acSelectionSetCrossing
acSelectionSetCrossingPolygon
acSelectionSetFence
DblListaPtos
es una matriz de puntos con las esquinas del polígono. Los dos últimos argumentos como en el método Select.·
SelectOnScreen. Permite seleccionar objetos en pantalla (tras el prompt Designar objetos:, o Select objects: en inglés) que serán añadidos a un conjunto de selección. Su sintaxis de utilización es:Call ObjConjuntoSel.SelectOnScreen(VarTipoFiltro, VarDatoFiltro)
Los dos argumentos como en el método
Select.NOTA: En todos estos métodos de selección, los argumentos
VarTipoFiltro y VarDatoFiltro son opcionales.Veamos el siguiente ejemplo:
Option Explicit Dim AcadDoc As Object Dim AcadModel As Object Dim Línea As Object Dim Círculo As Object Dim Grupo1 As Object
Sub Macro() Set AcadDoc = GetObject(, "AutoCAD.Application").ActiveDocument Set AcadModel = AcadDoc.ModelSpace Dim Pto1(2) As Double Dim Pto2(2) As Double Pto1(0) = 100: Pto1(1) = 100: Pto1(2) = 0 Pto2(0) = 200: Pto2(1) = 200: Pto2(2) = 0 Set Línea = AcadModel.AddLine(Pto1, Pto2) Set Círculo = AcadModel.AddCircle(Pto1, 10) Set Grupo1 = AcadDoc.SelectionSets.Add("Prueba") Call Grupo1.SelectOnScreen Grupo1.Erase End Sub
Esta macro dibuja una línea y un círculo en pantalla. Tras crear un nuevo conjunto de selección (
Grupo1) se permite seleccionar en pantalla los objetos que se insertarán en él. Después de esta designación los objetos se borran.NOTA: Más adelante veremos como seleccionar también en pantalla puntos, ángulos, distancias, etcétera.
DOCE.8.11. Colección de estilos de texto y el objeto
estilo de texto
La colección de estilos de texto (
TextStyles) la constituyen todos los objetos de estilo de texto del documento actual activo, o sea, los estilos de texto creados actualmente.Propiedades de la colección de estilos de texto:
Application
Count
Métodos de la colección de estilos de texto:
Add Item
Las propiedades y métodos expuestos están ya estudiados.
El objeto simple de esta colección es un objeto de estilo de texto. Los objetos de estilo de texto poseen las siguientes propiedades y métodos:
Propiedades de los objetos de estilo de texto:
Application
BigFontFile
FontFile
Height
LastHeight
Name
ObliqueAngle
TextGenerationFlag
Width
Métodos de los objetos de estilo de texto:
Delete
GetXData
SetXData
Veamos estas nuevas propiedades aplicables únicamente a estilos de texto.
·
BigFontFile. Permite especificar u obtener el nombre de archivo de fuente grande (para tipos de letra asiáticos, por ejemplo) asociado con el estilo de texto. La sintaxis para asignar un archivo es:ObjEstiloTexto
.BigFontFile = StrNombreArchdonde
StrNombreArch es una cadena (tipo de dato String).La sintaxis para obtener o extraer el archivo de texto de fuente grande de un estilo de texto es:
StrNombreArch
= ObjEstiloTexto.BigFontFiledonde
StrNombreArch es una cadena (tipo de dato String).NOTA: El único tipo de archivo válido es el de extensión
.SHX.·
FontFile. Permite especificar u obtener el nombre de archivo de fuente principal o primario asociado con el estilo de texto. La sintaxis para asignar un archivo es:ObjEstiloTexto
.FontFile = StrNombreArchdonde
StrNombreArch es una cadena (tipo de dato String).La sintaxis para obtener o extraer el archivo de texto de fuente principal de un estilo de texto es:
StrNombreArch
= ObjEstiloTexto.FontFiledonde
StrNombreArch es una cadena (tipo de dato String).NOTA: Los tipos de archivo válidos son
.PFA, .PFB, .SHX, .TTF.·
LastHeight. Asigna u obtiene la última altura de texto utilizada. Para asignar:ObjEstiloTexto
.LastHeight = DblÚltimaAlturadonde
DblÚltimaAltura es un valor Double.La sintaxis para obtener:
DblÚltimaAltura
= ObjEstiloTexto.LastHeightdonde
DblÚltimaAltura es un valor Double.
DOCE.8.12. Colección de SCPs y el objeto SCP
La colección de SCPs (
UserCoordinateSystems) la constituyen todos los objetos de SCP del documento actual activo, esto es, los SCPs guardados.Propiedades de la colección de SCPs:
Application
Count
Métodos de la colección de SCPs:
Add
Item
Las propiedades y métodos expuestos están ya estudiados.
NOTA: El método
Add hemos visto que tenía una sintaxis especial para la colección de bloques. Veremos ahora la sintaxis especial para la colección de SCPs.Set ObjSCP = ObjColección.Add(DblOrigen, DblPtoEjeX, DblPtoEjeX, StrNombre)
DblOrigen
es una coordenada 3D (matriz de tres valores Double) en el SCU que especifica dónde se añadirá el SCP. DblPtoEjeX y DblPtoEjeY son dos coordenadas 3D también (matrices de tres valores Double cada una) en el SCU que indican sendos puntos en la parte positiva de los ejes X e Y para el SCP; la dirección positiva del eje Z queda definida por la regla de la "mano derecha". StrNombre es el nombre (String) del SCP que se añadirá a la colección.Si nos damos cuenta lo que hacemos es definir un SCP mediante tres puntos: el punto de origen, un punto en el eje X y un punto en el eje Y.
El objeto simple de la colección de SCPs es un objeto de SCP. Los objetos de SCP poseen las siguientes propiedades y métodos:
Propiedades de los objetos de SCP:
Application
Name
Origin
XVector
YVector
Métodos de los objetos de SCP:
Delete
GetUCSMatrix
GetXData
SetXData
Observamos que existen dos nuevas propiedades y un método nuevo que aún no conocemos. Pasaremos pues a estudiar esto.
Primero las propiedades:
·
XVector. Asigna u obtiene la dirección X del SCP. Para asignar:ObjSCP
.XVector = DblVectorXdonde
DblVectorX es un array de tres valores Double. Esta característica está controlada también por la variable de sistema de AutoCAD UCSXDIR.Para obtener:
VarVectorX
= ObjSCP.XVector·
YVector. Asigna u obtiene la dirección Y del SCP. Para asignar:ObjSCP
.YVector = DblVectorYdonde
DblVectorY es un array de tres valores Double. Esta característica está controlada por la variable de sistema de AutoCAD UCSYDIR.Para obtener:
VarVectorY
= ObjSCP.YVectorAhora el método:
·
GetUCSMatrix. Obtiene la matriz de transformación del objeto de SCP al que se aplica el método. Esta matriz de 4 Ž 4 define las rotaciones y traslaciones de cada eje del SCP respecto al Sistema Universal. Sintaxis:VarMatriz
= ObjSCP.GetUCSMatrixdonde
VarMatriz es una variable que habrá sido declarada como Variant, aunque recogerá una matriz de 4 Ž 4 elementos Double. Después podremos acceder a cada valor por medio de índices, como hemos hecho otras veces.
DOCE.8.13. Colección de vistas y el objeto vista
La colección de vistas (
Views) la constituyen todos los objetos de vista del documento actual activo, esto es, las vistas guardadas.Propiedades de la colección de vistas:
Application
Count
Métodos de la colección de vistas:
Add
Item
Las propiedades y métodos expuestos están ya estudiados.
El objeto simple de esta colección es un objeto de vista. Los objetos de vista poseen las siguientes propiedades y métodos:
Propiedades de los objetos de vista:
Application
Center
Direction
Height
Name
Target
Width
Métodos de los objetos de vista:
Delete
GetXData
SetXData
Las nuevas propiedades
Direction y Target se explican a continuación.·
Direction. Asigna u obtiene la dirección de la vista para una visualización tridimensional. Para asignar:ObjNoGráfico
.Direction = DblVectorPara obtener:
VarVector
= ObjNoGráfico.Directiondonde
DblVector es un array de tres valores Double. Es un vector de dirección desde donde el dibujo se verá. Esta propiedad es similar al comando PTOVISTA (VPOINT en inglés) de AutoCAD.·
Target. Asigna u obtiene el punto objetivo de una vista (en este caso). Para asignar:ObjNoGráfico
.Target = DblPuntoObjetivoPara obtener:
VarPuntoObjetivo
= ObjNoGráfico.Targetdonde
DblPuntoObjetivo es un array de tres valores Double. Como siempre, pare recoger utilizaremos una variable declarada como Variant.
DOCE.8.14. Colección de ventanas y el objeto ventana
La colección de ventanas (
Viewports) la constituyen todos los objetos de ventana del documento actual activo en el Espacio Modelo, esto es, las ventanas gráficas en mosaico activas actualmente.Propiedades de la colección de ventanas:
Application
Count
Métodos de la colección de ventanas:
Add
Delete
Item
Las propiedades y métodos expuestos están ya estudiados.
El objeto simple de esta colección es un objeto de ventana gráfica. Los objetos de ventana gráfica poseen las siguientes propiedades y métodos:
Propiedades de los objetos de ventana:
Application
Center
Direction
GridOn
Height
LowerLeftCorner
Name
OrthoOn
SnapBasePoint
SnapOn
SnapRotationAngle
StatusID
Target
UCSIconAtOrigin
UCSIconOn
UpperRightCorner
Width
Métodos de los objetos de ventana:
GetGridSpacing
Comencemos por las nuevas propiedades.
·
GridOn. Obtiene y asigna el valor de estado de la rejilla en una ventana. Es un valor booleano (Boolean) que si es True especifica que la rejilla está activada y si, por el contrario, es False, especifica que la rejilla está desactivada.La sintaxis para asignar este valor es:
ObjVentana
.GridOn = BooRejillaY la sintaxis para obtenerlo:
BooRejilla
= ObjVentana.GridOn·
LowerLeftCorner. Obtiene el vértice inferior izquierdo de la ventana gráfica, en porcentaje de ancho y alto de pantalla, tal como se almacenan las configuraciones de ventanas mosaico en AutoCAD. Sintaxis:VarEsquinaII
= ObjVentana.LowerLeftCornerVarEsquinaII
recogerá una matriz de valores Double.·
OrthoOn. Obtiene y asigna la condición del modo Orto en la ventana activa actualmente. Sintaxis para asignar:ObjVentana
.OrthoOn = BooModoOrtoSintaxis para obtener:
BooModoOrto
= ObjVentana.OrthoOnBooModoOrto
tomará el valor True si el modo Orto está activado o se quiere activar; tomará el valor False si el modo Orto está desactivado o se quiere desactivar.·
SnapBasePoint. Especifica el punto base para el forzado de cursor/rejilla en la ventana actual.La sintaxis para asignar este valor es:
ObjVentana
.SnapBasePoint = DblPtoBase
Y la sintaxis para obtenerlo:
VarPtoBase
= ObjVentana.SnapBasePointEvidentemente,
DblPtoBase, al ser un punto, será una matriz de tres valores Double. Si es para obtener, recordar que habremos de guardarlo en una variable Variant.·
SnapOn. Especifica el estado del forzado de cursor.La sintaxis para asignar este valor es:
ObjVentana
.SnapOn = BooEstadoForzcursorY la sintaxis para obtenerlo:
BooEstadoForzcursor
= ObjVentana.SnapOnBooEstadoForzcursor
será un valor Boolean que además admite las siguientes constantes:acOn
acOff
que especifican la activación (
acOn) o no activación (acOff) del Forzcursor.·
SnapRotationAngle. Es el ángulo de rotación en radianes (valor Double de 0 a 6.28) del forzado de cursor en la ventana con respecto al SCU.La sintaxis para asignar este valor es:
ObjVentana
.SnapRotationAngle = DblÁnguloRotaciónY la sintaxis para obtenerlo:
DblÁnguloRotación
= ObjVentana.SnapRotationAngle·
StatusID. Obtiene únicamente el estado de activación de una ventana. El valor se recoge en una variable declarada como Boolean: si guarda True la ventana está activada, si guarda False la ventana está desactivada:BooEstadoActivación
= ObjVentana.StatusID·
UCSIconAtOrigin. Especifica si el icono o símbolo del SCP se muestra en el origen de coordenadas o no. Todo ello es controlado por un valor Boolean que, si es True quiere decir que el SCP aparece en el origen y, si es False, que no.La sintaxis para asignar este valor es:
ObjVentana
.UCSIconAtOrigen = BooSimbSCPOrigenY la sintaxis para obtenerlo:
BooSimbSCPOrigen
= ObjVentana.UCSIconAtOrigin·
UCSIconOn. Especifica si el icono o símbolo del SCP se visualiza o no. Todo ello es controlado por un valor Boolean que, si es True quiere decir que el SCP se visualiza y, si es False, que no se visualiza.La sintaxis para asignar este valor es:
ObjVentana
.UCSIconOn = BooSimbSCPActivo
Y la sintaxis para obtenerlo:
BooSimbSCPActivo
= ObjVentana.UCSIconOn·
UpperRightCorner. Obtiene el vértice superior derecho de la ventana gráfica, en porcentaje de ancho y alto de pantalla, tal como se almacenan las configuraciones de ventanas mosaico en AutoCAD. Sintaxis:VarEsquinaSD
= ObjVentana.UpperRightCornerVarEsquinaSD
será una matriz de valores Double.Veamos ahora los nuevos métodos.
·
GetGridSpacing. Obtiene el espaciado de la rejilla para la ventana:Call ObjVentana.GetGridSpacing(DblEspXRejilla, DblEspYRejilla)
DblEspXRejilla
y DblEspYRejilla son dos variables declaradas como Double que guardarán el espaciado en X y en Y respectivamente.·
GetSnapSpacing. Obtiene el espaciado del forzado de cursor para la ventana:Call ObjVentana.GetSnapSpacing(DblEspXForzcursor, DblEspYForzcursor)
DblEspXForzcursor
y DblEspYForzcursor son dos variables declaradas como Double que guardarán el espaciado en X y en Y respectivamente.·
SetGridSpacing. Asigna el espaciado de la rejilla para la ventana:Call ObjVentana.SetGridSpacing(DblEspXRejilla, DblEspYRejilla)
DblEspXRejilla
y DblEspYRejilla son dos valores Double que representan el espaciado en X y en Y respectivamente.·
SetSnapSpacing. Asigna el espaciado del forzado de cursor para la ventana:Call ObjVentana.SetSnapSpacing(DblEspXForzcursor, DblEspYForzcursor)
DblEspXForzcursor
y DblEspYForzcursor son dos valores Double que representan el espaciado en X y en Y respectivamente. El valor inicial para X e Y es 1.0000.·
SetView. Establece en la ventana gráfica la visualización de un objeto de vista. El argumento suministrado deberá ser de tipo Object, conteniendo una vista existente en el dibujo:Call ObjVentana.SetView(ObjVista)
ObjVista
es un objeto de vista de los explicados en la sección anterior.·
Split. Divide la ventana gráfica actual en el número de partes indicado:Call ObjVentana.Split(IntNúmVentanas)
IntNúmVentanas
ha de ser un número entero, aunque también se admiten las siguientes constantes (las cuales dicen relación a las diferentes formas predeterminadas de AutoCAD de dividir una ventana):acViewport2Horizontal
acViewport2Vertical
acViewport3Left
acViewport3Right
acViewport3Horizontal
acViewport3Vertical
acViewport3Above
acViewport3Below
acViewport4
La siguiente macro muestra la manera de dividir la ventana gráfica actual en tres ventanas con una posición predefinida de AutoCAD:
Option Explicit Dim AcadDoc As Object Dim AcadModel As Object Dim Ventana1 As Object
Sub Macro() Set AcadDoc = GetObject(, "AutoCAD.Application").ActiveDocument Set AcadModel = AcadDoc.ModelSpace Set Ventana1 = AcadDoc.Viewports.Add("Nueva") Call Ventana1.Split(acViewport3Left) Set AcadDoc.ActiveViewport = Ventana1 End Sub
Primero hemos de crear un nuevo objeto de ventana en la colección de ventanas, después dividirlo a nuestro gusto y, por último, definirlo como la ventana actual (recordemos la propiedad
ActiveViewport del objeto de documento activo).·
ZoomAll. Realiza un Zoom Todo en la ventana actual:ObjVentana
.ZoomAll·
ZoomCenter. Realiza un Zoom Centro en la ventana actual. Hay que proporcionar el centro en cuestión (matriz de tres valores Double) y el factor de ampliación (Double).Call ObjVentana.ZoomCenter(DblPtoCentro, DblFactorAmpl)
·
ZoomExtens. Realiza un Zoom Extensión en la ventana actual:ObjVentana
.ZoomExtens·
ZoomPickWindow. Realiza un Zoom Ventana en la ventana actual. Los puntos diagonales de la ventana se marcan en pantalla con el dispositivo señalador al mensaje habitual:ObjVentana
.ZoomPickWindow·
ZoomScaled. Realiza un Zoom Factor en la ventana actual. Hay que proporcionar el factor de escala y el tipo de escala:Call ObjVentana.ZoomScaled(DblFactorEscala, IntTipoEscala)
DblFactorEscala
es un valor Double que representa el factor de escala. IntTipoEscala es un valor Integer que además admite las tres siguientes constantes (absoluta, relativa y relativa al Espacio Papel):acZoomScaledAbsolute
acZoomScaledRelative
acZoomScaledRelativePSpace
·
ZoomWindow. Realiza un Zoom Ventana en el que se proporcionan los puntos diagonales como argumentos del método:Call ObjVentana.ZoomWindow(DblPtoInfIzq, DblPtoSupDcha)
DblPtoInfIzq
y DblPtoSupDcha son los puntos (matriz de tres valores Double) inferior izquierda y superior derecha, respectivamente, de la ventana.
DOCE.8.14.1. Ventanas del Espacio Papel
Todo lo visto hasta aquí en cuestión de ventanas se refiere a las ventanas del Espacio Modelo de AutoCAD 14. A la hora de crear y gestionar ventanas de Espacio Papel se recurre a un método exclusivo de la colección de objetos de Espacio Papel:
AddPViewport. Si recordamos, emplazamos el estudio de este método a esta sección.La sintaxis de
AddPViewport es:Set ObjVentanaPapel = ObjColEspacioPapel.AddPViewport (DblCentro, DblAltura, DblAnchura)
Propiedades de los objetos de ventana de Espacio Papel:
Application
Center
Direction
EntityName
EntityType
GridOn
Handle
Height
Layer
LensLength
Linetype
LinetypeScale
ObjectID
RemoveHiddenLines
SnapBasePoint
SnapOn
SnapRotationAngle
Target
TwistAngle
UCSIconAtOrigin
UCSIconOn
Visible
Width
Métodos de los objetos de ventana de Espacio Papel:
ArrayPolar
ArrayRectangular
Copy
Display
Erase
GetBoundingBox
GetGridSpacing
GetSnapSpacing
GetXData
Highlight
IntersectWith
Mirror
Mirror3D
Move
Rotate
Rotate3D
ScaleEntity
SetGridSpacing
SetSnapSpacing
SetXData
TransformBy
Update
ZoomAll
ZoomCenter
ZoomExtents
ZoomPickWindow
ZoomScaled
ZoomWindow
DblCentro
es un valor que especifica el punto (array de tres valores Double) central de la ventana. DblAltura es un valor Double que especifica al altura de la ventana. DblAnchura es un valor Double que especifica al anchura de la ventana. Estos dos últimos valores han de ser positivos.Pasemos a explicar las nuevas propiedades y el nuevo método.
·
LensLength. Especifica la longitud de la lente (en milímetros) para la vista en perspectiva. Este valor Double está también controlado por la variable de sistema LENSLENGTH.La sintaxis para asignar este valor es:
ObjVentanaPapel
.LensLength = DblLongLenteY la sintaxis para obtenerlo:
DblLongLente
= ObjVentanaPapel.LensLength·
RemoveHiddenLines. Especifica si las líneas ocultas han de ser trazadas o imprimidas en determinada ventana. Su sintaxis para asignar un valor es la que sigue:ObjVentanaPapel
.RemoveHiddenLines = BooLíneasOcultasY la sintaxis para obtenerlo:
BooLíneasOcultas
= ObjVentanaPapel.RemoveHiddenLinesBooLíneasOcultas
es un valor Boolean; si es True las líneas ocultas no aparecen trazadas, si es False sí.·
TwistAngle. Obtiene el ángulo de ladeo de una ventana. Su sintaxis es la que sigue:DblÁngLadeo
= ObjVentanaPapel.TwistAngleDblÁngLadeo
es un valor Double.El método
Display a continuación.·
Display. Este método activa o desactiva una ventana de Espacio Papel:ObjVentanaPapel
.Display(BooEstado)BooEstado
es un valor Boolean; True activa la ventana, False la desactiva.Veamos el ejemplo que sigue:
Option Explicit Dim AcadDoc As Object Dim AcadPapel As Object Dim VentanaPapel As Object Dim CentroVentana(1 To 3) As Double
Sub Macro() Set AcadDoc = GetObject(, "AutoCAD.Application").ActiveDocument Set AcadPapel = AcadDoc.PaperSpace CentroVentana(1) = 100: CentroVentana(2) = 100: CentroVentana(3) = 0 Set VentanaPapel = AcadPapel.AddPViewport(CentroVentana, 100, 100) VentanaPapel.Display (True) End Sub
Con esta macro creamos una ventana flotante de Espacio Papel. Al crearla, por defecto aparece desactivada. Para activarla utilizamos el método
Display.Hasta aquí todo lo referente a las colecciones de objetos. Hemos aprendido muchos detalles que ya nos harán programar medianamente bien. Sin embargo, para optar por una programación aceptable necesitamos conocer algunos mecanismos más, sobre todo los que veremos en la sección siguiente.
3ª fase intermedia de ejercicios
·
Escribir una programa en el módulo VBA que permita cambiar el tipo de línea de uno o varios objetos. El letrero de diálogo que manejará el programa es el siguiente (por ejemplo):
El funcionamiento del programa es el siguiente. Al iniciar el letrero se rellenará la lista desplegable Tipo de línea: con los nombres de los tipos de línea actualmente cargados en el dibujo. La lista Tipo de objeto: permanecerá vacía por el momento.
Al pulsar el botón Designar< se cerrará el cuadro y se permitirá designar en pantalla uno o varios objetos. Tras el final de la designación o selección, se retornará al cuadro en el que se rellenará la lista desplegable Tipo de objeto: con el tipo (línea, círculo, spline...) y el número ID de identificación, entre paréntesis, de cada uno de los objetos seleccionados.
La manera de aplicar ahora tipos de línea a los objetos es escogiendo de la lista superior la entidad en concreto y, de la lista inferior, el tipo de línea que será asignado a ella. Tras esto se pulsa el botón Aplicar para aplicar los cambios. Los cambios deben ser evidentes de inmediato (al pulsar Aplicar) pero el letrero no ha de cerrarse; por si acaso se quieren realizar más modificaciones o cambios.
El botón Salir cierra el letrero de diálogo y termina la aplicación.
Autor:
Para: La Web del Programador.