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 = StrNombre

La sintaxis para obtener es:

StrNombre = Objeto.Name

Ejemplo:

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 = DblPunto1

La sintaxis para obtener es:

VarPunto1 = ObjetoCotaAlineada.ExtLine1Point

Como 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 = DblPunto2

La sintaxis para obtener es:

VarPunto2 = ObjetoCotaAlineada.ExtLine2Point

Las 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 = DblPuntoTexto

La sintaxis para obtener es:

VarPuntoTexto = ObjetoCota.TextPosition

Como 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ón

La sintaxis para obtener es:

DblRotación = ObjetoCota.TextRotation

DblRotació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 = DblPuntoFinal1

La 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 = DblPuntoInicial1

La 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 = DblPuntoFinal2

La 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 = DblPuntoInicial2

La 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 = DblLongitud

La sintaxis para obtener es:

DblLongitud = ObjetoCota.LeaderLength

NOTA: 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.Evaluate

Este 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
AppendOuterLoop
ArrayPolar
ArrayRectangular
Copy
Erase
Evaluate
GetBoundingBox
GetLoopAt
GetXData
Highlight
InsertLoopAt
IntersectWith
Mirror
Mirror3D
Move
Rotate
Rotate3D
ScaleEntity
SetPattern
SetXData
TransformBy
Update

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
acHatchPatternTypeUserDefined
acHatchPatternTypeCustomDefined

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 es un valor de cadena alfanumérica (String) que representa el nombre del patrón que se usará. Y BooAsociatividad es un valor Boolean que determina la condición de asociatividad del patrón de sombreado: True significa que el patrón es asociativo y False que no es asociativo.

Pasemos ahora a comentar las propiedades nuevas no estudiadas.

· AsociativeHatch. Esta propiedad obtiene exclusivamente el carácter de asociatividad de un patrón de sombreado ya dibujado. El valor de retorno habrá de ser recogido en una variable declarada como Boolean. Si esta variable guarda un valor True significará que el patrón es asociativo; si guarda, por el contrario, un valor False, significará que el patrón no es asociativo. Veamos su sintaxis:

BooAsociatividad = ObjetoSombreado.AsociativeHacth

· Elevation. Obtiene y también asigna la elevación (valor de la coordenada Z) de un sombreado.

La sintaxis para asignar es:

ObjetoSombreado.Elevation = DblElevación

La sintaxis para obtener es:

DblElevación = ObjetoSombreado.Elevation

La elevación es un valor Double (doble precisión).

· HatchStyle. Dice relación al estilo del patrón de sombreado. Esta propiedad se puede extraer de un sombreado y también se puede asignar. La sintaxis que utilizaremos para asignar un estilo a un sombreado es:

ObjetoSombreado.HatchStyle = IntEstilo

La sintaxis para obtener un estilo de un sombreado es:

IntEstilo = ObjetoSombreado.HatchStyle

Donde IntEstilo es un valor Integer que además admite las siguientes constantes:

acHatchStyleNormal
acHatchStyleOuter
acHatchStyleIgnore

Todas ellas se corresponden con las opciones de Estilo de contorno de las Opciones avanzadas del sombreado en AutoCAD 14: Normal, Exterior e Ignorar.

· NumberOfLoops. Devuelve el número de contornos de un sombreado:

IntNúmContornos = ObjetoSombreado.NumberOfLoops

IntNúmContornos habrá sido declarada como Integer, evidentemente.

· PatternAngle. Especifica el ángulo en radianes del patrón de sombreado.

La sintaxis para asignar es:

ObjetoSombreado.PatternAngle = DblÁngulo

La sintaxis para obtener es:

DblÁngulo = ObjetoSombreado.PatternAngle

DblÁngulo es el valor del ángulo en radianes (Double), por lo tanto estará entre 0 y 6.28. Este valor es también controlado por la variable de sistema HPANG.

· PatternDouble. Especifica si el sombreado es doble o no. El valor asignado u obtenido será del tipo Boolean: True es doble, False no es doble.

La sintaxis para asignar es:

ObjetoSombreado.PatternDouble = BooDoble

La sintaxis para obtener es:

BooDoble = ObjetoSombreado.PatternDouble

Este valor es también controlado por la variable de sistema HPDOUBLE.

· PatternName. Especifica el nombre del patrón de sombreado. El valor asignado u obtenido será del tipo String.

La sintaxis para asignar es:

ObjetoSombreado.PatternName = StrNombre

La sintaxis para obtener es:

StrNombre = ObjetoSombreado.PatternName

Este valor es también controlado por la variable de sistema HPNAME.

· PatternScale. Especifica la escala del patrón de sombreado. El valor asignado u obtenido será del tipo Double.

La sintaxis para asignar es:

ObjetoSombreado.PatternScale = DblEscala

La sintaxis para obtener es:

DblEscala = ObjetoSombreado.PatternScale

Este valor es también controlado por la variable de sistema HPSCALE.

· PatternSpace. Especifica el espaciado entre líneas en los sombreados definidos por el usuario. El tipo de dato de este valor es Double.

La sintaxis para asignar es:

ObjetoSombreado.PatternSpace = DblEspaciado

La sintaxis para obtener es:

DblEspaciado = ObjetoSombreado.PatternSpace

Este valor es también controlado por la variable de sistema HPSPACE.

· PatternType. Obtiene el tipo de patrón utilizado en un sombreado. Es una propiedad de sólo lectura. El tipo de dato para este valor es Integer, aunque también admite las constantes explicadas para el argumento IntTipoPatrón del método AddHatch.

La sintaxis es:

IntTipoPatrón = ObjetoSombreado.PatternType

Vamos a repasar ahora los nuevos métodos propuestos.

· AppendInnerLoop. Este método añade contornos interiores al sombreado. Su sintaxis es la que sigue:

Call ObjSombreado.AppendInnerLoop(ObjContornoInterior)

ObjContornoInterior será una matriz de objetos que formen un contorno cerrado. Estos objetos podrán ser sólo líneas, polilíneas, círculos, elipses, splines y/o regiones.

Antes de añadir objetos interiores de contorno, habremos de añadir los objetos exteriores evidentemente. Para ello utilizaremos el siguiente método.

· AppendOuterLoop. Este método añade contornos exteriores al sombreado. Su sintaxis es la que sigue:

Call ObjSombreado.AppendOuterLoop(ObjContornoExterior)

ObjContornoExterior igual que para el método anterior ObjetoContornoInterior.

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:

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 = DblFactorEscalaX

La sintaxis para obtener es:

DblFactorEscalaX = ObjetoRefBloque.XScaleFactor

El 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 = DblFactorEscalaY

La sintaxis para obtener es:

DblFactorEscalaY = ObjetoRefBloque.YScaleFactor

El 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.GetAttributes

El 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 = IntLongitudCampo

La sintaxis para obtener es:

IntLongitudCampo = ObjetoAtributo.FieldLength

· TagString. Asigna u obtiene el identificador (String) de un atributo.

La sintaxis para asignar es:

ObjetoAtributo.TagString = StrIdentificador

La 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 = IntModo

La 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 = StrMensaje

La sintaxis para obtener una cadena es:

StrMensaje = ObjetoAtributo.PromptString

1ª 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: