DOCE.5.7. Objetos de polilínea

DOCE.5.7.1. Polilíneas de antigua definición

Para crear polilíneas no optimizadas de versiones anteriores a la 14 de AutoCAD utilizamos el método AddPolyline. En la siguiente sección se estudian las polilíneas optimizadas de la AutoCAD 14.

La sintaxis del método AddPolyline es la siguiente:

Set ObjPolilínea = ObjColección.AddPolyline(DblMatrizVértices)

Propiedades de los objetos de polilínea de antigua definición:

Application
Area
Closed
Color
Coordinates
EntityName
EntityType
Handle
Layer
LineType
LinetypeScale
Normal
ObjectID
Thickness
Type
Visible

Métodos de los objetos de polilínea de antigua definición:

AppendVertex
ArrayPolar
ArrayRectangular
Copy
Erase
Explode
GetBoundingBox
GetBulge
GetWidth

GetXData
Highlight
IntersectWith
Mirror
Mirror3D
Move
Offset
Rotate
Rotate3D
ScaleEntity
SetBulge
SetWidth

SetXData
TransformBy
Update

A continuación pasaremos a comentar las nuevas propiedades aún no estudiadas.

· Closed. Obtiene o asigna el estado de apertura o cierre de una polilínea (o spline). Es un valor de tipo Boolean que puesto a True dice de la polilínea que está abierta; por el contrario a False, indica que la polilínea está cerrada. La sintaxis para asignar esta propiedad es:

ObjGráfico.Closed = BooCerrada

Y la sintaxis para obtener la propiedad:

BooCerrada = ObjGráfico.Closed

· Type. Obtiene y/o asigna el tipo de adaptación a curva o amoldamiento de superficie de una polilínea, malla o directriz. Para asignar un tipo:

ObjGráfico.Type = IntTipo

y para obtenerlo:

IntTipo = ObjGráfico.Type

IntTipo es una valor Integer y que, además, admite las siguiente constantes:

Para polilíneas:

Tipo				Descripción


acSimplePoly		        Simple
acFitCurvePoly		        Adaptada a curva
acQuadSplinePoly		B-spline cuadrática
acCubicSplinePoly		B-spline cúbica
	
Para mallas:

Tipo				Descripción


acSimpleMesh Simple acQuadSurfaceMesh Amoldada a superficie B-spline cuadrática acCubicSurfaceMesh Amoldada a superficie B-spline cúbica acBezierSurfaceMesh Amoldada a superficie Bezier Para directrices: Tipo Descripción
acLineNoArrow Una línea sin flecha acLineWithArrow Una línea con flecha acSplineNoArrow Una spline sin flecha acSplineWithArrow Una spline con flecha

Y con respecto a los nuevos métodos expuestos, su explicación detallada se proporciona a continuación.

· AppendVertex. Se aplica exclusivamente a polilíneas 2D, 3D y mallas poligonales. Este método añade un vértice adicional al final de dichas entidades. En el caso de las mallas se debe añadir realmente toda una fila de vértices de la matriz M Ž N de la superficie. La sintaxis es:

ObjGráfico.AppendVertex(DblPunto)

siendo DblPunto un punto de tipo de dato Double.

· Explode. Descompone una entidad compuesta en las entidades simples que la forman. Estas entidades simples se obtienen en una matriz de objetos que habrá sido definida como Variant. Después, y como ya hemos hecho en otros casos, podemos acceder a dichos objetos especificando un índice para la matriz. Su sintaxis es:

VarMatrizObjetos = ObjGráfico.Explode

· GetBulge. Obtiene el valor de curvatura de un vértice de la polilínea especificado por su índice (se empieza a contar desde el 0, como primer vértice). Sintaxis:

DblCurvatura = ObjPolilínea.GetBulge(IntÍndice)

La curvatura ha de almacenarse en una variable Double; el índice es evidentemente de tipo entero (Integer).

· GetWidth. Obtiene el grosor inicial y final (Double) del tramo que comienza en el vértice especificado por su índice (Integer). La sintaxis de este método es un poco distinta, ya que se llama a él con Call y se pasan las variables como argumentos del método:

Call ObjPolilínea.GetWidth(IntÍndice, DblGrosorInic, DblGrosorFin)

· SetBulge. Inversamente a GetBulge, SetBulge asigna un valor de curvatura a un vértice. Los tipos de datos son los mismos que para aquel:

ObjPolilínea.GetBulge(IntÍndice, DblCurvatura)

· SetWidth. De manera contraria a GetWidth, SetWidth asigna el grosor inicial y final de un tramo especificado por su vértice inicial. Los tipos de datos los mismo que para GetWidth:

Call ObjPolilínea.SetWidth(IntÍndice, DblGrosorInic, DblGrosorFin)

 

DOCE.5.7.2. Polilíneas optimizadas

Para crear polilíneas optimizadas de AutoCAD 14 se utiliza el método AddLightWeightPolyline, cuya sintaxis es la que sigue:

Set ObjPolilínea14 = ObjColección.AddLightWeightPolyline(DblMatrizVértices)

Propiedades de los objetos de polilínea optimizada:

Application
Area
Closed
Color
Coordinates
EntityName
EntityType
Handle
Layer
LineType
LinetypeScale
Normal
ObjectID
Thickness
Type
Visible

Métodos de los objetos de polilínea optimizada:

AddVertex
ArrayPolar
ArrayRectangular
Copy
Erase
Explode
GetBoundingBox
GetBulge
GetWidth
GetXData
Highlight
IntersectWith
Mirror
Mirror3D
Move
Offset
Rotate
Rotate3D
ScaleEntity
SetBulge
SetWidth
SetXData
TransformBy
Update

Las propiedades de estas polilíneas son exactamente las mismas que las de las anteriores. Con respecto a los métodos, se cambia AppendVertex por AddVertex.

· AddVertex. Se aplica únicamente a polilínea optimizadas. Añade un nuevo vértice a la entidad, que habrá de ser el punto final de un nuevo segmento de la polilínea. Se indica el índice (Integer) con la posición del vértice a continuación del cual se añadirá uno nuevo (Double):

ObjPolilínea14.AddVertex(IntÍndice, DblPunto)

NOTA: Para crear polilíneas con tramos curvos o en arco, se crea la polilínea con segmentos rectos y, a continuación, se añade la curvatura a los tramos que interese mediante el método SetBulge.

 

DOCE.5.8. Polilíneas 3D

Para crear polilíneas 3D recurrimos al método Add3DPoly, cuya sintaxis es:

Set ObjPolilínea3D = ObjColección.Add3DPoly(DblMatrizVértices)

Propiedades de los objetos de polilínea 3D:

Application
Closed
Color
Coordinates
EntityName
EntityType
Handle
Layer
LineType
LinetypeScale
ObjectID
Visible

Métodos de los objetos de polilínea 3D:

AppendVertex
ArrayPolar
ArrayRectangular
Copy
Erase
Explode
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.9. Rayos

El método de creación de rayos es AddRay:

Set ObjRayo = ObjColección.AddRay(DblPtoPrimero, DblPtoSegundo)

Propiedades de los objetos de rayo:

Application
BasePoint
Color
DirectionVector
EntityName
EntityType
Handle
Layer
LineType
LinetypeScale
ObjectID
Visible

Métodos de los objetos de rayo:

ArrayPolar
ArrayRectangular
Copy
Erase
GetBoundingBox
GetXData
Highlight
IntersectWith
Mirror
Mirror3D
Move
Rotate
Rotate3D
ScaleEntity
SetXData
TransformBy
Update

Se explican las nuevas propiedades seguidamente.

· BasePoint. Asigna u obtiene el punto (Double) a través del cual el rayo (o la línea auxiliar) pasará. Para asignar un punto de base utilizaremos la sintaxis siguiente:

ObjGráfico.BasePoint = DblPunto

Para obtener el punto de base de un objeto rayo (o línea auxiliar) dibujado:

VarPunto = ObjGráfico.BasePoint

· DirectionVector. Especifica (obtiene y/o asigna) una dirección según un vector de dirección. Para asignar:

ObjGráfico.DirectionVector = DblVector

Para obtener:

VarVector = ObjGráfico.DirectionVector

DblVector es una matriz de tres elementos Double.

 

DOCE.5.10. Líneas auxiliares

El método de creación de líneas auxiliares es AddXLine:

Set ObjLíneaAux = ObjColección.AddXLine(DblPtoPrimero, DblPtoSegundo)

Propiedades de los objetos de línea auxiliar:

Application
BasePoint
Color
DirectionVector
EntityName
EntityType
Handle
Layer
LineType
LinetypeScale
ObjectID
Visible

Métodos de los objetos de línea auxiliar:

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.11. Trazos

El método de creación de trazos es AddTrace:

Set ObjTrazo = ObjColección.AddTrace(DblMatrizVértices)

Propiedades de los objetos de trazo:

Application
Color
Coordinates
EntityName
EntityType
Handle
Layer
LineType
LinetypeScale
Normal
ObjectID
Thickness
Visible

Métodos de los objetos de trazo:

ArrayPolar
ArrayRectangular
Copy
Erase
GetBoundingBox
GetXData
Highlight
IntersectWith
Mirror
Mirror3D
Move
Rotate
Rotate3D
ScaleEntity
SetXData
TransformBy
Update

Como vemos hemos de indicar una matriz Double con los valores de los vértices o puntos del trazo.

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

DOCE.5.12. Splines

El método de creación de splines es AddSpline:

Set ObjSpline = ObjColección.AddSpline(DblMatrizVértices, DblTanIni, DblTanFin)

Propiedades de los objetos de spline:

Application
Area
Closed
Color
Degree
EndTangent
EntityName
EntityType
FitTolerance
Handle
IsRational
Layer
LineType
LinetypeScale
NumberOfControlPoints
NumberOfFitPoints
ObjectID
StartTangent
Visible

Métodos de los objetos de spline:

AddFitPoint
ArrayPolar
ArrayRectangular
Copy
DeleteFitPoint
ElevateOrder
Erase
GetBoundingBox
GetControlPoint
GetFitPoint
GetWeight
GetXData
Highlight
IntersectWith
Mirror
Mirror3D
Move
Offset
PurgeFitData
Reverse
Rotate
Rotate3D
ScaleEntity
SetControlPoint
SetFitPoint
SetWeight
SetXData
TransformBy
Update

Como decimos, la manera de añadir splines a un dibujo es mediante el método AddSpline, pasándole como argumentos una matriz Double con los puntos de cada vértice (cada uno es una matriz de tres elementos Double), la tangente de inicio, que es un vector de dirección representado por un array de tres valores Double, y la tangente final, siendo esta también otro vector de dirección similar al anterior.

Por ejemplo, un programa simple que dibujara una spline podría ser la siguiente macro:

Option Explicit

Dim AcadDoc As Object
Dim AcadModel As Object
Dim DibujoSpl As Object
Dim Vértices(1 To 3 * 3) As Double
Dim TanInicial(1 To 3) As Double
Dim TanFinal(1 To 3) As Double


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

  Vértices(1) = 0
  Vértices(2) = 0
  Vértices(3) = 0
  Vértices(4) = 50
  Vértices(5) = 50
  Vértices(6) = 0
  Vértices(7) = 100
  Vértices(8) = 0
  Vértices(9) = 0
  TanInicial(1) = 100: TanInicial(2) = 100: TanInicial(1) = 0
  TanFinal(1) = 100: TanFinal(2) = 100: TanFinal(1) = 0
  Set DibujoSpl = AcadModel.AddSpline(Vértices, TanInicial, TanFinal)
End Sub

Existen multitud de nuevas propiedades y de nuevos métodos que se pasarán a detallar a continuación. Comencemos por las propiedades.

· Degree. Permite obtener la graduación de la representación polinomial de una spline. Su sintaxis es:

IntValor = ObjSpline.Degree

El valor es de sólo lectura y ha de almacenarse en una variable declarada como Integer (únicamente puede ser un número entre 1 y 25, ambos inclusive).

· EndTangent. Esta propiedad permite asignar y/o extraer el valor de la tangente final de la spline, esto es, una matriz de tres elementos Double que es un vector de dirección.

La sintaxis para asignar una tangente final es la que sigue:

ObjSpline.EndTangent = DblVector

Para obtenerla:

VarVector = ObjSpline.EndTangent

· FitTolerance. Obtiene el ajuste de tolerancia, o reajusta esta propiedad de las splines. Como hemos de saber, si el valor de la tolerancia es cero, la spline está obligada a pasar por los vértices; si es mayor de cero, tiende a ellos pero no los toca. El valor de tolerancia no puede ser negativo.

La sintaxis para usar esta propiedad para asignar un valor de tolerancia a una spline es:

ObjSpline.FitTolerance = DblValorTolerancia

Para obtenerlo:

DblValorTolerancia = ObjSpline.FitTolerance

La variable que guarde este valor habrá de ser declarada como Double.

· IsRational. Obtiene la condición de racionalidad de la spline dada, es decir, verdadero (True) o falso (False).

La sintaxis es:

BooRacional = ObjSpline.IsRational

La variable que guarde este valor habrá de ser declarada como Boolean.

· NumberOfControlPoints. Propiedad de sólo lectura que devuelve el número de puntos de control de una spline:

IntNumCtrl = ObjSpline.NumberOfControlPoints

La variable que guarde este valor habrá de ser declarada como Integer.

Si en el ejemplo anterior añadimos las siguientes líneas:

Dim NumControl As Integer
NumControl = DibujoSpl.NumberOfControlPoints
MsgBox (Str(NumControl))

Aparecerá un cuadro de mensaje (MsgBox) con el número de puntos de control de nuestra spline, en este caso 5 (podemos comprobarlo ejecutando el comando de AutoCAD EDITSPLINE, SPLINEDIT en inglés, y designando la spline en cuestión).

· NumberOfFitPoints. Parecida a la propiedad anterior, ésta devuelve el número de puntos de ajuste de una spline, es decir, sus vértices:

IntNumAjst = ObjSpline.NumberOfFitPoints

La variable que guarde este valor habrá de ser declarada como Integer también.

Si en al ejemplo anterior añadiéramos también lo siguiente:

Dim NumAjuste As Integer
NumAjuste = DibujoSpl.NumberOfFitPoints
MsgBox (Str(NumAjuste))

Aparecerá otro cuadro de mensaje con el número de puntos de ajuste de nuestra spline, en este caso 3.

· StartTangent. Así como EndTangent trabaja con la tangente final, StartTangent permite asignar y/o extraer el valor de la tangente inicial de la spline, esto es, una matriz de tres elementos Double que es un vector de dirección.

La sintaxis para asignar una tangente inicial es la que sigue:

ObjSpline.StartTangent = DblVector

Para obtenerla:

VarVector = ObjSpline.StartTangent

Y hasta aquí las nuevas propiedades de las splines. Pasemos ahora a ver los métodos nuevos.

· AddFitPoint. Este método nos permite añadir un nuevo punto de ajuste a una spline ya creada. Para ello deberemos proporcionar un índice de posición del nuevo vértice y sus coordenadas. Veamos la sintaxis de este método:

Call ObjSpline.AddFitPoint(IntÍndice, DblPtoAjuste)

Donde IntÍndice es la posición (Integer) en la que se insertará el nuevo vértice y DblPtoAjuste las coordenadas del punto en cuestión (matriz de tres valores Double). Deberemos llamar al método con Call.

Así por ejemplo, para añadir un nuevo punto inicial (índice 1) a la spline de nuestro ejemplo, agregaríamos a la macro:

Dim NuevoPunto(1 To 3) As Double
NuevoPunto(1) = 25
NuevoPunto(2) = 25
NuevoPunto(1) = 0
Call DibujoSpl.AddFitPoint(1, NuevoPunto)

Lo que hará que se añada el nuevo punto. Dependiendo de la situación puede ser necesario actualizar la spline con su método Update.

· DeleteFitPoint. De manera contraria al método anterior, DeleteFitPoint elimina un punto de ajuste o vértice de una spline. Su sintaxis:

Call ObjSpline.DeleteFitPoint(IntÍndice)

Como vemos en la sintaxis, únicamente hay que proporcionar como argumento el índice correspondiente al vértice que deseamos eliminar, que será, si es una variable, de tipo Integer.

· ElevateOrder. Eleva el orden de un spline al orden proporcionado como argumento del método:

Call ObjSpline.ElevateOrder(IntÍndice)

El orden de una spline es igual a su graduación polinomial más uno, de ahí que este valor sólo pueda ser como mucho 26.

· GetControlPoint. Permite obtener las coordenadas del punto de control especificado por el índice que se proporciona como argumento. La sintaxis de uso es:

VarPuntoCtrl = ObjSpline.GetControlPoint(IntÍndice)

Donde VarPuntoCrtl es una variable definida como Variant donde se guardarán las coordenadas del punto en cuestión. Como sabemos ya, si queremos utilizarlas posteriormente deberemos realizar un trasvase a una matriz de tres elementos Double.

IntÍndice es el índice Integer del punto de control del que queremos obtener sus coordenadas.

· GetFitPoint. Las mismas consideraciones que para el método anterior pero a la hora de obtener las coordenadas de un punto de ajuste:

VarPuntoAjst = ObjSpline.GetFitPoint(IntÍndice)

· GetWeight. Este método devuelve el peso del punto del control de una spline especificado por su índice. La sintaxis de utilización es la que sigue:

DblPeso = ObjSpline.GetWeight(IntÍndice)

DblPeso es una variable declarada como Double que almacenará el valor del peso del punto. IntÍndice como en los métodos anteriores.

· PurgeFitData. Limpia los datos de ajuste de una spline. Su sintaxis:

Call ObjSpline.PurgeFitData

· Reverse. Invierte la dirección de la curva spline (el vértice inicial se convierte en el final):

Call ObjSpline.Reverse

· SetControlPoint. Permite asignar coordenadas al punto de control especificado por el índice que se proporciona como argumento. La sintaxis de uso es:

Call ObjSpline.SetControlPoint(IntÍndice, DblCoordenadas)

Donde IntÍndice (Integer) es el índice que determina el punto de control y DblCoordenadas el array de tres elementos Double, que son las coordenadas del punto mencionado.

· SetFitPoint. Las mismas consideraciones que para el método anterior pero a la hora de asignar las coordenadas a un punto de ajuste:

Call ObjSpline.SetFitPoint(IntÍndice, DblCoordenadas)

· SetWeight. Este método asigna un peso al punto del control de una spline especificado por su índice. La sintaxis de utilización es la que sigue:

Call ObjSpline.SetWeight(IntÍndice, DblPeso)

IntÍndice es Integer; DblPeso es Double.

 

DOCE.5.13. Texto múltiple

Para añadir texto múltiple a la colección de objetos de Espacio Modelo, Espacio Papel o bloques, disponemos del método AddMText, cuya sintaxis es:

Set ObjTextoM = ObjColección.AddMText(DblPtoIns, DblAnchura, StrTexto)

Propiedades de los objetos de texto múltiple:

Application
AttachmentPoint
Color
DrawingDirection
EntityName
EntityType
Handle
Height
InsertionPoint
Layer
LineType
LinetypeScale
Normal
ObjectID
Rotation
StyleName
TextString
Visible
Width

Métodos de los objetos de texto múltiple:

ArrayPolar
ArrayRectangular
Copy
Erase
GetBoundingBox
GetXData
Highlight
IntersectWith
Mirror
Mirror3D
Move
Rotate
Rotate3D
ScaleEntity
SetXData
TransformBy
Update

Así como en el dibujo de textos en una línea, DblPtoIns es una matriz o tabla de tres elementos Double que son las coordenadas del punto de inserción, y StrTexto es la cadena literal de texto (String) que se imprimirá en pantalla. DblAnchura se refiere a la anchura de la caja de abarque del texto múltiple (es valor Double).

Podemos apreciar que los textos múltiples disponen de tres nuevas propiedades aún no vistas. Las vemos a continuación (los métodos están todos estudiados).

· AtachmentPoint. Esta propiedad, exclusiva de textos múltiples, permite asignar u obtener el tipo de justificación de un texto múltiple con respecto a su caja de abarque o rectángulo de reborde. Su sintaxis a la hora de asignar es:

ObjTextoM.AtachmentPoint = IntTipoJus

Para obtener:

IntTipoJus = ObjTextoM.AtachmentPoint

IntTipoJus es un valor Integer que además puede albergar las siguientes constantes:

acAttachmentPointTopLeft
acAttachmentPointTopCenter
acAttachmentPointTopRight
acAttachmentPointMidLeft
acAttachmentPointMidCenter
acAttachmentPointMidRight
acAttachmentPointBottomLeft
acAttachmentPointBottomCenter
acAttachmentPointBottomRight

Refiriéndose todas ellas a las distintas justificaciones posibles del texto múltiple.

· DrawingDirection. Esta propiedad, también exclusiva de textos múltiples, permite asignar u obtener el tipo de orientación de un texto múltiple. Su sintaxis para asignar es:

ObjTextoM.DrawingDirection = IntTipoOr

Para obtener:

IntTipoOr = ObjTextoM.DrawingDirection

IntTipoOr es un valor Integer que puede albergar las siguientes constantes:

acLeftToRight
acRightToLeft
acTopToBottom
acBottomToTop

· Width. Dice referencia a la anchura del rectángulo de abarque de un objeto. Su sintaxis para asignar una anchura es:

ObjGráfico.Width = DblAnchura

La sintaxis para obtener una anchura es:

DblAnchura = ObjGráfico.Width

 

DOCE.5.14. Regiones

El método para la obtención de regiones es AddRegion y su sintaxis es:

Set ObjRegión = ObjColección.AddRegion(ObjListaObjetos)

Propiedades de los objetos de región:

Application
Area
Centroid
Color
EntityName
EntityType
Handle
Layer
LineType
LinetypeScale
MomentOfInertia
Normal
ObjectID
Perimeter
PrincipalDirections
PrincipalMoments
ProductOfInertia

RadiiOfGyration
Visible

Métodos de los objetos de región:

ArrayPolar
ArrayRectangular
Boolean
Copy
Erase
Explode
GetBoundingBox
GetXData
Highlight
IntersectWith
Mirror
Mirror3D
Move
Rotate
Rotate3D
ScaleEntity
SetXData
TransformBy
Update

Este método crea regiones a partir de una lista de objetos. Los objetos de esta lista deberán formar un área coplanar cerrada y sólo podrán ser líneas, arcos, círculos, arcos elípticos, polilíneas y/o splines.

La lista de objetos será una matriz o array declarada como Object y que contendrá todas la entidades gráficas a partir de las cuales se dibujará la región.

Veamos las propiedades nuevas:

· Centroid. Esta propiedad obtiene el centroide, es decir, el centro del área (o del volumen) de una región (o sólido). Su sintaxis es:

VarCentroide = ObjGráfico.Centroid

donde VarCentroide es una variable Variant que guardará las coordenadas del punto en cuestión. Para procesarlas —y como ya sabemos— deberemos realizar un trasvase, ya que así no podemos utilizarlas.

· MomentOfInertia. Esta propiedad obtiene el momento de inercia de una región (o sólido) y lo devuelve como tres coordenadas X, Y y Z. Su sintaxis es:

VarMomentoInercia = ObjGráfico.MomentOfInertia

La variable que habrá de guardarlo será también declarada como Variant, al igual que en el caso de la propiedad anterior.

· Perimeter. Esta propiedad (también de sólo lectura, como las dos anteriores) obtiene el perímetro de una región exclusivamente. Su sintaxis es:

DblPerímetro = ObjRegión.Perimeter

La variable que habrá de guardarlo será declarada como Double.

· PrincipalDirections. Permite obtener las principales direcciones (en X, Y y Z) de una región (o sólido). Su sintaxis es:

VarDireccionesP = ObjGráfico.PrincipalDirections

La variable que habrá de guardarlo será declarada como Variant.

· PrincipalMoments. Permite obtener los principales momentos (en X, Y y Z) de una región (o sólido). Su sintaxis es:

VarMomentosP = ObjGráfico.PrincipalMoments

La variable que habrá de guardarlo será declarada como Variant.

· ProductOfInertia. Devuelve el producto de inercias (en X, Y y Z) de una región (o sólido). Su sintaxis es:

VarProductoInercias = ObjGráfico.ProductOfInertia

La variable que habrá de guardarlo será declarada como Variant.

· RadiiOfGyration. Permite obtener el radio de giro (en X, Y y Z) de una región (o sólido). Su sintaxis es:

VarRadioGiro = ObjGráfico.RadiiOfGyration

La variable que habrá de guardarlo será declarada como Variant.

NOTA: Todos los cálculos que se realizan al utilizar estas propiedades se efectúan en el sistema de coordenadas actual.

Veamos ahora el nuevo método.

· Boolean. Permite realizar una operación booleana (unión, diferencia o intersección) entre el objeto al cual se le aplica y otro objeto, sea sólido o región.

Su sintaxis es la que sigue:

ObjGráfico3 = ObjGráfico1.Boolean(LngOperación, ObjGráfico2)

LngOperación es un valor tipo Long que indica la operación que se realizará entre ambos sólidos. Admite las siguientes constantes:

acUnion
acIntersection
acSubtraction

ObjGráfico2 es la entidad gráfica de AutoCAD 14 (región o sólido) existente con la cual se realizará la operación booleana con el otro objeto (ObjGráfico1). Ambos objetos deberán estar ya creado, evidentemente.

ObjGráfico3 es el objeto gráfico resultado. Será una variable declarada como Object.

 

DOCE.5.15. Sólidos 3D

La obtención de sólidos primitivos de AutoCAD 14 requiere más de un método para su ejecución. Veremos aquí todos y cada uno de ellos, además de sus propiedades y métodos, que son comunes a todos ellos.

Las diferentes sintaxis de creación de sólidos, con su explicación pertinente, se exponen a continuación.

 

DOCE.5.15.1. Prisma rectangular

Set ObjPrismaRect = ObjColección.AddBox(DblPtoOrg, DblLargo, DblAncho, DblAlto)

Los argumentos para este método son el punto de origen (DblPtoOrg), el cual es el centro de la caja de abarque, no una esquina (es una matriz de tres elementos Double); la dimensión de longitud (Double); la dimensión de anchura (Double); y la dimensión de altura (Double).

 

DOCE.5.15.2. Cono

Set ObjCono = ObjColección.AddCone(DblPtoCentro, DblAltura, DblRadioBase)

Los argumentos para este método son el centro, el cual es el centro de la caja de abarque, no el de la base (es una matriz de tres elementos Double); la altura del cono (Double); y el radio de la base (Double).

 

DOCE.5.15.3. Cilindro

Set ObjCilindro = ObjColección.AddCylinder(DblPtoCentro, DblAltura, DblRadio)

Los argumentos para este método son el centro, el cual es el centro de la caja de abarque, no el de la base (es una matriz de tres elementos Double); la altura del cilindro (Double); y el radio (Double).

 

DOCE.5.15.4. Cono elíptico

Set ObjConElp = ObjColección.AddEllipticalCone(DblPtoCentro, DblRadioMayor, DblRadioMenor, DblAltura)

Los argumentos para este método son el centro, el cual es el centro de la caja de abarque, no el de la base (es una matriz de tres elementos Double); el radio mayor de la elipse de la base (Double); el radio menor de la elipse de la base (Double); y la altura del cono elíptico (Double).

 

DOCE.5.15.5. Cilindro elíptico

Set ObjCilElp = ObjColección.AddEllipticalCylinder(DblPtoCentro, DblRadioMayor,
DblRadioMenor
, DblAltura)

Los argumentos para este método son el centro, el cual es el centro de la caja de abarque, no el de la base (es una matriz de tres elementos Double); el radio mayor de la elipse de la base (Double); el radio menor de la elipse de la base (Double); y la altura del cilindro elíptico (Double).

 

DOCE.5.15.6. Esfera

Set ObjEsfera = ObjColección.AddSphere(DblPtoCentro, DblRadio)

Los argumentos para este método son el centro, el cual es el centro de la caja de abarque, o sea el propio centro de la esfera (es una matriz de tres elementos Double); y el radio de la esfera (Double).

 

DOCE.5.15.7. Toroide

Set ObjToroide = ObjColección.AddTorus(DblPtoCentro, DblRadToro, DblRadTub)

Los argumentos para este método son el centro, el cual es el centro de la caja de abarque, o sea el propio centro del toroide o toro (es una matriz de tres elementos Double); el radio de toroide (Double); y el radio del tubo (Double).

 

DOCE.5.15.8. Cuña

Set ObjCuña = ObjColección.AddWedge(DblPtoCentro, DblLargo, DblAncho, DblAlto)

Los argumentos para este método son el centro, el cual es el centro de la caja de abarque, no una esquina ni el centro de una cara (es una matriz de tres elementos Double); la dimensión de longitud (Double); la dimensión de anchura (Double); y la dimensión de altura (Double).

 

DOCE.5.15.9. Extrusión

Set ObjExtrusión = ObjColección.AddExtrudedSolid(ObjPerfil, DblAltura, DblÁngulo)

Con este método podemos crear extrusiones de cualquier perfil que cumpla las normas necesarias para poder ser perfil de extrusión (igual que desde la interfaz de AutoCAD). La única excepción quizá es que dicho perfil habrá de ser obligatoriamente una región, no es lícito desde VBA utilizar una polilínea. Por ello todos los perfiles originales tendrán información de superficie, lo que hará que AutoCAD cree sólidos cerrados (con "tapa").

ObjPerfil se refiere al objeto (Object) a partir del cual se creará la extrusión (una región, como hemos dicho); DblAltura es la altura de extrusión a lo largo del eje Z (Double); DblÁngulo es el ángulo de salida de la extrusión en radianes (Double).

 

DOCE.5.15.10. Extrusión con camino

Set ObjExtrusiónC = ObjColección.AddExtrudedSolidAlongPath(ObjPerfil, ObjCamino)

Con este método podemos crear extrusiones a lo largo de un camino de extrusión. ObjPerfil es el objeto (tipo Object) que será el perfil que se extruirá (será una región); ObjCamino es otro objeto (tipo Object también) que es el camino de extrusión (será una polilínea, un círculo, una elipse, una spline o un arco, exclusivamente).

DOCE.5.15.11. Revolución

Set ObjRevolución = ObjColección.AddRevolvedSolid(ObjPerfil, DblPtoInicial, DblDirección, DblÁngulo)

Con el método AddRevolve creamos objetos de revolución a partir de un perfil de revolución. Se pasan como argumentos el objeto (Object), que será perfil (sólo una región); el punto inicial del eje de revolución (matriz de tres elementos Double); la dirección del eje de revolución (matriz de tres elementos Double); y el número de ángulos cubiertos en radianes (Double).

 

DOCE.5.15.12. Propiedades y métodos de los sólidos
3D

Como ya hemos dicho las propiedades y los métodos son comunes a todos los mecanismos que acabamos de estudiar. Se detallan a continuación.

Propiedades de los objetos de sólido 3D:

Application
Centroid
Color
EntityName
EntityType
Handle
Layer
LineType
LinetypeScale
MomentOfInertia
ObjectID
PrincipalDirections
PrincipalMoments
ProductOfInertia
RadiiOfGyration
Visible
Volume

Métodos de los objetos de sólido 3D:

ArrayPolar
ArrayRectangular
Boolean
CheckInterference
Copy
Erase
GetBoundingBox
GetXData
Highlight
IntersectWith
Mirror
Mirror3D
Move
Rotate
Rotate3D
ScaleEntity
SectionSolid
SetXData
SliceSolid
TransformBy
Update

Pasaremos ahora a comentar las que aún no conocemos. Primero la nueva propiedad Volume.

· Volume. Esta propiedad de sólo lectura y exclusiva de los sólidos permite extraer el volumen de uno de ellos (tipo Double). Para esto utilizamos la sintaxis siguiente:

DblVolumen = ObjSólido.Volume

Veamos ahora los nuevos métodos CheckInterference, SectionSolid y SliceSolid.

· CheckInterference. Con este método disponemos de la posibilidad de averiguar si existe interferencia entre dos sólidos y, si así fuera y lo especificáramos, crear un nuevo sólido resultante. La sintaxis para su uso es:

ObjSólido3 = ObjSólido1.CheckInterference(ObjSólido2, BooCrearNuevo)

ObjSólido2 es la entidad (tipo Object) con que se quiere comprobar la interferencia con ObjSólido1. BooCrearNuevo es un valor booleano (tipo Boolean), esto es True (verdadero) o False (falso), que especifica si se creará un sólido con la interferencia (si existiera). ObjSólido3 es el sólido resultante (tipo Object) si hubiera interferencia y BooCrearNuevo estuviera puesto a True.

· SectionSolid. Crea un región, que es la sección del sólido al que se le aplica, determinada por un plano definido por tres puntos que se proporcionan como argumentos.

ObjSólido2 = ObjSólido1.SectionSolid(DblPto1, DblPto2, DblPto3)

ObjSólido2 es el objeto (tipo Object) resultante que será un región; DblPto1, DblPto2 y DblPto3 son los tres puntos (matriz de tres valores tipo Double) que definen el plano de sección.

· SliceSolid. Produce un corte, en el sólido al que se aplica, mediante un plano definido por tres puntos.

ObjSólido2 = ObjSólido1.SliceSolid(DblPto1, DblPto2, DblPto3, BooNeg)

ObjSólido2 es el objeto (tipo Object) resultante que será un sólido; DblPto1, DblPto2 y DblPto3 son los tres puntos (matriz de tres valores tipo Double cada uno) que definen el plano de corte; BooNeg es una valor tipo Boolean (True o False) que determina si se devuelve o no el sólido en la parte negativa del plano, o sea, que si se conserva la parte cortada en la zona negativa del plano o no. True conserva el sólido completo, pero cortado; False elimina dicha parte.

 

