Sunteți pe pagina 1din 20

Capitulo 3

Fundamentos
de
Scripts de SketchUp
Temas del Capitulo
las 3 estructuras de datos fundamentales de SketchUp.
Las clases Edge y Face
Extrusion de formas en 3D con los metodos pushpull y followme

En este captulo, vamos a dejar de lado la teora de la programacin y llegar a la parte divertida: la
creacin de formas SketchUp desde el cdigo. Esta presentacin comienza con las lneas de una sola
dimensin y las superficies de dos dimensiones. Al final del captulo, nos acercaremos a como formar
sus propias figuras en tres dimensiones, utilizando los mismos mecanismos Push / Pull y Follow Me
disponibles en SketchUp.
En el camino, en este captulo se explica cmo crear archivos de script de Ruby y ejecutarlos en
SketchUp. Hasta ahora, hemos introducido (con suerte) comandos en la consola Ruby de SketchUp y
visto los resultados. Pero con las secuencias de comandos (script), puede almacenar sus archivos de
comandos en lugar de tener que volver a escribirlos cada vez. Adems, como se hace evidente en los
prximos captulos, se puede lograr mucho ms con las secuencias de comandos que con comandos
individuales.
Este captulo se refiere principalmente a los objetos Edge y Face de SketchUp - una vez que comprenda
cmo funcionan, puede construir casi cualquier cosa. Pero antes de que puedas insertar estos objetos en
un diseo, necesita familiarizarse con otras tres estructuras de datos:
- el mdulo Sketchup.
- la clase Model.
- la clase Entities

3.1 Las tres estructuras basicas de SketchUp


Casi todos los scripts de SketchUp se inician mediante el acceso a tres estructuras de datos bsicas:
Sketchup, Model, y Entities. Una vez que entienda cmo funcionan y trabajan juntos, estar listo para la
construccin de diseos de SketchUp mediante cdigo.

El Modulo Sketchup
1

A diferencia de las clases y objetos que se describen en el captulo anterior, la primera estructura de
datos que encontramos en Sketchup, es un mdulo. El captulo 8 describe los mdulos con gran detalle,
pero por ahora, todo lo que necesita saber es que un mdulo es una coleccin de mtodos. La mayora de
los scripts de Ruby en este libro comienzan llamando a uno de los mtodos de este mdulo.
Los mtodos del mdulo Sketchup acceden a las propiedades relacionadas con la aplicacin SketchUp
en su conjunto. Para ver cmo funciona esto, abra la consola de Ruby (Ventana> Consola Ruby de
SketchUp en el men principal) y ejecute el siguiente comando:
Sketchup.version ->

6.4.265

que muestra el nmero de versin actual de SketchUp.


Tambin puede introducir:
Sketchup.os_language ->

es

para determinar el idioma actual o


Sketchup.get_locale ->

es

Que devuelve el designador de SketchUp de zona.


Para ver todos los mtodos proporcionados por el mdulo de Sketchup, consulte la lista de Sketchup en
el Apndice A o escriba en la consola Ruby:
Sketchup.methods

El mtodo ms importante en el mdulo de Sketchup es active_model. Esto devuelve el modelo de


objetos para el diseo SketchUp abiertos actualmente. El comando siguiente muestra cmo funciona este
mtodo:
mod = Sketchup.active_model

Esto recupera el objeto Model actual y lo almacena en una variable denominada mod. El objeto Model
es crucial en todas las rutinas no triviales de SketchUp, y en la siguiente discusin se explica por qu.

El Objeto Model
As como el mdulo de Sketchup representa toda la aplicacin SketchUp, el objeto Model representa un
nico archivo de SketchUp (*. SKP), o ms exactamente, la informacin de diseo contenidos en el
fichero. Cuando se abre un nuevo archivo en SketchUp, las propiedades del mdulo de Sketchup siguen
siendo las mismas pero los datos en el objeto Model activo pasan a ser completamente diferentes.
Los mtodos de la clase Model proporcionan informacin sobre el diseo actual. Por ejemplo, el
metodo modified? identifica si el diseo actual se ha cambiado desde la ltima vez que se guard. Los
comandos siguientes muestran cmo se usa:
mod = Sketchup.active_model
mod.modified?> false (si no ha cambiado)
Si dibuja una linea con la herramienta de dibujo de Sketchup y vuelve a escribir:

mod.modified? > true

le indicara que lo ha modificado ( y asi prevenir que no lo guarde ).


El mtodo title devuelve el ttulo del diseo actual y el mtodo de description devuelve su texto de
descripcin. El mtodo path devuelve la ruta de acceso al archivo que contiene el diseo actual.
El apndice A enumera todos los mtodos asociados con la clase de Model.
En este libro, los mtodos de la clase Model que usaremos la mayoria de las veces son los que acceden a
los objetos de contenedores en el diseo actual. Pienser en el objetos Model como una cajonera: se trata
de un solo objeto que contiene varios compartimentos, y cada compartimento puede contener varios
objetos. La Figura 3.1 muestra seis de los ms importantes objetos "cajones", que figura dentro de un
objeto Model.

Figura 3.1: Contenido del objeto Model (Abreviado)

Modificando los objetos de estos seis contenedores, puede configurar casi todos los aspectos de un
diseo de SketchUp. Para acceder a ellos, debe llamar a los mtodos apropiados de Model. Estos son:
1. entities

- devuelve un objeto Entities que contiene las formas en el diseo actual (introducido en
este captulo y discutidos a lo largo del libro)
2. layers - devuelve un objeto Layers que contiene las capas de SketchUp en el diseo actual (captulo
7)
3. definitions - devuelve un objeto ComponentDefinitions con las definiciones de componentes en
el diseo actual (captulo 7)
4. materials - devuelve un objeto Materials que gestiona los materiales utilizados en el diseo actual
(captulo 6)
5. options - devuelve un OptionManager que proporciona acceso a mltiples OptionsProviders
(captulo 9)
6. pages - devuelve un objeto Pages que contiene las pginas del diseo actual (captulo 10)
La mayora de estos mtodos tienen nombres en plural, como entities, layers, definitions, y
materials. Devuelven objetos cuyas clases tienen nombres similares: Entities, Layers, Definitions,
y Materials. Cada objeto plural funciona esencialmente como un array. Como puede imaginar, un
elemento del array Entities es una Entity. Del mismo modo, la matriz Layers contiene objetos
Layer, la matriz Materials contiene objetos Material, y as sucesivamente.
3

Nota: Esto puede parecer confuso, as que preste mucha atencin. Un objeto Materials contiene varios
objetos Material. Es decir, un objeto Materials contiene objetos . Si la "s" est en el cdigo fuente, se
est haciendo referencia contenedor. Sin la "s" se hace referencia a los objetos individuales.
Por el momento, todo lo que queremos hacer es dibujar formas bsicas de SketchUp. Para empezar, el
primer paso es llamar al mtodo entities de la clase Model y acceder al objeto Entities del diseo
actual. El cdigo siguiente muestra cmo esta se realiza en el cdigo:
mod = Sketchup.active_model
ents = mod.entities

Puede lograr el mismo resultado encadenando los metodos asi:


ents = Sketchup.active_model.entities

Una gran parte de este libro se refiere a la aadir modificar de objetos dentro del contenedor de
Entities del diseo actual. Esto se discute a continuacin.

El Objeto Entities
Todos los objetos geomtricos en un diseo de SketchUp est representado por una Entity o una
subclase de ellas, incluyendo lines (lneas), faces (caras), images (imgenes), text (textos), groups (grupos)
y components (componentes). Para administrar o modificar objetos Entity en un diseo, necesita
acceder al contenedor primario Entities del diseo. Este contenedor tiene tres propsitos principales:
1. Aade nuevos objetos Entity al actual diseo SketchUp
2. Mueve, escala, gira, y borra objetos Entity en el diseo
3. Almacena objetos Entity en una matriz a la que se puede acceder por el ndice
El primer papel es el ms importante. La clase Entities contiene muchos mtodos que aaden nuevos
objetos Entity al diseo actual. Los mtodos ms simples de adicin (add_X) son los siguientes:
add_line - crea un objeto Edge desde dos puntos
add_edges - forma una matriz de objetos Edge desde una serie de puntos
add_circle - forma una matriz de objetos Edge que se combinan para formar un crculo
add_ngon - forma una matriz de objetos Edge que se combinan para formar un polgono
add_face - crea un objeto Face desde edges (aristas) o points (puntos)
add_text - aade una etiqueta en el diseo en un punto dado
Cuando se trata de formas, el objeto Edge y Face son los ms importantes de los objetos Entity. Cada
vez que aada una al contenedor Entities, aparecera la forma correspondiente en la ventana de
SketchUp. Entonces, al guardar el diseo, las Edges (aristas) y las Faces (caras) se incluirn en el objeto
Model almacenado. Para entender completamente las clases Edges (aristas) y las Faces (caras) , necesita
estar familiarizado con sus superclases, Entity y Drawingelement.

3.2 Las clases Entity y Drawingelement


La clase Entity es la superclase de todas las formas dibujable en SketchUp. La figura 3.2 muestra la
jerarqua de subclases de Entity que se discutirn en este libro.
4

Figura 3.2: Jerarquia de la clase Entity (Abriviado)

La subclase primaria de Entity es Drawingelement, que es la superclase de muchas de las clases que
vamos a estudia en este captulo y en el futuro. Antes de continuar, vamos a echar un breve vistazo a
estos dos superclases importante.

La clase Entity
En la figura 3.2, la clase Entity est en la cima de la jerarqua. Los mtodos de esta clase estn
disponibles para cada subclase debajo de ella. Muchos de estos mtodos proporcionan informacin
bsica acerca de Entity, e incluyen los siguientes:
entityID - devuelve un identificador nico para la Entity
typename - Identifica el tipo geomtrico de la Entity (Edge, Face, etc)
valid?/deleted? - Identifica si podr seguir accediendo a la Entity
model - devuelve el objeto Model del diseo
Los siguientes comandos muestran cmo se utilizan estos mtodos en el cdigo:
test_line = Sketchup.active_model.entities.add_line [0,0,0], [1,1,1]
#<Sketchup::Edge:0x767be50>
test_line.typename
Edge
test_line.entityID
1895

Adems de estos mtodos, cada Entity puede acceder a informacin especificada por el usuario
mediante la invocacin del mtodo attribute_dictionaries. La Entity puede recuperar, modificar
o eliminar estos atributos. El captulo 9 describe el uso y explotacin de la clase
AttributeDictionaries en detalle.
Por ltimo, la entidad puede tener uno o ms objetos EntityObserver asociados a ella. Los
observadores supervisarn el estado de la Entity y responden a los cambios. El captulo 9 explica
cmo trabajan los observadores y la manera de crearlos en el cdigo.

La clase Drawingelement
La clase Drawingelement es la superclase de las clases Edge, Face, Group, Image, Text,
ComponentDefinition, y ComponentInstance. Muchos de los mtodos de esta clase controlan cmo
aparecera el elemento en SketchUp, y establecer las propiedades tales como shadowing (sombras),
composicin del material, y si el elemento est hidden (oculto) o visible (visible). Estas son las mismas
propiedades definidas para la entidad en el dilogo Informacin dela entidad de SketchUp, que se
muestra en la Figura 3.3.
5

Figura 3.3: La ventana Entity Info (Informacion de entidad)

La clase Drawingelement proporciona un mtodo llamado bounds (lmites) que devuelve un objeto
BoundingBox. Este representa el menor volumen rectangular que puede contener el Drawingelement
manteniendo sus lados alineados con los ejes x, y, z. Los comandos siguientes crean un BoundingBox
de una lnea trazada de [0, 0, 0] a [2, 2, 5].
new_line = Sketchup.active_model.entities.add_line [0,0,0], [2,2,5]
#<Sketchup::Edge:0x767ab18>
box = new_line.bounds
#<Geom::BoundingBox:0x76784d8>

Una vez que obtiene el BoundingBox, sus mtodos proporcionan informacin acerca de su dimensin,
diagonales, esquinas, y los puntos mximo / mnimo. Los siguientes comandos muestran la ubicacin
del centro de un BoundingBox y la longitud de su diagonal (en pulgadas).
box.center
Point3d(1, 1, 2.5)
box.diagonal
5.74456264653803

Los objetos BoundingBox son tiles cuando se necesita determinar si el usuario hace clic en una forma.
Una vez que haya adquirido el BoundingBox de una forma, usted puede comparar sus dimensiones con
la posicin del clic del ratn del usuario.

3.3 Edges (aristas)


De las muchos clases Drawingelement, la ms fcil de entender es Edge (arista), que representa un
segmento de linea entre dos puntos. Los objetos Edge se crean con el mtodo de la clase add_line de
la clase Entities, seguido de la ubicacin de inicio de la lnea y el punto final. Cuando se invoca este
mtodo, SketchUp traza una lnea entre los dos puntos y aade un Edge a la actual coleccin Entities.
Por ejemplo, el comando siguiente se crea un Edge que se extiende desde [5, 0, 0] a [10, 0, 0]:
Sketchup.active_model.entities.add_line [5, 0, 0], [10, 0, 0]

La mayora de los mtodos de la clase Edge pertenece a una de dos categoras:


1. Los mtodos que configurar la apariencia de Edge
2. Los mtodos que acceden a los objetos conectados a Edge
Los mtodos de la primera categora configuran la visibilidad de Edges en la ventana de diseo. Adems
del mtodo hidden (oculto) que proporciona la clase Drawingelement, Edge proporciona mtodos
smooth (suave) y soft (tersa). Es importante recordar la diferencia entre una lnea oculta (hidden) y
6

una lnea suave (smooth): una lnea que combina suaves superficies adyacentes en una sola (por lo
general curva) de superficie, mientras que una lnea oculta no altera las superficies adyacentes.
En la segunda categora, el mtodo all_connected devuelve una matriz con todos los objetos Entity
conectados a Edge. Del mismo modo, el mtodo faces devuelve una matriz que contiene los objetos
Face conectados a Edge.
En SketchUp, los extremos de Edge estn representados por objetos Vertex. La clase Edge contiene
una serie de mtodos que interactan con ellos:
vertices - devuelve una matriz con los dos objetos Vertex del Edge
start/end - devuelve los objetos Vertex de inicio y final del Edge
other_vertex - dado uno de los objetos Vertex del Edge, este mtodo devuelve el otro
used_by? - Identifica si un Vertex est conectado al Edge
Hay dos mtodos de la clase Edge que no caen en las dos categoras anteriores: length (longitud) y
split (dividir). El primero devuelve la longitud del segmento que corresponde al Edge. El segundo
acepta un punto de la lnea y crea un segundo objeto Edge. Despus de llamar a split, el primer objeto
Edge contina slo hasta el punto dado y el segundo objeto Edge contina desde el punto hasta el final
de la lnea original. Los comandos siguientes muestran cmo se invocan estos mtodos en la prctica:
line = Sketchup.active_model.entities.add_line [0, 0, 0], [6, 3, 0]
line.length
6.70820393249937
new_line = line.split [4, 2, 0]
line.length
4.47213595499958
line.start.position
Point3d(0, 0, 0)
line.end.position
Point3d(4, 2, 0)
new_line.length
2.23606797749979
new_line.start.position
Point3d(4, 2, 0)
new_line.end.position
Point3d(6, 3, 0)

La figura 3.4 muestra grficamente los resultados. El objeto Edge original se extiende desde [0, 0, 0] a
[6, 3, 0]. Despus ejecutar split, el objeto Edge original se extiende desde [0, 0, 0] a [4, 2, 0] y un
nuevo objeto Edge se extiende desde [4, 2, 0] a [6, 3, 0].

Figura 3.4: Split de un Edge

3.4 Introduccion a Scrip de SketchUp


En este punto, usted debe ser un experto en el uso de la Consola Ruby de SketchUp. La consola est
muy bien para la ejecucin de simples comandos de Ruby, pero se vuelve molesto cuando es necesario
realizar procedimientos complicados. En lugar de introducir los comandos manualmente, es mucho ms
eficiente agruparlos en archivos de SketchUp y decirle que los ejecute todos en una secuencia. Estos
ficheros se llaman script (guiones). Adems de la eficacia, hay muchas otras razones para utilizar
secuencias de comandos, y el resto de este libro proporcionar listados ejemplo de cdigo en forma de
guin. Una de las ventajas de los scripts es que puedes aadir notas legible para explicar o describir
aspectos del cdigo.

Ruby Scripts
En la programacin general, un script es un archivo que contiene comandos que controlan un
programa en ejecucin. Los scripts UNIX dirigen comandos directamente al programa shell, como un
Bash. En Windows, scripts escritos en VBScript interactuar con el sistema operativo y ejecutar
programas como utilidades DOS .
Todas las secuencias de comandos descritos en este libro estn dirigidos a SketchUp. Usted puede
escribir un script de SketchUp en cualquier editor de texto que usted elija, pero tenga en cuenta tres
puntos:
1. Los comandos en un script de SketchUp tienen que estar en lenguaje de programacin Ruby.
2. Los archivos script sin encriptar deben tener extension .rb, los cifrados debe terminar con .RBS.
3. Para ejecutar un script, se debe cargar en SketchUp.
Este ltimo punto es importante. Uno de los comandos a conocer ms tiles de Ruby es load. Cuando
se ejecuta en la consola, load le dice a SketchUp que lea una secuencia de comandos y ejecute cada
uno de sus comandos en secuencia. Listado de 3,1 nos da nuestro primer ejemplo de guin.
Listado 3.1: star.rb
# Acceso al actual objeto Entities
ents = Sketchup.active_model.entities
=begin
Crea 5 puntos en 3 dimensiones
Cada punto es el vertex de una forma de estrella
=end
pt1 = [0, 1, 0]
pt2 = [0.588, -0.809, 0]
pt3 = [-0.951, 0.309, 0]
pt4 = [0.951, 0.309, 0]
pt5 = [-0.588, -0.809, 0]
# Dibuja 5 lineas en forma de estrella
ents.add_line pt1, pt2
ents.add_line pt2, pt3
ents.add_line pt3, pt4
ents.add_line pt4, pt5
ents.add_line pt5, pt1

El cdigo de ejemplo para este libro se puede descargar desde http://www.autosketchup.com, y


consiste en carpetas con nombres tales como Ch3, Ch4, y Ch5. Si no lo ha hecho, le recomiendo que
descargue este cdigo de ejemplo y extraerlo en la carpeta plugins de SketchUp. La ubicacin de esta
carpeta depende de su sistema operativo:
8

En Windows, la carpeta de plugins normalmente se encuentra en:


C:/Archivos de programa/Google/Google SketchUp 7/Plugins
En Mac OS X, la carpeta de plugins normalmente se encuentra en
/ Library/Application Support/Google SketchUp 7/SketchUp/plugins
Si coloca el cdigo de ejemplo directamente en el directorio dentro de la carpeta plugins (plugins/Ch3,
plugins/Ch4, etc), puede fcilmente ejecutar el script star.rb del listado 3.1. En SketchUp, abra la
ventana de la consola de Ruby e introduzca el siguiente comando:
load "Ch3/star.rb"

Este comando le dice a SketchUp que acceda a la secuencia de comandos del archivo star.rb y
ejecute cada uno de sus comandos. Esto crea una forma de estrella en el plano xy, centrada en torno al
origen. La figura 3.5 muestra lo que parece la forma resultante.
Si no puede ver el patrn de la estrella con claridad, abra el men Cmara en SketchUp y elija Vista
estndar y superior. Entonces, siempre en el men Cmara, seleccione proyeccin paralela. Por ltimo,
haga clic en la herramienta Zoom a extensin para centrarse en el nuevo dibujo.
No es obligatorio situar sus scripts en el directorio de plugins. Para acceder a una secuencia de
comandos fuera de esta carpeta, llame a load con la ubicacin completa del directorio del script. Por
ejemplo, si ha guardado el cdigo de ejemplo en C:/ruby_scripts, puede cargar star.rb con el siguiente
comando:
load "C:/ruby_scripts/Ch3/star.rb"

Figura 3.5: Forma creada por star.rb

El resto del cdigo de este libro se divide en dos categoras: los ejemplos de comandos y listados de
cdigo. Los ejemplos de comandos son conjuntos de comandos que demuestran los conceptos simples.
Se pueden ejecutar directamente desde la ventana de la consola de Ruby. Los listados de cdigo,
como el listado 3,1, contienen archivos de script dentro de uno de los directorios captulo. Cada archivo
de comandos se pueden ejecutar mediante la ejecucin del comando de carga en la ventana de la consola
de Ruby.

Comentarios Ruby
9

El cdigo del listado 3.1 contiene un aspecto de Ruby que no hemos visto antes: los comentarios. Un
comentario es una nota colocada dentro de la secuencia de comandos que describe lo que hace el cdigo.
Los comentarios Ruby son de dos tipos:
1. Una sola lnea de comentario - Comienza con # y contina hasta el final de la lnea
2. Comentario Multi-lnea - Comienza con =begin y sigue hasta =end
Cualquier cdigo que se coloca en un comentario no ser procesado por el intrprete de Ruby. Por lo
tanto, usted puede escribir lo que quiera en un comentario siempre y cuando no pongan fin a la
observacin antes de tiempo.
Hay tres comentarios en star.rb. El primer comentario,
# Acceso al actual objeto Entities

explica el propsito de la primera lnea de cdigo. El segundo comentario,


=begin
Crea 5 puntos en 3 dimensiones
Cada punto es el vertex de una forma de estrella
=end

describe el propsito de las cinco declaraciones de variables. El ltimo comentario,


# Dibuja 5 lineas en forma de estrella

explica la que hacen las ltimas cinco lneas. Los comentarios frecuentes es un aspecto vital de los
profesionales de programacin, no slo para que otros puedan leer su guin, sino tambin para recordar
cmo se pretende que funcione el cdigo.

3.5 Vectores
Antes de discutir los mtodos que dibujan curvas, es necesario tener un conocimiento bsico de los
vectores. El trmino vector tiene diferentes significados dependiendo de si ests hablando de
matemticas, fsica o ingeniera. Como diseadores de SketchUp, utilizamos vectores principalmente
para identificar la direccin. Por esta razn, representamos grficamente los vectores con flechas. La
figura 3.6 representa varios vectores en un espacio tridimensional.

Figura 3.6: Vectores y sus componentes 3 dimensiones

En el cdigo, un vector se identifica con tres valores numricos. El primero identifica la cantidad de
puntos en la direccin x, la segunda es la cantidad de los puntos en la direccin y, y el tercero, en la
direccin z. Estos valores se llaman componentes del vector. Si un vector se representa por [a, b, c], a es
la componente x, b es el componente y, y c es la componente z.
.

10

Un vector normal es un tipo especfico de vector que identifica la direccin con respecto a una cara.
Por ejemplo, si dibuja un crculo en el plano xy y quiere que quedar hacia arriba, un vector normal
aceptable es [0, 0, 1]. Aqu, slo la componente z tiene un valor distinto de cero, y este valor es positivo.
Por lo tanto, el vector es la direccin z positiva, o hacia arriba. Si el vector normal se fija en [0, 0, -1],
los puntos de crculo estaran la direccin z negativa, o hacia abajo.
Una cuestin que se plantea. No necesitamos vectores para dibujar la estrella en el listado 3.1, as
que por qu necesitamos vectores para dibujar curvas? La respuesta es que las lneas que formaron la
estrella son unidimensionales. Tienen longitud, pero no zona. Una vez que seleccione un punto de
partida y un punto final, cada lnea se identifica.
Pero si todo lo que tiene es el centro y el radio de un crculo o un arco, no pueden identificar de
modo nico a la curva. Por ejemplo, se pueden dibujar un nmero infinito de crculos con un centro
determinado y un radio distinto de cero. Esto se muestra en la Figura 3.7.
Para distinguir entre los crculos, podria identificar varios puntos del crculo. Pero es ms fcil
definir el vector normal del crculo. Si usted camina alrededor del crculo, los puntos del vector normal
estan hacia arriba. Del mismo modo, si utiliza la herramienta Push / Pull (Empujar/Tirar) de SketchUp
para crear un cilindro del crculo, esa es la direccin en la que tiraria.

Figura 3.7: Circulos concentricos con igual radio y diferentes vectores normales

3.6 Arrays de Edge: Curvas, Circulos, Arcos, y Poligonos


Puede usar las herramientas de SketchUp arco y crculo para dibujar formas, pero no crea realmente
arcos y crculos. En cambio, cada forma que parece una curva es una sucesin de segmentos de linea
pequeos. En el cdigo, la clase Entities contiene tres mtodos que producen formas similares a
curva, y cada uno de ellos devuelve un array de objetos Edge. Los tres mtodos son are add_curve,
add_circle, y add_arc. Estos mtodos son similares a un cuarto mtodo, add_ngon, que dibuja
polgonos.

Curvas
El ms simple de los mtodos de creacin de curvas es add_curve. Este acepta una sucesin de
puntos y devuelve la matriz de objetos perimetral que conecte los puntos. Por ejemplo, los comandos
siguientes producen la forma de la estrella misma que la creada en el captulo anterior.
pt1 = [0, 1, 0]
pt2 = [0.588, -0.809, 0]
pt3 = [-0.951, 0.309, 0]
pt4 = [0.951, 0.309, 0]
pt5 = [-0.588, -0.809, 0]
curve = Sketchup.active_model.entities.add_curve pt1, pt2, pt3, pt4, pt5, pt1
curve.class
Array
curve.length
5

11

Aqu, el mtodo add_curve produce una serie de cinco objetos Edge, lo que significa el resultado es
realmente una polilnea en lugar de una curva. Cuantos ms puntos designe, cuanto ms se acerque la
polilnea a una curva, mas se parecer a una curva redondeada. Por lo general, es ms fcil crear curvas
redondeadas con los mtodos add_circle o add_arc.

Cicrulos
El mtodo add_circle crea un crculo con un centro determinado, vector normal, y el radio. El
vector normal identifica la direccin hacia arriba - si alguien camina en el permetro del crculo y apunta
hacia arriba, estaran apuntando en la direccin del vector normal. A modo de ejemplo, el comando
siguiente crea un crculo con centro en [1, 2, 3], un vector normal igual a [4, 5, 6], y un radio de 7:
circle = Sketchup.active_model.entities.add_circle [1, 2, 3], [4, 5, 6], 7
circle.class
Array
circle.length
24
circle[0].class
Edge

El mtodo add_circle crea una matriz de 24 objetos Edge, lo que equivale a un segmento por cada
15 . Veinticuatro es el nmero predeterminado de segmentos en un crculo, con independencia de radio
o de orientacin. Sin embargo, puede agregar un cuarto parmetro al mtodo add_circle que
personaliza el nmero de segmentos en el crculo. Por ejemplo, el comando siguiente se crea un crculo
con 72 segmentos:
circle = Sketchup.active_model.entities.add_circle [1, 2, 3], [4, 5, 6], 7, 72

La figura 3.8 muestra cmo la apariencia de un crculo se ve afectada por el nmero de segmentos.
El crculo de 72-segmentos se aproxima ms a un crculo real que el crculo 24-segmentos o el crculo
de 12 segmentos, pero las operaciones en las aristas del crculo requiere ms tiempo.

Figura 3.8: Circulos con 12, 24, y 72 Segmentos

Cuantos menos segmentos contenga su crculo, ms se parecer a un polgono. Si se especifica una cifra
de cinco segmentos, add_circle crear un pentgono. Sin embargo, es ms comn para invocar el
mtodo add_ngon para crear polgonos. Esto se discute a continuacin.

Poligonos
El mtodo add_ngon es casi exactamente igual a add_circle, y los dos mtodos producen
esencialmente las mismas formas. La nica diferencia es el nmero de segmento: con add_circle, el
nmero predeterminado de segmentos es de 24, pero si lo desea, puede establecer un nmero diferente
de segmentos. El mtodo add_ngon no tiene ningn numero de segmentos por defecto: siempre hay que
indicarr el nmero de lados de su polgono.
12

Para aclarar esto, la secuencia de comandos en el listado 3,2 produce cuatro formas: un polgono con
8 lados, un crculo con 8 lados, un polgono con 24 lados, y un crculo con 24 lados.
Listing 3.2: poly_circle.rb
ents = Sketchup.active_model.entities
normal = [0, 0, 1]
radius = 1
# Poligono con 8 lados
ents.add_ngon [0, 0, 0], normal, radius, 8
# Circul con 8 lados
ents.add_circle [3, 0, 0], normal, radius, 8
# Poligono con 24 lados
ents.add_ngon [6, 0, 0], normal, radius, 24
# Circulo con 24 lados
ents.add_circle [9, 0, 0], normal, radius

Para ejecutar este script, asegrese de que la carpeta Ch3 est en la carpeta plugins del directorio de
Sketchup. A continuacin, abra la consola de Ruby y ejecute el siguiente comando:
load "Ch3/poly_circle.rb"

Para ver las formas resultantes, abra el men cmara y elija la de proyeccin paralela. A continuacin,
vaya a Cmara> Vista Standard y seleccione Inicio. El resultado se muestra en la Figura 3.9.:

Figura 3.9: Poligonos y Circulos

Arcos
La creacin de un arco es similar a crear un crculo, pero necesita parmetros adicionales. En primer
lugar, tiene que especificar los ngulos de inicio y final. Estos ngulos deben medirse (en radianes)
desde un eje, por lo que necesita para identificar el vector que sirve como la direccin cero radianes. La
lista completa de parmetros para add_arc son los siguientes:
center - Un punto de identificar el centro del arco circular
zero_vec - Un vector que identificar la direccin del ngulo cero
normal - Un vector perpendicular al arco circular
radius - Radio del arco circular
start_angle - A partir ngulo, medido a partir del vector zero_vec
end_angle - Acabar en ngulo, medido a partir del vector zero_vec
num_segments (Opcional) - Nmero de segmentos de lnea en el arco
El siguiente comando crea un arco con centro en [0, 0, 0] que intercepta un ngulo de 0 a 90 . El
ngulo se mide desde el eje y, por lo que el vector a 0 es [0, 1, 0]. El arco tiene un radio de 5 y se
encuentra en el plano xy, por lo que su vector normal es [0, 0, 1]. El nmero de segmentos se deja a su
valor predeterminado.
arc = Sketchup.active_model.entities.add_arc [0,0,0], [0,1,0],
[0,0,1], 5, 0, 90.degrees
arc.length
6

13

Este arco de 90 est compuesto por seis objetos, lo que significa el arco contiene un Edge por cada
15 , al igual que con el crculo. Se pueden agregar ms Edges mediante la adicin de un parmetro
opcional para el mtodo add_arc.
El apndice B presenta un mtodo para crear un arco con tres puntos haban ordenados. Esto es ms
conveniente que el mtodo add_arc, que requiere que conozca tanto el centro y el radio del crculo que
encierra el arco.

3.7 Creando Figuras en tres dimensiones


Ahora que ha creado lneas y curvas, estar listo para iniciar la construccin de caras. Estas son las
superficies cerradas de dos dimensiones que SketchUp rellena con color. Una vez que haya creado un
objeto Face (cara), es fcil darle volumen en tres dimensiones, utilizando mecanismos similares a la
herramientas de SketchUp Push / Pull y Follow.

Construyendo una Cara


Los objetos Face son creados con el mtodo add_face de la clase Entities. Esto es similar al
mtodo add_curve descrito anteriormente: acepta una serie de puntos o una serie de aristas (Edges), y
se pueden proporcionar como una lista separada por comas o en una matriz. Por ejemplo, la secuencia de
comandos del listado pentagon.rb 3,3 construye una cara pentagonal de cinco puntos:
Listado 3.3: pentagon.rb
# Crea los 5 puntos para el pentagono
pt1 = [0, 1, 0]
pt2 = [-0.951, 0.309, 0]
pt3 = [-0.588, -0.809, 0]
pt4 = [ 0.588, -0.809, 0]
pt5 = [ 0.951, 0.309, 0]
# Dibuja la Cara
pent = Sketchup.active_model.entities.add_face pt1, pt2, pt3, pt4, pt5
# Presenta la localizacion de los vertices almacenados
puts "Point 0: " + pent.vertices[0].position.to_s
puts "Point 1: " + pent.vertices[1].position.to_s
puts "Point 2: " + pent.vertices[2].position.to_s
puts "Point 3: " + pent.vertices[3].position.to_s
puts "Point 4: " + pent.vertices[4].position.to_s

Figura 3.10 muestra el resultado como se ve en la ventana de SketchUp. A diferencia de las matrices
de Edges anteriores, toda la superficie del objeto Face esta relleno.

Figura 3.10: Cara Pentagonal creada por pentagon.rb

Sin incluir a las dimensiones, los resultados de impresin son los siguientes:
Point 0: (-0.951, 0.309, 0)

14

Point 1: (0, 1, 0)
Point 2: (0.951, 0.309, 0)
Point 3: (0.588, -0.809, 0)
Point 4: (-0.588, -0.809, 0)

Al definir los puntos para crear una cara, el orden es importante. Si cambia pt2 y pt3 en la lista de
parmetros, la forma no se parece en nada a un pentgono. Sin embargo, la orientacin de los puntos (en
sentido horario o antihorario) no es importante. Si los puntos se enumeran de pt1 a pt5 o de pt5 a pt1,
el objeto resultante ser el mismo.
Para aclarar esto, mire la salida de pentagon.rb. Puede ver que el objeto cara almacena sus puntos en
un orden diferente al que ha listado. En este caso, el mtodo add_face ordena los puntos en una
orientacin hacia la derecha, y el vector normal siempre apunta hacia abajo. Volviendo a la cara
pentagonal, esto se puede demostrar con el siguiente cdigo:
pent.normal
(0, 0, -1)
pent.reverse!
pent.normal
(0, 0, 1)

El vector normal de una cara determina su direccin de extrusin. Por ejemplo, si el vector normal
en la direccin-z, el mtodo pushpull tirara de ella hacia abajo. Muchos diseadores esperan que las
formas tridimensionales crezcan hacia arriba, de manera que deber invertir el vector normal invocando
al mtodo reverse!.

Metodos Geometricos de la clase Face (Cara)


