Receitas Clássicas: Waffle Structure

Receitas Clássicas: Waffle Structure

Hoje gostaria de discutir sobre mais um dos principais temas de tutoriais de Grasshopper que se pode encontrar na internet: o Waffle Structure. Contudo, o que reparei é que a maioria deles seguem da mesma forma, com maior ou menor grau de aprofundamento sobre os componentes utilizados.

Para poder expandir o tema, em vez de simplesmente repetir o que já foi dito, pretendo neste post, apresentar a versão concisa essa receita clássica, de melhor leitura para quem analisa a definição.

Com esse objetivo, a receita que lhes apresento utilizará componentes mais complexos de manipulação de Listas e exigirá uma compreensão de Data Tree mais aprofundada.

Bem, mas antes, o que é um Waffle Structure?

Trata-se de um sistema estrutural, geralmente em malha quadrangular, que trabalha momentos fletores em dois sentidos para cada um de seus quadrantes, tendo como resultado uma estética semelhante a um Waffle.

waffle.jpg

Na arquitetura, esta lógica construtiva foi levada ao extremo em projetos como o Metropol Parasol, e a algum tempo sua imagem vem sendo associada ao que chamam de “arquitetura paramétrica”, dada sua complexidade de forma, que parece impossível de ser concebida sem o auxílio de um programa paramétrico como o Grasshopper.

Foto do topo do Metropol Parasol.

Foto do topo do Metropol Parasol.

Esse sistema construtivo tem tanta recorrência em tutoriais de Grasshopper por se um problema que, para resolver, precisa utilizar uma série de componentes e métodos de controle de Listas considerados fundamentos para o uso do programa. Dentre eles: Pontos, Planos, Curvas, Superfícies, Vetores, controle de Listas, controle de Data Tree, etc.

Fora os componentes e as lógicas, o tema Waffle Structure ainda é muito útil para introduzir o tema da fabricação digital, por falar sobre encaixes, tags e modelos de planificação.

Estrutura Waffle

Estrutura Waffle

Reparem então que, uma estrutura em waffle tradicional possui 2 características fundamentas: (1) vigas em eixos perpendiculares, (2) encaixes macho e fêmea.

No Grasshopper, geralmente criamos uma definição que segue dois caminhos em paralelo: (1) vigas e encaixes no eixo X, (2) vigas e encaixes no eixo Y. Sendo necessário resolver 1 trecho por vez.

Solução das vigas em X.

Solução das vigas em X.

No final esses dois caminhos se juntam para criar a geometria da estrutura. A pegadinha é que tanto para o caminho X quanto para o caminho Y precisam das informações do outro para gerar os encaixes macho e fêmea.

Definição simples.

Definição simples.

Notem que nesta definição, existem trechos que são idênticos. Geralmente, quando vemos uma repetição do mesmo código N vezes em uma definição, isso indica que sua lógica não foi completamente resolvida, impedindo-a de ser escalável. Outro ponto negativo de uma definição como essa é uma maior dificuldade de leitura e de ajuste de parâmetros, visto que deve-se modificá-los sempre nos 2 caminhos (X e Y).

O que proponho hoje, é solucionar esta mesma definição, mas com 1 pipeline único: X e Y seguindo juntos durante todo o código. Para tanto, nesta receita vamos precisar dos seguintes componentes:

  • 1 Surface;

  • 1 Contour;

  • 1 Vector X;

  • 1 Vector Y;

  • 1 Vector Z;

  • 7 Number Sliders;

  • 2 Panels;

  • 1 Extrude;

  • 1 Split Tree;

  • 1 Bounding Box;

  • 1 Brep | Brep;

  • 1 Shift Path;

  • 1 Point on Curve;

  • 1 Flip Matrix;

  • 1 YZ Plane;

  • 1 XZ Plane;

  • 1 Entwines;

  • 1 List Length;

  • 1 Partition List;

  • 1 Tree Statistics;

  • 1 Negative;

  • 1 Duplicate Data;

  • 1 Construct Domain;

  • 1 Region Difference;

  • 1 Boundary Surfaces;

São bastantes componentes desta vez, mas não se assustem. Se formos por partes, vai dar tudo certo!