DOCE.5.16. Caras 3D

El método del que disponemos para la creación de caras 3D es Add3DFace y su sintaxis es la sigue a continuación:

Set ObjCara3D = ObjColección.Add3DFace(DblPto1, DblPto2, DblPto3, DblPto4)

Propiedades de los objetos de cara 3D:

Application
Color
EntityName
EntityType
Handle
Layer
LineType
LinetypeScale
ObjectID
Visible

Métodos de los objetos de cara 3D:

ArrayPolar
ArrayRectangular
Copy
Erase
GetBoundingBox
GetInvisibleEdge
GetXData
Highlight
IntersectWith
Mirror
Mirror3D
Move
Rotate
Rotate3D
ScaleEntity
SetInvisibleEdge
SetXData
TransformBy
Update

Al método Add3DFace debemos pasarle como argumentos los cuatro puntos de una cara 3D. Todos estos puntos serás arrays de tres elementos tipo Double cada uno. El último punto (DblPto4) es opcional, si no se indica se crea una cara 3D de tres aristas.

Veamos el nuevo par de métodos.

· GetInvisibleEdge. Devuelve el estado de visibilidad de la arista de la cara 3D especificada por su índice. Su sintaxis es la siguiente:

BooEstado = ObjCara3D.GetInvisibleEdge(IntÍndice)

La variable que almacenará el estado (BooEstado) será declarada como booleana (Boolean). Si recoge un valor True la arista es invisible; si recoge un valor False la arista es visible.

IntÍndice es el número de orden de la arista que se desea comprobar de la cara 3D. Ha de ser un valor entre 0 y 3, siendo 0 la primera arista y 3 la cuarta, si la hubiera.

· SetInvisibleEdge. Asigna un estado de visibilidad para una arista de una cara 3D, especificada por su índice. Su sintaxis es:

Call ObjCara3D.SetInvisibleEdge(IntÍndice, BooEstado)

El significado y tipo de dato para IntÍndice y BooEstado son los mismos que en el método anterior.

 

DOCE.5.17. Mallas poligonales

La sintaxis del método para dibujar mallas poligonales es:

Set ObjMalla3D = ObjColección.Add3DMesh(IntM, IntN, DblMatrizPuntos)

Propiedades de los objetos de malla poligonal:

Application
Color
Coordinates
EntityName
EntityType
Handle
Layer
LineType
LinetypeScale
MClose
MDensity
MVertexCount
NClose
NDensity
NVertexCount

ObjectID
Type
Visible

Métodos de los objetos de malla poligonal:

AppendVertex
ArrayPolar
ArrayRectangular
Copy
Erase
Explode
GetBoundingBox
GetXData
Highlight
IntersectWith
Mirror
Mirror3D
Move
Rotate
Rotate3D
ScaleEntity
SetXData
TransformBy
Update

Add3DMesh crea una malla tridimensional indicándole el número de vértices en las direcciones M y N (con el mismo sentido que desde la interfaz gráfica de AutoCAD), así como una matriz MŽ N de los puntos en cuestión. Los valores de M y N son valores enteros (si son variables serán declaradas como Interger) entre 2 y 256. La matriz de vértices contendrá todos los puntos, los cuales requieren tres coordenadas tipo Double. Veamos un ejemplo (macro):

Option Explicit

Dim AcadDoc As Object
Dim AcadModel As Object
Dim Vértices(1 To 3 * 3) As Double


Sub MallaDib()
  Set AcadDoc = GetObject(, "AutoCAD.Application").ActiveDocument
  Set AcadPapel = AcadDoc.PaperSpace

  Dim M As Integer, N As Integer
  Dim Malla as Object
  Dim Total As Integer
  M = 2
  N = 2
  Total = M * N

  Dim Vértices(1 To Total * 3) As Double
  Vértices(1) = 0
  Vértices(2) = 0
  Vértices(3) = 0
  Vértices(4) = 20
  Vértices(5) = 0
  Vértices(6) = 0
  Vértices(7) = 0
  Vértices (8) = 20
  Vértices (9) = 0
  Vértices (10) = 20
  Vértices (11) = 20
  Vértices (12) = 0
  Set Malla = AcadPapel.Add3dMesh(M, N, Vértices)
End Sub

Pasemos a la explicación pertinente de propiedades y métodos nuevos. Como siempre, primero las propiedades.

· MClose. Esta propiedad permite asignar u obtener la verificación de cerramiento de la malla en la dirección M.

La sintaxis que usaremos para asignar un cerramiento o apertura en esta dirección es:

ObjMalla3D.MClose = BooVerCerramiento

Y la sintaxis para obtener la propiedad:

BooVerCerramiento = ObjMalla3D.MClose

Siendo BooVerCerramiento una variable declarada como Boolean, la cual si guarda True significa que la malla está cerrada en M; si guarda False significa que está abierta en dicha dirección.

· MDensity. Esta propiedad permite asignar u obtener la densidad de la malla en la dirección M. La densidad es el número de vértices (en este caso en M) que posee la malla después de una operación de ajuste de la misma.

La sintaxis que usaremos para asignar una densidad en esta dirección es:

ObjMalla3D.MDensity = IntDensidad

Y la sintaxis para obtener la propiedad:

IntDensidad = ObjMalla3D.MDensity

Siendo IntDensidad una variable declarada como Integer. Por defecto este valor es igual a 6.

· MVertexCount. Esto es el número de vértices de una malla poligonal en la dirección M cuando la propiedad Type es igual a acSimpleMesh (véase la sección DOCE.5.7.1., en el lugar en el que se muestran los valores de Type para las mallas).

