Manual de Grasshopper Nivel 1

Page 1

manual de ejercicios de grasshopper nivel I miguel vidal calvet guillermo ram铆rez camarero www.frikearq.com edici贸n 2011


curso de grasshopper nivel I

aplicado al diseño paramétrico de arquitectura

índice A. Conceptos básicos. 00 Introducción. E01 Interfaz gráfica. E02 Objetos. Tipos y modos de visualización. E03 Modos de entrada de datos.

02 03 05 08

B. Colecciones numéricas y tipos de datos. E04 Dominios, rangos y series. Hilera y matriz de puntos. E05 Funciones. Parábola y espiral. E06 Paraboloide hiperbólico. E07 Superficie por puntos - Miralles.

06 08 09 10

C. Gestión de listas y condicionales E08 Ordenar una lista. E09 Triangulación de una cercha. E10 Malla de pilares. E11 Triangulación de la malla de pilares. E12 Malla de pilares con patio. manual de grasshopper nivel I aplicado al diseño de arquitectura por miguel vidal calvet y guillermo ramírez camarero edición Noviembre 2010 grasshopper v0.8.002

12 13 14 15 16

D. Geometría E13 Brújula. E14 Vector Solar. E15 Subdivisión y triangulación de una superficie. E16 Panelización de una superficie.

18 19 20 21

E. Modelado paramétrico E17 Monumento a los judíos de Europa. E18 Estructura de la mediateca de Sendai.

23 26


A

conceptos bรกsicos


00

manual de grasshopper nivel I Miguel Vidal Guillermo Ramírez

introducción

00. ¿qué es grasshopper?

02. Recomendaciones de uso de Grasshopper antes de empezar

Grasshopper es un entorno de programación visual dentro de Rhino. Su principal virtud es que nos permite diseñar algoritmos que operan con datos y geometría de manera intuitiva sin la necesidad de aprender ningún lenguaje de programación. Al funcionar dentro de Rhino, Grasshopper incorpora gran parte de sus comandos y funcionalidades, además, utiliza Rhino como entorno de visualización, de manera que podemos ver en tiempo real cómo afecta a nuestro modelo cualquier cambio que realicemos en Grasshopper.

01. ¿cómo se trabaja en grasshopper? Grasshopper es una herramienta de diseño de algoritmos. Esto quiere decir que es capaz de encadenar una sucesión de comandos e instrucciones con entradas y salidas que son geometría y datos para producir un resultado. Esta manera de operar aporta gran flexibilidad de cara a manipular grandes cantidades de datos o datos variables en el espacio y el tiempo, pero condiciona enormemente nuestra manera de trabajar.

- Lo primero, guardar el archivo :-) para que se hagan archivos de autoguardado. - Mantener un orden e higiene visual. - Elaborar un esquema de flujo de datos de lo que se vaya a hacer. - Al principio, sacar paneles de todo lo que se vaya haciendo. - Cuantos menos cables, mejor. - Comentar las definiciones. - Cambiar los nombres de parámetros y componentes a nuestro gusto para poder orientarnos mejor y hacer búsquedas rápidamente.

Llevar una idea o proyecto a grasshopper no es una tarea sencilla. No basta con conocer la herramienta y sus comandos, hace falta ser capaz de traducir nuestra idea a un lenguaje matemático en primer lugar, y, en segundo lugar, a un lenguaje que grasshopper sea capaz de entender. Idea modelo matemático definición en grasshopper

Por este motivo, mientras que grasshopper es una excelente herramienta para llevar a cabo proyectos que operen con gran cantidad de información, geometría, o múltiples variables y condiciones definidas con precision y rigor, grasshopper no es una buena herramienta para manejar procesos intuitivos o difusos, que tienen dificultad para ser traducidos a un lenguaje lógico. p04


B

colecciones numĂŠricas y tipos de datos


E04

manual de grasshopper nivel I Miguel Vidal Guillermo Ramírez

dominios, rangos y series

00. objetivo

C. Definición: serie.

El objetivo de este ejercicio es familiarizarnos con la creación de listas de números en Grasshopper. Para ello utilizaremos los componentes dominio, rango y serie para generar una colección de números que dibujarán una hilera de puntos primero y luego una matriz de puntos.

Serie (series) es un componente que genera una lista de valores ordenados a partir de un valor inicial A, un incremento o tamaño de paso N y una cantidad de valores C. incremento N

01. componentes clave A

domain, range, series 02. procedimiento

A+N

A+2N C valores

A+3N

B

D. Hilera de puntos Para dibujar una hilera de puntos en la dirección del eje X utilizando los conceptos anteriores, tendremos que seguir los pasos siguientes:

A. Definición: dominio. B. Definición: rango. C. Definición: serie. D. Hilera de puntos. E. Matriz de puntos. A. Definición: dominio. Dominio (domain) es un componente cuya entrada son dos valores reales A y B y cuya salida es un intervalo continuo de la recta real. Un dominio se escribe “A To B” y representa la colección de todos los números entre esos dos valores.

A

B

B. Definicón: rango. Rango (range) es un componente cuyas entradas son un dominio y un valor N, y cuya salida son valores discretos de la recta real. Es decir, es un componente que toma un dominio continuo D y lo divide N veces, generando una colección de N+1 valores discretos. N divisiones A

c

d N+1 valores

e

B

1. Sacamos un componente Series y conectamos unos sliders de número enteros a sus entradas A, N y C. El objetivo de esto es generar una lista de C coordenadas que empiecen en A y aumenten de N en N. Es decir, si le damos a nuestros sliders A, N y C los valores 1, 2 y 10 respectivamente, el componente series nos generará una lista tal que así (1, 3, 5, 7, 9, 11, 13, 15, 17, 19). 2. Conectamos la salida del componente Series a la entrada X del componente Point. El significado de este paso es que asignamos cada valor numérico generado en la serie a cada coordenada X de una lista de puntos. Como conectamos varios valores a una entrada X, el componente dibujará varios puntos, tantos como hayamos especificado en C. 3. La hilera de puntos ya está terminada. Si ahora cambiamos los valores de los sliders podemos observar cómo afectan los cambios a la cantidad y la separación entre puntos. 4. Pero.. ¿ y si enchufamos una lista de números a la entrada Y de Point, qué ocurre? ¿cómo podemos hacer para que en vez de una hilera inclinada Grasshopper nos dibuje una matriz de puntos? p06


E04

dominios, rangos y series

manual de grasshopper nivel I Miguel Vidal Guillermo Ramírez

E. Matriz de puntos. Si simplemente conectamos la serie a las entradas X e Y de Point, Point hará exactamente lo que le pedimos, es decir, dibujará una hilera de puntos que tienen la coordenada X igual a la Y, puesto que las dos listas de números provienen de la misma serie: (1,1) (2,2) (3,3) (4,4) (5,5) .... Ahora, si nuestra intención es hacer una matriz de puntos, debemos cruzar estas coordenadas. 1. Empleando lo aprendido en la lección de correspondencia de datos, hacemos clic con el botón derecho en la parte central del componente Point, y seleccionamos Cross Reference. Esto quiere decir que a cada coordenada X (1, 3, 5, 7..) Grasshopper le va a hacer corresponder todas las coordenadas Y (1, 3, 5, 7..) produciendo una lista de pares de coordenadas tal que así: (1,1) (1,2) (1,3) (1,4) (1,5) .... (2,1) (2,2) (2,3) (2,4) (2,5) .... (3,1) (3,2) (3,3) (3,4) (3,5) .... donde cada elemento se combina con todos los demás.

ejercicio propuesto Intenta hacer una matriz de puntos como la anterior, pero que en el que cada punto esé elevado 1 unidad en la dirección Z con respecto al anterior. ejercicio propuesto Intenta hacer una matriz de puntos tridimensional.

p07


E05

parábola y espiral

00. objetivo El objetivo de este ejercicio es familiarizarnos con el manejo de funciones. Usaremos una serie para generar una lista de valores que serán afectados por una función. Visualizaremos los efectos de la función asignando los valores a coordenadas de puntos para dibujar una parábola primero, y luego una espiral.

manual de grasshopper nivel I Miguel Vidal Guillermo Ramírez

Si conectamos lo valores generados en la serie directamente a la entrada Z de punto, o a través de una función x, los valores pasarán inalterados, dibujando una espiral que asciende linealmente en Z. Si en vez de x escribimos cualquier otra función para la coordenada Z, el ascenso será diferente: prueba con x^2, o Ln(x)

01. componentes clave series, function, point 02. procedimiento A. Serie. Hilera de puntos en X. B. Parábola: aplicamos una función a las coordenadas Y. C. Espiral: aplicamos funciones a X, Y y Z. A. Serie. Hilera de puntos en X. Usando lo aprendido en el ejercicio E04, generamos una lista de valores con una serie. Conectando la salida de la serie a la entrada X de un componente Point, asignamos los valores de la lista a las coordenadas X de los puntos. El resultado es una hilera de puntos en X. B. Parábola: aplicamos una función a las coordenadas Y. De momento sólo hemos operado con las coordenadas X. Sacamos un componente función y lo conectamos a la salida de la serie, y la salida de la función la conectamos a las coordenadas Y de nuestro componente punto. Conectamos un panel con el texto 0.1*x^2 . Con esto conseguimos afectar las coordenadas Y de nuestra hilera de puntos para que asciendan de manera cuadrática. El 0.1 es un coeficiente reductor que impide que la función crezca tan rápidamente que desaparezca de nuestra vista en Rhino. C. Espiral: aplicamos funciones a X, Y y Z. Ahora aplicaremos tres funciones, una a cada coordenada. Aplicando una función cos(x) a la X y una sin(x) a la Y conseguimos que los puntos describan un círculo en planta.

p08


E06

paraboloide hiperbólico

manual de grasshopper nivel I Miguel Vidal Guillermo Ramírez

01. objetivos - repasar la noción de dominio matemático - emplear las funciones de n variables - conocer cómo dibujar superficies a partir de fórmulas - entender cómo se define una superficie a partir de puntos

02. conceptos clave domain, range, f(n), decompose points, surface from points 03. procedimiento 1. Dibujar una malla de puntos base 2. Dibujar los puntos del paraboloide a partir de la malla base con coordenadas Z modificadas por una función de varias variables 3. Dibujar el paraboloide hiperbólico con una superficie a partir de puntos 1. Dibujar una malla de puntos base Dibujamos una malla cuadrada de puntos con un dominio, al igual, que en el ejercicio E01 - malla bidimensional de puntos. 2. Dibujar los puntos del paraboloide a partir de los puntos base Descomponemos los puntos de la malla cuadrada base y los “recomponemos” en otro punto XYZ (esta vez sin cross reference activo), tomando las coordenadas X e Y. La coordenada Z se generará en una función de n variables (f(n)) en la que introducimos, haciendo click con el botón derecho en la banda central del componente en edit expression, la ecuación del parabolide hiperbólico. El número de variables se define, también haciendo click con el botón derecho en la parte central del componente y luego yendo a input manager. 3. Dibujar el paraboloide hiperbólico con una superficie a partir de puntos Dibujamos el paraboloide con una superficie definida a partir de puntos (surface grid o surface from points). La entrada P será la últim lista de puntos XYZ y U la cantidad de puntos en cualquiera de las direcciones de la superficie (esta superfice sólo funciona con plantas cuadradas) , que será Nrango + 1.

p09


E07

manual de grasshopper nivel I Miguel Vidal Guillermo Ramírez

superficie por puntos - Miralles

01. objetivos Dibujaremos una superficie irregular cuya geometría viene dada por una función de la cual podemos controlar determinados parámetros. Para ello deberemos comprender el concepto de remapeo de números. Utilizaremos una gráfica para modificar en tiempo real una lista de valores de cotas que dará alturas diferentes a cada punto de la superficie.

Banco Lungomare, fuente: www.escofet.com

Mercado de Santa Caterina, fuente: www.wikipedia.org

02. conceptos clave domain, list length, remap numbers, graph mapper, surface grid 03. procedimiento 1. Malla base de puntos. 2. Afectar la coordenada Z con una gráfica. 3. Dibujar la superficie. 1. Malla base de puntos. Definimos una malla de puntos idéntica a la de E6 Paraboloide Hiperbólico. 2. Afectar la coordenada Z con una gráfica. Tomamos un Domain y lo definimos entre dos valores, p.ej. 0 y 1,5, que van a representar la altura mínima y máxima que alcanzará nuestra superficie. Dividimos ese domain con un range que genera tantos valores como puntos haya en nuestra malla, esto es, medimos con list length cuántos puntos hay en nuestra lista de puntos, y le restamos 1 para enchufarlo a la N del rango. Mapeamos los valores del rango a un intervalo entre 0 y 1 con Remap. Estos valores se introducen en Graph Mapper para ser modificados por una función. A la salida del Graph Mapper se devuelven a su dominio original con un segundo Remap. Finalmente, estos valores se introducen en la coordenada Z de nuestro componente punto. 3. Dibujar la superficie. Conectamos la salida de puntoXYZ a Surface Grid. La cantidad U de puntos de la entrada es la N del rango + 1.

p010


C

gesti贸n de listas y condicionales


E08

ordenar una lista

manual de grasshopper nivel I Miguel Vidal Guillermo Ramírez

01. objetivos - comprender que una lista es una sucesión de elementos, en la que el orden y la posición de los mismos dentro de ella es relevante

02. conceptos clave sort list, point list 03. procedimiento A. Dibujar unos puntos (lista que vamos a ordenar) B. Parámetro con el que ordenar la lista C. Ordenar la lista D. Visualización del resultado A. Dibujar unos puntos (lista que vamos a ordenar) Vamos a ordenar los puntos de división de una circunferencia según la distancia a un punto interior a la misma. Primero, dibujamos una circunferencia y la dividimos con Divide curve y dibujamos los índices de cada uno de los puntos con Point list. Y segundo, colocamos un punto dentro de ella con un parámetro de punto, haciendo click con el botón derecho y luego yendo a Set one Point. B. Parámetro con el que ordenar la lista Medimos la distancia entre la lista de puntos que salen de divide curve (A) y el punto que hemos elegido previamente (B) C. Ordenar la lista Ordenamos la lista de distancias con Sort List. En la entrada y salida K, devuelve cualquier lista numérica ordenada de menor a mayor. Y en la entrada y salida A, ordena cualquier lista, de la misma longitud que la de K, en el mismo orden que ha utilizado para K. Se pueden ordenar tantas listas como se quiera de este modo, haciendo clic con el botón derecho en Input Manager ... D. Visualización del resultado Para visualizar el resultado, primero dibujamos los puntos ordenados con Point List, pero, esta vez, los escalamos para que no coincidan con los del apartado 1; y, segundo, dibujamos líneas a puntos entre el punto interior y los de la circunfrerencia con Dash Pattern .

p012


E09

triangulación de una cercha

manual de grasshopper nivel I Miguel Vidal Guillermo Ramírez

01. objetivos - repasar la noción de lista como sucesión ordenada de elementos - conocer cómo se desfasan listas según índices

02. conceptos clave shift list 03. procedimiento 1. Curva base 2. Puntos para ejes 3. Ejes de la estructura 4. Dibujo de la estructura 1. Cordón inferior Tomamos como curva base de la cercha una curva dibujada en Rhino y almacenada en un parámetro de curva en Grasshopper mediante Set one Curve, haciendo click con el botón derecho en el mismo. 2. Puntos para ejes Los puntos base de la cercha los obtenemos dividiendo la curva base mediante Divide distance y los puntos de coronación, tomando las coordenadas X e Y de estos puntos (con point decompose) y la coordenada Z, un slider. 3. Ejes de la estructura - Ejes de los montantes: líneas entre puntos base y de coronación. - Diagonales: líneas entre puntos base y coronación desfasados una posición. - Cordón inferior: líneas entre puntos base y ellos mismos desfasados una posición. - Cordón superior: líneas entre puntos de coronación y ellos mismos desfasado una posición. Desfasamos tanto la lista de puntos base como la de coronación con shift list. 4. Dibujo de la estructura Finalmente, dibujamos la estructura, con un pipe de todas los ejes, almacenados en un parámetro de curva.

p013


E10

malla bidimensional de pilares

manual de grasshopper nivel I Miguel Vidal Guillermo Ramírez

01. objetivos - introducirse en y comparar las nociones de colecciones numéricas en Grasshopper con series y dominios - comprender el modo de correspondencia de datos entre listas en Grasshopper

02. conceptos clave series, domain, range, point, cross reference, line 03. procedimiento 1. Definición de parámetros de la estructura. 2. Coordenadas de los puntos de la estructura. Colecciones numéricas. 3. Dibujo de los puntos base y de coronación. 4 y 5. Dibujo de los ejes y de los pilares 1. Definición de parámetros de la estructura. Definimos las dimensiones de la malla con sliders, que devuelven números dentro de un intervalo. Se pueden modificar deslizando el puntero en la barrra. 2. Coordenadas de los puntos de la estructura. Colecciones numéricas. En primer lugar, utilizaremos una serie y, en segundo lugar, un dominio y así las podemos comparar. Una serie es una colección de “C” números reales que comienza en un número inicial “S” con un salto de “N” entre cada uno de ellos. Un dominio es un tramo continuo de la recta real definido por unos límites. Para hacer discreto ese tramo continuo, dividiéndolo en partes y obteniendo como resultado una colección de números reales, utilizamos un rango. 3. Dibujo de los puntos base y de coronación. Tomamos, bien la salida de la serie, bien la del rango como entradas de las coordenadas X e Y. En los puntos base, la coordenada Z será 0 y en los de coronación, definimos la altura con otro slider. 4 y 5. Dibujo de los ejes y de los pilares Los ejes de los pilares son líneas entre dos puntos. Los puntos de inicio de las líneas (A) serán los puntos base y los de final (B), los de coronación. Para dibujar unos pilares circulares, utilizamos pipe con las líneas como curvas base (C) y otro slider como radio de los pilares.

p014


E11

triangulación de la malla de pilares

manual de grasshopper nivel I Miguel Vidal Guillermo Ramírez

01. objetivos - conocer cómo se eliminan elementos de una lista, aplicándolo a la triangulación de la malla de pilares del ejercicio E03 - comprender la relación entre los índices de una lista y los valores númericos de los dominios y las series

02. conceptos clave shift list, cull pattern, cull index 03. procedimiento 4. Dibujar los ejes de los pilares 5. Eliminar las diagonales sobrantes (Los apartados anteriores y posterior corresponden al ejercicio EO3) 4. Dibujar los ejes de los pilares En el caso hipotético de que quisiéramos triangular la malla de pilares del ejercicio E03, tendríamos que desfasar la lista de puntos de coronación y dibujar una línea entre los puntos base y los puntos de coronación desfasados. Si dibujáramos las diagonales resultantes, tendríamos una estructura como la de la primera imagen de la derecha. 5. Eliminar las diagonales sobrantes Para deshacernos de la diagonal que atraviesa la planta, utilizaremos las herramientas de eliminación de elementos de una lista: Cull. Utilizando, por ejemplo, Cull Nth (también podríamos hacerlo, con otros valores, con Cull Index) tendremos que averiguar la relación numérica que existe entre los parámetros de la estructura y la frecuencia con que se da esa diagonal que nos sobra. Dependiendo si hemos dibujado la malla de pilares con series o con dominios y rangos, la frecuencia de esa diagonal estará relacionada, respectivamente, con la cantidad de copias (C) de la serie que da lugar a los puntos de la malla de la estructura, o con el número de divisiones del dominio (N) más una unidad.

p015


E12

malla de pilares con patio

manual de grasshopper nivel I Miguel Vidal Guillermo Ramírez

01. objetivos - elaborar un algoritmo sencillo, que consiste en eliminar los pilares del ejercicio E03 en un entorno de un radio determinado para fabricar un patio en la estructura - trabajar con sentencias condicionales: comparadores y valores booleanos

02. conceptos clave booleanos, true, false, larger than, dispatch 03. procedimiento 1. Datos de filtrado 2. Evaluación esos datos 3. Extraer valores booleanos 4. Filtrado de los datos iniciales (Para terminar el ejercicio, dibujamos el patio con la cubierta) 1. Datos de filtrado Los datos que definen el patio son las distancias de un punto de origen al resto de puntos base de los pilares. Todos los puntos que estén en un entorno que determinemos alrededor de ese punto, deberán eliminarse. 2. Evaluación de los datos de filtrado La condición que vamos a establecer para eliminar pilares de ese entorno es que la distancia entre el punto de origen sea mayor (Larger than) que un valor. 3. Extraer valores booleanos La pregunta de cuáles de todas las distancias son mayores que el número del slider de “entorno” devuelve una lista de valores booleanos (verdadero y falso) de la misma longitud que la lista de distancias. 4. Filtrado de los datos iniciales Para quedarnos con los valores que corresponden con True (verdadero), utilizamos la herramienta Dispatch, que toma una lista L, la coteja con otra lista de valores booleanos y devuelve en A los ítemoes de L que coinciden con un valor True en P y en B, los que coinciden con False. La lista L que tomamos será la de los ejes de los pilares El último apartado es un ejercicio geométrico que se sale ligeramente del objetivo principal del ejercicio. Lo hacemos simplemente para dejar dibujado adecuadamente el patio.

p016


D

geometrĂ­a


E13 brújula

manual de grasshopper nivel I Miguel Vidal Guillermo Ramírez

01. objetivos - definir geométricamente puntos con coordenadas XYZ y polares - utilizar funciones de una variable para cálculos matemáticos - dibujar vectores a partir de dos puntos y visualizarlos - entender cómo se miden ángulos en Grasshopper

02. conceptos clave function, f(x), point polar, vector display, angle 03. procedimiento 1. Establecer las coordenadas de los puntos 2. Dibujo de los puntos 3. Definir los vectores y visualizarlos 4. Medir el ángulo entre esos vectores 1. Establecer las coordenadas de los puntos Las coordenadas de los puntos XYZ son las coordenadas en el sistema de coordenadas universal. Las coordenadas para los puntos polares son: plano origen del punto (P), ángulo en radianes en ese plano (xy), ángulo en radianes en el plano normal (z) y distancia radial al origen (d). Utilizamos una función de una variable f(x) para pasar de grados a radianes 2. Dibujo de los puntos Conectamos las salidas numéricas de las coordenadas a las entradas correspondientes de los componentes de puntos. Utilizamos un punto XYZ como origen del dibujo y otro punto polar para definir el extremo del vector. 3. Fabricar vectores y visualizarlos Utilizamos el componente de vector dos puntos, entre el punto XYZ y el punto polar. Como los vectores son entidades geométricas definidas por una longitud y una dirección, no tienen una visualización, así que utilizamos “vector display” para dibujar dicho vector V utilizando el origen como punto de ancla A. 4. Medir el ángulo entre esos vectores Computamos el ángulo entre el vector anterior y un vector unitario en el eje X. Como resultado, obtendremos dos ángulos: el convexo (A) y el reflejo (B).

p018


E14

manual de grasshopper nivel I Miguel Vidal Guillermo Ramírez

vector solar

01. objetivos El objetivo es definir un vector “solar” en coordenadas polares y compararlo con el vector normal a una superficie. Colorearemos puntos sobre la superficie según su exposición a la radiación solar.

02. conceptos clave point polar, loft, angle, divide surface, flatten, gradient, preview

de 0 radianes será rojo, uno de Pi será rojo también, y, en Pi/2, cuando los los vectores sean perpendiculares, la luz será rasante y le asignaremos el color verde. 4. Visualizar. El último componente, Preview, sirve para colorear: le asigna color a geometría. Nuestra información de color sale del Gradient, y la geometría a colorear son todos los puntos que salen del flatten de la salida P de Surface Divide.

03. procedimiento 1. Definir un vector en coordenadas polares. 2. Dibujar y dividir una superficie. 3. Comparar vectores y asignar color. 4. Visualizar. 1. Definir un vector en coordenadas polares. Con el componente Point Polar dibujamos un punto que gira en torno al Origen. Uniendo con Line el Origen y el punto polar, obtenemos la dirección de nuestro sencillo vector solar, con vector display podemos visualizarlo. Si tratamos a la línea como si fuera un vector, Grasshopper no tiene problemas porque la convierte automáticamente. 2. Dibujar y dividir la superficie. Referenciamos con dos Curve (icono de borde hexagonal) dos curvas dibujadas en Rhino, y conectamos ambos a la entrada S de un componente Loft. Con Divide Surface dividimos la superficie en puntos en los cuales conocemos el vector normal (salida N del Divide Surface). Un Flatten en las salidas N y P del Divide Surface nos libra de las sublistas. 3. Comparar vectores y asignar color. Con un Angle comparamos los vectores normales (salida N del Divide Surface) con el vector solar (salida L de Line). A estos valores de ángulo les tenemos que asignar un color. Esto se consigue con Gradient. Con la paleta de Gradient definimos el espacio de color que vamos a hacer corresponder con los valores de ángulo, este espacio queda determinado entre los límites L0 y L1. Un ángulo

p019


E15

manual de grasshopper nivel I Miguel Vidal Guillermo Ramírez

subdivisión y triangulación de una superficie

01. objetivos El objetivo de este ejercicio es subdividir una superficie alabeada en porciones menores utilizando sus coordenadas locales U y V, y luego trazar las diagonales de cada cuadrado. Las sublistas nos ahorrarán mucho trabajo.

02. conceptos clave

4. Dibujar las diagonales Ya sólo queda unir cada pareja opuesta de puntos con una linea para dibujar las diagonales. Como seguimos trabajando dentro de la estructura de sublistas, basta unir el punto 0 con el 2 para que Line nos dibuje las diagonales 0-2 de todas las caras. Repetir el proceso para las diagonales 1-3. Podemos añadir grosor a las barras si utilizamos un Pipe.

loft, divide domain2, isotrim, list item, sublista 03. procedimiento 1. Dibujar la superficie. 2. Dividir la superficie en partes. 3. Seleccionar los vértices de cada parte. 4. Dibujar las diagonales. 1. Dibujar la superficie. Para dibujar una superficie alabeada, en Rhino dibujaremos dos curvas. Las referenciamos en un componente Curve (de icono hexagonal) y conectamos ambas a la entrada S de un componente Loft. Deben estar dibujadas en el mismo sentido ya que si una ha sido dibujada de izquierda a derecha y la otra al revés, aparecerá un giro extraño en nuestra superficie. 2. Dividir la superficie en partes. Como si de un domain2 se tratara, conectamos el Loft a la entrada de divide domain2. Grasshopper interpreta directamente que queremos trabajar sobre el dominio bidimensional de coordenadas locales de la superficie. Asignamos sliders a U y V. Conectamos la salida del divide domain2 a Isotrim (subsurface) que ahora sí, divide la superficie con el patrón del domain2. Con Brep Components explotamos cada subsuperficie en sus vértices, aristas y caras. 3. Selecionar los vértices de cada parte. Con cuatro list item diferentes podemos seleccionar los vértices 0, 1, 2 y 3 de cada subsuperficie. Como Isotrim ha hecho una sublista de cada cara, un list item que nos escoja el elemento 0, cogerá la misma esquina de todas las subsuperficies a la vez, ahorrándonos trabajo.

