Upload
others
View
2
Download
0
Embed Size (px)
Citation preview
Programacao Moderna para Design GenerativoMestrado em Engenharia Informatica e de Computadores
Jose Lopes
Instituto Superior Tecnico
5 de Junho de 2012
Programacao Moderna para Design Generativo 1/36
Design Generativo
Programacao Moderna para Design Generativo 2/36
Estudo dos sistemas actuais
I Linguagens de Programacao Textuais
I Linguagens de Programacao Visuais
I Aplicacoes de CAD
Programacao Moderna para Design Generativo 3/36
Estudo dos sistemas actuais
I Funcionalidades
I Construcoes linguısticas
I Conceitos geometricos
Programacao Moderna para Design Generativo 4/36
Estudo dos sistemas actuais (Exemplo)
Fig: Programa em Grasshopper
Programacao Moderna para Design Generativo 5/36
Estudo dos sistemas actuais (Exemplo)
Fig: Programa em Grasshopper (excerto)
Programacao Moderna para Design Generativo 6/36
Estudo dos sistemas actuais (Exemplo)
Fig: Programa em Grasshopper (excerto)
Programacao Moderna para Design Generativo 7/36
Estudo dos sistemas actuais (Exemplo)
Fig: Programa em Grasshopper (completo)
Programacao Moderna para Design Generativo 8/36
Princıpios de Design Generativo
I Portabilidade
I Elementos parametricos
I Operacoes funcionais
I ...
I Ambiente de programacao moderno: Rosetta
Programacao Moderna para Design Generativo 9/36
Portabilidade
I Programas nao sao portaveis
I Vendor lock-in
Programacao Moderna para Design Generativo 10/36
Portabilidade em Rosetta
Programacao Moderna para Design Generativo 11/36
Portabilidade em Rosetta
Programacao Moderna para Design Generativo 12/36
Portabilidade em Rosetta
Programacao Moderna para Design Generativo 13/36
Portabilidade em Rosetta
Programacao Moderna para Design Generativo 14/36
Portabilidade em Rosetta
Programacao Moderna para Design Generativo 15/36
Elementos parametricos
spiral(t) =
ρ = αt
φ = βt
z = t
Fig: Torre de espirais conicas
Programacao Moderna para Design Generativo 16/36
Elementos parametricos
spiral(t) =
ρ = αt
φ = βt
z = t
function spiral(t) {
return cyl(a * t, b * t, t);
}
Fig: Torre de espirais conicas
Programacao Moderna para Design Generativo 16/36
Elementos parametricos
Fig: Amostragem de uma espiral conica
Programacao Moderna para Design Generativo 17/36
Elementos parametricos
function spiral(t) {
return cyl(a * t, b * t, t);
}
; amostragem
function spiralPoints(n) {
var points = [];
for (var i = 0; i < n; ++i) {
points[i] = spiral(i / n);
}
return points;
}
sweep(spline(spiralPoints(n)), circle(1));
Programacao Moderna para Design Generativo 18/36
Elementos parametricos em Rosetta
function spiral(t) {
return cyl(a * t, b * t, t);
}
sweep(functionCurve(spiral), circle(1));
Programacao Moderna para Design Generativo 18/36
Rigor matematico e geometrico
Diferenca simetrica (∆)
∆(R0,R1) = (R0
⋃R1) − (R0
⋂R1)
Programacao Moderna para Design Generativo 19/36
Rigor matematico e geometrico
∆(R0,R1) = (R0
⋃R1) − (R0
⋂R1)
function delta(r0, r1) {
return subtract(
union(r0, r1),
intersect(r0, r1));
}
Programacao Moderna para Design Generativo 20/36
Rigor matematico e geometrico
∆(R0,R1) = (R0
⋃R1) − (R0
⋂R1)
function delta(r0, r1) {
var r0Copy = copy(r0);
var r1Copy = copy(r1);
return subtract(
union(r0, r1),
intersect(r0Copy, r1Copy));
}
Programacao Moderna para Design Generativo 20/36
Rigor matematico e geometrico
∆(R0,R1) = (R0
⋃R1) − (R0
⋂R1)
function delta(r0, r1) {
var r0Copy = copy(r0);
var r1Copy = copy(r1);
if (isCurve(r0) && isCurve(r1)) {
return subtractCurves(
unionCurves(r0, r1),
intersectCurves(r0Copy, r1Copy));
} else if (isSurface(r0) && isSurface(r1)) {
...
} else if ...
Programacao Moderna para Design Generativo 20/36
Rigor matematico e geometrico
∆(R0,R1) = (R0
⋃R1) − (R0
⋂R1)≡ (R0 − R1)
⋃(R1 − R0)
function delta(r0, r1) {
var r0Copy = copy(r0);
var r1Copy = copy(r1);
if (isCurve(r0) && isCurve(r1)) {
return subtractCurves(
unionCurves(r0, r1),
intersectCurves(r0Copy, r1Copy));
} else if (isSurface(r0) && isSurface(r1)) {
...
} else if ...
Programacao Moderna para Design Generativo 20/36
Rigor matematico e geometrico
∆(R0,R1) = (R0
⋃R1) − (R0
⋂R1) ≡ (R0 − R1)
⋃(R1 − R0)
function delta(r0, r1) {
var r0Copy = copy(r0);
var r1Copy = copy(r1);
if (isEmptyIntersection(r0, r1)) {
return union(
subtract(r0, r1),
subtract(r1Copy, r0Copy));
} else if (isCurve(r0) && isCurve(r1)) {
return subtractCurves(
unionCurves(r0, r1),
intersectCurves(r0Copy, r1Copy));
} else if (isSurface(r0) && isSurface(r1)) {
...
} else if ...Programacao Moderna para Design Generativo 20/36
Rigor matematico e geometrico em Rosetta
I Operacoes funcionais
I Operacoes implementam regras de equivalencia
I Operacoes independentes da dimensao
Programacao Moderna para Design Generativo 21/36
Formas geometricas degeneradas
Programacao Moderna para Design Generativo 22/36
Rastreabilidade
I Relacao entre o programa e modelo
I Compreensao, manutencao e depuracao
Programacao Moderna para Design Generativo 23/36
Rastreabilidade em Rosetta
Fig: Rastreabilidade: do programa para o modelo
Programacao Moderna para Design Generativo 24/36
Rastreabilidade em Rosetta
Fig: Rastreabilidade: do modelo para o programa
Programacao Moderna para Design Generativo 25/36
Feedback imediato
I Ajustar entradas interactivamente
I Aplicacoes de CAD desenhadas para interaccao
Programacao Moderna para Design Generativo 26/36
Feedback imediato em Rosetta
Exemplo/Aplicacao AutoCAD Rhinoceros OpenGL
Cones ortogonais 1022 191 1Trelica Mobius 28837 9235 4446Scriptecture 21920 5088 210
Tabela: Tempo (em milissegundos) para actualizar o modelo
Programacao Moderna para Design Generativo 27/36
Feedback imediato em Rosetta
Programacao Moderna para Design Generativo 28/36
Avaliacao
I Escrita de programas
I Extensao do ambiente de programacao
I Analise e conversao de programas
Programacao Moderna para Design Generativo 29/36
Novo backend: TikZ
Programacao Moderna para Design Generativo 30/36
Novo frontend: RosettaFlow
Programacao Moderna para Design Generativo 31/36
Novo frontend: RosettaFlow
Programacao Moderna para Design Generativo 31/36
Novo frontend: RosettaFlow
Programacao Moderna para Design Generativo 31/36
Conversao e analise de programas
Programacao Moderna para Design Generativo 32/36
Conclusoes
Design Generativo precisa:
I Portabilidade
I Rigor geometrico e matematico
I Forte correlacao entre programas e modelos
I Multiplos paradigmas/tecnicas de programacao
I Sistema moderno e pedagogico
Programacao Moderna para Design Generativo 33/36
Conclusoes
I Elaboramos os princıpios de Design Generativo
I Rosetta implementa estes princıpios
I Rosetta actualmente em avaliacao por designers
Programacao Moderna para Design Generativo 34/36
Contribuicoes
I Programming Languages For Generative Design: AComparative Studyrevista International Journal of Architectural Computing
I Portable Generative Design for CAD Applicationsconferencia ACADIA 11: Integration through Computation
I Essential Language Features for Generative Designconferencia III Simposio de Informatica (INForum 2011)
I Collaborative Digital Design (aceite)conferencia eCAADe 2012: Digital Physicality, Physical Digitality
I Rethinking CAD Support for Generative Design (submetido)conferencia ACADIA 12: Synthetic Digital Ecologies
Programacao Moderna para Design Generativo 35/36
Programacao Moderna para Design GenerativoJose Lopes
Questoes?
Programacao Moderna para Design Generativo 36/36