Y la sintaxis que utilizaremos para obtener este valor de sólo lectura es:

IntNumVert = ObjMalla3D.MVertexCount

Siendo IntNumVert una variable declarada como Integer. Este valor sólo puede encontrarse entre 2 y 256.

· NClose. Lo mismo que para MClose pero en dirección N.

· NDensity. Lo mismo que para MDensity pero en dirección N.

· NVertexCount. Lo mismo que para MVertexCount pero en dirección N.

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 mallas.

 

DOCE.5.18. Imágenes de trama

La sintaxis del método para insertar imágenes de trama (imágenes raster) es:

Set ObjImgTrama = ObjColección.AddRaster(StrNombArch, DblPtoIns, DblFacEscala,
DblAngRotación)

Propiedades de los objetos de imagen de trama:

Application
Brightness
ClippingEnabled
Color
Contrast
EntityName
EntityType
Fade
Handle
Height
ImageFile
ImageVisibility
Layer
LineType
LinetypeScale
ObjectID
Origin
Transparency

Visible
Width

Métodos de los objetos de imagen de trama:

ArrayPolar
ArrayRectangular
ClipBoundary
Copy
Erase
GetBoundingBox
GetXData
Highlight
IntersectWith
Mirror
Mirror3D
Move
Rotate
Rotate3D
ScaleEntity
SetXData
TransformBy
Update

Para poder introducir una imagen raster desde VBA necesitamos proporcionar el nombre y ruta completa del archivo de imagen (StrNombArch), que si es variable será del tipo String; el punto de inserción (matriz de tres elementos Double); el factor de escala (Double), cuyo valor por defecto es 1, y habrá de ser siempre positivo; y el ángulo de rotación en radianes (Double).

Los tipos de formatos gráficos admitidos son los mismos que en la inserción de imágenes de trama desde la interfaz gráfica.

Veamos las nuevas propiedades.

· Brightness. Establece u obtiene el brillo de una imagen. Este valor es Integer y debe estar comprendido entre 0 y 100. Por defecto vale 50.

La sintaxis que usaremos para asignar brillo es:

ObjRaster.Brightness = IntBrillo

Y la sintaxis para obtener el brillo:

IntBrillo = ObjRaster.Brightness

· ClippingEnabled. Habilita o no un contorno delimitador creado con el método ClipBoundary (que veremos luego). También se puede utilizar para devolver un valor booleano que nos informe de si cierta imagen posee o no esta propiedad activada.

La sintaxis que usaremos para habilitar o no el contorno delimitador es:

ObjRaster.ClippingEnabled = BooEstadoMarco

Si hacemos esta propiedad igual a True el contorno se habilita; con False se deshabilita.

Y la sintaxis para obtener es:

BooEstadoMarco = ObjRaster.ClippingEnabled

BooEstadoMarco habrá sido definida como Boolean.

· Contrast. Establece u obtiene el contraste de la imagen. Este valor Integer habrá de estar entre 0 y 100. Por defecto es 50.

La sintaxis que usaremos para asignar contraste es:

ObjRaster.Contrast = IntContraste

Y la sintaxis para obtener el contraste:

IntContraste = ObjRaster.Contrast

· Fade. Establece u obtiene el difuminado de la imagen. Este valor Integer habrá de estar entre 0 y 100. Por defecto es 0.

La sintaxis que usaremos para asignar difuminado es:

ObjRaster.Fade = IntDifuminado

Y la sintaxis para obtener el difuminado existente en una imagen:

IntDifuminado = ObjRaster.Fade

· ImageFile. Establece u obtiene el archivo de imagen de la inserción raster.

La sintaxis que usaremos para asignar un nombre es:

ObjRaster.ImageFile = StrNombArch

Y la sintaxis para obtener el nombre de archivo de una imagen:

StrNombArch = ObjRaster.ImageFile

StrNombArch es una cadena declarada como String.

· ImageVisibility. Establece u obtiene si la imagen es visible o no.

La sintaxis que usaremos para asignar la condición de visibilidad:

ObjRaster.ImageVisibility = BooVisibilidad

Y la sintaxis para obtener la condición de visibilidad:

BooVisibilidad = ObjRaster.ImageVisibility

La variable que guarde este valor estará declarada como Boolean. Esta variable es booleana y además puede contener las siguiente constantes:

acOn
acOff

· Origin. Establece u obtiene el punto origen de un objeto (otros además de imágenes de trama) en coordenadas del SCU.

Utilizaremos la siguiente sintaxis para asignar un punto de origen:

ObjGráfico.Origin = DblPtoOrigen

Y podemos utilizar la siguiente para obtener el punto origen de un objeto que admita esta propiedad:

VarPtoOrigen = ObjGráfico.Origin

La variable que guarde este valor guardará un punto, es decir, será una matriz de tres elementos Double para asignar o un variable Variant para recoger.

· Transparency. Establece u obtiene la condición de transparencia para imágenes bitonales.

Para establecer o asignar:

ObjRaster.Trasparency = BooCondiciónTransp

Para obtener:

BooCondiciónTrans = ObjRaster.Transparency

BooCondiciónTrans es una variable del tipo Boolean que puede adquirir los siguientes valores constantes:

acOn
acOff

El único método nuevo se detalla ahora:

· ClipBoundary. Establece una serie de puntos que determinan un contorno delimitador para la imagen de trama. Su sintaxis es:

Call ObjRaster.ClipBoundary(DblMatrizPtos)

donde DblMatrizPtos contiene los diferentes puntos (array de tres elementos Double).

NOTA: Recordemos que para hacer efectivo este contorno deberemos poner a True la propiedad ClippingEnabled del objeto de imagen de trama en cuestión.