DOCE.5.19. Sólidos 2D
Para crear sólidos 2D, esto es, polígonos de relleno sólido (comando
SOLIDO, SOLID en inglés, de AutoCAD), el método de las colecciones de Espacio Modelo, Papel o de bloques que utilizamos es AddSolid.La sintaxis del método
AddSolid es la que sigue:Set ObjSólido2D = ObjColección.AddSolid(DblPto1, DblPto2, DblPto3, DblPto4)
Propiedades de los objetos de sólido 2D:
Application
Color
Coordinates
EntityName
EntityType
Handle
Layer
LineType
LinetypeScale
Normal
ObjectID
Thickness
Visible
Métodos de los objetos de sólido 2D:
ArrayPolar
ArrayRectangular
Copy
Erase
GetBoundingBox
GetXData
Highlight
IntersectWith
Mirror
Mirror3D
Move
Rotate
Rotate3D
ScaleEntity
SetXData
TransformBy Update
Las propiedades y métodos expuestos están ya estudiados.
DOCE.5.20. Formas
El siguiente método permite añadir formas al dibujo. Para ello el archivo de formas contenedor correspondiente
.SHX habrá de estar cargado, lo que aprenderemos a hacer más adelante.La sintaxis del método
AddShape es:Set ObjForma = ObjColección.AddShape(StrNombre, DblPtoIns, DblFacEscal, DblRot)
Propiedades de los objetos de forma:
Application
Color
EntityName
EntityType
Handle
Height
InsertionPoint
Layer
LineType
LinetypeScale
Name
Normal
ObjectID
ObliqueAngle
Rotation
ScaleFactor
Thickness
Visible
Métodos de los objetos de forma:
ArrayPolar
ArrayRectangular
Copy
Erase
GetBoundingBox
GetXData
Highlight
IntersectWith
Mirror
Mirror3D
Move
Rotate
Rotate3D
ScaleEntity
SetXData
TransformBy
Update
Veremos la única propiedad nueva.
·
Name. Obtiene y/o asigna el nombre del objeto en cuestión, en el caso que nos ocupa el de la forma (también en el de documento activo, aplicación... que veremos más adelante).La sintaxis para asignar es:
Objeto
.Name = StrNombreLa sintaxis para obtener es:
StrNombre
= Objeto.NameEjemplo:
Option Explicit Dim AcadDoc As Object Dim AcadModel As Object Dim Forma As Object Dim PtoIns(1 To 3) As Double
Sub Macro() Set AcadDoc = GetObject(, "AutoCAD.Application").ActiveDocument Set AcadModel = AcadDoc.ModelSpace PtoIns(1) = 100: PtoIns(2) = 100: PtoIns(3) = 0 Set Forma = AcadModel.AddShape("box", PtoIns, 1, 0) MsgBox Forma.Name End Sub
Esta macro inserta una forma llamada
BOX (del archivo LTYPESHP.SHX) en el punto 100,100,0 del Espacio Modelo del dibujo actual. A continuación muestra en un cuadro de mensaje el nombre (extraído con Name) de la forma insertada (Forma), que en este caso será BOX. Como ya hemos comentado, el archivo LTYPESHP.SHX en este caso deberá estar cargado.
DOCE.5.21. Acotación, directrices y tolerancias
A continuación estudiaremos los diversos métodos de los que disponemos para agregar cotas a nuestros dibujos mediante programación VBA. Así también veremos dos aspectos muy relacionados con la acotación, esto es, la directriz y la tolerancia. Como viene siendo habitual también se expondrán, y estudiarán en su caso, las diferentes propiedades y los diferentes métodos de cada elemento de AutoCAD 14.
DOCE.5.21.1. Cotas alineadas
El método de adición de cotas alineadas es
AddDimAligned:Set ObjCotaAlineada = ObjColección.AddDimAligned(DblPtoLinExt1, DblPtoLinExt2, DblPosTexto)
Propiedades de los objetos de cota alineada:
Application
Color
EntityName
EntityType
ExtLine1Point
ExtLine2Point
Handle
Layer
LineType
LinetypeScale
Normal
ObjectID
Rotation
StyleName
TextPosition
TextRotation
TextString
Visible
Métodos de los objetos de cota alineada:
ArrayPolar
ArrayRectangular
Copy
Erase
GetBoundingBox
GetXData
Highlight
IntersectWith
Mirror
Mirror3D
Move
Rotate
Rotate3D
ScaleEntity
SetXData
TransformBy
Update
En las cotas alineadas, como debemos saber, la línea de cota es paralela a la línea que une los puntos de origen de las líneas de extensión o auxiliares. Las líneas de extensión comienzan en dos puntos (
Double) que son los que indicaremos en la sintaxis de AddDimAligned como dos primeros argumentos. La posición del texto, que también es el valor de un punto (matriz de tres elementos Double), indicará la longitud de las líneas auxiliares, teniendo en cuenta por supuesto la configuración del estilo de acotación actual.Veremos las cuatro nuevas propiedades.
·
ExtLine1Point. Obtiene y/o asigna un punto para la primera línea de extensión.La sintaxis para asignar es:
ObjetoCotaAlineada
.ExtLine1Point = DblPunto1La sintaxis para obtener es:
VarPunto1
= ObjetoCotaAlineada.ExtLine1PointComo siempre, para recoger un punto utilizaremos una variable
Variant. Después podremos acceder a cada valor unitario mediante índices, como ya se explicó.·
ExtLine2Point. Obtiene y/o asigna un punto para la segunda línea de extensión.La sintaxis para asignar es:
ObjetoCotaAlineada
.ExtLine2Point = DblPunto2La sintaxis para obtener es:
VarPunto2
= ObjetoCotaAlineada.ExtLine2PointLas mismas consideraciones que para la propiedad anterior.
·
TextPosition. Obtiene y/o asigna un punto para la posición del texto.La sintaxis para asignar es:
ObjetoCota
.TextPosition = DblPuntoTextoLa sintaxis para obtener es:
VarPuntoTexto
= ObjetoCota.TextPositionComo siempre, para recoger un punto utilizaremos una variable
Variant. Después podremos acceder a cada valor unitario mediante índices, como ya explicó.·
TextRotation. Obtiene y/o asigna el ángulo de rotación en radianes del texto de cota.La sintaxis para asignar es:
ObjetoCota
.TextRotation = DblRotaciónLa sintaxis para obtener es:
DblRotación
= ObjetoCota.TextRotationDblRotación
ha de ser un valor Double.
DOCE.5.21.2. Cotas angulares
El método de adición de cotas angulares es
AddDimAngular:Set ObjCotaAngular = ObjColección.AddDimAngular(DblVérticeÁngulo, DblPtoFinal1, DblPtoFinal2, DblPosTexto)
Propiedades de los objetos de cota angular:
Application
Color
EntityName
EntityType
ExtLine1EndPoint
ExtLine1StartPoint
ExtLine2EndPoint
ExtLine1StartPoint
Handle
Layer
LineType
LinetypeScale
Normal
ObjectID
Rotation
StyleName
TextPosition
TextRotation
TextString
Visible
Métodos de los objetos de cota angular:
ArrayPolar
ArrayRectangular
Copy
Erase
GetBoundingBox
GetXData
Highlight
IntersectWith
Mirror
Mirror3D
Move
Rotate
Rotate3D
ScaleEntity
SetXData
TransformBy
Update
En el método
AddDimAngular primero se indica como argumento el centro del arco o el vértice común entre las dos líneas auxiliares (Double). Los dos siguientes argumentos especifican los puntos (también matriz de tres elementos Double) por los que pasan las líneas de extensión o auxiliares. El último argumento indica la posición del texto; es también un punto (Double).Las cuatro nuevas propiedades a continuación.
·
ExtLine1EndPoint. Obtiene y/o asigna un punto final para la primera línea de extensión.La sintaxis para asignar es:
ObjetoCotaAngular
.ExtLine1EndPoint = DblPuntoFinal1La sintaxis para obtener es:
VarPuntoFinal1
= ObjetoCotaAngular.ExtLine1EndPoint·
ExtLine1StartPoint. Obtiene y/o asigna un punto inicial para la primera línea de extensión.La sintaxis para asignar es:
ObjetoCotaAngular
.ExtLine1StartPoint = DblPuntoInicial1La sintaxis para obtener es:
VarPuntoInicial1
= ObjetoCotaAngular.ExtLine1StartPoint·
ExtLine2EndPoint. Obtiene y/o asigna un punto final para la segunda línea de extensión.La sintaxis para asignar es:
ObjetoCotaAngular
.ExtLine2EndPoint = DblPuntoFinal2La sintaxis para obtener es:
VarPuntoFinal2
= ObjetoCotaAngular.ExtLine2EndPoint·
ExtLine2StartPoint. Obtiene y/o asigna un punto inicial para la segunda línea de extensión.La sintaxis para asignar es:
ObjetoCotaAngular
.ExtLine2StartPoint = DblPuntoInicial2La sintaxis para obtener es:
VarPuntoInicial2
= ObjetoCotaAngular.ExtLine2StartPoint
DOCE.5.21.3. Cotas diamétricas
El método de adición de cotas diamétricas es
AddDimDiametric:Set ObjCotaDiamétrica = ObjColección.AddDimDiametric(DblDiámetroPto1, DblDiámetroPto2, DblLongDirectriz)
Propiedades de los objetos de cota diamétrica:
Application
Color
EntityName
EntityType
Handle
Layer
LeaderLength
LineType
LinetypeScale
Normal
ObjectID
Rotation
StyleName
TextPosition
TextRotation
TextString
Visible
Métodos de los objetos de cota diamétrica:
ArrayPolar
ArrayRectangular
Copy
Erase
GetBoundingBox
GetXData
Highlight
IntersectWith
Mirror
Mirror3D
Move
Rotate
Rotate3D
ScaleEntity
SetXData
TransformBy
Update
El método
AddDimDiametric crea una cota diámetrica para un círculo o un arco dados los dos puntos del diámetro (matrices de tres elementos Double) y la longitud de la directriz de la línea de cota (Double).Se crean diferentes tipos de cotas diamétricas dependiendo del tamaño del círculo o del arco, del argumento de longitud de directriz y de los valores de las variables de acotación
DIMUPT, DIMTOFL, DIMFIT, DIMTIH, DIMTOH, DIMJUST y DIMTAD.La nueva propiedad:
·
LeaderLength. Obtiene y/o asigna una longitud (Double) para la línea directriz.La sintaxis para asignar es:
ObjetoCota
.LeaderLength = DblLongitudLa sintaxis para obtener es:
DblLongitud
= ObjetoCota.LeaderLengthNOTA
: La asignación de una longitud de directriz debe realizarse únicamente a la hora de dibujar la cota. Después de que ésta haya sido guardada, cambiar el valor de LeaderLength no afectará a cómo se muestra cota, pero el nuevo valor se reflejará en un .DXF y en aplicaciones AutoLISP y ADS.
DOCE.5.21.4. Cotas por coordenadas
El método de adición de cotas de coordenadas es
AddDimOrdinate:Set ObjCotaCoordenada = ObjColección.AddDimOrdinate(DblPtoDefinición, DblPtoFinalDirectriz, BooUsarEjeX)
Propiedades de los objetos de cota de coordenadas:
Application
Color
EntityName
EntityType
Handle
Layer
LineType
LinetypeScale
Normal
ObjectID
Rotation
StyleName
TextPosition
TextRotation
TextString
Visible
Métodos de los objetos de cota de coordenadas:
ArrayPolar
ArrayRectangular
Copy
Erase
GetBoundingBox
GetXData
Highlight
IntersectWith
Mirror
Mirror3D
Move
Rotate
Rotate3D
ScaleEntity
SetXData
TransformBy
Update
El método
AddDimOrdinate crea una cota de coordenadas. Hay que indicar un punto (Double) de definición que será el acotado, del que parte de línea de cota. Después se indica otro punto (Double) final para la línea de cota. En este segundo punto será donde se sitúe el texto. Por último, un valor Boolean que especifica si el valor del texto será el del eje X o el del eje Y: True crea una cota de coordenadas mostrando el valor del eje X; False mostrando el valor de Y.Las propiedades y métodos expuestos están ya estudiados.
DOCE.5.21.5. Cotas radiales
El método de adición de cotas radiales es
AddDimRadial:Set ObjCotaRadial = ObjColección.AddDimRadial(DblPtoCentro, DblPtoCruce, DblLongDirectriz)
Propiedades de los objetos de cota radial:
Application
Color
EntityName
EntityType
Handle
Layer
LeaderLength
LineType
LinetypeScale
Normal
ObjectID
Rotation
StyleName
TextPosition
TextRotation
TextString
Visible
Métodos de los objetos de cota radial:
ArrayPolar
ArrayRectangular
Copy
Erase
GetBoundingBox
GetXData
Highlight
IntersectWith
Mirror
Mirror3D
Move
Rotate
Rotate3D
ScaleEntity
SetXData
TransformBy
Update
Al método
AddDimRadial hay que proporcionarle como argumentos el punto central (array de tres elementos Double) del arco o círculo que acotar, un punto (array de tres elementos Double) de dicho arco o círculo por el que pasará la línea de cota o directriz y una longitud (tipo de dato Double) para dicha directriz.Las propiedades y métodos expuestos están ya estudiados.
DOCE.5.21.6. Cotas giradas
El método de adición de cotas giradas es
AddDimRotated:Set ObjCotaGirada = ObjColección.AddDimRotated(DblPtoLinExt1, DblPtoLinExt2,
DblPosLíneaCota, DblRotación)
Propiedades de los objetos de cota girada:
Application
Color
EntityName
EntityType
Handle
Layer
LineType
LinetypeScale
Normal
ObjectID
Rotation
StyleName
TextPosition
TextRotation
TextString
Visible
Métodos de los objetos de cota girada:
ArrayPolar
ArrayRectangular
Copy
Erase
GetBoundingBox
GetXData
Highlight
IntersectWith
Mirror
Mirror3D
Move
Rotate
Rotate3D
ScaleEntity
SetXData
TransformBy
Update
DblPtoLinExt1
es un valor que indica el punto (matriz de tres elementos Double) de la primera línea auxiliar o de extensión, es decir, uno de los extremos de la línea que será medida. DblPtoLinExt2 lo mismo que DblPtoLinExt1 pero para la segunda línea auxiliar. DblPosLíneaCota es también un punto (matriz de tres valores Double) que especifica la posición de la línea de cota y, por ende, la del texto (según variables). Y DblRotación es un valor Double que indica, en radianes, al ángulo de rotación de la cota girada.Las propiedades y métodos expuestos están ya estudiados.
DOCE.5.21.7. Directrices
El método
AddLeader nos ofrece la posibilidad de agregar directrices de AutoCAD a nuestro dibujo actual. La sintaxis del método es la que sigue:Set ObjDirectriz = ObjColección.AddLeader(DblMatrizPtos, ObjAnotación, IntTipo)
Propiedades de los objetos de directriz:
Application
Color
Coordinates
EntityName
EntityType
Handle
Layer
LineType
LinetypeScale
Normal
ObjectID
StyleName
Type
Visible
Métodos de los objetos de directriz:
ArrayPolar
ArrayRectangular
Copy
Erase
Evaluate
GetBoundingBox
GetXData
Highlight
IntersectWith
Mirror
Mirror3D
Move
Rotate
Rotate3D
ScaleEntity
SetXData
TransformBy
Update
DblMatrizPtos
ha de ser una matriz de elementos de punto (matriz también de tres elementos Double) que contenga los vértices (cuántos sean) de la directriz. ObjAnotación es un objeto (Object) que solamente puede ser de tolerancia (que enseguida veremos), de texto múltiple (ya estudiado) o de referencia a bloque.IntTipo
es un valor entero que además puede contener las constantes siguientes:AcLineNoArrow
acLineWithArrow
acSplineNoArrow
acSplineWithArrow
El valor que se devuelve (
ObjDirectriz) es un objeto de directriz que ha de almacenarse en una variable declarada evidentemente como Object.Ahora comentamos el método
Evaluate de los objetos de directriz.ObjGráfico
.EvaluateEste método exclusivo de directrices y sombreados evalúa los objetos y, si fuera necesario, los actualizaría. En el caso de las directrices se comprueba la relación de la misma con su anotación asociada.
NOTA: Véase la sección DOCE.5.7.1., donde se comenta la propiedad
Type de las polilíneas, para observar los valores de esta propiedad en las directrices.
DOCE.5.21.8. Tolerancias
El método
AddTolerance permite crear objetos de tolerancia. La sintaxis del método es la siguiente:Set ObjTolerancia = ObjColección.AddTolerance(StrTexto, DblPtoIns, DblVectDir)
Propiedades de los objetos de tolerancia:
Application
Color
DirectionVector
EntityName
EntityType
Handle
InsertionPoint
Layer
LineType
LinetypeScale
Normal
ObjectID
StyleName
TextString
Visible
Métodos de los objetos de tolerancia:
ArrayPolar
ArrayRectangular
Copy
Erase
GetBoundingBox
GetXData
Highlight
IntersectWith
Mirror
Mirror3D
Move
Rotate
Rotate3D
ScaleEntity
SetXData
TransformBy
Update
A
AddTolerance se le suministra como primer argumento una cadena (String) de texto que será la que se escriba en la tolerancia. Como segundo argumento un valor que es matriz de tres elementos Double; esto es un punto, que será el punto de inserción de la tolerancia (del símbolo). Por último, un vector de dirección (tres elementos Double) que especifican la dirección del símbolo de tolerancia.Las propiedades y métodos expuestos están ya estudiados.
A continuación veremos una macro de ejemplo la cual, tras dibujar un rectángulo con cuatro líneas y pasarlas a color azul (para luego distinguir las cotas), agrega tres cotas distintas: una alineada, otra angular y otra girada. A modo pues de ejemplo:
Option Explicit Dim AcadDoc As Object Dim AcadModel As Object Dim Línea As Object Dim PtoLin1(1 To 3) As Double Dim PtoLin2(1 To 3) As Double Dim PtoLin3(1 To 3) As Double Dim PtoLin4(1 To 3) As Double Dim Cota As Object Dim PtoTexto(1 To 3) As Double
Sub Macro() Set AcadDoc = GetObject(, "AutoCAD.Application").ActiveDocument Set AcadModel = AcadDoc.ModelSpace PtoLin1(1) = 10: PtoLin1(2) = 10: PtoLin1(3) = 0 PtoLin2(1) = 10: PtoLin2(2) = 20: PtoLin2(3) = 0 PtoLin3(1) = 40: PtoLin3(2) = 20: PtoLin3(3) = 0 PtoLin4(1) = 40: PtoLin4(2) = 10: PtoLin4(3) = 0 Set Línea = AcadModel.AddLine(PtoLin1, PtoLin2) Línea.Color = 5 Set Línea = AcadModel.AddLine(PtoLin2, PtoLin3) Línea.Color = 5 Set Línea = AcadModel.AddLine(PtoLin3, PtoLin4) Línea.Color = 5 Set Línea = AcadModel.AddLine(PtoLin4, PtoLin1) Línea.Color = 5 PtoTexto(1) = 25: PtoTexto(2) = 27: PtoTexto(3) = 0 Set Cota = AcadModel.AddDimAligned(PtoLin2, PtoLin3, PtoTexto) Dim PtoPasa1(1 To 3) As Double Dim PtoPasa2(1 To 3) As Double PtoPasa1(1) = 40: PtoPasa1(2) = 15: PtoPasa1(3) = 0 PtoPasa2(1) = 30: PtoPasa2(2) = 10: PtoPasa2(3) = 0 PtoTexto(1) = 35: PtoTexto(2) = 12: PtoTexto(3) = 0 Set Cota = AcadModel.AddDimAngular(PtoLin4, PtoPasa1, PtoPasa2, PtoTexto) PtoTexto(1) = 30: PtoTexto(2) = 3: PtoTexto(3) = 0 Set Cota = AcadModel.AddDimRotated(PtoLin1, PtoLin4, PtoTexto, 60) End Sub
DOCE.5.22. Sombreado
Un sombreado es (y siempre ha sido), en realidad, un objeto más de dibujo de AutoCAD que se puede añadir sin ningún problema desde VBA. Veremos aquí cómo hacerlo.
El método para dibujar sombreados es
AddHatch. La manera de agregar un sombreado en cualquiera de las colecciones que admiten este método (Espacio Modelo, Espacio Papel y bloques) es mediante la sintaxis siguiente:Set ObjSombreado = ObjColección.AddHatch(IntTipoPatrón, StrNombrePatrón, BooAsociatividad)
Propiedades de los objetos de sombreado:
Application
AssociativeHatch
Color
Elevation
EntityName
EntityType
Handle
HacthStyle
InsertionPoint
Layer
LineType
LinetypeScale
Normal
NumberOfLoops
ObjectID
PatternAngle
PatternDouble
PatternName
PatternScale
PatternSpace
PatternType
Visible
Métodos de los objetos de sombreado:
AppendInnerLoop
IntTipoPatrón es un valor Integer que se refiere al tipo de patrón de sombreado que se utilizará. Además acepta las siguientes constantes:
acHatchPatternTypePreDefined Cada una de ellas dice referencia a los distintos tipos de patrón que también podemos utilizar desde la interfaz gráfica de AutoCAD 14.
StrNombrePatrón Pasemos ahora a comentar las propiedades nuevas no estudiadas.
· BooAsociatividad · La sintaxis para asignar es:
ObjetoSombreado La sintaxis para obtener es:
DblElevación La elevación es un valor · ObjetoSombreado La sintaxis para obtener un estilo de un sombreado es:
IntEstilo Donde acHatchStyleNormal Todas ellas se corresponden con las opciones de Estilo de contorno de las Opciones avanzadas del sombreado en AutoCAD 14: Normal, Exterior e Ignorar.
· IntNúmContornos IntNúmContornos · La sintaxis para asignar es:
ObjetoSombreado La sintaxis para obtener es:
DblÁngulo DblÁngulo · La sintaxis para asignar es:
ObjetoSombreado La sintaxis para obtener es:
BooDoble Este valor es también controlado por la variable de sistema · La sintaxis para asignar es:
ObjetoSombreado La sintaxis para obtener es:
StrNombre Este valor es también controlado por la variable de sistema · La sintaxis para asignar es:
ObjetoSombreado La sintaxis para obtener es:
DblEscala Este valor es también controlado por la variable de sistema · La sintaxis para asignar es:
ObjetoSombreado La sintaxis para obtener es:
DblEspaciado Este valor es también controlado por la variable de sistema · La sintaxis es:
IntTipoPatrón Vamos a repasar ahora los nuevos métodos propuestos.
· Call ObjSombreado.AppendInnerLoop(ObjContornoInterior)
ObjContornoInterior Antes de añadir objetos interiores de contorno, habremos de añadir los objetos exteriores evidentemente. Para ello utilizaremos el siguiente método.
· Call ObjSombreado.AppendOuterLoop(ObjContornoExterior)
ObjContornoExterior La forma correcta de crear un sombreado desde VBA consiste en definir primero el patrón y después encerrarlo en un contorno. Veamos la siguiente macro como ejemplo:
acHatchPatternTypeUserDefined
acHatchPatternTypeCustomDefined
acHatchStyleOuter
acHatchStyleIgnore
Option Explicit Dim AcadDoc As Object Dim AcadModel As Object Dim Sombreado As Object Dim Círculo1 As Object Dim MatrizObjeto(0) As Object
Sub Macro() Set AcadDoc = GetObject(, "AutoCAD.Application").ActiveDocument Set AcadModel = AcadDoc.ModelSpace Dim PtoCentro1(1 To 3) As Double PtoCentro1(1) = 10: PtoCentro1(2) = 10: PtoCentro1(3) = 0 Set Círculo1 = AcadModel.AddCircle(PtoCentro1, 10) Set MatrizObjeto(0) = Círculo1 Set Sombreado = AcadModel.AddHatch(1, "angle", True) Call Sombreado.AppendOuterLoop(MatrizObjeto) End Sub
Como podemos observar, lo primero que se hace es crear un círculo que será el objeto que se va a sombrear. Seguidamente creamos el sombreado o patrón con las características que nos interesen. Por último, encerramos el sombreado dentro del círculo, añadiendo éste como contorno exterior con
AppendOuterLoop.NOTA: Nótese que el argumento que requiere
AppendOuterLoop (y también AppendInnerLoop) ha de ser una matriz de objetos. En este caso en el que sólo deseamos sombrear un círculo, creamos un matriz de un único elemento con dicho círculo. Si no lo hiciéramos así, este método no funcionaría.·
GetLoopAt. Obtiene el contorno de sombreado en el índice dado:Call ObjSombreado.GetLoopAt(IntÍndice, VarContorno)
IntÍndice
es una variable Integer que guardará el índice. El primer índice es el 0. VarContorno es una variable Variant que guardará una matriz de los diversos objetos obtenidos.·
InsertLoopAt. Este método inserta un contorno en la localización indicada por un índice:Call ObjSombreado.InsertLoopAt(IntÍndice, IntTipoContorno, ObjContorno)
IntÍndice
es un valor Integer que representa un índice de localización en la matriz de vértices que forman el contorno del sombreado. El primer índice de la matriz es el 0.IntTipoContorno
es un valor Integer, también, que representa el tipo de contorno. Este argumento además admite las siguientes constantes, que no son sino los tipos de contornos aceptados:acHatchLoopTypeDefault
acHatchLoopTypeExternal
acHatchLoopTypePolyline
acHatchLoopTypeDerived
acHatchLoopTypeTextbox
ObjContorno
igual que para métodos anteriores en ObjContornoExterior y ObjetoContornoInterior.·
SetPattern. Asigna un nombre y un tipo de patrón a un sombreado. Su sintaxis es:Call ObjSombreado.SetPattern(IntTipoPatrón, StrNombrePatrón)
Ambos argumentos de
SetPattern tienen el mismo significado y los mismos valores que los argumentos del mismo nombre en la sintaxis del método AddHatch.DOCE.5.23. Referencias a bloques
La manera de crear bloques la veremos posteriormente al hablar de la colección de bloques y del objeto de bloque (sección DOCE.8.3.), así como el método para insertar bloques ya creados que se explica en la colección de objetos de Espacio Modelo (sección DOCE.8.1.). Aquí se trata únicamente de las referencias o inserciones de bloques.
Es decir, los bloques primero hay que crearlos (crear sus objetos componentes y después el propio bloque). Esto se tratará, como ya se ha dicho, más adelante. La manera de tratar esos objetos unitarios de bloque también se verá después. Posteriormente los bloques se insertan, dando lugar a una inserción de bloque o referencia a bloque. De esto es de lo que se habla en esta sección.
A continuación veremos las propiedades y métodos de las inserciones de bloque.
Propiedades de los objetos de referencia a bloque:
Application
Color
EntityName
EntityType
Handle
InsertionPoint
Layer
LineType
LinetypeScale
Name
Normal
ObjectID
Rotation
Visible
XScaleFactor
YScaleFactor
Métodos de los objetos de referencia a bloque:
ArrayPolar
ArrayRectangular
Copy
Erase
Explode
GetAttributes
GetBoundingBox
GetXData
HasAttributes
Highlight
IntersectWith
Mirror
Mirror3D
Move
Rotate
Rotate3D
ScaleEntity
SetXData
TransformBy
Update
Veamos pues las nuevas propiedades inherentes a estos objetos de referencia a bloque.
·
XScaleFactor. Asigna u obtiene el factor de escala en el eje X de la inserción de un bloque.La sintaxis para asignar es:
ObjetoRefBloque
.XScaleFactor = DblFactorEscalaXLa sintaxis para obtener es:
DblFactorEscalaX
= ObjetoRefBloque.XScaleFactorEl valor es un valor
Double que es 1.0 por defecto.·
YScaleFactor. Asigna u obtiene el factor escala en el eje Y de la inserción de un bloque.La sintaxis para asignar es:
ObjetoRefBloque
.YScaleFactor = DblFactorEscalaYLa sintaxis para obtener es:
DblFactorEscalaY
= ObjetoRefBloque.YScaleFactorEl valor es un valor
Double que es 1.0 por defecto.Y veamos ahora los dos nuevos métodos.
·
GetAttributes. Este método obtiene los atributos de una inserción de bloque. Para recogerlos habremos de declarar una variable como Variant. La sintaxis de uso es:VarAtributos
= ObjRefBloque.GetAttributesEl retorno de este método (como ya hemos dicho en una variable tipo
Variant) será una matriz de objetos de atributo que veremos enseguida. Como ya sabemos podemos hacer uso de índices para extraer cada uno de ellos de la matriz.·
HasAttributes. Este método especifica si el bloque (por medio de su inserción) contiene atributos o no. El valor de retorno ha de recogerlo una variable declarada como Boolean que, si recoge True significará que el bloque tiene atributos y, si recoge False, que no tiene. La sintaxis de utilización es la siguiente:BooTieneAtributos
= ObjRefBloque.HasAttributes
DOCE.5.24. Atributos de bloques
Para poder introducir un atributo en un bloque evidentemente hemos primero de crear el bloque (cosa que ya estudiaremos como se ha comentado anteriormente). El entorno VBA para AutoCAD 14 dispone de dos objetos relacionados con los atributos: el objeto de atributo y el objeto de referencia de atributo.
Aunque pudiera parecer lo contrario, el atributo en sí lo representa el objeto denominado referencia de atributo. Éste es el atributo propiamente dicho, o sea, un objeto que contiene texto enlazado con un bloque. El objeto de atributo, por su lado, es el llamado en AutoCAD definición de atributo, y es un objeto que aparece como una cadena de texto y describe las características de un objeto de referencia de atributo. No nos equivoquemos.
DOCE.5.24.1. Referencias de atributos
Como hemos explicado ya, el objeto de referencia de atributo en sí el propio atributo. El método que utilizamos para añadir atributos a bloques ya creados es
AddAttribute, y tiene la siguiente sintaxis de uso:Set ObjRefAtributo = ObjColección.AddAtribute(DblAltura, IntModo, StrMensaje, DblPtoIns, StrIdentificador, StrValorDefecto)
Propiedades de los objetos de referencia de atributo:
Application
Color
EntityName
EntityType
FieldLength
Handle
Height
HorizontalAlignment
InsertionPoint
Layer
LineType
LinetypeScale
Normal
ObjectID
ObliqueAngle
Rotation
ScaleFactor
StyleName
TagString
TextAlignmentPoint
TextGenerationFlag
TextString
Thickness
VerticalAlignment
Visible
Métodos de los objetos de referencia de atributo:
Erase
GetBoundingBox
GetXData
Highlight
IntersectWith
Move
Rotate
Rotate3D
ScaleEntity
SetXData
TransformBy
Update
DblAltura
es el primer argumento que hemos de suministrar al método AddAtribute. Dice relación a la altura del texto del atributo en las unidades del documento activo actual, esto es del dibujo actual.IntModo
es un argumento opcional que indica el modo del atributo (invisible, constante, verificable y/o predefinido). Ha de ser un valor entero (Integer), pero también admite las siguientes constantes:acAttributeModeInvisible
acAttributeModeConstant
acAttributeModeVerify
acAttributeModePreset
Puede ser combinada más una constante utilizando el operador booleano
OR. Hemos de prestar especial atención a no combinar modos incompatibles.StrMensaje
es una cadena (String) que representa el mensaje que aparece en línea de comandos o en el cuadro de petición de atributos (dependiendo del valor de la variable de sistema de AutoCAD 14 ATTDIA) al insertar el bloque que contiene el atributo. El valor por defecto para este argumento es la cadena indicada en el argumento StrIdentificador. Si el modo del atributo es acAttributeModeConstant, este argumento se inhabilita.DblPtoIns
es una matriz de tres valores Double (X, Y y Z) que representa las coordenadas del punto de inserción para el atributo el SCU.StrIdentificador
es una cadena (String) que representa al identificador del atributo. Como ya debemos saber en esta cadena deberemos obviar los espacios y los signos de exclamación. Además, decir que AutoCAD cambia automáticamente las minúsculas a mayúsculas.StrValorDefecto
es una cadena (String) que representa el valor por defecto del atributo al ser insertado.Expliquemos ahora las dos propiedades no estudiadas.
·
FielLength. Asigna u obtiene la longitud de campo (Integer) en número de caracteres para el atributo.La sintaxis para asignar es:
ObjetoAtributo
.FieldLength = IntLongitudCampoLa sintaxis para obtener es:
IntLongitudCampo
= ObjetoAtributo.FieldLength·
TagString. Asigna u obtiene el identificador (String) de un atributo.La sintaxis para asignar es:
ObjetoAtributo
.TagString = StrIdentificadorLa sintaxis para obtener es:
StrIdentificador
= ObjetoAtributo.TagString
DOCE.5.24.2. Objeto de atributo
Como ya hemos dicho este objeto aparece como una cadena de texto que describe las características de los objetos de referencia de atributo (definición de atributo en AutoCAD).
Propiedades de los objetos de atributo:
Application
Color
EntityName
EntityType
FieldLength
Handle
Height
HorizontalAlignment
InsertionPoint
Layer
LineType
LinetypeScale
Mode
Normal
ObjectID
ObliqueAngle
PromptString
Rotation
ScaleFactor
StyleName
TagString
TextAlignmentPoint
TextGenerationFlag
TextString
Thickness
VerticalAlignment
Visible
Métodos de los objetos de atributo:
ArrayPolar
ArrayRectangular
Copy
Erase
GetBoundingBox
GetXData
Highlight
IntersectWith
Mirror
Mirror3D
Move
Rotate
Rotate3D
ScaleEntity
SetXData
TransformBy
Update
Veamos las dos nuevas propiedades.
·
Mode. Obtiene y/o asigna el modo de un atributo. Es un valor Integer que admite además las constantes especificadas en la sección anterior para el argumento IntModo del método AddAttribute.La sintaxis para asignar un modo es:
ObjetoAtributo
.Mode = IntModoLa sintaxis para obtener un modo es:
IntModo
= ObjetoAtributo.Mode·
PromptString. Obtiene y/o asigna la cadena (String) de mensaje de petición de un atributo (véase la explicación del argumento StrMensaje del método AddAtribute en la sección anterior).La sintaxis para asignar una cadena es:
ObjetoAtributo
.PromptString = StrMensajeLa sintaxis para obtener una cadena es:
StrMensaje
= ObjetoAtributo.PromptString1ª fase intermedia de ejercicios
·
Realizar una macro VBA que dibuje una línea, un círculo y una elipse en Espacio Papel (el objeto de la elipse sombreado con un patrón cualquiera).·
Crear un programa VBA, con formulario, que sea capaz de cambiar el espesor de todas las polilíneas dibujadas en el Espacio Modelo de la sesión actual de dibujo. El nuevo espesor de polilínea se introducirá en el cuadro de diálogo. Este cuadro puede ser el siguiente: