Levantar uma parede
Uma das aplicações práticas mais comuns de desenho computacional e fabricação digital é a geração de paineis personalizados para paredes. Embora não seja dificil conceber um gerador para paredes não rectangulares, a maior parte dos configuradores destinados a utilizadores não especialistas usa limites rectangulares. O plugin RoomSurveyor disponibiliza um método simples para superar esta limitação e permitir que utilizadores não especialistas façam levantamentos precisos de paredes. Uma definição de Grasshopper para controlar este processo é muito semelhante aquela que é usada para levantar plantas, mas existe uma diferença importante a considerar: a orientação vertical.
É necessário um método simples de definir o prumo, automaticamente ou requisitando ao utilizador que o indique. Neste artigo vou apresentar um método automático simples que assume que o utilizador irá naturalmente desenhar a morfologia da parede com a orientação aproximadamente correta, usando por exemplo este interface.
O primeiro passo é importat o ficheiro JSON e processá-lo para obter o polígono e as dimensões dos lados. O polígono é orientado para o plano vertical, aqui uso o plano XZ. Também é necessário receber as diagonais fornecidas pelo utilizador.
As saídas da definição acima fluem para o passo da triangulação. Aqui procedemos normalmente, tendo atenção de fornecer o plano vertical.
É provável que o utilizador desenhe o lado inferior da parede mais próximo do fundo do ecrã e que esse lado seja horizontal, mas no entanto não conseguirá garantir que esse lado é efectivamente paralelo ao eixo do X. Também assumo que o poligono não será do tipo estrelado, ou que pelo menos o seu canto inferior tem pelo menos um vizinho que também é convexo. Visto que o canto inferior de um polígono é sempre convexo, apenas precisamos de o procurar ordenando os cantos pela sua coordenada y no plano. A seguir olhamos para os dois vizinhos do ponto mínimo para ver qual deles está mais baixo e também é convexo. Aproveitamos para devolver também os índices de ambos os cantos no poligono.
De seguida, determinamos o ângulo entre o vetor desse lado (entre o ponto minimo e o seu vizinho), e o eixo X do plano. Visto que o canto inferior pode estar antes ou depois do segundo ponto no sentido anti-horário do poligono, e o grasshopper vai sempre dar o ângulo menor entre os vetores, precisamos de saber se o vetor é negativo. O algoritmo acima só funciona porque nos estamos a limitar ao plano XZ, o caso genérico precisa de uma solução diferente.
O resto das peças do passo de levantamento estão neste artigo. Após o passo de levantamento estar concluido podemos prosseguir para desenvolver um configurador. Preparei alguns exemplos de configuradores usando o ShapeDiver, o RoomSurveyor e JSON. O primeiro é uma parede com ripado simples, o segundo é gera um ripado vertical com ondas aleatórias o último configurador gera paineis modulares de madeira e cortiça com um padrão baseado na gramática Ice-Ray. Para gerar soluções para paredes especificas, o primeiro passo é levantar essa parede com este interface. O código fonte para esse interface está disponivel no GitHub.