Modern Programming for Generative Designweb.ist.utl.pt/antonio.menezes.leitao/ADA/... · Modern...

Post on 30-May-2020

8 views 0 download

Transcript of Modern Programming for Generative Designweb.ist.utl.pt/antonio.menezes.leitao/ADA/... · Modern...

Modern Programming for Generative DesignMSc in Computer Engineering and Information Systems

Jose Lopes

Instituto Superior TecnicoTechnical University of Lisbon

July 18, 2012

Modern Programming for Generative Design 1/36

Generative Design

Modern Programming for Generative Design 2/36

Survey of currently used systems

I Textual Programming Languages

I Visual Programming Languages

I CAD Applications

Modern Programming for Generative Design 3/36

Survey of currently used systems

I Functionality

I Linguistic constructs

I Geometric abstractions

Modern Programming for Generative Design 4/36

Survey of currently used systems (Example)

Figure: Grasshopper program

Modern Programming for Generative Design 5/36

Survey of currently used systems (Example)

Figure: Grasshopper program (excerpt)

Modern Programming for Generative Design 6/36

Survey of currently used systems (Example)

Figure: Grasshopper program (excerpt)

Modern Programming for Generative Design 7/36

Survey of currently used systems (Example)

Figure: Grasshopper program (complete)

Modern Programming for Generative Design 8/36

Generative Design Principles

I Portability

I Parametric elements

I Functional operations

I ...

I Modern programming environment: Rosetta

Modern Programming for Generative Design 9/36

Portability

I Programs are not portable

I Vendor lock-in

Modern Programming for Generative Design 10/36

Portability in Rosetta

Modern Programming for Generative Design 11/36

Portability in Rosetta

Modern Programming for Generative Design 12/36

Portability in Rosetta

Modern Programming for Generative Design 13/36

Portability in Rosetta

Modern Programming for Generative Design 14/36

Portability in Rosetta

Modern Programming for Generative Design 15/36

Parametric elements

spiral(t) =

ρ = αt

φ = βt

z = t

Figure: Conic spiral tower

Modern Programming for Generative Design 16/36

Parametric elements

spiral(t) =

ρ = αt

φ = βt

z = t

function spiral(t) {

return cyl(a * t, b * t, t);

}

Figure: Conic spiral tower

Modern Programming for Generative Design 16/36

Parametric elements

Figure: Conic spiral sampling

Modern Programming for Generative Design 17/36

Parametric elements

function spiral(t) {

return cyl(a * t, b * t, t);

}

; sampling

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));

Modern Programming for Generative Design 18/36

Parametric elements in Rosetta

function spiral(t) {

return cyl(a * t, b * t, t);

}

sweep(functionCurve(spiral), circle(1));

Modern Programming for Generative Design 18/36

Mathematical and geometric strictness

Symmetric difference (∆)

∆(R0,R1) = (R0

⋃R1) − (R0

⋂R1)

Modern Programming for Generative Design 19/36

Mathematical and geometric strictness

∆(R0,R1) = (R0

⋃R1) − (R0

⋂R1)

function delta(r0, r1) {

return subtract(

union(r0, r1),

intersect(r0, r1));

}

Modern Programming for Generative Design 20/36

Mathematical and geometric strictness

∆(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));

}

Modern Programming for Generative Design 20/36

Mathematical and geometric strictness

∆(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 ...

Modern Programming for Generative Design 20/36

Mathematical and geometric strictness

∆(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 ...

Modern Programming for Generative Design 20/36

Mathematical and geometric strictness

∆(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 ...Modern Programming for Generative Design 20/36

Mathematical and geometric strictness in Rosetta

I Functional operations

I Operations implement algebraic equivalences

I Dimension independent operations

Modern Programming for Generative Design 21/36

Shape morphing

Modern Programming for Generative Design 22/36

Traceability

I Relationship between program and model

I Understanding, maintaining, debugging

Modern Programming for Generative Design 23/36

Traceability in Rosetta

Figure: Traceability: from program to model

Modern Programming for Generative Design 24/36

Traceability in Rosetta

Figure: Traceability: from model to program

Modern Programming for Generative Design 25/36

Immediate feedback

I Interactive input adjustment

I CAD applications designed for interaction

Modern Programming for Generative Design 26/36

Immediate feedback in Rosetta

Example/Application AutoCAD Rhinoceros OpenGL

Orthogonal cones 1022 191 1Mobius truss 28837 9235 4446Scriptecture 21920 5088 210

Table: Time (in milliseconds) to regenerate the model

Modern Programming for Generative Design 27/36

Immediate feedback in Rosetta

Modern Programming for Generative Design 28/36

Evaluation

I Program development

I Programming environment extension

I Program analysis and conversion

Modern Programming for Generative Design 29/36

New backend: TikZ

Modern Programming for Generative Design 30/36

New frontend: RosettaFlow

Modern Programming for Generative Design 31/36

New frontend: RosettaFlow

Modern Programming for Generative Design 31/36

New frontend: RosettaFlow

Modern Programming for Generative Design 31/36

Program analysis and conversion

Modern Programming for Generative Design 32/36

Conclusion

Generative Design needs:

I Portability

I Mathematical and geometric strictness

I Correlation between programs and models

I Multiple paradigms and techniques

I Modern and pedagogic system

Modern Programming for Generative Design 33/36

Conclusion

I Devise set of Design Principles

I Rosetta implements these principles

I Rosetta is being used by designers

Modern Programming for Generative Design 34/36

Contributions

I Programming Languages For Generative Design: AComparative Studyjournal International Journal of Architectural Computing

I Portable Generative Design for CAD Applicationsconference ACADIA 11: Integration through Computation

I Essential Language Features for Generative Designconference III Simposio de Informatica (INForum 2011)

I Collaborative Digital Design (accepted)conference eCAADe 2012: Digital Physicality, Physical Digitality

Modern Programming for Generative Design 35/36

Modern Programming for Generative DesignJose Lopes

Questions?

Modern Programming for Generative Design 36/36