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
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 = BooCerradaY 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 = IntTipoy para obtenerlo:
IntTipo
= ObjGráfico.TypeIntTipo
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
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 = DblPuntoPara 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 = DblVectorPara obtener:
VarVector
= ObjGráfico.DirectionVectorDblVector
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
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.DegreeEl 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 = DblVectorPara 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 = DblValorToleranciaPara obtenerlo:
DblValorTolerancia
= ObjSpline.FitToleranceLa 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.IsRationalLa 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.NumberOfControlPointsLa 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.NumberOfFitPointsLa 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 = DblVectorPara obtenerla:
VarVector
= ObjSpline.StartTangentY 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 = IntTipoJusPara obtener:
IntTipoJus
= ObjTextoM.AtachmentPointIntTipoJus
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 = IntTipoOrPara obtener:
IntTipoOr
= ObjTextoM.DrawingDirectionIntTipoOr
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 = DblAnchuraLa 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.Centroiddonde
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.
MomentOfInertiaLa 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.
PerimeterLa 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.
PrincipalDirectionsLa 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.
PrincipalMomentsLa 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.
ProductOfInertiaLa 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.
RadiiOfGyrationLa 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.VolumeVeamos 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 = BooVerCerramientoY la sintaxis para obtener la propiedad:
BooVerCerramiento
= ObjMalla3D.MCloseSiendo
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 = IntDensidadY la sintaxis para obtener la propiedad:
IntDensidad
= ObjMalla3D.MDensitySiendo
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.MVertexCountSiendo
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 = IntBrilloY 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 = BooEstadoMarcoSi hacemos esta propiedad igual a
True el contorno se habilita; con False se deshabilita.Y la sintaxis para obtener es:
BooEstadoMarco
= ObjRaster.ClippingEnabledBooEstadoMarco
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 = IntContrasteY 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 = IntDifuminadoY 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.ImageFileStrNombArch
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 = BooVisibilidadY la sintaxis para obtener la condición de visibilidad:
BooVisibilidad
= ObjRaster.ImageVisibilityLa 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 = DblPtoOrigenY podemos utilizar la siguiente para obtener el punto origen de un objeto que admita esta propiedad:
VarPtoOrigen
= ObjGráfico.OriginLa 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ónTranspPara obtener:
BooCondiciónTrans
= ObjRaster.TransparencyBooCondició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.