1. Primeiro, vamos fazer os contours. Comece por colocar o Surface no canvas. Em seguida, conecte os Vector X e Y no input N do Contour; e use 1 Number Slider para alimentar o input D. Como resultado, vocês devem ter sua Surface original toda fatiada.

receita_1_contour.png

2. Agora vamos fazer as extrusões das Curves que saem do Contour para criar as vigas. Precisaremos condectar ou output C do Contour no input B do Extrude; usar o Vector Z, junto com 1 Number Slider em seu input para conectar no input D do Extrude.

receita_2_extrude.png

As coisas começam a ficar 1 pouco mais complicadas, não? Reparem que do output E do Extrude, a estrutura de dados, Data Tree, aparece da seguinte maneira: {A;B}, onde A e B representam números Reais. De maneira resumida, o que esta sintaxe nos diz é: existem conjuntos As, e para um deles estão contidos Bs outros conjuntos. No nosso caso, isso significa que o Grasshopper criou 1 conjunto para X e outro para Y, e dentro deles criou N subconjuntos que contem cada 1 das vigas neste sentido.

3. Agora, vamos usar o componente Split Tree para preparar a Data Tree e em seguida encontrar as intersecções das vigas em X e Y.

Comece por conectar o output E do Extrude no input D do Split Tree; em seguida use um Panel e dentro dele escreve “{0;?}” para então o conectar no input M do Split Tree. Esse componente retorna 2 outputs. Conecte 1 deles no input A do Brep | Brep, e o outro no input B (dar flatten em B).

receita_3_brepxbrep.png

4. Certo, a partir daqui o foco será em construir os encaixes macho e fêmea. Vamos começar por construir os planos de referência:

  1. Pegue o Point on Curve e conecte o output C do Brep | Brep em seu input.

  2. Em seguida, para agrupar os pontos criados por viga, use o componente Shift Path e em seu input, conecte o output do Point on Curve.

  3. Do Shift Path, conecte com o Plane YZ.

  4. Faça a mesma coisa com o Plane XZ, mas antes passe pelo componente Flip Matrix.

  5. Enfim junte os 2 planos no componente Entwine (no modo graft).

receita_4_planes.png

5. Com os planos criados, já podemos construir os retângulos que servirão de base para os encaixes macho e fêmea. Use o componente Rectangle e em seu input P, conecte o output do Entwine. Para o input X, use o Construct Domain e em seus inputs conecte 1 Number Slider e use as seguintes fórmulas: em A use”-x/2”; em B use “x/2”.

receita_5_rectangle.png

6. Já para o input Y, a coisa fica 1 pouco mais complicada. Precisamos fazer a Data Tree casar com nosso Entwine e em seguida dizer ao Grasshopper que 1 sentido de viga será encaixe macho, e o outro será fêmea. Para tanto:

  1. Comece pegando o componente Tree Statistics e conectando o output do Entwine em seu input. Este componente nos dá informações sobre uma Data Tree.

  2. Aqui nos interessa o output L do Tree Statistics, que nos fala quantos elementos cada Branch da Data Tree possui. Use-o para alimentar o input L do Partition List.

  3. Para o input S, use um componente List Length, que tem em seu input (em flatten) o output P do Split Tree, lá de trás.

  4. A saída do Partition List, nós usamos para alimentar o input N do Duplicate Data.

  5. Para o input D, use um Number Slider, e sua versão negativa com a ajuda do componente Negative.

receita_6_rectangle-Y-value.png

7. Estamos chegando ao fim, prometo. Só nos resta construir as vigas com a subtração dos encaixes. Para isso, use o componente Region Difference, e em seu input A, conecte um componente Entwine (em graft), alimentado pelos inputs P e N do Split Tree; já para B, use o output R do Rectangle. Finalize com um Boundary Surface para transformar as regiões em superfícies.

receita_7_region-difference.png

A definição básica acaba aqui, mas como complemento podemos pensar em taggear e planificar as peças de corte.

receita_99_completa.png
waffle-frame-completo.png

Disponibilizei a definição para download aqui no final do post e também na página de Freebies.

Obrigado e até a próxima!

 
Acadêmico: Uma Experiência dos Metabolistas Japoneses na América Latina

Acadêmico: Uma Experiência dos Metabolistas Japoneses na América Latina

Quem é esse Componente? É o Offset Curve!

Quem é esse Componente? É o Offset Curve!