Tras crear una cara, puede invocar sus mtodos para examinar sus propiedades o extruirla en una figura
tridimensional. Algunos mtodos permiten anadir materiales y texturas a la cara (se vera en un captulo
posterior). Ahora vamos a ver los mtodos que analizan las propiedades geomtricas de la cara.
La mayora de los mtodos de la clase Cara proporcionar informacin sobre la naturaleza de su
forma: el mtodo edges devuelve un array con los objetos que forman las aristas de la Cara y el metodo
Vertex devuelve un array de los objetos vrtices de las aristas. El mtodo area devuelve el rea de la
zona de la cara y normal devuelve su vector normal.
El mtodo classify_point acepta un punto e identifica como se encuentra el punto en relacin a la
cara. Esto es til cuando se necesita para detectar colisiones o para determinar si el usuario hace clic en
una superficie. El mtodo devuelve uno de estos seis valores:
0 - Punto desconocido
1 - El punto esta dentro de la cara
2 - El punto en una de las aristas de la cara
4 - El punto es un vrtice de la cara
8 - Punto en el plano que contiene la cara, pero no en la cara
16 - El punto no esta en el plano que contiene la cara
Los comandos siguientes crean una cara cuadrada centrada en el origen, y muestra cmo el mtodo
classify_point localiza puntos relativos a la misma:
face = Sketchup.active_model.entities.add_face [-1, -1, 0], [-1, 1, 0],
[1, 1, 0], [1, -1, 0]
face.classify_point [0, 0, 0]
1

15

face.classify_point [1, 1, 0]
4
face.classify_point [1, 2, 0]
8
face.classify_point [1, 1, 1]
16

El mtodo outer_loop de la clase cara devuelve un objeto Loop que contiene entidades Faces. El
mtodo loops devuelve una matriz de Loops adyacente a la cara. Los objetos Loop son tiles en la
topologa, pero no ser explorado en este libro.

El Metodo pushpull (empujar-tirar)


El clase Face proporciona dos mtodos para extruir figuras tridimensionales desde las superficies en
dos dimensiones: pushpull y FollowMe. Ambas realizan las mismas operaciones que las herramientas
Push / Pull y Follow de SketchUp.
El mtodo pushpull es fcil de usar y entender. Acepta un entero, y si el entero es positivo, el
mtodo tira de la superficie a lo largo del vector normal de la cara, creando una figura tridimensional. Si
el nmero es negativo, el mtodo empuja la superficie en la direccin opuesta al vector normal de la
cara. Si una superficie en una figura tridimensional se empuja todo el camino hasta la parte trasera de la
figura, el volumen se corta en el diseo. Para eliminar parte de una figura tridimensional, cree uno o ms
objetos Edge que delimitan la parte a eliminar. Esta parte limitada se convierte en una nueva cara.
Llame a pushpull en esta cara con un valor negativo para cortarlo lejos de la cifra original.
La secuencia de comandos cutbox.rb del listado 3.4 muestra cmo funciona esto en la prctica.
Comienza con una cara rectangular y la extruye para formar una caja de 3-D. Luego se traza una lnea a
travs de la esquina superior derecha y pide pushpull para eliminar la esquina de la caja.
Listado 3.4: cutbox.rb
# Crea la caja
ent = Sketchup.active_model.entities
main_face = ent.add_face [0,0,0], [6,0,0], [6,8,0], [0,8,0]
main_face.reverse!
main_face.pushpull 5
# Dibuja una linea alrededor dela esquina superior derecha
cut = ent.add_line [6,6,5], [4,8,5]
# Elimina la nueva cara
cut.faces[1].pushpull -5

Vale la pena examinar de cerca el ltimo comando. La segunda cara de la esquina no est
explcitamente creada con cdigo. En vez de ello, se construye de forma automtica cuando la nueva
Edge se dibuja en la esquina de la cara. Una vez dibujada, esta Edge est conectada a dos caras: una
que representa la cara principal y otra que representa la cara de la esquina. Cada Edge puede tener
16

acceso a una matriz de objetos de caras adyacentes (con el metodo faces), y la nueva cara tiene el
ndice 1. Por lo tanto, el comando:
cut.faces[1].pushpull -5

empuja la segunda cara hacia abajo, eliminando el volumen esquina de la figura.

El Metodo followme (sigueme)


Cuando se llama a pushpull, puede extruir en una sola de las dos posibles direcciones: la direccin
del vector normal de la cara o la direccin opuesta. Con FollowMe, la extrusin se realiza a lo largo de
un vector, pero ahora puede controlar la direccin del vector. Es decir, puede especificar la ruta que debe
tomar la extrusin.
El camino de extrusin se puede definir con una o ms Edges. Si la ruta contiene ms de una Edge,
se deben cumplir dos requisitos:
1. Los Edges que forman el camino de extrusin deben estar conectados.
2. Los Edges que forman el camino de extrusin no pueden estar todos en el mismo plano que el
plano que contiene la superficie a ser extruida.
Una vez que haya determinado la ruta, puede invocar followme con una serie de aristas. Esto estira
(extrude) la Face a lo largo de cada arista (Edge) del camino de extrusin.
La secuencia de comandos followme.rb del listado 3.5 muestra cmo funciona esto. Crea una cara
circular y lo estira a lo largo de una bucle rectangular.
Listado 3.5: followme.rb
# Acceso al contenedor de Entities
model = Sketchup.active_model
ent = model.entities
# Crea la cara principal (un circulo)
circle = ent.add_circle [0,0,0], [0,0,1], 2
circle_face = ent.add_face circle
# Crea el camino
path = ent.add_curve [10,0,0], [10,0,5], [10,5,5],
[10,5,0], [10,0,0]
# Extrude el circulo alrededor del camino
circle_face.followme path

El lado izquierdo de la figura 3.11 muestra la cara original y el camino de extrusin rectangular. El lado
derecho muestra la extrusin tridimensional creada por followme.

Figura 3.11: Extrusion Creada por followme.rb (las lineas punteadas se han aadido para mejor claridad)

Echemos un vistazo a otro uso de followme. El cdigo del listado 3.6 crea una figura torneada girando
una cara elrededor de un eje. Aqu, la cara se construye a partir de la matriz de puntos devueltos por el
mtodo add_curve.
17

Listado 3.6: lathe.rb