p020


E16

panelización de una superficie

01. objetivos En este ejercicio definimos una superficie a partir de una curva que se repite en vertical y aprendemos a replicar una geometría sobre ella.

02. conceptos clave

manual de grasshopper nivel I Miguel Vidal Guillermo Ramírez

Surface Morph es un componente con mútiples entradas: en la G debemos enchufar el cable que lleva la geometría (la lama) a replicar, en la R la caja de referencia de Bounding Box que contiene la lama, en la S la superficie sobre la cual vamos a replicar la lama, en la U y V, los dominios que vienen del Domain2 Components, y por último, la W, en la que conectaremos un Slider que regulará la altura de las réplicas sobre la superficie.

move, domain2 components, bounding box, surface morph. 03. procedimiento 1. Repetir una curva N veces en Z 2. Superficie a partir de las curvas y subdivisión. 3. Surface Morph. 1. Repetir una Curva N veces en Z. El primer paso es dibujar una curva en Rhino y almacenarla en un componente Curve en Grasshopper. Luego la copiaremos en vertical con Move. Move necesita un vector para funcionar así que conectamos a la entrada T de Move un Unit Z: un vector unitario. Conectamos una serie a la entrada F del vector para generar varios vectores verticales y así tener múltiples copias.de la curva. 2. Superficie a partir de las curvas y subdivisión. Conectando la lista de curvas a un Loft obtenemos la superficie que buscamos. Luego necesitamos dividir el domain2 del loft. La entrada U del divide domain2 tiene que ser el mismo valor que el slider que regula la C de la serie, menos uno, si queremos que las subdividiones en altura coincidan con la posición de las curvas replicadas. Extraemos los dominios unidimensionales del dominio bidimensional con Domain2 Components puesto que más tarde nos hará falta. 3. Surface Morph Surface Morph toma una geometría contenida en una caja de referencia y la replica sobre una superficie deformándola de acuerdo a las coordenadas locales de la superficie. Dibujamos un objeto a replicar en Rhino, y lo almacenamos en un componente Geometry de icono hexagonal. En este caso, el objeto dibujado será una lama inclinada. Aplicamos Bounding Box a la lama para generar la caja de referencia.

p021


E

modelado paramĂŠtrico


E17

manual de grasshopper nivel I Miguel Vidal Guillermo Ramírez

Monumento a los judíos de Europa asesinados, Peter Eisenman

01. objetivos - parametrizar un diseño de un proyecto real - aplicar la noción de dominio a medidas concretas - subdividir una región del espacio con planos - tomar medidas pseudoaleatorias para elaborar “prototipos” de diseños

02. conceptos clave domain, plane, intersection, containment, duplicate data, jitter 03. programa

Monumento a los judios de Europa asesinados, vista de satélite. Fuente: Google Earth.

Monumento a los judios de Europa asesinados, vista general. Fuente: www.wikipedia.org.

“El Monumento a los judíos de Europa asesinados (...) es un monumento que recuerda en Berlín a los judíos víctimas del holocausto. Fue diseñado por el arquitecto Peter Eisenman y por la ingeniería Buro Happold. Se trata de un campo inclinado de 19000 metros cuadrados cubierto por una rejilla cuadriculada en la que están situadas 2711 estelas o losas de hormigón. Estas losas tienen unas dimensiones de 2.38m de largo y 0.95m de ancho, y varían en cuanto a su altura, desde los 0.2 m a los 4.8m. (...)” Fuente: www.es.wikipedia.org

NOTA: En este ejercicio, se han reducido las medidas reales de superficie total y número de losas para dar lugar a un archivo menos pesado.

Datos de partida: - parcela: dibujamos en Rhino un polígono similar a la planta del solar - anchura de losas: 2.38 m. - fondo de losas: 0.95 m. - número de losas: 371

04. procedimiento 1. Dibujar los puntos de origen de las losas 2. Dibujar las losas con las medidas de los datos de partida en esos puntos 1. Dibujar los puntos de origen de las losas 1.1. Extraer los dominios de cada una de las direcciones: dibujamos el sólido capaz que contiene a la parcela (bounding box), que será una caja plana, y extraemos sus esquinas con (box corners). Los dominios de la parcela, tanto en el eje X como en Y son las coordenadas X e Y de dichas esquinas.

p023


manual de grasshopper nivel I Miguel Vidal Guillermo Ramírez

1.2. Dibujar los planos de corte para cada dirección: en primer lugar, necesitamos los puntos de origen de esos planos, que estarán contenidos en los bordes del sólido que encierra a la parcela. Tomamos los dominios de cada eje y los dividimos en números reales con un rango. El número de subdivisiones del del dominio (la N del rango) puede ser la longitud lineal del sólido capaz en cada eje (la resta numérica de las coordenadas de los bordes del dominio para cada dirección) entre la medida de la losa más un paso. En segundo lugar, una vez obtenidos los puntos, sólo tenemos que tomar los vectores unitarios adecuados para dibujar los planos en cada dirección: para los planos en la dirección X, los vectores serán los unitarios en los ejes Y y Z; y para los planos en la dirección Y, los vectores serán los unitarios en los ejes X y Z. El último plano para fabricar las intersecciones que darán lugar a los puntos será el plano universal XY. 1.3 . Puntos de losas: una vez obtenidos los planos, tan sólo nos queda fabricar las intersecciones con Intersect plane|plane|plane (3PX). Para quedarnos solamente con los puntos interiores de la parcela, utilizamos la herramienta Point Containment, que comprueba si una lista de puntos (P) están o no en el interior de una curva cerrada C y devuelve en R la relación entre el punto y la curva (0 si está sobre la curva, 1 si está dentro de la curva y 2 si está fuera de la curva de región) y en P’ la proyección de dicha lista de puntos sobre el plano que contiene a la curva plana cerrada. Sólo nos queda quedarnos con los puntos coincidentes con los valores “2” de la salida R de Point Containment con una igualdad y Dispatch. Por último, nos quedaremos con los valores de la salida A de Dispatch.

2. Dibujar las losas con las medidas de los datos de partida 2.1. Rectángulo base de losas: Dibujamos una lista de rectángulos, tomando como puntos de origen P los puntos de origen fabricados en el apartado anterior y dimensiones X e Y, el ancho y fondo de la losa de los datos de partida respectivamente; la entrada de R corresponde al radio de redondeo de las esquinas, en este caso, es igual a cero (el valor por defecto). 2.2. Número exacto de losas: con Random reduce eliminamos ítemes de la lista L de forma pseudoaleatoria. Eliminaremos tantos elementos R hasta llegar a la contidad de losas de los datos de partida p024


manual de grasshopper nivel I Miguel Vidal Guillermo Ramírez

2.3 Extrusión de los rectángulos base de las losas : Para reproducir el paisaje del monumento, tomamos unas alturas de losas prefijadas, como medidas de unos prefabricados, que distribuiremos de un modo aparentemente aleatorio, utilizando la herramienta jitter. Necesitamos tantos valores de extrusión como losas, para ello repetimos la lista de alturas de losas con “duplicate data”, que repite los valores de una lista D N veces. Jitter desordena los elementos de una lista, modificando sus índices pseudoaleatoriamente.Para terminar, tapamos la extrusión con cap holes.

p025


E18

estructura de la Mediateca de Sendai, Toyo Ito

manual de grasshopper nivel I Miguel Vidal Guillermo Ramírez

01. objetivos El objetivo de este ejercicio es realizar un repaso de los conceptos generales aprendidos en todos los ejercicios anteriores. Dibujaremos un sólo pilar triangulado de la mediateca de Sendai, de Toyo Ito. Comenzaremos con un punto, luego un círculo, luego una colección de círculos transformados (copiados, escalados, rotados) y finalmente resolveremos su triangulación.

02. conceptos clave move, scale, rotate, center, random, jitter. 03. procedimiento 1. Dibujar un círculo y replicarlo en altura. 2. Desplazar aleatoriamente en el plano XY. 3. Escalar aleatoriamente respecto de cada centro. 4. Rotar cada anillo.. 5. Dibujar la superficie y dividirla. 6. Explotar las subsuperficies y seleccionar sus vértices. 7. Triangular y dar grosor a las barras. 1. Dibujar un círculo y replicarlo en altura. El primer paso es dibujar el centro desde el cual se va a referenciar toda la definición: será un punto dibujado en Rhino y almacenado en un componente Point de icono hexagonal. Conectamos el punto a la entrada P de un Circle, con radio gobernado por un slider que llamaremos Radio Maestro. El siguiente paso es replicar el círculo en altura. Lo haremos como hicimos en E16, con una serie y un vector Unit Z conectados a un Move. Le daremos el nombre H al slider que se conecta con la N de la serie, y el nombre Cantidad al slider que se conecta con la C de la serie. Este último slider es muy importante y lo vamos a conectar a muchas partes de nuestra definición posteriormente. 2. Desplazar aleatoriamente en el plano XY. Ahora definiremos otro vector de traslación para un nuevo Move, pero en este caso con Vector XYZ. Generaremos valores aleatorios con Random para la X, comprendidos entre -1.1 y 1.1, y los barajaremos con Jitter para introducirlos en la Y. Este uso combinado de Random y Jitter nos evita tener que hacer dos

p026


E18

manual de grasshopper nivel I Miguel Vidal Guillermo Ramírez

estructura de la Mediateca de Sendai, Toyo Ito 4. Rotar cada anillo. colecciones independientes de valores aleatorios. Simplemente generamos una colección y la barajamos. Es importante que haya números aleatorios positivos y negativos para permitir desplazamiento en cualquier dirección del plano XY. Los números aleatorios deben ser tantos como anillos haya. Esto se logra conectando el slider inicial Cantidad a la N del Random. 3. Escalar aleatoriamente respecto de cada centro. Debemos agrandar y encoger cada círculo de manera diferente y cada uno desde su propio centro. Con un componente Center conectado a nuestra última colección de círculos, hallamos los centros de cada uno de ellos. Estos centros conectarán con la entrada C de un componente Scale. Los factores de escala F serán números aleatorios (generados como en el paso anterior) comprendidos entre e. 0.7 y el 1.2 aproximadamente. Como en el paso anterior, debe haber tantos valores aleatorios como anillos haya. Esto se logra conectando el slider inicial Cantidad a la N del Random.

Este paso es el más complicado de comprender. Es más fácil dibujar hasta el paso 5 y luego pararse y retroceder. Nuestra estrategia es generar una piel con un loft, luego subdividirla y triangularla como hicimos en E15, pero para que los triángulos de la subdivisión sean isósceles y no rectángulos debemos retorcer los anillos. Retorcer significa rotar el primer anillo un ángulo α, el segundo un ángulo 2α y así sucesivamente. Sacamos un Slider que llamamos Divs (divisiones). Este slider cobrará mayor sentido en el paso 5. Pasamos el valor de Divs por una función que divide Pi/Divs. Este resultado es el incremento de ángulo de rotación que resulta de un anillo al siguiente y que debemos conectar a la entrada N de una Serie. La C de la serie es el slider inicial Cantidad. La serie va conectada a la A de Rotate. Si el anillo se define como un polígono de cantidad de lados igual a Divs, entonces y sólo entonces tendremos una triangulación en la que los vértices de los anillos poligonales superiores caen sobre los puntos medios de los anillos poligonales inferiores (uf!!). Si no nos queremos creer esto, podemos probar valores de ángulo cualesquiera para la A para entender cómo se comporta la estructura.

p027


E18

manual de grasshopper nivel I Miguel Vidal Guillermo Ramírez

estructura de la Mediateca de Sendai, Toyo Ito 5. Dibujar la superficie y dividirla. En el paso 5 empezaremos a ver los efectos del retorcimiento que planeamos en el punto 4. Este paso es análogo al E15. Enchufamos los anillos rotados al Loft, y marcamos dentro de Loft Options loft la opción UNIFORM. Esto hará que el loft se ajuste con precisión a los anillos. Dividimos el loft con Divide Domain2, cuya U es el valor de Cantidad - 1, y cuya V viene del slider Divs. Aquí observamos que el slider Divs regula la cantidad de lados del anillo. Con Isotrim aplicamos el patrón de corte del Divide Domain2 a nuestra superficie generando las subsuperficies.

7. Triangular y dar grosor a las barras. Este paso es muy sencillo. Con tres Line diferentes, unimos la salida del List Item1 con el 3, la del 1 con el 2, y la del 2 con el 3. Luego le damos grosor a las barras con un Pipe como hicimos en E15.

6. Explotar las subsuperficies y seleccionar los vértices. En el paso 5 continuamos con lo aprendido en E15. La técnica es idéntica. Explotamos las subsuperficies con Brep Components y seleccionamos los vértices con List Item haciendo uso de la estructura de sublistas para ahorrarnos trabajo. Con tres list item que seleccionen el vértice 1, 2 y 3 de cada subsuperficie debería valernos.

p028


manual de grasshopper nivel I Miguel Vidal Guillermo Ramírez

listas de datos que queremos evaluar

evaluación de los datos (generalmente comparación)

resultado de la evaluación (lista de valores booleanos)

filtrado de los datos iniciales a través del resultado p029


manual de grasshopper nivel I Miguel Vidal Guillermo Ramírez

Estructura de datos: listas

-

sucesión de datos

-

el orden es relevante

-

la longitud está determinada

-

se accede a los datos refiriendose al índice dentro de la sucesión

-

el primer objeto tiene el índice cero

-

están formateadas con un tipo de dato

(se colocan “uno detrás de otro”) ({A, B, C} no es igual que {C, B, A}) (“list length”)

(o números, o puntos, etc., no todos a la vez)

dato dato datodato dato dato dato dato dato dato

índice

0

1

2

3

4

5

6

7

8

9

último ÍTEM

1er ÍTEM longitud

índice

dato

p030


manual de grasshopper nivel I Miguel Vidal Guillermo Ramírez

Operaciones con listas -

list item

Este componente sirve para extraer ítemes concretos de listas. Tiene tres entradas: L para la(s) lista(s) de la(s) que queremos extraer el item, I para el índice que queremos obtener y W (wrap). -

list length

Este componente nos da la cantidad de ítemes de una lista y tiene tan sólo una entrada: L para la(s) lista(s) de la(s) que queremos extraer la longitud. -

shift list

Este componente desplaza el orden de los elementos de la lista las posiciones que indiquemos. Tiene tre sólo una entrada: L para la(s) lista(s) de la(s), S para la cantidad de posiciones que queremos desplazar y W si queremos dar la vuelta a la lista. -

sort list

Sort list ordena listas. Las entradas y salidas K ordenan la lista de menor a mayor y A sirve para ordenar otra lista con el mismo patrón con los que se ha ordenado K.

p031


manual de grasshopper nivel I Miguel Vidal Guillermo Ramírez

-

reverse list

Este componente modifica el orden de una lista, colocándo los ítemes en el orden inverso de la lista. Tiene tan sólo una entrada: L para la(s) lista(s) que queremos invertir.

-

split list

Split list divide una lista en dos a partir de un índice. Tiene dos entradas: L para la(s) lista(s) e i para el índice desde el que dividir la lista. Las salidas son A y B, las dos listas resultado.

-

sub list

Sub list extrae los ítemes de una lista dentro de un(os) intervalo(s). L es la entrada para la(s) lista(s) e I para el dominio. Las salidas son L para la lista resultado e I para los índices. p032


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.