# Acceso al objeto Entities
model = Sketchup.active_model
ents = model.entities
# Crea la forma en 2-D
curve = ents.add_curve
[0
, 0, 1.244209], [0.116554, 0,
[0.160261, 0, 1.217985], [0.186486, 0,
[0.1894 , 0, 1.165536], [0.17483 , 0,
[0.142778, 0, 1.127656], [0.096157, 0,
[0.093243, 0, 1.063551], [0.175152, 0,
[0.175152, 0, 0.915269], [0.28237 , 0,
[0.375392, 0, 0.801741], [0.448486, 0,
[0.497151, 0, 0.606398], [0.51839 , 0,
[0.510894, 0, 0.376625], [0.475126, 0,
[0.413287, 0, 0.168161], [0.329188, 0,
[0.228007, 0, 0.031575], [0.115978, 0,
[0
, 0, 0
], [0
, 0,
curve_face = ents.add_face curve
# Crea el camino circular
path = ents.add_circle [0, 0, 0], [0, 0, 1],
# Crea la figura
curve_face.followme path

1.238382],
1.188846],
1.145139],
1.118914],
0.996269],
0.871026],
0.711683],
0.492371],
0.26629 ],
0.088283],
0.001531],
1.244209]
2

El lado izquierdo de la figura 3.12 muestra la Cara de media botella en dos dimensiones y su trayectoria
circular. El lado derecho muestra la figura torneadas producidas por followme.

Figura 3.12: La figura torneada creada por lathe.rb

Al igual que pushpull, el mtodo followme puede eliminar partes de una figura tridimensional.
Para ello, forme una cara en la figura mediante la creacin de uno o ms objetos Edge. A
continuacin, constituyen el camino por elegir qu aristas de la figura deben ser cortadas. Invocar a
followme con la ruta para retirar la porcin limitada.
El cdigo del listado 3.7 muestra cmo funciona esto. Se crea una caja en tres dimensiones y llama a
followme para cortar los bordes superiores de la caja.
Listado 3.7: chamfer.rb
# Crea la caja
ents = Sketchup.active_model.entities
main_face = ents.add_face [0,0,0], [5,0,0], [5,8,0], [0,8,0]
main_face.reverse!
main_face.pushpull 6, true
# Dibuja una linea en una esquina
cut = ents.add_line [5, 7, 6], [5, 8, 5]
# Crea el chaflan
cut.faces[0].followme main_face.edges

En el lado izquierdo de la figura 3.13 se muestra la caja con el borde dibujado en la esquina superior. El
lado derecho muestra la caja con el chafln despues de que se invoque a followme.

18

Figura 3.13: Uso de followme para crear una figura achaflanada

La trayectoria de corte se obtiene mediante una llamada al mtodo edges de la cara superior de la
caja. Este devuelve la matriz de objetos Edge perimetrales conectados y que delimitan la superficie
superior. Cuando se necesita aplicar followme a cada arista de una superficie, es ms fcil llamar al
mtodo edges que localizar individualmente los objetos Edge.
En el listado 3.7, el mtodo pushpull esta seguido por un segundo parmetro establecido a true.
Normalmente pushpull elimina la cara utilizada para la extrusin. Sin embargo con este argumento
opcional la main_face permanecer accesible tras el pushpull . Recuerde esto si recibe un error de tipo
reference to delete Face en su script. (En este ejemplo anterior habria dado igual si no se pone true y
se elimina)

Crear una Esfera


Todo el mundo debe saber cmo crear una esfera en SketchUp, y como los ejemplos anteriores, se
puede lograr fcilmente con el mtodo followme. En este caso, la superficie y el camino de extrusin
son crculos con el mismo centro. Esto se muestra en la Figura 3.14.

Figura 3.14: Extrusion de una Esfera

El cdigo del listado 3.8 crea la Face circular y la trayectoria circular, y despus invoca followme para
extruir la esfera. Tenga en cuenta que ambos crculos tienen el mismo centro pero sus vectores normales
son perpendiculares entre s.
Listado 3.8: sphere.rb
# Acceso al objeto Entities
ents = Sketchup.active_model.entities
# Crea el circulo inicial
center = [0, 0, 0]
radius = 5
circle = ents.add_circle center, [0, 0, 1], radius
circle_face = ents.add_face circle
# Crea la trayectoria circular
path = ents.add_circle center, [0, 1, 0], radius + 1
# Crea la esfera
circle_face.followme path
# Elimina la trayectoria
ents.erase_entities path

La ltima lnea de la secuencia de comandos elimina las Edges que forman la trayectoria de la extrusin.
Esta es una consideracin importante cuando se utiliza el mtodo followme.
19

3.8 Conclusion
En este captulo se ha presentado una gran cantidad de informacin, desde las estructuras bsicas de
datos de SketchUp a los objetos que representan las formas en el diseo. La primera parte de este
captulo habla del mdulo de Sketchup, cuyos mtodos proporcionan informacin sobre la aplicacin
SketchUp. Por el contrario, la clase Model slo representa el diseo actual que puede ser guardado en
un archivo *. skp. Un objeto Model sirve como un contenedor de contenedores: contiene objetos como
Entities, Materials, Layers, Tools, etc.
El contenedor Entities es particularmente importante porque almacena todos los objetos grficos del
diseo actual. Estos objetos grficos se denominan objetos Entity, y la clase Entity tiene un nmero
importante de las subclases. Una subclase, Drawingelement, sirve como una superclase de todas las
formas de la API de SketchUp.
La ltima parte de este captulo discute las formas actuales que componen los modelos de SketchUp:
Edges, arrays de Edge, Faces y figuras tridimensionales. Las clases y sus mtodos son fciles de
entender, pero puede ser difcil su coordinacin para formar un diseo. Por lo tanto, te recomiendo que
practiques la creacin de estos objetos en secuencias de comandos: crear Faces desde Edges y usar
pushpull y followme para extruir las Faces y convertirlas en figuras tridimensionales.

20

S-ar putea să vă placă și