Sunteți pe pagina 1din 324

MIGUEL VIDAL

Architect
Madrid Shool of Architecture
Polytechnic University of Madrid
www.frikearq.com
www.michividal.com
miguel@frikearq.com
skype: miguel.vidal.calvet
Pablo Casals 6
28011 Madrid
SPAIN
00 34 678 346 257
architect / teacher // researcher /// generative design
f
e
b
r
u
a
r
y
2
0
1
3

7/10
3/6
11/22
23/30
31/36
37/44
45/52
53/72
73/78
79/318
teaching experience
biography
recommendations
collaborations
workshops
shool projects
appendix 1
offcial documents
appendix 2
manuals
research
lectures
i
n
d
e
x
Izaskun Chinchilla and Carlos Jimnez Cenamor
Architects and Diploma Tutors, M.Arch Unit 22, The Bartlett School of Architecture
Izaskun Chinchilla
Teacher and Ph.D. researcher Polytechnic University of Madrid
Principal Izaskun Chinchilla Architects
Carlos Jimnez Cenamor
Principal Casa Leganitos
Professor Don Gray
Head of School
Kent School of Architecture
University of Kent
Izaskun Chinchilla
i.moreno@ucl.ac.uk
Carlos Jimnez Cenamor
c.cenamor@ucl.ac.uk
UCL Faculty of the Built Environment
Wates House
22 Gordon Street
London
25 February 2013
We collaborated with Miguel Vidal in the development of Cosy Parametrics in December 2011, an experimental
workshop on digital techniques and its relation with domestic and traditional design and fabrication. We are writing this
letter because I hold him in the highest consideration.
Cosy Parametrics was a fve day intensive workshop, that took place in Madrid School of Architecture, with First Term,
Second Term and End of Degree students from different Spanish universities: Polytechnique University of Madrid,
European Universtiy of Madrid and San Pablo-CEU University, and students from the Unit 22 of The Bartlett. The
workshop had an intensive course on parametric design techniques as well as a design studio, with assistance for
the development of the students projects. All that was combined with talks from relevant Madrid based practices and
collectives and ended with a fnal jury with invited teachers from those universities.
The goal of Cosy Parametrics was to detach parametric techniques from its usual fguration of socially isolated
proposals. The workshop had an speculative intention on diverse digital techniques, of design and fabrication, in
order to explore if they can be used to produce designs in which the domestic, warm and delicate can have a place.
We dealt with vernacular techniques easily fabricated but cumbersome to represent and we speculated as to wether,
besides geometric conditions, it is possible to parametrize programmatic, environmental and economical strategies.
We asked both Miguel and Guillermo, his partner, to teach the intensive course and assist us in the studio. They
prepared specifc examples of modelling vernacular objects and fabrication techniques, which were used in the
students designs. As for the studio, he was a valuable help for the students developing their work, under our
supervision. He was capable of structuring solutions for each project he assisted, relating geometric, programmatic
and constructive conditions.
Miguel proved to have a solid, up-to-date information of the feld, a well-structured knowledge and a creative approach
to Digital Architecture. His lessons were carefully documented and he showed confdence in communicating his ideas.
He was able to clearly transmit complex and abstract notions and made them easy to understand. The connections he
made with diverse topics, from scientifc and artistic disciplines, enriched his explanations. He showed a huge amount
of enthusiasm in what he explained and he was able to pass it on to the students. He always had a collaborative
attitude and preserved a pleasant and polite treatment to the students.
As a conclusion, we would frmly recommend Miguel for a post in High Education theaching. Should any question
arise regarding his academic performance, do not hesitate to contact us.
Yours faithfully,
TO WHOM IT MAY CONCERN
TO WHOM IT MAY CONCERN
25 February 2013
25 February 2013
Nerea Calvillo
C+arquitectos
mail@cmasarquitectos.net
Argensola 26, 1i
2800+ Nadrid
T-F: (3+) 91 319+3+1
92 Coldbath st
SW13 7RL London
T: (++) 7+501+50+6
Professor Don Gray
Head of School
Kent School of Architecture
University of Kent
19 February 2013
TO WHOM IT MAY CONCERN
I collaborated with Miguel Vidal in the first development in In the air project, assisted to one of
his courses and eventually invited him, and his partner Guillermo Ramrez, to teach several
masterclasses in the universities in which I am teaching, both the European University of
Madrid and the Polytechnic University San Pablo-CEU. I am writing this letter because I hold him
in the highest consideration.
I first met Miguel in 2008 during the data visualization workshop Visualizar08: Database City at
Medialab Prado Madrid. He was part of an interdisciplinary team that developed the first version
of In the air, a visualization project on atmospheric pollution in cities. In that occasion, we
developed a version for the city of Madrid also had the opportunity to build and test a physical
prototype for facades linked with the software. He overcame his lack of technical knowledge at
that time with hardwork and a lot of enthusiasm, which he was able to transmit to the rest of the
team. He was important for the successful development of the project.
Afterwards, in 2009, I attended his very first course of Generative Design with Grasshopper,
as I was interested in the topic for the Architectural Design practice and teaching and he was one
of the very few designers in approaching and teaching this sort of digital tools at that time in
Spain. Miguel proved to have a solid, up-to-date information of the field, a well-structured
knowledge and a creative approach to Digital Architecture. His lessons were carefully
documented and he showed confidence in communicating his ideas. He was able to clearly
transmit complex and abstract notions and made them easy to understand. The connections he
made with diverse topics,enriched his explanations. He showed a huge amount of enthusiasm in
what he explained and, as a teacher, he was able to pass on that feeling.
From that experience, I was convinced to ask him and his partner to conduct several
masterclasses of technical orientation to postgraduate students in diverse universities in which
I am a professor. Firstly, during the academic years of 2010-2011 and 2011-2012, I relied on him
to teach introductory classes of parametric and discriminative modelling, in the Master of
Advanced Architectural Techniques (MUTAPA) in the European University of Madrid (UEM). I
was in charge of the Advanced Geometry module and I asked them to introduce the students with
the knowledge of programming into geometry modelling. Miguel gave both a theoric introduction
with past and present examples, relating with diverse areas of knowledge, and conducted a
practical example of parametric modelling, environmental analysis and visualization and
optimization of the results. In other sessions, he also helped the students develop their own
designs and prepare them for digital fabrication to test their proposals. Secondly, during the
academic year of 2012-2013, I asked him to assist on a data visualization masterclass in the
Digital Fabrication Degree of the Polytechnic University in San Pablo-CEU University. He
elaborated an example of the use of programming techniques into this topic, with the Processing
programming environment, with an introductory session. The exercise was a energetic power
visualization of a hybrid solar and wind installation. He used this example to teach how to parse
large amounts of data from datasheets, in this case, of an environmental station and, with the
information obtained, make an interactive visualization with the energetic power throughout the
year.
As a conclusion, I would firmly recommend for a post in theaching in Higher Education. Should
any question arise regarding his academic performance, please do not hesitate to contact me.
Yours faithfully,
Nerea Calvillo
Principal C+arquitectos
Phd Visiting Researcher Goldsmiths University
Associate Professor Universidad de Alicante
Associate Professor Universidad Europea de Madrid
Founder In the Air
19 February 2013
Professor Don Gray
Head of School
Kent School of Architecture
University of Kent
Enrique Azpilicueta Astarloa
eazpilicueta@telefonica.net
Department of Construction and Technology Management
Madrid School of Architecture (ETSAM)
Polytechnic University of Madrid (UPM)
Avenida Juan de Herrera, 4
28040 Madrid SPAIN

Professor Don Gray
Head of School
Kent School of Architecture
University of Kent

27 February 2013

I tutored Miguel Vidals Final Project Construction Design. I am writing this letter on his behalf because I hold
him in the highest consideration.

Miguels design building solution was very creative as it combined environmental and energetic issues with
adaptability: it allowed subsequent growth. The environmental and energetic analysis on which he based his
design, was carried exhaustively and rigorously. Almost every structural and building components was
prefabricated, easily transportable and reusable, which helped in the designs adaptation possibilities. He
outline chronogramme of possible designs under the current condition of uncertainty and adapted each
building proposal to a different possibility.

Miguel proved to have extraordinary sensitiveness for current environmental and socioeconomical topics and
managed to organise solid and creative strategies for problematic situations. During this time, I had a fluid
communication with him regarding the mentioned topics and I can firmly say that Miguels performance under
my academic supervision was highly satisfactory.

As a conclusion, I would firmly recommend for a post in Higher Education. Should any question arise
regarding his academic performance, please do not hesitate to contact me.

Yours faithfully,





Enrique Azpilicueta Astarloa
Ph. D. Architect
Teacher and researcher Polytechnic University of Madrid
TO WHOM IT MAY CONCERN
27 February 2013
Nick Novelli
nick.novelli@gmail.com
CASE - Rensselaer Polytechnic Institute (RPI) with SOM)
110 Eighth Street,
Troy, NY USA 12180
Kyle Steinfeld
ksteinfe@berkeley.edu
College of Environmental Design
University of California, Berkeley
356 Wurster Hall, MC 1800
Berkeley, CA 94720-1800
28 February 2013
TO WHOM IT MAY CONCERN
Miguel Vidal was a team member selected to join my Authored Sensing workshop cluster at Smart Geometry
2011, which took place in Copenhagen between 28th of March and 2nd of April 2011, bringing together a
global community of innovators in the fields of Architecture, Design, and Engineering for collaborative
research and experimentation. Smart Geometry: Building the Invisible comprised a four-day intensive
workshop, a public conference, a workshop exhibition and a public symposium.
The Authored Sensing cluster hypothesized that data-driven design must be supported by explicitly designed
data. We aimed to inject intent and design into the assumed-passive process of data collection, and promote
the production of designer-authored datastreams: idiosyncratic observations that would feed into new
designs.
From this broad starting point, the team collaboratively proposed to design environmental data in a
workplace. The project consisted of a physical prototype, a self-fabricated and transportable kit of bespoke
sensors, and software for data collection and visualization. The suite of sensing devices were intended to be
one element in a larger matrix that might intuit feelings and other un-quantifiable states via environmental
parameters: temperature, pressure, etc. Additionally, these sensors were designed as office furniture so that,
besides their monitoring use, they would be functional. Tying together the sensor data, the software would
upload that data to the cloud, and offer visualization and interaction. This visualization tool, after a process of
learning and calibration, might represent and communicate unquantifiable states in a heuristic way, in real-
time, with the user and with the other members of the team as well.
Miguel was an asset in this endeavor, with up-to-date programming skills, and a creative approach to digital
tools. His experience programming visualization tools in Processing, and interfacing with electronic devices
and sensors through Arduino were particularly relevant, to the extent that he became the de-facto leader of
the visualization methods. The ideas he gave and the connections he made with diverse topics enriched our
work. Most importantly, in an intensive, four day workshop, his engagement and hard-working attitude were
much appreciated, and contributed in no small way the positive group dynamic that developed. He showed a
huge amount of enthusiasm that he was able to pass on to the rest of the members of the team. Because of
his positive attributes, I would not hesitate to recommend him for a position in Higher Education.
Yours,
Nick Novelli, PhD Candidate, CASE (Rensselaer Polytechnic Institute with SOM), NY, USA.
Kyle Steinfeld, Assistant Professor of Architecture, College of Environmental Design, University of
California, Berkeley.
23 February 2013
Miguel Vidal
miguel@frikearq.com
RhinoCommon scripting with C# in Grasshopper and Rhino.Python in
Grasshopper and Rhino 5.
Custom Grasshopper components with Visual Studio.
Drawing and image editing applications with Processing.
Electronic and sensors programming with Arduino.
Interactive interfaces programming with VVVV.
Basic Python scripting in Autodesk Maya.
Scripting with Javascript for the Adobe Creative Suite.
Websites design with XHTML and CSS.
Parametric modelling: Grasshopper (with Kangaroo, Weaverbird, Geco, Elk,
Firefy and gHowl).
Environmental analysis: Ecotect, Winair.
CAD: Rhinoceros, Autocad, 3D Studio MAX.
Graphic Design: Photoshop, Illustrator, InDesign, Acrobat.
Video editing: Adobe Premiere.
Offce automation: Microsoft Offce and Open Offce.
Software
Programming languages
Spanish: mother tongue.
English: Certifcate of Profciency in English (University of Cambridge).
French: DELF B1 (Centre International dtudes Pdagogiques).
German: Mittelstuffen 1 (Goethe Institut).
Languages
1998
2001
2002
Voice and public speaking course at the Polytechnic University of Madrid.
Introduction to Physics simulation using Kangaroo in Grasshopper, Studio Mode
online course.
ALGOMAD 2010, at the Shool of Arquitecture of El Valls (Barcelona):
Generative Components and Rhinoscript workshops.
Rhinoscript course at the Graphic Department at the School of Architecture of
Madrid.
2011
2013
2009
2009
2010
Complementary education
Authorized Rhino Trainer: Rhino Level 1 and Rhino Level 2 courses at McNeel
Europe.
July
January
June
April
Work experience
As a teacher
Invited teacher in Cosy Parametrics, an experimental workshop on digital
techniques and its relation with domestic and traditional design and fabrication.
Directed by Izaskun Chinchilla and Carlos Jimenez, M.Arch. Diploma Tutors
Unit 22 at The Bartlett (UCL), with students from The Bartlett, the European
University, the S. Pablo-CEU University and the Polytechnic University of Madrid.
Co-organizer and invited teacher of SmartLAB Granada 2013, a workshop
on generative tools for creative purposes in design, in collaboration with the
University and the Architectural Association of Granada. Responsible for
the intensive course Three scales of design with Grasshopper: city (data
visualization), building (parametric models) and mechanism (physical systems)
and coordinator of fve working team projects.
Invited teacher of programming applied to Geometry in the Master of Advanced
Architectural Techniques (MUTAPA) in the European University of Madrid (UEM).
Invited teacher of data visualization and interactive interfaces programming with
Processing in the Digitial Fabrication Degree at the School of Architecture of the
University San Pablo-CEU.
Teacher of Associative and Parametric Design (basic, advanced and scripting
levels) to proffessionals and entrepeneurs in the Association of Economical
Promotion of Gran Canaria (SPECG) courses, in collaboration with the University
of Las Palmas and fnanced by the European Social Fund.
Invited teacher of Parametric Design with Grasshopper in ALGOMAD 2011,
seminary on generative methods in Arquitecture and Design at the IE-University.
Co-founder, with Guillermo Ramirez, of Frikearq, a practice oriented to research
and teaching of Generative Design techniques. We have organized and
collaborated in more than 30 courses and workshops and trained more than 300
people, including graduate and postgraduate students and proffessionals from
different backgrounds, mostly Architects but also Engineers, Industrial Designers
and CNC machining.
Assistant scholar and teacher in the course Projects of Parametric Architecture
(Proyectos de Arquitectura Paramtrica) of the Architectural Projects Department
in Madrid School of Architecture, as part of an Innovation Educational Project
of the Polytechnique University of Madrid (UPM), in collaboration with both
the Department of Applied Mathematics and the Department of Physics and
Installations. Ellaboration of new teaching plan for this new course.
Assistant scholar in the Juan de Herrera Institute in Madrid School of
Architectures Department of Urbanism.
Invited teacher of Parametric Modelling in the Master program of the
Architectural Projects Department, Master in Advanced Architectural Design
Projects in Madrid School of Architecture.
2009 -
2012
January
January
2011
2013
2013
2011
2011
2011
2010
2009
2012 - 2011
December
December
April
June
March
Education and qualifcations
Architect, School of Architecture, Polytechnic University of Madrid (UPM).
Former School Programme Degree , professionally equivalent to a M.Arch.
Smart Geometry 2011: Building the Invisible, at CITA, Copenhagen. Authored
sensing cluster, coordinated by Kyle Steinfeld (University of California,
Berkeley), Kat Park (SOM) and Nick Novelli (CASE). Design of a prototype to
monitorize and visualize the feelings of a work space.
RhinoCommon with C# seminary in the eCAADe 2010: Future Cities workshop,
at the ETH, Zrich.
In the air an atmospheric pollution visualization software for the city of Madrid
and a physical prototype for facades. Develeped by an interdisciplinary team,
coordinated by Nerea Calvillo and Victor Via, during Visualizar08: Database
City at Medialab Prado Madrid.
Creative programming workshop I and II at Medialab Prado Madrid: visual
programming and interaction in the Processing environment.
Creative electronics workshop at Medialab Prado Madrid: basic concepts of
circuits and physical interaction and programming of sensors in the Arduino
environment.
2010
2011
2009
2008
2009
Workshops
March
September
June
February
November
Collaborations
Opera Body, an experimental interactive installation on spatial visualization
through sound experience, relating body, space and sound, installed at the
Contemporary Art Museum of Santiago de Compostela (CGAC).
2010
July
Working team for the restoration of the public space of the School of Architecture
of Madrid, directed by Ecosistema Urbano as a result of an Honourable Mention
in the competition organized by the same School.
2007
December
Base and working designs at Eduardo Navadijos and Csaba Trsoly S.L.
Ellaboration of the project for a Umbraculum and childrens games garden in
Boadilla del Monte, Madrid, entry in the Wan Awards 2009 and fnalist in the X
Biennial of Spanish Architecture and Urbanism.
2006
As a lecturer
Lecturer on Generative Design in Architecture in the 3rd Symposium of Design
and Teaching during the 4th Biennial of Iberoamerican Design at Matadero
Madrid Centre of Design (BID).
Invited lecturer on Parametric Design in Architecture at the Parametric Studio
(Taller Paramtrico) of the University San Pablo CEU Shool of Architecture.
December
2012
2011
February
Teacher of Grasshopper in the courses of the Students Association at the School
of Architecture of Madrid (basic and advanced levels).
2010 -2013
Assistant Teacher of Parametric Design and Data Visualization for the Collective
Housing Research Group (GIVCO), a R&D project of the Polytechnique
University of Madrid (UPM).
Invited teacher on digital/analogical fabrication and interactive tools at Estilo
School to elementary students.
2010
June
Micropocessor programming with C++ masterclass at Medialab Prado Madrid. 2009
July
2011
January
Miguel Vidal
miguel@frikearq.com
RhinoCommon scripting with C# in Grasshopper and Rhino.Python in
Grasshopper and Rhino 5.
Custom Grasshopper components with Visual Studio.
Drawing and image editing applications with Processing.
Electronic and sensors programming with Arduino.
Interactive interfaces programming with VVVV.
Basic Python scripting in Autodesk Maya.
Scripting with Javascript for the Adobe Creative Suite.
Websites design with XHTML and CSS.
Parametric modelling: Grasshopper (with Kangaroo, Weaverbird, Geco, Elk,
Firefy and gHowl).
Environmental analysis: Ecotect, Winair.
CAD: Rhinoceros, Autocad, 3D Studio MAX.
Graphic Design: Photoshop, Illustrator, InDesign, Acrobat.
Video editing: Adobe Premiere.
Offce automation: Microsoft Offce and Open Offce.
Software
Programming languages
Spanish: mother tongue.
English: Certifcate of Profciency in English (University of Cambridge).
French: DELF B1 (Centre International dtudes Pdagogiques).
German: Mittelstuffen 1 (Goethe Institut).
Languages
1998
2001
2002
Voice and public speaking course at the Polytechnic University of Madrid.
Introduction to Physics simulation using Kangaroo in Grasshopper, Studio Mode
online course.
ALGOMAD 2010, at the Shool of Arquitecture of El Valls (Barcelona):
Generative Components and Rhinoscript workshops.
Rhinoscript course at the Graphic Department at the School of Architecture of
Madrid.
2011
2013
2009
2009
2010
Complementary education
Authorized Rhino Trainer: Rhino Level 1 and Rhino Level 2 courses at McNeel
Europe.
July
January
June
April
Smart Geometry 2011: Building the Invisible, at CITA, Copenhagen. Authored
sensing cluster, coordinated by Kyle Steinfeld (University of California,
Berkeley), Kat Park (SOM) and Nick Novelli (CASE). Design of a prototype to
monitorize and visualize the feelings of a work space.
RhinoCommon with C# seminary in the eCAADe 2010: Future Cities workshop,
at the ETH, Zrich.
In the air an atmospheric pollution visualization software for the city of Madrid
and a physical prototype for facades. Develeped by an interdisciplinary team,
coordinated by Nerea Calvillo and Victor Via, during Visualizar08: Database
City at Medialab Prado Madrid.
Creative programming workshop I and II at Medialab Prado Madrid: visual
programming and interaction in the Processing environment.
Creative electronics workshop at Medialab Prado Madrid: basic concepts of
circuits and physical interaction and programming of sensors in the Arduino
environment.
2010
2011
2009
2008
2009
Workshops
March
September
June
February
November
Collaborations
Opera Body, an experimental interactive installation on spatial visualization
through sound experience, relating body, space and sound, installed at the
Contemporary Art Museum of Santiago de Compostela (CGAC).
2010
July
Working team for the restoration of the public space of the School of Architecture
of Madrid, directed by Ecosistema Urbano as a result of an Honourable Mention
in the competition organized by the same School.
2007
December
Base and working designs at Eduardo Navadijos and Csaba Trsoly S.L.
Ellaboration of the project for a Umbraculum and childrens games garden in
Boadilla del Monte, Madrid, entry in the Wan Awards 2009 and fnalist in the X
Biennial of Spanish Architecture and Urbanism.
2006
As a lecturer
Lecturer on Generative Design in Architecture in the 3rd Symposium of Design
and Teaching during the 4th Biennial of Iberoamerican Design at Matadero
Madrid Centre of Design (BID).
Invited lecturer on Parametric Design in Architecture at the Parametric Studio
(Taller Paramtrico) of the University San Pablo CEU Shool of Architecture.
December
2012
2011
February
Teacher of Grasshopper in the courses of the Students Association at the School
of Architecture of Madrid (basic and advanced levels).
2010 -2013
Assistant Teacher of Parametric Design and Data Visualization for the Collective
Housing Research Group (GIVCO), a R&D project of the Polytechnique
University of Madrid (UPM).
Invited teacher on digital/analogical fabrication and interactive tools at Estilo
School to elementary students.
2010
June
Micropocessor programming with C++ masterclass at Medialab Prado Madrid. 2009
July
2011
January
1
9
8
0
s

1
9
8
0

1
9
8
1

1
9
8
2

1
9
8
3

1
9
8
4

1
9
8
5

1
9
8
6

1
9
8
7

1
9
8
8

1
9
8
9
1
9
9
0
s

1
9
9
0

1
9
9
1

1
9
9
2

1
9
9
3

1
9
9
4

1
9
9
5

1
9
9
6

1
9
9
7

1
9
9
8

1
9
9
9
2
0
0
1

2
0
0
0

2
0
0
6

2
0
0
7

2
0
0
8

2
0
0
9

2
0
0
2

2
0
0
3

2
0
0
4

2
0
0
5

I am born
McNeel Europe
Medialab Prado
Medialab Prado Medialab Prado
Medialab Prado
Visualizar08: Database
City at Medialab Prado
Madrid: In the air cluster,
coordinated by Nerea
Calvillo and Victor Via,
assisted by Bestiario
and Aaron Meyers. First
development of the
atmospheric pollution
visualization software
for the city of Madrid
(www.intheair.es).
Creative programming workshop II: visual programming and
interaction in the Processing environment.
Creative programming
workshop I: visual
programming
and interaction in
the Processing
environment.
Rhinoscript course at the Graphic Department at the School of
Architecture of Madrid (20 h.).
Creative electronics workshop at Medialab Prado Madrid:
basic concepts of circuits and physical interaction and
programming of sensors in the Arduino environment.
Authorized Rhino Trainer: Rhino Level 1 and Level 2 courses
at McNeel Europe (40 h.).
Housing base designs,
directed by Lorenzo
Fernndez-Ordez.
Competition of a commercial area in La Rioja.
Reverse Arquitectura
Estudio
Guadiana
Eduardo Navadijos
and Csaba Tarsoly
Base and working designs at
Eduardo Navadijos and Csaba
Trsoly S.L. Ellaboration of the
project for a Umbraculum and
childrens games garden in
Boadilla del Monte, Madrid, entry
in the Wan Awards 2009 and
fnalist in the X Biennial of Spanish
Architecture and Urbanism.
Espacio Disponible, a students
competition for the restoration
Madrid School of Architectures
public space.
Co-founder, together with Guillermo Ramirez of Frikearq
(www.frikearq.com), offce oriented to research and teaching of
Generative Design techniques, through which we have organized
and collaborated in more than 30 courses and workshops
and have trained more than 300 people, including graduate
and posgraduate students and proffessionals from different
backgrounds, mainly Architects but Engineers, Industrial
Designers and CNC machining as well.
Assistant scholar at the Juan de Herrera Institute
in Madrid School of Architectures Urbanism
Department.
Madrid School
of Architecture
Honourable mention
Working team for the
restoration of the public
space of Madrid School
of Architecture, directed
by Ecosistema Urbano.
University of
Cambridge
Centre
International
dtudes
Pdagogiques
Technical University of Madrid
English Language:
Certifcate of
Profciency in
English
French Language:
DELF B1 Degree
German Language:
Mittelstuffen 1 Degree
Goethe
Institut
Technical University of Madrid
Frikearq
c
o
l
l
a
b
o
r
a
t
i
o
n
s
/
t
e
a
c
h
i
n
g
/
p
r
a
c
t
i
c
e
/
w
o
r
k
s
h
o
p
s
/
c
o
u
r
s
e
s
/
e
d
u
c
a
t
i
o
n
/
Miguel Vidal
miguel@frikearq.com
2
0
1
0

2
0
1
1

2
0
1
2

2
0
1
3

Architect Degree
I am willing to work with you!
Smart Geometry 2011: Building the Invisible,
at the CITA,Copenhage in Authored sensing
cluster, coordinated by Kyle Steinfeld (University
of California, Berkeley), Kat Park (SOM New
York) y Nick Novelli (CASE, Rensselaer). Design
of a prototype to monitorize and visualize the
feelings of a work space through the use of in-
site sensors.
Smart Geometry 2011 - CITA,
Copenhagen
eCAADe 2010: Future Cities,
ETH - Zrich
Seminary of RhinoCommon in C# environment, taught
by Giulio Piacentino.
Voice and public speaking course (20 h.).
ALGOMAD 2010, at the Shool of Arquitecture of El
Valls (Barcelona): Generative Components and
Rhinoscript workshops (40 h.).
Co-organizer and invited teacher in the workshop Cosy Parametrics,
directed by Izaskun Chinchilla with students from the Unit 22 of
The Bartlett (University College of London, UCL), the European
University (UEM) and the Technical University of Madrid (UPM).
Co-organizer and teacher
of Smartlab Granada, a
workshop on generative
design methods with
creative purposes,
in collaboration with
the University and the
Architectural Association
of Granada.
Lecturer on Generative
Design in Architecture
at the 3rd Symposium of
Design and Teaching at
the 3rd Symposium on
Design and Teaching, at
Matadero Madrid.
Assistant teacher on Advanced Geometry and programming
techniques in the Master of Advanced Architectural Techniques
(MUTAPA) in the European University of Madrid (UEM).
Invited lecturer on Data
Visualization in the Degree
of Digitial Fabrication in
the School of Architecture.
Teacher of Associative and Parametric Design courses (basic,
advanced and scripting levels) for proffessionals and entrepeneurs,
in collaboration with the University of Las Palmas and the School of
Industrial Organization and fnanced by the European Social Fund.
Association for the Economical Promotion
of Gran Canaria
Invited teacher of Parametric Design with Grasshopper in ALGOMAD
2011, seminary on generative methods in Arquitecture and Design.
Invited lecturer on Parametric Architecture by the Taller Parametrico
at the Shool of Architecture of University San Pablo CEU.
Invited teacher of Parametric Design to the Collective Housing
Research Group (GIVCO) of the proyect of R&D&i of the
Polytechnique University of Madrid (UPM).
Teacher of Grasshopper in the courses of the Students Association
at the School of Architecture of Madrid (basic and advanced levels).
Contemporary Art Museum of
Santiago de Compostela (CGAC)
Installation of Opera Body, an experimental installation
on spatial visualization through sound experience.
University of
Granada
Biennial of
Iberoamerican
Design
University San
Pablo CEU
University San Pablo CEU
European University of Madrid
Technical University of Madrid
Technical University of Madrid
Technical University of Madrid
Technical University of Madrid
BarcelonaTECH (UPC)
Polytechnic
University of
Madrid
The Bartlett - UCL
IE University of Madrid
Assistant scholar and teacher in the course Projects of Parametric
Architecture (Proyectos de Arquitectura Paramtrica) of the
Architectural Projects Department in the School of Architecture of
Madrid through an Innovation Educational Project of the Technical
University of Madrid (UPM).
Teaching experience
Generative Design in Architecture
A four years experience teaching in different universities, such as the Polythecnique University of Madrid,
the European University of Madrid, San Pablo-CEU University or the IE University Madrid, has given me the
opportunity to learn with my students and test unconventional approaches to the design practice.
A generative design uses and explicits the instructions and relations system between a set of elements, either
material or abstract, as generators of a design. It uses thoroughly or occasionally their practical applications in
the design process so that we can ellaborate a design schema to generate a big amount of variations and help
us select among the possible outcomes. These instructionsare defned as algorithms, that are, usually but not
exclusively, expressed in mathematical language and are implemented in a set of commands in computational
language so that it can be reproduced.
From 2009, I have always had the same intention: to promote the creative, interdisciplinary and unconventional
of these generative methodologies in design. I have also tried to keep a practical approach to teaching as I
believe in an active pedagogy.
Mainly, I have aimed our lessons to three felds:
- construction of parametric and discriminative models and its relation with building techniques and programs.
- data visualization and environmental analysis.
- physical and nonlinear systems simulation and recursive models.
Environmental data visualization. Dwellings combinatorics.
Different roofng design posibilites according to wind site analysis.
Masterclasses in the European University
of Madrid, Master in Advanced
Architectural Design (MUTAPA).
SmartLABGranada2013, a workshop on
generative design methods for creative
purposes
ALGOMAD 2011, a seminary to promote
the use and understanding of generative
desgin tools, at IE University Madrid.
Teacher of Parametric Design for
the Collective Housing Research
Group (GIVCO), a R&D project of the
Polytechnique University of Madrid.
Courses in the Association of Economical
Promotion of Gran Canaria, in
collaboration with the University of Las
Palmas and the European Social Fund.
Teacher of Grasshopper (basic and
advanced) in the Students Association of
Madrid School of Architecture.
Co-founder, with Guillermo Ramirez, of Frikearq, a practice oriented to research
and teaching of Generative Design techniques. Since 2009, we have organized
and collaborated in more than 30 courses and workshops and trained more than
300 people, including graduate and posgraduate students and proffessionals
from different backgrounds, mostly Architects but also Engineers, Industrial
Designers and CNC machining.
SmartLAB Granada
It was my frst collaboration on organization and conception of an entire workshop from the very beginning,
both in the practical, course, workshop and presentations, and conceptual side, approach, structure and topics
covered.
The goal was to comunicate the participants a creative, multidisciplinary and prejudice-free use of generative
design tools. With that base, we divided the workshop in three interrelated parts with different objectives:
- Intensive course
- Design studio
- Presentations and fnal crit
In the frst part, I taught three sessions with different main topics and its application in three scales of design:
- Session 1_city scale - neighbour scale [data visualization]: we focused on the capacity of generative tools of
being huge managers of information.
- Session 2_builging scale - furniture scale [construction of generative and parametric models]: we studied
the capacity of generative tools to create multiplicity of results of the same design. We also gave particular
importance to environmental values in design.
- Session 3_mecanism scale - fabric scale [simulation of physical models]: we speculate on the possibility of
generative methodologies to help us deal with self-organizing and nonlinear models, which would lead us to try
to cope with indeterminacy in design.
An interdisciplinary workshop on generative methods with creative purposes in
design. It was aimed for professionals and students from different backgrounds:
Art, Architecture, Industrial design and Engineering and organized in
collaboration with the University and the Architectural Association of Granada,
where it took place from 28th January to 1st February of 2013.
Several screen captures of the workshops website. Physics simulation class exercise.
Different moment of the workshop.
Correlative to the course, we had purely practical workshop sessions in which the students, organized in
groups, developed the design of different projects, previously selected, with the technical assistance of the
teachers of the workshop and trying to apply the notions and competencies acquired in the course.
I was in charge of fve, diversely oriented, groups and projects. Here, I add a summarized explanation of their
work:
- Solsticial Urbanism: Jorge Caminero, Architect and PhD student in Madrid Shool of Architecture,
hipothesized on the possibility of the existence of a direct relation between the proportions of Architecture and
its latitude, what he called solsticial rectangle. He wanted to build a research tool to evaluate different building
shapes and its relation to sun position. Eventually, his intentions aimed to ellaborate a generative urbanistic
tool based on the proportions on that solsticial rectangle.
- Nazarhino: Sergio lvarez, Final Project student, was interested in exploring islamic patterns. He studied the
decorative models of some spaces of tha Alhambra in Granada and managed to succesfully represent spatial
structures from those patterns.
- Tokyo Center: Juan Snchez and lvaro Tejada, Architects, wanted to use their project to test the how
generative tools could help them in the development of a competition in Tokyo. Their work focused on the LED
facade design and they explored the reactive possibilities of that sort of Architecture.
- Solar and movement reactive skin: this group was composed by two italian Architects, Andrea Conti and
Erika Mazza, along with two Final Project students, Javier Fernndez and Juan M. Snchez Muoz, developed a
project on panelling a surface according to solar incidence.
- Dynamic urbanistic data analyzer: Juan Bachs and Elena Lucena, Final Project students, wanted to
build an interface for fnding optimal locations for certain building programs, according to socioconomic and
urbanistic data. They managed to create a simple locator for several programs, such as markets and schools,
in a coastal area of Granada, implementing proximity and clustering algorithms.
Finally, on the last day of the workshop, we had a critical session with invited lecturers from diverse origins,
in which both the participants showed the projects developed during the workshop and the teachers made a
presentation of their work. We had:
- Ana Beln Lpez, Polythechnique University of Madrid, PhD researcher and winner of the Arquimede Prize
for the best project of that university for Intimacy patterns, relating urbanism and sex.
- Jos Luis Garca del Castillo, Harvard GSD PhD researcher on computational design and digital
fabrication
- Javier Fernndez Gallego, Architect, Design Studio professor in the University of Granada.
- Roberto Molinos, MArch Building Structures, Polythechnique University of Madrid, professor in IE
University Madrid.
- Rafael Urquiza, PhD Architect, Universtiy of Malaga, MArch in Digital Architecture, RMIT.
Family picture. Juan Bachs and Elena Lucena urban locator project.
Erika Massa and Andrea Conti solar reactive surface.
Sergio lvarez research on Alhambras geometrical patterns.
Posibilidades
Podemos llegar a
representaciones
mucho ms complejas.

Trabajo
Asignamos con las
distancias medias
calculadas una densidad
a cada punto de la malla
fabricada a la que se le
asigna un gradiente de
color segn su valor.

Trabajo
Para mejor visualizacin
hacemos corresponder
un circulo de radio
variable segn el valor
de densidad de cada
uno de esos puntos.

Repetimos el
procedimiento para
cada valor que
queremos analizar pero
siempre con la misma
malla de referencia.

Conclusin
Con este procedimiento
es posible relacionar
datos de distintas listas
a partir de los cuales se
pueden sacar
conclusiones para
ubicar futuras
actuaciones en el
territorio seleccionado.

Se puede hacer una
comparativa de
densidades en distintas
localizaciones
simplemente cargando
el documento de otro
lugar.

Trabajo
Creamos una malla
(MESH) con unos
valores de precisin
variables a partir de la
cual se miden las
distancias mnimas
(CLOSEST POINTS) de
los puntos calculados de
cada valor.


Punto de densidad media de
rea construida
Centros de referencia
Cosy Parametrics, Unit 22 - The Bartlett
Cosy Parametrics was a fve day intensive workshop an experimental workshop on digital techniques and its
relation with domestic and traditional design and fabrication that took place in Madrid School of Architecture in
2011 between December 2nd and 7th. The workshop had an intensive course on parametric design techniques
as well as a design studio, with assistance for the development of the students projects. All that was combined
with talks from relevant Madrid based practices and collectives and ended with a fnal jury with invited teachers
from those universities.
The goal of Cosy Parametrics was to detach parametric techniques from its usual fguration of socially isolated
proposals. The workshop had an speculative intention on diverse digital techniques, of design and fabrication,
in order to explore if they can be used to produce designs in which the domestic, warm and delicate can have a
place. We dealt with vernacular techniques easily fabricated but cumbersome to represent and we speculated
as to wether, besides geometric conditions, it is possible to parametrize programmatic, environmental and
economical strategies.
Along with my partner in Frikearq, Guillermo, I taught the intensive course and assist the studio design. We
prepared specifc examples of modelling vernacular objects and fabrication techniques, which were used in the
students designs. We translated into geometric and logic models, things such as crochet or cross-stitching.
As for the studio, we organized the students in teams with one british student with two or three other Spanish
student, who also had to come from different universities. They had to agree on a unique solution that would
combine their previous designs and ideas. That proposal should take into account geometrical, programmatic
and building parameters at the same time and from the earliest stages of the design development.
I was invited to teach in Cosy Parametrics, an experimental workshop on digital
techniques and its relation with domestic and traditional design and fabrication.
Directed by Izaskun Chinchilla and Carlos Jimnez, professors at The Bartlett
(UCL), with undergraduate, graduate and End of Degree students from different
Spanish universities: the European University, the University San Pablo-CEU and
the Polytechnique University of Madrid, and from The Bartletts Unit 22.
Several exercises whe did during the course: mathematical and physical modelling of objects and fabrics.
A couple of pictures of different moment of the course.
I helped the students develope their work, under our Izaskun and Carlos supervision. My task was structuring
solutions for each project he assisted, relating geometric, programmatic and constructive conditions.
The frst day of the workshop we made a theoretical introduction to the subjects and did a presentation of our
work and projects and we presented some of the exercises we will be doing during the workshop.
Combined with the course and design studio, we had presentations by diverse young Spanish collectives, such
as Zuloark or pkmn Architects.
In the jury, we had several professors from different university who criticised the students outcomes. Among
the invited teachers, we had Andrs Perea, and David Santos Meja, head of School, from San Pablo-CEU
University, Carlos Arroyo and Langarita-Navarro Architects, from the European University of Madrid and Nieves
Mestre, from the IE University Madrid.
Project 2
Project 3 References and Precedence
There are many presidencies of kinetic walls and installations, but out real inspiration was the sunflower and its ability, when it is only a bud, to track the sun across the sky for a full 180 degrees, called Heliotropism. The default position is facing east, so that is why our installation can be manipulated to face only only direction.
Model Stills
Showing the tracking of the model with the movement of the
sun
Plan
9 am 11 am
1 pm
1 pm
3 pm 5 pm
7 pm
Spring Summer
Autumn
Winter
GROUP 10
PATRICIA SUREZ MARTN
+ PAUL MC MANAMON
+ GABRIEL HERNNDEZ RODRGUEZ
GROUP 10
PATRICIA SUREZ MARTN
+ PAUL MC MANAMON
+ GABRIEL HERNNDEZ RODRGUEZ
GROUP 10
PATRICIA SUREZ MARTN
+ PAUL MC MANAMON
+ GABRIEL HERNNDEZ RODRGUEZ
OUP 10
ATRICIA SUREZ MARTN
AUL MC MANAMON
ABRIEL HERNNDEZ RODRGUEZ
Group work by Megan Townsend, Alvaro Estiga and Javier Rueda. Transportable station design by Julian Huang, ngeles Garca y Mara Abreu.
Paul McManamon, Patricia Surez y Gabriel Hernndez group.
Sinan Pirie, Akmal Azhar & Esther Rodrguez Ramos fnal presentation.
Final day jury. Family picture.
Miguel Vidal
miguel@frikearq.com
ALGOMAD 2011
I conducted a seminary on parametric design to graduate, postgraduate students and
teachers. Along with my partner in Frikearq, I taught a two-days intensive seminary on
parametric modelling with Grasshopper, the algorithmic modelling software. The course had
a full registration, with 30 attendees, and was a complete success.
The last day of the seminary, I also helped the students develop their own designs and
prepare them for digital fabrication in the IE-Universitys 3d-printer and laser cutting
machines.
Algomad is a seminary on generative tools for Architecture and Building
Construction Design, that started in 2010 and takes place, alternatively, in
Barcelona and Madrid. 2011s edition had two-days intensive courses on
different software with talks and a last day of digital fabrication and fnal
presentation. It took place at IE University in Madrid and Segovia campuses.
Trabajo con sensores, en entorno Arduino, y proceso de construccin del prototipo.
Research
Building elements assembly with
artifcial vision and augmented reality
(on course)
Miguel Vidal
miguel@frikearq.com
Collective Housing Research Group
GIVCO is a consolidated research group within Madrid School of Architecture Department of Design. It
develops his work from a shared habitat understanding as possible and necessary forms of generators of
contemporary cities. From the basis of a deep, sistematic and transmittable knowledge of relevant 20th
residential designs, the groups research efforts focuse on testing, validating and, if possible, improving
the potential of those designs. These researches aim to start a debate between those examples and current
collective housing projects concerning typological emergence, habitability limits and housing developments
management processes. The group is composed by fve research professors and fve pre-doctoral researchers.
I was responsible, along with my partner in Frikearq, for teaching parametric analysis processes and data
visualization methodologies. The members of the group wanted to have a dynamic, stable and fast alternative
research tool so they could tmanage the huge amount of data they were coping with and translate Architectural
working drawings into information that could be measured and visualized. At that time, they were doing all that
work manually, which was a cumbersome task.
In order to focus on the research capabilities of generative tools, we prepared an intensive course, using
desgins from various contemporary Architects, such as Junya Ishigami, Smouth and Allen, Eduardo Arroyo or
Sou Fujimoto. The course consisted of the following parts:
- a theoretical introduction on the capabilities of parametric tools applied to research, using generic examples
of geometric analysis, which they could use in their housing units plans studies.
- practical exercises on how to translate that documentation into mathematical entities so that it could be easy
to analyse some housing parameters they were studying.
- ellaboration of effcient data visualization tools with real-time connection.
Our audience was composed by seven posgraduate students, two of them, pre-doctoral researchers, and two
research professors.
I collaborated as a teaching assistant of Parametric Design and Data
Visualization for the Collective Housing Research Group (GIVCO), a Polytechnic
University of Madrid research and development unit in November 2010.
Some Spanish collective housing designs, that GIVCO used as research material.
Satellite Settlement of Cao Roto (Stages I-II) : A. Vzquez de Castro, J. L. iguez de Onzoo, Madrid, 1957-63.
Residential Building on Muntaner St. : Jos Luis Sert i Lpez, Barcelona, 1929-31.
Some of the practical examples we did during the course.
Lars Astrand, Breeding tables. No.Mad, Paris Olympic villa comp
A picture of the course.
Junya Ishigami, Kanagawa Institute of Technology. Sou Fujimoto, Final wooden house.
0252
0282
02
069
0175
02
0230
0114
0178
0250
0187
0222
0200
0282
0238
0122
0282
0113
0121
032
0205
0248
0282
0271
0200
0171 086
070
015
0282
093
0264
0112
0176
0207
0154
010 016
052
016
087 0162
041
050
059
068
0263
0282
0277
0237
0225
0190
0224
0172
0272
0136
019
013 07
0203
00
045
034
076
067
075
0239
090
0110
0135
0126
0245
0146
0209
0157
05
0100
01
05
077
0123 0119
0139 0142
027
0160
0239
0183 0195 0196
0226
0223 0229
0235
073
0262
082 084
0282
0185
0249
070
0241
0226
058
0216
051
0189 0188
0179
0194
033
0155
0279
0269
0198
095
0109
0215
0106
014
0273
06
021
069
0127
031
088
0280
0193
0236
066
0156
0102
088
0261
0109
095
0114 0116
0148
0121 0123
0282
0128
0282
0108
0282
0149
00 03
062
0282
038
0120
017
022
063 03
0282
0214
051 039
012
0111
064
0129
033
0274
023
025
0151
029
031 034 036
0170
0181 0187
045 047
0194
052
0257
0243
0227
061
063
0265
0233
0230
0247
0260
077
0282 0282
0282
0282
0173
081
0275
078
0278
074 072
0254
0270
066
0232
0228
0228
0189
057
0217
0199 0209
0191
0192 0197
044
0251
0193
0269
0198
035
0164
0220
0144 0152
026
0145
0218
043
020
0130
017
015 014
0268
037 046 050
06
0202
089
047
00
0212 0204
0282
093
041
01
0206
0267
0282
048
023
089
029
0235
092
056 061 054
097
0133
099
071
074
0266
0104
079 081 082 084
0110 0111
091 0105
0262
097
0117
0104 0101
0125
0265
0243
0124
0282 0282 0282
0129
0282
0282
0219
0147
0271
0150
0282
0282
0282
04
0282 0282
0282
044
0282
0141
0211
0211
0174
018 019
09
083
0186
096
0278
036
024
085
0108
026
0240
08
053
010 011
0122
0107
0260
0216
0128
0117
094
0217
0132
0272
021 022
0236
024
0134 0138
0219
0153
0140
030
0158
0282
0165 0167 0177
037 038 039
040
0182
0223
0246
0185
046
0191
048 049
0253
0207
053 054 055 056
0220 0222
0214
0245
062
0244
064 065
0242
067
0277
0238
0255 0256 0258
0231
0268 0261
0280
079
0270 0282
0184
0233
083
0282
0183
0258
085
049
0182
080
0281
0232
0181
076
075
0259
0180
0186
0276
071
0179
0257
0234
0229
0178
0227 0231
0188
0177
0224
060
0213
0176
0221
0206
0218
0175
0256
0210 0208
0174
0225
0203 0202
0173
0190
0192
0184
0172
043 042
0180
0171
0255
0276
0169
0170
0168
0221
0166
0169
0195
0161 0159
0168
028
0196
0163
0167
0254
0143
0197
0166
0266
0273
0212
0165
0131
018
0137
0164
0199
0127 0126
0163
0253
0101
0120
0162
055
09
0201
0161
027 025
08
0160
04
020
0213
0159
0252
0115
07
0158
0201
028
0242
0157
0282
0205
011
0156
012 013
0210
0155
0251
0275
0281
0154
032
0234
035
0153
059
042
090
0152
0259
091
030
0151
0250
058 060
0150
068
096
065
0149
098
057
0237
0148
0100
072 073
0147
0249
0103 0204
0146
0105
078 080
0145
0107
0116
094
0144
086 087
0240
0143
0248
092 0103
0142
0106
0241
0115
0141
0112 0113
0118
0140
0119
0118 0124
0139
0247
0274
0263
0138
098
040
0125
0137
0282
0244
0282
0136
0282
0282
0130
0135
0246
0102
0282
0134
0215
0282
0208
0133 0267
0282
0279
0132
0282
099
0282
0131
0264
A=-2.5
A=-28 A=-26 A=-51.1 A=-57 A=41.1 A=-32.4 A=35.2 A=57.2 A=54.3 A=47 A=-47.1 A=-2.9
A=59.7
A=-46.9 A=58.9
A=53.3 A=-43.6
A=24
A=-76 A=64.2 A=-56.3 A=57.7 A=-58.5 A=77 A=-43.9 A=-22.5 A=-34.2 A=-53.8
A=61.1
A=-88.2 A=-80.5 A=83.3
A=-20.6 A=-2.8 A=4.9 A=-8.6 A=69.2
A=44.3
A=44.5 A=8.1 A=-15.4 A=38.6 A=29.7 A=16.3
A=33.4
A=44.1
A=38.9 A=38.2
A=-45.9
A=-58.3 A=47.3 A=-49 A=24.9 A=59.2 A=26.6 A=-11.7 A=-56.4 A=-64.8
A=-41.6
A=50.1
A=66.4
A=18.1
A=-74.1 A=36.5 A=70.4 A=89 A=41.2 A=69.9 A=82.5 A=25.4 A=88.1
A=74
A=83.9
A=76.1
A=86.7 A=82.9
A=27.2 A=71.2 A=65.7 A=-70.7 A=58.4
A=4.7
A=22.8 A=-26.5 A=56.2 A=40.9 A=-10.5 A=-31.2
A=62.6 A=-53.8 A=51 A=62.4 A=20.2 A=-34 A=-16 A=-40.3 A=-2.7
A=27
A=46.5 A=64.6
A=40 A=-38.1 A=8.2 A=-6.5 A=18.2 A=-18.2 A=29.2 A=14.7 A=18.2 A=-11.8 A=18.2
A=18.2
A=18.2 A=18.2 A=18.2
A=18.2 A=18.2 A=18.2 A=18.2 A=18.2 A=18.2 A=18.2 A=18.2 A=18.2 A=18.2 A=18.2 A=18.2 A=18.2
A=18.2 A=18.2
A=18.2
x=1.0 x=0.9
x=1.1 x=1.1
x=1.6
x=1.6
x=0.7 x=0.6 x=0.9 x=1.4 x=1.2 x=1.0 x=0.9
x=1.4 x=0.6 x=1.0 x=1.4 x=1.0 x=1.0 x=2.0 x=0.6 x=0.6 x=0.7 x=2.0 x=0.6
x=1.1
x=0.6
x=1.2
x=1.0
x=0.8
x=1.2
x=0.8 x=0.6 x=0.6 x=1.2 x=2.0 x=0.6 x=0.6 x=2.5 x=0.6 x=2.0 x=2.0 x=0.8
x=0.8 x=0.7 x=1.0 x=1.4 x=0.6
x=0.6 x=0.6
x=1.1
x=0.7
y=2.0 y=2.0 y=2.0 y=2.0 y=2.0 y=2.0 y=2.0
x=1.1
y=2.0
x=0.8
x=1.0
x=1.1
x=1.1
x=0.6
x=0.8
x=1.1
x=1.0
x=0.8
x=1.0
x=1.1
00
x=0.6
x=1.6
x=1.2 x=0.8
y=2.0
x=0.8
x=1.2
x=0.8
x=1.4
x=2.0
x=1.2 x=1.0
x=0.8
x=1.0
x=1.1 x=0.8
x=1.0
x=1.2 x=1.1
x=0.8
x=1.1
x=1.0
x=1.2
x=0.8
x=0.8
x=2.0 x=2.0
x=1.1
x=0.6
x=1.1
x=0.9 x=1.6
x=1.6
x=1.1
x=3.3
x=2.5
x=1.1
x=0.7 x=0.6
x=1.1
x=1.2
x=1.1
x=1.6
x=1.0
x=1.2
x=1.2
x=0.8
A=18.2 A=18.2
x=1.4 x=0.8
A=18.2
y=2.0 y=2.0
A=18.2 A=18.2
A=18.2
y=2.0 y=2.0
A=18.2
A=18.2
y=2.0 y=2.0
x=1.0
A=18.2
x=1.4
y=2.0 y=2.0
x=0.9
y=2.0
x=0.8
y=2.0
A=-1.7
x=1.0 x=1.0
y=2.0
A=-33.9
y=2.0
x=0.9
y=2.0
A=-8.3
y=2.0
x=0.6
x=1.1
y=2.0
y=2.0
x=0.6
y=2.0
A=20.5
y=2.0
x=1.1 x=1.1
A=-26.6
y=2.0 y=2.0
x=1.1
A=-20.8
y=2.0 y=2.0
x=1.2 x=0.7
y=2.0 y=2.0
x=0.9
A=16.5
y=2.0
x=0.7 x=1.2
A=-26.6
y=2.0
x=1.1 x=0.8
A=74.8
y=2.0 y=2.0
x=0.7
y=2.0 y=2.0
x=0.9
x=1.0
A=-82.6
y=2.0 y=2.0
x=1.0
A=87.3
y=2.0 y=2.0
x=1.1
A=71
x=1.1
y=2.0 y=2.0
x=1.6
y=2.0
y=2.0
x=0.6
A=-61.1
x=0.7
y=2.0 y=2.0
A=44.2
x=1.6
y=2.0
x=0.9
A=43.4
y=2.0
x=1.4 x=1.6
y=2.0 y=2.0
x=1.0
y=2.0
A=21.3
y=2.0
x=1.2 x=0.7
A=-42.2
y=2.0 y=2.0
x=1.0
A=64.5
y=2.0 y=2.0
x=0.8 x=1.6
y=2.0 y=2.0
x=0.8
A=-17.1
y=2.0 y=2.0
x=1.1
A=31.8
x=1.6
y=2.0 y=2.0
A=11.6
x=1.4
y=2.0
x=1.0 x=0.8
y=2.0
x=1.2 x=1.2 A=-39.9
y=2.0
y=2.0
x=2.0
A=7.4
y=2.0 y=2.0
x=1.4
A=-49.8
x=2.0
y=2.0 y=2.0
x=1.4
y=2.0 y=2.0
x=0.7
A=-46.4
x=0.6
y=2.0
y=2.0
A=-47.4
x=0.6
y=2.0 y=2.0
A=25.9
x=1.1
x=1.1
y=2.0 y=2.0
x=1.6
y=2.0
x=1.1
y=2.0
x=0.8
x=1.1
y=2.0
y=2.0
x=2.0
y=2.0 y=2.0
x=1.1
x=0.8
y=2.0 y=2.0 x=0.8 y=2.0 y=2.0 x=1.4 x=1.1 y=2.0 y=2.0
y=2.0
y=2.0 y=2.0
y=2.0 y=2.0
y=2.0 y=2.0
y=2.0
y=2.0
y=2.0 y=2.0
y=2.0
y=2.0 y=2.0
y=2.0 y=2.0
y=2.0
y=2.0 y=2.0
y=2.0 y=2.0
y=2.0 y=2.0
y=2.0
y=2.0 y=2.0
y=2.0 y=2.0
y=2.0 y=2.0
y=2.0
y=2.0 y=2.0
y=2.0
y=2.0
y=2.0 y=2.0
y=2.0
y=2.0
y=2.0
y=2.0
y=2.0 y=2.0
y=2.0 y=2.0
y=2.0
y=2.0 y=2.0
y=2.0
y=2.0
y=2.0 y=2.0
y=2.0
y=2.0 y=2.0
y=2.0 y=2.0
y=2.0 y=2.0
y=2.0
y=2.0 y=2.0
y=2.0 y=2.0
y=2.0 y=2.0
y=2.0
y=2.0
y=2.0
y=2.0
y=2.0
y=2.0
y=2.0
y=2.0 y=2.0
y=2.0
y=2.0 y=2.0
y=2.0 y=2.0
y=2.0
x=0.7
y=2.0
x=1.1 x=1.6
y=2.0 y=2.0
x=1.0
x=1.1
y=2.0
x=0.9
x=1.1
y=2.0 y=2.0
x=0.9 x=1.0
y=2.0
x=0.6
y=2.0
x=1.1
y=2.0 y=2.0
x=0.9
x=1.0
y=2.0
x=0.8
x=0.6
y=2.0 y=2.0
x=4.9
x=1.6
y=2.0
x=1.1 x=1.1
y=2.0 y=2.0
x=1.0
x=0.6
y=2.0
x=0.9 x=1.2
y=2.0
y=2.0
x=1.0
x=1.0
y=2.0
x=1.1
y=2.0 y=2.0
x=1.1
y=2.0 y=2.0 y=2.0 y=2.0 y=2.0 y=2.0 y=2.0 y=2.0
y=2.0 y=2.0 y=2.0 y=2.0
y=2.0 y=2.0
y=2.0 y=2.0 y=2.0 y=2.0 y=2.0 y=2.0 y=2.0 y=2.0
y=2.0 y=2.0
y=2.0 y=2.0 y=2.0 y=2.0 y=2.0 y=2.0
y=2.0
y=2.0
y=2.0 y=2.0 y=2.0
y=2.0
y=2.0 y=2.0 y=2.0 y=2.0 y=2.0
y=2.0 y=2.0
y=2.0
y=2.0 y=2.0
y=2.0 y=2.0
y=2.0
y=2.0 y=2.0 y=2.0
y=2.0 y=2.0
y=2.0 y=2.0
y=2.0
y=2.0
y=2.0
y=2.0
A=-43.4 A=28.8
y=2.0
y=2.0
A=-3.8
y=2.0
y=2.0 y=2.0
A=19.9
y=2.0
A=-19.4
y=2.0
A=5.8
y=2.0
y=2.0 y=2.0
A=33.8 A=0.6
y=2.0 y=2.0
A=-4.1
y=2.0 y=2.0 y=2.0
A=0.7 A=-25.8
y=2.0 y=2.0
A=-60.4
y=2.0 y=2.0 y=2.0
A=-31.6 A=-38.5
y=2.0 y=2.0
A=-44.2
y=2.0 y=2.0 y=2.0
A=40.4
A=-51.2
A=-69
A=-24.9
A=1.5
y=2.0 y=2.0 y=2.0
A=29 A=-12.5
y=2.0
y=2.0
A=11.8
y=2.0 y=2.0 y=2.0
A=-34.1 A=-44.2
y=2.0 y=2.0
A=-26.8
y=2.0 y=2.0 y=2.0
A=0.7 A=-57.4
y=2.0
y=2.0
A=18.9
y=2.0 y=2.0 y=2.0
A=-60 A=-62.9 A=26.9
y=2.0
A=-3.7
y=2.0 y=2.0 y=2.0
A=-25.4 A=-64.2
y=2.0 y=2.0
A=38.6
y=2.0 y=2.0 y=2.0
A=-34.6
A=-62.6
y=2.0 y=2.0
A=-42.6
y=2.0 y=2.0
y=2.0
A=19.2 A=-4.5
y=2.0 y=2.0
A=-16.3
y=2.0 y=2.0
y=2.0
A=37.8
A=-6.1
A=73.5
A=-37.6 A=-40.2
y=2.0 y=2.0 y=2.0
A=-28.3 A=-33.8
y=2.0 y=2.0
A=-39.3
y=2.0
x=0.9
x=1.6
A=-40.5 A=-24
x=0.9 x=0.7
A=-58.9
x=1.1 x=2.5
x=0.7
A=35.5 A=17.1
x=0.7
x=1.6
A=49.2 x=0.6
x=1.1
x=1.2
A=44.8
A=68.8
A=-55.2
x=1.2
A=-78.8
x=1.1 x=1.0 x=0.9
A=-59.8 A=-31.7
x=1.6
x=0.7
A=55.8
x=1.1
x=0.6 x=3.3
A=-34.8
A=-70.3 x=1.1 x=0.7
A=-42.4
x=1.1
x=1.2 x=2.0
A=-42 A=-46.6
x=2.0
x=1.2
A=44.5
x=1.6 x=1.4
x=1.1
A=-56.7
A=-64.9
A=64.7 A=-20.6 A=64.5
x=1.6
x=1.0 x=2.0
A=-57 A=53.5
x=1.2
x=0.9
A=71.8
x=0.8 x=0.8 x=2.0
A=-26.9 A=-35.1
x=0.8 x=1.1
A=65.1
x=1.0 x=1.0 x=1.1
A=-19.7
A=-49.5
x=0.7 x=0.9
A=-55.6
x=1.1 x=1.2 x=1.4
A=-88.8 A=-15.1 A=-44.7
x=1.2
A=-48
x=2.0
x=0.6 x=2.0
A=-19.6 A=-35.6
x=2.0 x=0.8
A=-44.7 x=0.7
x=0.8
x=1.1
A=-48.4 A=88.7
x=1.0 x=0.7
A=-53.7
x=0.8 x=0.7 x=0.7
A=-64.6 A=75.6
x=0.6
x=0.9
A=72.1
x=0.7 x=0.6 x=0.6
A=6.8
A=70.5 A=-72 A=75.6 A=51.7
x=1.6 x=1.0 x=1.6
A=77.9 A=61.7
x=1.1
x=1.2
A=-49.4
x=1.1
x=1.1
x=0.9
A=-82.6 A=65.7
x=1.1 x=1.1
A=-51.1
x=1.1
x=0.8
x=1.4
A=46.4
A=18.8
x=1.4
x=0.7
A=38
x=1.1 x=0.7 x=1.0
A=-87.9 A=55.7
A=-30.1
x=0.7
A=29.6
x=0.8
x=1.1
x=0.6
A=52.2
A=30.1
A=18.2 A=18.2
A=51.3
A=18.2 A=18.2 A=18.2
A=43.4 A=39.4
A=18.2 A=18.2
A=-45.4
A=18.2 A=18.2 A=18.2
A=32.8 A=-76.7
x=1.1
x=1.2
A=-34.2
x=1.0 x=2.5 x=1.4
A=-73.9 A=-4.9 A=-38 A=-11.4 A=-10.2 A=-30.8
x=0.8 x=0.8
A=24.6 A=74.7
x=0.9 x=0.8
A=4.2
x=0.8 x=0.7 x=1.1
A=34.7 A=-1.2 x=0.8
x=1.2
A=-18.1
x=1.2 x=1.0 x=0.8
A=-19.4 A=-32.4
x=0.8
x=0.6
A=-36.9
x=0.7
x=1.0
x=1.1
A=5.2 A=-25.5 A=-43
x=1.1
A=79.1
x=1.1
x=1.1
x=1.0
A=-1.3 A=-20
x=1.6
x=1.1
A=53.2
x=1.1
A=38.2
Miguel Vidal
miguel@frikearq.com
Miguel Vidal
miguel@frikearq.com
Innovative education programme
The goal of the Innovative education programme Think Architecture with parametric models: cross
curricular space was to provide students with a solid theoretical and practical basis to ellaborate
designs under the parametric paradigm in an interdisciplinary design studio scenario.
The main focus of this newly born course was the defnition of mathematic models (geometric,
logic, statistic, computational ...), that can be modifed and optimized in real-time, to relate with
environmental and thermodynamic parameters and values of the design. That is the reason why
we had several collaborating assisting professors from other departments, both Mathematics and
Physics, universities and practices, who contributed providing technical support and occasional talks
on specifc topics.
I acted both as an assistant in the development of the students designs and as technical support
with digital tools. I also was responsible for some digital tools introductory lessons. We mostly
used Grasshopper, the graphic algorithmic editor for Rhinoceros, for its simplicity but scripting,
Processing and Arduino as well.
Again, the course was not merely aimed to teach diverse digital techniques, although valuable for
I was awarded a research scholarship to collaborate in the start-up and teaching in a
new undergraduate departmental elective course in Madrid School of Architectures
Department of Design in 2010. It aimed to include parametric design techniques in
Architecture Design practice. This course was the frst to bring together three different
School departments: the Department of Design, the Department of Applied Mathematics
and the Department of Physics and Building Systems. As a result of this, two new
courses on the same topic were included in the Department of Design postgraduate
programme Master in Advanced Architecture Design in Madrid School of Architecture.
Several screen captures of the courses website with some undergraduate students designs.
The use of both environmental data and Mathematical functions for environmental
optimization was extensive during the course, like in the undergraduate students, Roco
Garca Pea and Pedro Torres, solar analysis design.
Miguel Vidal
miguel@frikearq.com
the students training, but to develop the students designs. Those techniques would only
be put at the service of the students ideas and intentions to enhance their capabilities and
creativity.
The course also had a collaborative structure, we organized the class in design team. We
also ellaborated a web repository so that all the students could share their fles and use
them in their designs. The course had a full registration, with 45 students.
I also taught as an invited lecturer in the Master course that came as a result of the graduate
subject in 2010-2011 academic year.
http://arquitecturaparametrica.dpa-etsam.com/20092010/
http://innovacioneducativa.upm.es/proyectosIE/informacion?anyo=2010-2011&id=134
End of course design of the team composed by the undergraduated students Emilio Ortiz, Iria Gmez
and Luca Bente.
End of course design by Gerardo Marcos, MArch student, who made a research on the relation between
speed, light and Architecture and ellaborated a continuos spacial structure from boundary conditions.
End of course design by the MArch student Ricardo Montoro Coso, who carried a research on organic skins and their response to
environmental parameters, mainly growth conditions due to solar incidence.
* Next, I show the pages or slides of each lecture exactly as they were given. Therefore, the text in not translated.
Lectures *
Miguel Vidal
miguel@frikearq.com
Parametric Architecture, San Pablo-CEU
University
In this conference, we gave a brief historic introduction to generative design in Architecture,
from Christopher Wrens urban design for London after its fre in 1666 and the 51 churches
project. We tried to link some historic designs and thinking with new design methodologies,
associating them with our own classes, the projects we had collaborated and our own
designs, which are included in the images on the left. We spoke not only about parametric
design techniques but environmental issues, researches on design with sensors, real-time
data, artifcial vision and digital fabrication.
As for the other participants, Pablo Delgado showed his teaching work at the Parametric
Studio; Vicente Soler, his collaboration in AMID.Cero9s competitions; and, fnally, Roberto
Molinos, the refurbishment project of La Laguna Cathedral (Tenerife), his research on
stadiums grandstands geometric defnition and his academic experience in Algomad.
Among the public, there were students from cross curricular design studio, coordinated
by Rubn Picado and Mara Jos de Blas, several other teachers from the university, who
showed their interest in the topics explained and we had some friends and students visit.
In the end, the audience could ask their own questions and, eventually, there was an
interesting debate on parametric design techniques with past and present Architecture.
Conferences on Parametric Design in Architecture at San Pablo CEU University
School of Architecture Parametric Studio (Taller Paramtrico) in November 4th. The
session was organised by Pablo Delgado, CEU University, with Vicente Soler,
collaborator at AMID.Cero9, Roberto Molinos, IE University and Modelical, and
Guillermo Ramrez and myself, from Frikearq.
Guillermo Ramrez
Miguel Vidal
www.frikearq.com
Universidad San Pablo CEU
4 de febrero de 2011
51 churches, 1669. Christopher Wren.
algoritmo
datos
instrucciones que relacionan los
elementos del diseo
entorno
Monumento del holocausto, Berln. Peter Eisenman.
Estructura del Instituto Tecnolgico, Kanagawa. Junya Ishigami.
In the air
Proyecto de visualizacin de la contaminacin atmosfrica de la ciudad de Madrid , desarrollado en
VISUALIZAR08 en Medialab Prado. Coordinadora: Nerea Calvillo.
Opera body
Instalacin experimental de representacin del espacio a partir de ondas sonoras. Conceptualizacin y
oordinacin: Carmen Mazarira. Desarrollo de software: Enrique Esteban y Jorge Cano
algoritmo
resultado
datos
instrucciones que relacionan los
elementos del diseo
conjunto de resltados
entorno
Estructura de la Mediateca de Sendai. Toyo Ito.
oportunidades
Cmo (NO) hacer un electrocardiofrecuencmetro casero
Plan para la reconstruccin de Londres, 1666. Christopher Wren.
datos
entorno
Algunos ejercicios de nuestros cursos. Intentamos transmitir esta manera de trabajar en los
proyectos tomando ejemplos de proyectos reales.
Cubierta del mercado de Santa Caterina, Barcelona. EMBT.
gestionar complejidad de informacin
Cmo (NO) hacer un electrocardiofrecuencmetro casero
Conclusiones a partir de visualizacin de datos
Condiciones de verano
Condiciones de invierno
diseo de procesos y no de un resultado
gestionar complejidad de informacin
Simulacin de incidencia elica Visualizacin de informacin del entorno
Conclusiones a partir de visualizacin de datos
Condiciones de verano
Condiciones de invierno
Modelado de corrientes de aire
Adaptacin a incidencia de viento
frikearq.com
Gracias!
adaptabilidad del resultado al entorno
diseo de procesos y no de un resultado
gestionar complejidad de informacin
Collaborations
Miguel Vidal
miguel@frikearq.com
Opera Body
Opera Body is an exploratory visualization project on the infuence of physical bodies in
space through sound perception. The project was coordinated by Carmen Mazaira, March
Architect, Ph.D. researcher and professor, and developed with the technical collaboration of
Enrique Esteban, of Monster Electronics S.L., who was in charge of the audio analysis tool,
and Jorge Cano, digital artist, responsible for coding the visualization tool.
The installation consist of a software with a visualization tool and real-time video and audio
analysis. That software is connected to a set of sound and image capturing devices that
monitor the space occupation. We used two sound channels with four microphones: two,
below a wooden foor, for footsteps sensing and other two for environmental sound.
The visualization is based on the understanding of sound space as a sort of constantly
changing voice box and in continous reconfguration due to the interaction between the built
environment and the people occupying that space.
Those concepts are translated to the visualization as a point cloud with density, dispersion
and growing properties, that vary constantly according to the change of the room sound
parameters. This point cloud will generate patterns that would keep trace of the intallation
lifetime, adding value not the built boundaries but the sensorial relation between the people
and their actions and the constantly mutable space.
An experimental installation on spatial visualization on the relation between
body and sound experience, installed at the Contemporary Art Museum of
Santiago de Compostela (CGAC) in 2010.
Some application screen shots.
Movement tracking test at the Galician Centre of Contemporary Art (CGAC).
Captura de software de visin artifcial.
Planos de la instalacin.
Capturas de aplicacin de anlisis de audio.
Miguel Vidal
miguel@frikearq.com
Espacio Disponible
Paneles del concurso.
Imgenes del proceso de obra.
Collaboration in the working team for the restoration of the public space of the
School of Architecture of Madrid, directed by Ecosistema Urbano as a result of
an Honourable Mention in the competition organized by this School in 2007.
Madrid School of Architecture patio refurbishment design was developed by a group of
students who made up a working team from those students awarded or mentioned in a
competition organized by the Head of the School in June 2007. That team was coordinated
by Ecosistema Urbano, whose offce members were part of the competitions jury.
The competitions conditions were to make a proposal that should take into account not only
spatial and programmatic conditions, but also economical as well. Any design budget should
be below 42.000.
3.6 3.6 3.6 3.6 3.6 3.6 3.6 3.6 3.6
4.06
4.53
5.05
5.12
4.93
6.44
5.55
4.67
4.98
5.95
3.44 1.53 5.16 4.09 4.89
prunus
chopo
chopo
cerezos
chopo
chopo
chopo
chopo
chopo
chopo
chopo
chopo
chopo
chopo
chopo
prunus
pltano
pltano
pltano
prunus
chopo
14 m.
10 m.
st
sl
seccin transversal e: 1/400 st seccin transversal_detalle
planta general
e: 1/100
e: 1/200
pltano ciruelo
silvestre
chopo
peral
cerezo
std
seccin longitudinal_detalle sld
seccin longitudinal
mapa de rboles mapa terico de sombras
sl
0 10 20 30
Para la cubricin del espacio entre el pabelln nuevo y el lmite
de propiedad de la Escuela, se ha propuesto un sistema de
cables metlicos sujetos al murete de permetro de la parcela y al
forjado de primer piso del pabelln nuevo que soporta una malla
de gallinero en la que crecer una planta trepadora, que dar
sombra y har ms habitable este lugar. El ritmo del cableado es
el resultado de la separacin promedio entre los rboles de ese
tramo de borde, con una rectificacin para que se ajuste a la
longitud de la cara del pabelln a la que corresponde.
En la cara sur del pabelln nuevo, que da a la librera, se ha
planteado una prgola en voladizo para dar sombra a los libros
en lugar de cubrir todo el espacio entre los dos pabellones.
cubierta vegetal [espacio disponible]
std
sld
elisadelosreyesgarcalpez
seismilcuervos@hotmail.com
madurantvidal
maeweb@hotmail.com
blancavillarmateo
blanca_villar@hotmail.com
miguel vidal calvet
michividal@gmail.com
ursicinoendamannsman
endaman@hotmail.com
enriquefernndezdurn
githoniel@hotmail.com
carlosruizgimnez
carlostetum@hotmail.com
guadalupehernndezlorenzo
guadahl82@hotmail.com
inshigueraslara
higueritas222@hotmail.com
jessgmez
donjgomez@hotmail.com
Autores:
Proy n: Fecha:
Firma:
Por: plano n
E.D.1
Ttulo del plano:
Miguel
Vidal
Calvet
Cubricin vegetal
pabelln nuevo
dic. 2007 varias
PROYECTO BSICO Y EJECUTIVO
DEL ESPACIO ENTRE
PABELLONES DE LA ETSAM
Promotor:
Universidad Politcnica de Madrid
Orientacin:
"espacio_disponible"
Av. Juan de Herrera s/n
Oficina Tcnica de la ETSAM
Colaboracin:
Escala: Escala:
00001
ECOSISTEMA URBANO
info@ecosistemaurbano.com
Arquitectos:
fase
E.D.10
Workshops
Miguel Vidal
miguel@frikearq.com
In the air
Digital visualization tool screen capture of various Madrids air conditions.
First version of an atmospheric pollution visualization tool and
physical prototype. It was developed by an interdisciplinary team,
coordinated by Nerea Calvillo and Victor Via, during Visualizar08:
Database city, an international workshop that took place at Medialab
Prado Madrid in 2008. This tool was later used to measure several
cities pollution conditions, such as Santiago de Chile or Budapest in
different workshops.
Several moments of team work at Medialab Prado Madrid. Workshop poster.
In the Air is a visualization project which aims to make visible the microscopic and invisible
agents of Madrids air (gases, particles, pollen, diseases, etc), to see how they perform, react
and interact with the rest of the city. The project constists of two prototypes:
- A web-based visualization tool (http://intheair.es/app/index.html), a dynamic model
which builds up the space the components generate, where through data crossing behavior
patterns emerge. This software takes real-time data from the citys weather stations, which
are uploaded to the councils website, and locate and represent those data with a mesh. The
coulours and height of the mesh are related to the airs pollution damaging degree.
- A physical insallation for facades, the results of these data feed a physical prototype of
what we have called a diffuse faade, a massive indicator of the airs components through
a changing cloud, blurring architecture with the atmosphere it has invaded and mediating
the activity of the participants it envelops.
Physical prototypes development process and fnal tests.
Smart Geometry 2011: Authored sensing
Smart Geometry : Building the invisible workshop, that took place in Copenhagen between
28th and 2nd April, and brought together a global community of innovators and pioneers in
the felds of architecture, design, and engineering for discussion and collaborative research
and experimentation. It hold a four-day intensive workshop with two fnal days with a public
conference, a workshop exhibition and a public symposium and reception
The Authored Sensing cluster hypothesized that data-driven design must be supported by
designed data. The cluster aims to inject intent and design into the typically passive process
of data collection... The cluster promotes the production of designer-authored environmental
datastreams: highly contingent, intrinsically idiosyncratic, free for public use that feed
directly, intelligently and appropriately into new designs.
From this open starting point, the proposal, decided with the contributions of all the
members of the team, was to design environmental data, in this case, related to an extensive
occupation space, such as a working place. The project consisted in a physical prototype: a
self-fabricated and trasportable sensorizing kit and a visualization software.
Developement of monitoring and visualization device that would
capture and transmit the feelings associated to a work place. Under
Smart Geometry 2011, in Copenhagen, coordinated by Kyle Steinfeld
(University of California, Berkeley), Kat Park (MIT - SOM) and Nick
Novelli (CASE - Rensselaer Polytechnic Institute). Visualization screenshots. The tool was built in the Processing environment
Visualization presentations.
Trabajo con sensores, en entorno Arduino, y proceso de construccin del prototipo.
School projects
Miguel Vidal
miguel@frikearq.com
Final Project
I based my fnal project on several strategies, all of them focused on tackling the current
scarcity and crisis scenario. Those strategies included:
- a productive landscape
- an urbanistic planning of innovation infraestructures
- a social activation and cooperation agenda
The solution I proposed focused on environmental and energetic concerns and tried to boost
this impoverished area of the city by linking existing infrastructures and adding some new
ones locally. The designs building proposal allows subsequent growth and adaptability and
the designs environmental and energetic analysis, on which I based my design, was carried
exhaustively and rigorously.
In my Final Degree Project, I chose my own brief, that involved a regeneration
of a large deteriorated area next to a highway in the outskirts of Madrid.
With this large scale intervention, I tried to link big public green areas with
social infrastructures and housing developments based on energetic and
environmental strategies.
Miguel Vidal
miguel@frikearq.com
Miguel Vidal
miguel@frikearq.com
Miguel Vidal
miguel@frikearq.com
Miguel Vidal
miguel@frikearq.com
Miguel Vidal
miguel@frikearq.com
Miguel Vidal
miguel@frikearq.com
Miguel Vidal
miguel@frikearq.com
Miguel Vidal
miguel@frikearq.com
i-MAD
Miguel Vidal
miguel@frikearq.com
Miguel Vidal
miguel@frikearq.com
Appendix 1
Academic documents
Appendix 2
Handbooks
frikearq
diseo generativo en arquitectura
miguel vidal calvet
guillermo ramrez camarero
www.frikearq.com
2011 www.frikearq.com
Si desea ms informacin o tiene cualquier consulta o sugerencia, no
dude en contactarnos en:
cursos@frikearq.com
qu ofrecemos en frikearq?
En la formacin de diseo generativo existen, fundamentalmente, dos paradigmas
- paradigma asociativo o paramtrico
- paradigma discriminativo u optimizacin
Siguiendo esta clasifcacin, ofrecemos los siguientes niveles de formacin:
Curso de Grasshopper Nivel 1: modelado paramtrico
Se trata de un curso de iniciacin a Grasshopper. Para seguirlo no se requieren
conocimientos previos especfcos. El objetivo de este curso es tomar contacto con
Grasshopper y comenzar a fabricar y editar geometra con l. En este curso se aprende,
entre otras cosas a: asociar formulaciones matemticas a modelos paramtricos, a panelizar
y triangular superfcies, parametrizar estructuras sencillas y a elaborar algoritmos simples.
Curso de Grasshopper Nivel 2: modelado discriminativo y anlisis ambiental
Los objetivos de este curso son: conocer cmo fabricar y editar geometra de un modo
avanzado, trabajar con Grasshopper como herramienta de visualizacin de informacin,
gestionar listas de datos, analizar modelos y optimizar de soluciones con algoritmos evolutivos.
Curso de scripting en C# con Grasshopper: modelado iterativo e interaccin
En este curso se aprende a elaborar modelados iterativos, capaces de heredar e
instanciar propiedades y comportamientos. Para ello se introduce al alumno en las nociones
bsicas de programacin aplicadas al diseo generativo con C# y RhinoCommon en
Grasshopper. Adems, se tratan otros entornos de programacin tiles para el diseador como
son Processing y Arduino y cmo conectarlos con Grasshopper.
La estructura bsica de cada curso consta de una duracin, en formato intensivo de 18 a
20 horas, sin embargo, el temario de cada uno de ellos se puede adaptar a diferentes formatos
a peticin. Todos los cursos estn impartidos por dos Authorized Rhino Trainers con material
propio, preparado exlusivamente para estos cursos.
Algunas ejercicios de los cursos: anlisis solar de superfcies, modelado con polgonos Voronoi, estructura de la Mediateca de Sendai.
qu es y qu nos ofrece el diseo generativo?
por qu Grasshopper?
quines somos y cul es nuestra experiencia?
Consideramos que Grasshopper es el entorno ms apropiado para comenzar su
formacin en diseo generativo.
Su principal virtud es que posee una interfaz completamente visual, lo que nos
permite disear algoritmos que operan con datos y geometra de manera simple y muy
intuitiva, sin la necesidad de aprender ningn lenguaje de programacin. Al ser un plug-in
para Rhinoceros, Grasshopper incorpora gran parte de sus comandos y funcionalidades y,
adems, utiliza Rhinoceros como entorno de visualizacin, de manera que podemos ver en
tiempo real cmo afecta a nuestro modelo cualquier cambio que realicemos en Grasshopper.
Aadimos a esto que, Grasshopper es, actualmente, un software gratuito de libre
descarga y que cuenta con una extensa y activa comunidad de usuarios y desarrolladores,
que van adiendo nuevas funcionalidades frecuentemente.
De ah que Grasshopper se haya convertido en la herramienta estndar de modelado
paramtrico en el diseo de Arquitectura.
Frikearq lo formamos Guillermo Ramrez y Miguel Vidal, ambos Authorized Rhino
Trainers. Tenemos una experiencia de ms de dos aos en la formacin de diseo generativo
con Grasshopper, es decir, prcticamente desde los inicios del programa. Entre otras cosas:
- hemos impartido ms de 20 cursos de Grasshopper entre cursos de nivel 1, nivel 2 y
de scripting, entre los que se encuentra el primer curso de Grasshopper de Madrid.
- hemos tenido ms de 200 alumnos entre estudiantes de grado y posgrado, docentes y
profesionales del mundo de la Arquitectura, de la Ingeniera y del Diseo Industrial.
- publicamos nuestro propio manual de ejercicios de Grasshopper (consultar nuestra
web), elaborado exclusivamente para nuestros cursos y que adems, fue el primer manual
de Grasshopper en castellano.
- somos formadores habituales de Grasshopper de los alumnos de la Escuela Tcnica
Superior de Arquitectura de Madrid.
- colaboramos activamente en el lanzamiento de una nueva asignatura del Departamento
de Proyectos Arquitectnicos relacionada con este tema: Proyectos de Arquitectura
Paramtrica, a travs de un programa de Innovacin Educativa de la Universidad Politcnica
de Madrid.
- somos colaboradores de diseo paramtrico del Grupo de Investigacin de Vivienda
Colectiva (GIVCO) de la Universidad Politcnica de Madrid.
- hemos colaborado en el Mster Universitario de Tcnicas Avanzadas de Proyectos
Arquitectnicos de la Universidad Europea de Madrid.
- hemos sido conferenciantes invitados en la Universidad San Pablo CEU, por el Taller
Paramtrico CEU y el Taller Transversal de dicha universidad.
- somos los formadores de Grasshopper de Algomad: Seminario sobre Mtodos
generativos en Arquitectura y Diseo, organizado por el IE University Madrid.
Adems, consideramos fundamental estar en un proceso de formacin continua, de
ah que participemos habitualmente y talleres y cursos en todo el mundo. Algunos de ellos
son: Smart Geometry 2011 en Copenhaguen, eCAADe: Future cities en ETH Zrich,
VISUALIZAR08: Database city en Medialab Prado, Talleres de programacin creativa
El diseo generativo en Arquitectura es la disciplina que elabora total o parcialmente
diseos de Arquitectura mediante el uso de sistemas defnidos por algoritmos, ya sean
traducidos en software de computadoras o procesos matemticos, mecnicos o aleatorios.
Algunas de las cualidades que nos aporta del uso de estas tcnicas en el diseo de
Arquitectura son:
- rapidez en la modifcacin de los proyectos: al elaborar el diseo de Arquitectura
como un sistema interrelacionado, el cambio de una variable afecta a todo el modelo.
- gestin de complejidad de informacin a gran velocidad: la defnicin algortmica
de nuestros diseos, y la ayuda en el clculo de las computadoras, hacen que el diseo pueda
verse afectado por una ingente cantidad de datos de diversas fuentes.
- generacin y comprobracin de multitud de resultados: un mismo algoritmo tiene la
capacidad de generar mltiples resultados diversos, en funcin de la informacin de entrada.
- anlisis y evaluacin de la validez de esos resultados: gracias a la interoperabilidad
con otros software de anlisis (estructural, energtico, ambiental ...) podemos establecer
parmetros que validen o no nuestros diseos.
- optimizacin de diseos: mediante la aplicacin de algoritmos de evaluacin y
seleccin aplicados al proceso de generacin del diseo, como algoritmos evolutivos, podemos
introducir el sistema de generacinde diseo en un proceso de bsqueda de una solucin
optimizada para unos factores concretos.
Curso en la Escuela de Arquitectura de Madrid. Curso en Las Palmas de Gran Canaria.
Smart Geometry 2011: Building de invisible,
Copenhaguen, grupo Authored Sensing.
Taller de programacin y electrnica creativa,
Medialab Prado, Madrid.
Modelado segn anlisis de incidencia elica con Grasshopper y Ecotect.
introduccin al
diseo generativo
con grasshopper
miguel vidal calvet
guillermo ramrez camarero
www.frikearq.com
diseo generativo
Christopher Wren, plan de reconstruccin de Londres tras el incendio de 1666.
Christopher Wren, tipos normalizado de edifcacin del plan.
Christopher Wren, 51 iglesias del plan de reconstruccin de Londres.
procesos
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
idea
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
idea modelo
matemtico
(leyes de relacin
entre objetos)
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
idea modelo
matemtico
implementacin
(cdigo fuente)
(leyes de relacin
entre objetos)
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
idea modelo
matemtico
implementacin
informacin
(cdigo fuente)
(leyes de relacin
entre objetos)
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
idea modelo
matemtico
implementacin
resultados
informacin
(cdigo fuente)
(leyes de relacin
entre objetos)
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
2 paradigmas
- diseo paramtrico
- diseo discriminativo
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
proceso de
diseo paramtrico
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
datos
proceso de
diseo paramtrico
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
algoritmo
datos datos
proceso de
diseo paramtrico
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
algoritmo
resultados
datos datos
proceso de
diseo paramtrico
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
proceso de
diseo discriminativo
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
algoritmo
resultados
datos datos
proceso de
diseo discriminativo
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
algoritmo
resultados
datos datos
evaluacin
proceso de
diseo discriminativo
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
algoritmo
algoritmo de
seleccin
resultados
datos datos
evaluacin
proceso de
diseo discriminativo
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
algoritmo
algoritmo de
seleccin
resultados
resultados
datos datos
evaluacin
s
proceso de
diseo discriminativo
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
algoritmo
algoritmo de
seleccin
resultados
resultados
datos datos
evaluacin
s
no
proceso de
diseo discriminativo
aplicaciones prcticas
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
diseo del proceso y no de un resultado concreto. 01
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
diseo del proceso y no de un resultado concreto.
posibilidad de gestionar complejidad de datos.
01
02
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
diseo del proceso y no de un resultado concreto.
posibilidad de gestionar complejidad de datos.
generacin de soluciones adaptadas a condiciones de contorno.
01
02
03
grasshopper
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
qu es Grasshopper?
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
entorno de programacin visual.
intrprete.
plug-in para Rhinoceros. 01
02
03
qu es Grasshopper?
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
entorno de programacin visual.
intrprete.
plug-in para Rhinoceros. 01
02
03
qu es Grasshopper?
algunas recomendaciones en el uso de Grasshopper
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
entorno de programacin visual.
esquema de fujo de datos antes de empezar.
intrprete.
sacar paneles informativos.
hacer comentarios de lo que se vaya haciendo.
personalizar nombres de componentes y poder hacer bsquedas.
plug-in para Rhinoceros.
higiene visual.
01
01
02
02
03
03
04
05
qu es Grasshopper?
algunas recomendaciones en el uso de Grasshopper
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
El objetivo de este ejercicio es introducirse en el uso de Grasshopper como
herramienta de diseo generativo, pasando por las utilidades fundamentales
del programa. Utilizaremos colecciones y funciones numricas para dibujar
una superfcie que, a continuacin, panelizaremos. Y, una vez panelizada, la
analizaremos con un vector solar bsico para poder optimizarla.
ejercicio prctico
00. objetivo del ejercicio
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
01. trabajar con colecciones numricas
A. Dibujar una matriz de puntos con dominios y un rangos.
B. Afectar las coordenadas Z de esa matriz de puntos por una funcin.
C. Dibujar la superfcie a partir de esos puntos.
A. Dibujar una matriz de puntos con dominios y rangos.
Un dominio es un tramo continuo de la recta real, es decir, representa la colec-
cin de todos los nmeros entre esos dos valores. Dominio (domain) es un com-
ponente cuya entrada son dos valores reales A y B y cuya salida es un intervalo
continuo de la recta real y se escribe A To B.
Rango (range) se utiliza para generar valores diescretos a partir de un dominio
continuo. Es un componente cuyas entradas son un dominio y un valor N, y cuya
salida son valores numricos. Es decir, toma un dominio continuo D y lo divide N
veces, generando una coleccin de N+1 valores discretos.
A
N divisiones
N+1 valores
c d e B
A B
Conectamos la salida del rango a las entradas X e Y de PointXYZ y dibujar una
hilera de puntos que tienen la coordenada X igual a la Y, puesto que las dos
listas de nmeros provienen del mismo rango:
(1,1) (2,2) (3,3) (4,4) (5,5) ....
Ahora, si nuestra intencin es hacer una matriz de puntos, debemos cruzar
estas coordenadas. Para ello, hacemos clic con el botn 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 corre-
sponder todas las coordenadas Y (1, 3, 5, 7..) produciendo una lista de pares de
coordenadas de la siguiente manera:
(1,1) (1,2) (1,3) (1,4) (1,5) ...
(2,1) (2,2) (2,3) (2,4) (2,5) ...
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
B. Afectar las coordenadas Z de la matriz de puntos por una funcn.
C. Dibujar la superfcie a partir de esos puntos
Descomponemos los puntos de la malla cuadrada base con Decompose Point
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 funcin de
n variables (f(n)) en la que introducimos, haciendo click con el botn derecho en
la banda central del componente en edit expression, la ecuacin del parabolide
hiperblico. El nmero de variables se defne, tambin haciendo click con el
botn derecho en la parte central del componente y luego yendo a input manager
Tomaremos, por ejemplo, una suma de seno y coseno con la siguiente forma:
(sin(b+(t*a))+cos(c+(t*d)))*f
En este caso, la variable t representarn todos los momentos por los que
queremos que pase nuestra superfcie, as que le pasaremos otro dominio, de
tal manera, que podemos controlar la altura mxima y mnima de la superfcie,
y un rango para fjar el nmero de puntos, que tienen que ser tantos como
puntos tengamos en la base. Puesto que el rango devuelve N+1 valores,
pasaremos la cantidad de punto (list length) menos uno.
Dibujaremos la superfcie a partir de los puntos anteriores con surface grid o
surface from point. La entrada P ser la ltima lista de puntos XYZ y U la cantidad
de puntos en cualquiera de las direcciones de la superfcie (esta superfce slo
funciona con plantas cuadradas) , que ser la N del rango de la planta + 1.
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
02. deformacin de geometra: panelizacin de superfcies
A. Dibujar la geometra que se quiere utilizar para panelizar la superfcie.
B. Dividir el dominio

bidimensional asociado a la superfcie.
C. Replicar y deformar la geometra original sobre la superfcie.
B. Dividir el dominio

bidimensional asociado a la superfcie.
C. Replicar y deformar la geometra original sobre la superfcie.
A. Dibujar la geometra que se quiere utilizar para panelizar la superfcie.
Dibujamos, en Rhino o Grasshopper, cualquier geometra para replicarla por las
subdivisiones de la superfcie original, en este caso, una superfcie plana (Plane
Surface). Dicha geometra se replicar mapeando una caja de referencia sobre
dichas subdivisiones. Podemos tomar, tambin, cualquier caja de referencia. En
este caso utilizamos el componente Bounding Box para encerrar la geometra
que replicar en su volumen capaz alineado en el plano universal XY.
Necesitamos dividir el dominio bidimensional de la superfcie con divide domain
2
.
Las entradas U y V del divide domain
2
se referen a las coordenadas locales
propias de la superfcie.
Para panelizar la superfcie utilizamos el componente Surface Morph, que
toma una geometra contenida en una caja de referencia y la replica sobre una
superfcie deformndola de acuerdo a las coordenadas locales de la superfcie.
U y V las tomaremos de la divisin del dominio bidimensional y W corresponder
a la altura de la caja de destino sobre la que se mapear la caja de referencia.
En caso de utilizar ms de una geometra para replicar, no debemos olvidarnos
de activar la referencia cruzada para todas las geometras cross reference.
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
03. anlisis solar de la superfcie y visualizacin de resultados
Con el componente Point Polar dibujamos un punto que gira en torno al Origen.
Uniendo con Vector Two Points el Origen y el punto polar, obtenemos la direccin
de nuestro sencillo vector solar, con vector display podemos visualizarlo.
Aqu estamos utilizando un vector solar muy bsico, puesto que el objetivo del
ejercicio es puramente didctico. Dicho vector prodremos sustituirlo simplemente
subreescribiendo la entrada del componente por otro ms preciso, en caso de
que necesitemos un anlisis solar riguroso.
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 superfcie 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.
1. Defnir un vector en coordenadas polares.
2. Dibujar y dividir una superfcie.
3. Comparar vectores y asignar color.
4. Visualizar.
1. Defnir un vector en coordenadas polares.
2. Dibujar y dividir la superfcie.
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
defnimos el espacio de color que vamos a hacer corresponder con los valores
de ngulo, este espacio queda determinado entre los lmites L0 y L1. Un ngulo
de 0 radianes ser rojo, uno de Pi ser rojo tambin, y, en Pi/2, cuando los los
vectores sean perpendiculares, la luz ser rasante y le asignaremos el color
verde.
3. Comparar vectores y asignar color.
El ltimo componente, Preview, sirve para colorear: le asigna color a geometra.
Nuestra informacin de color sale del Gradient, y la geometra a colorear son
todos los puntos que salen del fatten de la salida P de Surface Divide.
4. Visualizar.
manual de ejercicios
de grasshopper nivel I
miguel vidal calvet
guillermo ramrez camarero
www.frikearq.com
edicin 2011
ndice
aplicado al diseo paramtrico de Arquitectura
manual de grasshopper nivel I
manual de grasshopper nivel I
aplicado al diseo de arquitectura
por miguel vidal calvet
y guillermo ramrez camarero
edicin Noviembre 2010
grasshopper v0.8.002
qu es y cmo funciona grasshopper?
tipos de datos y colecciones numricas
indexacin de datos, programacin visual y componentes lgicos
creacin y anlisis de geometra
anexo
00 Introduccin
E01 Interfaz grfca
E02 Objetos. Tipos y modos de visualizacin
E03 Tipos de datos y modos de entrada. Introduccin a listas.

E04 Introduccin
E05 Interfaz grfca
E06 Objetos. Tipos y modos de visualizacin
E07 Tios de datos y modos de entrada. Introduccin a listas.

E08 Introduccin
E09 Interfaz grfca
E10 Objetos. Tipos y modos de visualizacin
E11 Tios de datos y modos de entrada. Introduccin a listas.

E12 Introduccin
E13 Interfaz grfca
E14 Objetos. Tipos y modos de visualizacin
E15 Tios de datos y modos de entrada. Introduccin a listas.

Enlaces de inters
conceptos bsicos
A
manual de grasshopper nivel I
Miguel Vidal
Guillermo Ramrez
p0126
introduccin
00. qu es grasshopper?
01. cmo se trabaja en grasshopper?
Grasshopper es un entorno de programacin visual dentro de Rhino. Su principal
virtud es que nos permite disear algoritmos que operan con datos y geometra de
manera intuitiva sin la necesidad de aprender ningn lenguaje de programacin.
Al funcionar dentro de Rhino, Grasshopper incorpora gran parte de sus coman-
dos y funcionalidades, adems, utiliza Rhino como entorno de visualizacin, de
manera que podemos ver en tiempo real cmo afecta a nuestro modelo cualquier
cambio que realicemos en Grasshopper.
Grasshopper es una herramienta de diseo de algoritmos. Esto quiere decir que
es capaz de encadenar una sucesin de comandos e instrucciones con entradas
y salidas que son geometra y datos para producir un resultado. Esta manera de
operar aporta gran fexibilidad de cara a manipular grandes cantidades de datos
o datos variables en el espacio y el tiempo, pero condiciona enormemente nues-
tra manera de trabajar.
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 matemtico en primer lugar, y, en segundo lugar, a un lenguaje
que grasshopper sea capaz de entender.
Por este motivo, mientras que grasshopper es una excelente herramienta para
llevar a cabo proyectos que operen con gran cantidad de informacin, geometra,
o mltiples variables y condiciones defnidas con precision y rigor, grasshopper no
es una buena herramienta para manejar procesos intuitivos o difusos, que tienen
difcultad para ser traducidos a un lenguaje lgico.
Idea
modelo matemtico
defnicin en grasshopper
00
02. Recomendaciones de uso de Grasshopper antes de empezar
- Lo primero, guardar el archivo :-) para que se hagan archivos de autoguardado.
- Mantener un orden e higiene visual.
- Elaborar un esquema de fujo 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 defniciones.
- Cambiar los nombres de parmetros y componentes a nuestro gusto para poder
orientarnos mejor y hacer bsquedas rpidamente.
colecciones numricas y tipos de datos
B
manual de grasshopper nivel I
Miguel Vidal
Guillermo Ramrez
p0128
dominios, rangos y series
00. objetivo
01. componentes clave
02. procedimiento
El objetivo de este ejercicio es familiarizarnos con la creacin de listas de
nmeros en Grasshopper. Para ello utilizaremos los componentes dominio, ran-
go y serie para generar una coleccin de nmeros que dibujarn una hilera de
puntos primero y luego una matriz de puntos.
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 coleccin de todos los nmeros entre esos dos valores.
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 coleccin
de N+1 valores discretos.
Serie (series) es un componente que genera una lista de valores ordenados a
partir de un valor inicial A, un incremento o tamao de paso N y una cantidad
de valores C.
Para dibujar una hilera de puntos en la direccin del eje X utilizando los concep-
tos anteriores, tendremos que seguir los pasos siguientes:

1. Sacamos un componente Series y conectamos unos sliders de nmero
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 compo-
nente Point. El signifcado 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 especifcado en C.
3. La hilera de puntos ya est terminada. Si ahora cambiamos los valores de
los sliders podemos observar cmo afectan los cambios a la cantidad y la
separacin entre puntos.
4. Pero.. y si enchufamos una lista de nmeros a la entrada Y de Point,
qu ocurre? cmo podemos hacer para que en vez de una hilera inclinada
Grasshopper nos dibuje una matriz de puntos?
domain, range, series
A. Defnicin: dominio.
B. Defnicin: rango.
C. Defnicin: serie.
D. Hilera de puntos.
E. Matriz de puntos.
A. Defnicin: dominio.
B. Defnicn: rango.
C. Defnicin: serie.
D. Hilera de puntos
E04
A
A
A
N divisiones
incremento N
N+1 valores
C valores
c
A+N
d
A+2N
e
A+3N
B
B
B
manual de grasshopper nivel I
Miguel Vidal
Guillermo Ramrez
p0129
dominios, rangos y series
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 nmeros
provienen de la misma serie:
(1,1) (2,2) (3,3) (4,4) (5,5) ....
Ahora, si nuestra intencin es hacer una matriz de puntos, debemos cruzar
estas coordenadas.
Intenta hacer una matriz de puntos tridimensional.
Intenta hacer una matriz de puntos como la anterior, pero que en el que cada
punto es elevado 1 unidad en la direccin Z con respecto al anterior.
1. Empleando lo aprendido en la leccin de correspondencia de datos, hac-
emos clic con el botn 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 coordena-
das 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 dems.
E. Matriz de puntos.
ejercicio propuesto
ejercicio propuesto
E04
manual de grasshopper nivel I
Miguel Vidal
Guillermo Ramrez
p0130
parbola y espiral
00. objetivo
01. componentes clave
02. procedimiento
El objetivo de este ejercicio es familiarizarnos con el manejo de funciones. Us-
aremos una serie para generar una lista de valores que sern afectados por una
funcin. Visualizaremos los efectos de la funcin asignando los valores a coorde-
nadas de puntos para dibujar una parbola primero, y luego una espiral.
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.
De momento slo hemos operado con las coordenadas X. Sacamos un compo-
nente funcin y lo conectamos a la salida de la serie, y la salida de la funcin 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
cuadrtica. El 0.1 es un coefciente reductor que impide que la funcin crezca
tan rpidamente que desaparezca de nuestra vista en Rhino.
Ahora aplicaremos tres funciones, una a cada coordenada. Aplicando una fun-
cin cos(x) a la X y una sin(x) a la Y conseguimos que los puntos describan un
crculo en planta.
Si conectamos lo valores generados en la serie directamente a la entrada Z de
punto, o a travs de una funcin x, los valores pasarn inalterados, dibujando
una espiral que asciende linealmente en Z.
Si en vez de x escribimos cualquier otra funcin para la coordenada Z, el as-
censo ser diferente: prueba con x^2, o Ln(x)

series, function, point
A. Serie. Hilera de puntos en X.
B. Parbola: aplicamos una funcin a las coordenadas Y.
C. Espiral: aplicamos funciones a X, Y y Z.
A. Serie. Hilera de puntos en X.
B. Parbola: aplicamos una funcin a las coordenadas Y.
C. Espiral: aplicamos funciones a X, Y y Z.
E05
manual de grasshopper nivel I
Miguel Vidal
Guillermo Ramrez
p0131
paraboloide hiperblico
01. objetivos
02. conceptos clave
03. procedimiento
- repasar la nocin de dominio matemtico
- emplear las funciones de n variables
- conocer cmo dibujar superfcies a partir de frmulas
- entender cmo se defne una superfcie a partir de puntos
Dibujamos una malla cuadrada de puntos con un dominio, al igual, que en el
ejercicio E01 - malla bidimensional de puntos.
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 funcin de n variables (f(n)) en
la que introducimos, haciendo click con el botn derecho en la banda central
del componente en edit expression, la ecuacin del parabolide hiperblico. El
nmero de variables se defne, tambin haciendo click con el botn derecho en
la parte central del componente y luego yendo a input manager.
domain, range, f(n), decompose points, surface from points
1. Dibujar una malla de puntos base
2. Dibujar los puntos del paraboloide a partir de la malla base con coordenadas
Z modifcadas por una funcin de varias variables
3. Dibujar el paraboloide hiperblico con una superfcie a partir de puntos
1. Dibujar una malla de puntos base
2. Dibujar los puntos del paraboloide a partir de los puntos base
E06
Dibujamos el paraboloide con una superfcie defnida 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 superfcie (esta
superfce slo funciona con plantas cuadradas) , que ser Nrango + 1.
3. Dibujar el paraboloide hiperblico con una superfcie a partir de puntos
manual de grasshopper nivel I
Miguel Vidal
Guillermo Ramrez
p0132
superfcie por puntos - Miralles
01. objetivos
02. conceptos clave
03. procedimiento
Dibujaremos una superfcie irregular cuya geometra viene dada por una funcin
de la cual podemos controlar determinados parmetros. Para ello deberemos
comprender el concepto de remapeo de nmeros. Utilizaremos una grfca para
modifcar en tiempo real una lista de valores de cotas que dar alturas diferentes
a cada punto de la superfcie.
Defnimos una malla de puntos idntica a la de E6 Paraboloide Hiperblico.
Tomamos un Domain y lo defnimos entre dos valores, p.ej. 0 y 1,5, que van
a representar la altura mnima y mxima que alcanzar nuestra superfcie.
Dividimos ese domain con un range que genera tantos valores como puntos
haya en nuestra malla, esto es, medimos con list length cuntos 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 modifcados por una funcin.
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.
Conectamos la salida de puntoXYZ a Surface Grid. La cantidad U de puntos de
la entrada es la N del rango + 1.
domain, list length, remap numbers, graph mapper, surface grid
1. Malla base de puntos.
2. Afectar la coordenada Z con una grfca.
3. Dibujar la superfcie.
1. Malla base de puntos.
2. Afectar la coordenada Z con una grfca.
3. Dibujar la superfcie.
E07
Banco Lungomare, fuente: www.escofet.com Mercado de Santa Caterina, fuente: www.wikipedia.org
gestin de listas y condicionales
C
manual de grasshopper nivel I
Miguel Vidal
Guillermo Ramrez
p0134
ordenar una lista
01. objetivos
02. conceptos clave
03. procedimiento
- comprender que una lista es una sucesin de elementos, en la que el orden y la
posicin de los mismos dentro de ella es relevante
Vamos a ordenar los puntos de divisin de una circunferencia segn 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 parmetro
de punto, haciendo click con el botn derecho y luego yendo a Set one Point.
Medimos la distancia entre la lista de puntos que salen de divide curve (A) y el
punto que hemos elegido previamente (B)
sort list, point list
A. Dibujar unos puntos (lista que vamos a ordenar)
B. Parmetro con el que ordenar la lista
C. Ordenar la lista
D. Visualizacin del resultado
A. Dibujar unos puntos (lista que vamos a ordenar)
B. Parmetro con el que ordenar la lista
E08
Ordenamos la lista de distancias con Sort List. En la entrada y salida K, devuelve
cualquier lista numrica 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 botn derecho en Input Manager ...
C. Ordenar la lista
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 lneas a puntos entre el punto interior y los de la
circunfrerencia con Dash Pattern .
D. Visualizacin del resultado
manual de grasshopper nivel I
Miguel Vidal
Guillermo Ramrez
p0135
triangulacin de una cercha
01. objetivos
02. conceptos clave
03. procedimiento
- repasar la nocin de lista como sucesin ordenada de elementos
- conocer cmo se desfasan listas segn ndices
Tomamos como curva base de la cercha una curva dibujada en Rhino y
almacenada en un parmetro de curva en Grasshopper mediante Set one
Curve, haciendo click con el botn derecho en el mismo.
Los puntos base de la cercha los obtenemos dividiendo la curva base mediante
Divide distance y los puntos de coronacin, tomando las coordenadas X e Y de
estos puntos (con point decompose) y la coordenada Z, un slider.
shift list
1. Curva base
2. Puntos para ejes
3. Ejes de la estructura
4. Dibujo de la estructura
1. Cordn inferior
2. Puntos para ejes
E09
- Ejes de los montantes: lneas entre puntos base y de coronacin.
- Diagonales: lneas entre puntos base y coronacin desfasados una posicin.
- Cordn inferior: lneas entre puntos base y ellos mismos desfasados una
posicin.
- Cordn superior: lneas entre puntos de coronacin y ellos mismos desfasado
una posicin.
Desfasamos tanto la lista de puntos base como la de coronacin con shift list.
3. Ejes de la estructura
Finalmente, dibujamos la estructura, con un pipe de todas los ejes, almacenados
en un parmetro de curva.
4. Dibujo de la estructura
manual de grasshopper nivel I
Miguel Vidal
Guillermo Ramrez
p0136
malla bidimensional de pilares
01. objetivos
02. conceptos clave
03. procedimiento
- introducirse en y comparar las nociones de colecciones numricas en
Grasshopper con series y dominios
- comprender el modo de correspondencia de datos entre listas en Grasshopper
Defnimos las dimensiones de la malla con sliders, que devuelven nmeros
dentro de un intervalo. Se pueden modifcar deslizando el puntero en la barrra.
En primer lugar, utilizaremos una serie y, en segundo lugar, un dominio y as
las podemos comparar. Una serie es una coleccin de C nmeros reales que
comienza en un nmero inicial S con un salto de N entre cada uno de ellos.
Un dominio es un tramo continuo de la recta real defnido por unos lmites. Para
hacer discreto ese tramo continuo, dividindolo en partes y obteniendo como
resultado una coleccin de nmeros reales, utilizamos un rango.
series, domain, range, point, cross reference, line
1. Defnicin de parmetros de la estructura.
2. Coordenadas de los puntos de la estructura. Colecciones numricas.
E10
1. Defnicin de parmetros de la estructura.
2. Coordenadas de los puntos de la estructura. Colecciones numricas.
3. Dibujo de los puntos base y de coronacin.
4 y 5. Dibujo de los ejes y de los pilares
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
coronacin, defnimos la altura con otro slider.
3. Dibujo de los puntos base y de coronacin.
Los ejes de los pilares son lneas entre dos puntos. Los puntos de inicio de
las lneas (A) sern los puntos base y los de fnal (B), los de coronacin. Para
dibujar unos pilares circulares, utilizamos pipe con las lneas como curvas base
(C) y otro slider como radio de los pilares.
4 y 5. Dibujo de los ejes y de los pilares
manual de grasshopper nivel I
Miguel Vidal
Guillermo Ramrez
p0137
triangulacin de la malla de pilares
01. objetivos
02. conceptos clave
03. procedimiento
- conocer cmo se eliminan elementos de una lista, aplicndolo a la triangulacin
de la malla de pilares del ejercicio E03
- comprender la relacin entre los ndices de una lista y los valores nmericos de
los dominios y las series
En el caso hipottico de que quisiramos triangular la malla de pilares del
ejercicio E03, tendramos que desfasar la lista de puntos de coronacin y
dibujar una lnea entre los puntos base y los puntos de coronacin desfasados.
Si dibujramos las diagonales resultantes, tendramos una estructura como la
de la primera imagen de la derecha.
shift list, cull pattern, cull index
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
E11
Para deshacernos de la diagonal que atraviesa la planta, utilizaremos las
herramientas de eliminacin de elementos de una lista: Cull. Utilizando, por
ejemplo, Cull Nth (tambin podramos hacerlo, con otros valores, con Cull Index)
tendremos que averiguar la relacin numrica que existe entre los parmetros
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 nmero de divisiones del dominio (N) ms una unidad.
5. Eliminar las diagonales sobrantes
manual de grasshopper nivel I
Miguel Vidal
Guillermo Ramrez
p0138
malla de pilares con patio
01. objetivos
02. conceptos clave
03. procedimiento
- 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
Los datos que defnen el patio son las distancias de un punto de origen al resto
de puntos base de los pilares. Todos los puntos que estn en un entorno que
determinemos alrededor de ese punto, debern eliminarse.
La condicin 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.
booleanos, true, false, larger than, dispatch
1. Datos de fltrado
2. Evaluacin 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 fltrado
2. Evaluacin de los datos de fltrado
E12
La pregunta de cules de todas las distancias son mayores que el nmero del
slider de entorno devuelve una lista de valores booleanos (verdadero y falso)
de la misma longitud que la lista de distancias.
3. Extraer valores booleanos
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 geomtrico que se sale ligeramente del objetivo principal del
ejercicio. Lo hacemos simplemente para dejar dibujado adecuadamente el patio.
4. Filtrado de los datos iniciales
geometra
D
manual de grasshopper nivel I
Miguel Vidal
Guillermo Ramrez
p0140
brjula
01. objetivos
02. conceptos clave
03. procedimiento
- defnir geomtricamente puntos con coordenadas XYZ y polares
- utilizar funciones de una variable para clculos matemticos
- dibujar vectores a partir de dos puntos y visualizarlos
- entender cmo se miden ngulos en Grasshopper
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 funcin de
una variable f(x) para pasar de grados a radianes
Conectamos las salidas numricas 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 defnir el extremo del vector.
function, f(x), point polar, vector display, angle
1. Establecer las coordenadas de los puntos
2. Dibujo de los puntos
3. Defnir los vectores y visualizarlos
4. Medir el ngulo entre esos vectores
1. Establecer las coordenadas de los puntos
2. Dibujo de los puntos
E13
Utilizamos el componente de vector dos puntos, entre el punto XYZ y el punto
polar. Como los vectores son entidades geomtricas defnidas por una longitud
y una direccin, no tienen una visualizacin, as que utilizamos vector display
para dibujar dicho vector V utilizando el origen como punto de ancla A.
3. Fabricar vectores y visualizarlos
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 refejo (B).
4. Medir el ngulo entre esos vectores
manual de grasshopper nivel I
Miguel Vidal
Guillermo Ramrez
p0141
vector solar
01. objetivos
02. conceptos clave
03. procedimiento
El objetivo es defnir un vector solar en coordenadas polares y compararlo con
el vector normal a una superfcie. Colorearemos puntos sobre la superfcie segn
su exposicin a la radiacin solar.
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 direccin de nuestro
sencillo vector solar, con vector display podemos visualizarlo. Si tratamos a
la lnea como si fuera un vector, Grasshopper no tiene problemas porque la
convierte automticamente.
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 superfcie 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.
point polar, loft, angle, divide surface, fatten, gradient, preview
1. Defnir un vector en coordenadas polares.
2. Dibujar y dividir una superfcie.
3. Comparar vectores y asignar color.
4. Visualizar.
1. Defnir un vector en coordenadas polares.
2. Dibujar y dividir la superfcie.
E14
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
defnimos el espacio de color que vamos a hacer corresponder con los valores
de ngulo, este espacio queda determinado entre los lmites L0 y L1. Un ngulo
3. Comparar vectores y asignar color.
El ltimo componente, Preview, sirve para colorear: le asigna color a geometra.
Nuestra informacin de color sale del Gradient, y la geometra a colorear son
todos los puntos que salen del fatten de la salida P de Surface Divide.
de 0 radianes ser rojo, uno de Pi ser rojo tambin, y, en Pi/2, cuando los los
vectores sean perpendiculares, la luz ser rasante y le asignaremos el color
verde.
4. Visualizar.
manual de grasshopper nivel I
Miguel Vidal
Guillermo Ramrez
p0142
subdivisin y triangulacin de una superfcie
01. objetivos
02. conceptos clave
03. procedimiento
El objetivo de este ejercicio es subdividir una superfcie alabeada en porciones
menores utilizando sus coordenadas locales U y V, y luego trazar las diagonales
de cada cuadrado. Las sublistas nos ahorrarn mucho trabajo.
Para dibujar una superfcie 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 revs, aparecer un giro extrao en nuestra superfcie.
Como si de un domain
2
se tratara, conectamos el Loft a la entrada de divide
domain
2
. Grasshopper interpreta directamente que queremos trabajar sobre
el dominio bidimensional de coordenadas locales de la superfcie. Asignamos
sliders a U y V. Conectamos la salida del divide domain
2
a Isotrim (subsurface)
que ahora s, divide la superfcie con el patrn del domain
2
. Con Brep
Components explotamos cada subsuperfcie en sus vrtices, aristas y caras.
loft, divide domain
2
, isotrim, list item, sublista
1. Dibujar la superfcie.
2. Dividir la superfcie en partes.
3. Seleccionar los vrtices de cada parte.
4. Dibujar las diagonales.
1. Dibujar la superfcie.
2. Dividir la superfcie en partes.
E15
Con cuatro list item diferentes podemos seleccionar los vrtices 0, 1, 2 y 3 de
cada subsuperfcie. 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
subsuperfcies a la vez, ahorrndonos trabajo.
3. Selecionar los vrtices de cada parte.
Ya slo 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 aadir
grosor a las barras si utilizamos un Pipe.
4. Dibujar las diagonales
manual de grasshopper nivel I
Miguel Vidal
Guillermo Ramrez
p0143
panelizacin de una superfcie
01. objetivos
02. conceptos clave
03. procedimiento
En este ejercicio defnimos una superfcie a partir de una curva que se repite en
vertical y aprendemos a replicar una geometra sobre ella.
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 mltiples copias.de la curva.
Conectando la lista de curvas a un Loft obtenemos la superfcie que buscamos.
Luego necesitamos dividir el domain
2
del loft. La entrada U del divide domain
2

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 posicin de
las curvas replicadas. Extraemos los dominios unidimensionales del dominio
bidimensional con Domain
2
Components puesto que ms tarde nos har falta.
move, domain
2
components, bounding box, surface morph.
1. Repetir una curva N veces en Z
2. Superfcie a partir de las curvas y subdivisin.
3. Surface Morph.
1. Repetir una Curva N veces en Z.
2. Superfcie a partir de las curvas y subdivisin.
E16
Surface Morph toma una geometra contenida en una caja de referencia y
la replica sobre una superfcie deformndola de acuerdo a las coordenadas
locales de la superfcie. 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.
3. Surface Morph
Surface Morph es un componente con mtiples entradas: en la G debemos
enchufar el cable que lleva la geometra (la lama) a replicar, en la R la caja de
referencia de Bounding Box que contiene la lama, en la S la superfcie sobre la
cual vamos a replicar la lama, en la U y V, los dominios que vienen del Domain
2

Components, y por ltimo, la W, en la que conectaremos un Slider que regular
la altura de las rplicas sobre la superfcie.
modelado paramtrico
E
manual de grasshopper nivel I
Miguel Vidal
Guillermo Ramrez
p0145
Monumento a los judos de Europa asesinados, Peter Eisenman
01. objetivos
02. conceptos clave
04. procedimiento
03. programa
- parametrizar un diseo de un proyecto real
- aplicar la nocin de dominio a medidas concretas
- subdividir una regin del espacio con planos
- tomar medidas pseudoaleatorias para elaborar prototipos de diseos
1.1. Extraer los dominios de cada una de las direcciones: dibujamos el slido
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.
domain, plane, intersection, containment, duplicate data, jitter
1. Dibujar los puntos de origen de las losas
2. Dibujar las losas con las medidas de los datos de partida en esos puntos
Datos de partida:
- parcela: dibujamos en Rhino un polgono similar a la planta del solar
- anchura de losas: 2.38 m.
- fondo de losas: 0.95 m.
- nmero de losas: 371
El Monumento a los judos de Europa asesinados (...) es un monumento que recuerda en
Berln a los judos vctimas del holocausto.
Fue diseado por el arquitecto Peter Eisenman y por la ingeniera Buro Happold. Se trata
de un campo inclinado de 19000 metros cuadrados cubierto por una rejilla cuadriculada
en la que estn situadas 2711 estelas o losas de hormign. Estas losas tienen unas
dimensiones de 2.38m de largo y 0.95m de ancho, y varan en cuanto a su altura, desde
los 0.2 m a los 4.8m. (...)
Fuente: www.es.wikipedia.org
1. Dibujar los puntos de origen de las losas
NOTA: En este ejercicio, se han reducido las medidas reales de superfcie total y
nmero de losas para dar lugar a un archivo menos pesado.
E17
Monumento a los judios de Europa asesinados,
vista de satlite. Fuente: Google Earth.
Monumento a los judios de Europa asesinados, vista general.
Fuente: www.wikipedia.org.
manual de grasshopper nivel I
Miguel Vidal
Guillermo Ramrez
p0146
1.2. Dibujar los planos de corte para cada direccin: en primer lugar, necesitamos
los puntos de origen de esos planos, que estarn contenidos en los bordes
del slido que encierra a la parcela. Tomamos los dominios de cada eje y los
dividimos en nmeros reales con un rango. El nmero de subdivisiones del del
dominio (la N del rango) puede ser la longitud lineal del slido capaz en cada
eje (la resta numrica de las coordenadas de los bordes del dominio para cada
direccin) entre la medida de la losa ms un paso. En segundo lugar, una vez
obtenidos los puntos, slo tenemos que tomar los vectores unitarios adecuados
para dibujar los planos en cada direccin: para los planos en la direccin X, los
vectores sern los unitarios en los ejes Y y Z; y para los planos en la direccin
Y, los vectores sern los unitarios en los ejes X y Z. El ltimo plano para fabricar
las intersecciones que darn lugar a los puntos ser el plano universal XY.
1.3 . Puntos de losas: una vez obtenidos los planos, tan slo 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) estn o no en
el interior de una curva cerrada C y devuelve en R la relacin 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 regin) y en P la proyeccin de dicha lista de puntos sobre el
plano que contiene a la curva plana cerrada. Slo 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.1. Rectngulo base de losas: Dibujamos una lista de rectngulos, 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. Nmero 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
2. Dibujar las losas con las medidas de los datos de partida
manual de grasshopper nivel I
Miguel Vidal
Guillermo Ramrez
p0147
2.3 Extrusin de los rectngulos base de las losas : Para reproducir el paisaje
del monumento, tomamos unas alturas de losas prefjadas, como medidas
de unos prefabricados, que distribuiremos de un modo aparentemente aleatorio,
utilizando la herramienta jitter. Necesitamos tantos valores de extrusin
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, modifcando sus ndices pseudoaleatoriamente.Para terminar,
tapamos la extrusin con cap holes.
manual de grasshopper nivel I
Miguel Vidal
Guillermo Ramrez
p0148
estructura de la Mediateca de Sendai, Toyo Ito
E18
01. objetivos
02. conceptos clave
03. procedimiento
El objetivo de este ejercicio es realizar un repaso de los conceptos generales
aprendidos en todos los ejercicios anteriores. Dibujaremos un slo pilar triangulado
de la mediateca de Sendai, de Toyo Ito. Comenzaremos con un punto, luego
un crculo, luego una coleccin de crculos transformados (copiados, escalados,
rotados) y fnalmente resolveremos su triangulacin.
El primer paso es dibujar el centro desde el cual se va a referenciar toda la
defnicin: 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 crculo 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 defnicin posteriormente.
move, scale, rotate, center, random, jitter.
1. Dibujar un crculo 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 superfcie y dividirla.
6. Explotar las subsuperfcies y seleccionar sus vrtices.
7. Triangular y dar grosor a las barras.
1. Dibujar un crculo y replicarlo en altura.
Ahora defniremos otro vector de traslacin 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
2. Desplazar aleatoriamente en el plano XY.
manual de grasshopper nivel I
Miguel Vidal
Guillermo Ramrez
p0149
estructura de la Mediateca de Sendai, Toyo Ito
E18
colecciones independientes de valores aleatorios. Simplemente generamos
una coleccin y la barajamos. Es importante que haya nmeros aleatorios
positivos y negativos para permitir desplazamiento en cualquier direccin del
plano XY. Los nmeros aleatorios deben ser tantos como anillos haya. Esto se
logra conectando el slider inicial Cantidad a la N del Random.
Debemos agrandar y encoger cada crculo de manera diferente y cada uno
desde su propio centro. Con un componente Center conectado a nuestra ltima
coleccin de crculos, hallamos los centros de cada uno de ellos. Estos centros
conectarn con la entrada C de un componente Scale. Los factores de escala F
sern nmeros 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.
3. Escalar aleatoriamente respecto de cada centro.
Este paso es el ms complicado de comprender. Es ms fcil 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
tringulos de la subdivisin sean issceles y no rectngulos debemos retorcer
los anillos. Retorcer signifca 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 funcin que divide Pi/Divs. Este resultado es el incremento de
ngulo de rotacin 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 defne como un polgono
de cantidad de lados igual a Divs, entonces y slo entonces tendremos una
triangulacin en la que los vrtices 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 cmo se comporta la estructura.
4. Rotar cada anillo.
manual de grasshopper nivel I
Miguel Vidal
Guillermo Ramrez
p0150
estructura de la Mediateca de Sendai, Toyo Ito
E18
En el paso 5 empezaremos a ver los efectos del retorcimiento que planeamos
en el punto 4. Este paso es anlogo al E15. Enchufamos los anillos rotados al
Loft, y marcamos dentro de Loft Options loft la opcin UNIFORM. Esto har
que el loft se ajuste con precisin a los anillos. Dividimos el loft con Divide
Domain
2
, 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 patrn de corte del Divide Domain
2
a nuestra superfcie generando
las subsuperfcies.
En el paso 5 continuamos con lo aprendido en E15. La tcnica es idntica.
Explotamos las subsuperfcies con Brep Components y seleccionamos
los vrtices con List Item haciendo uso de la estructura de sublistas para
ahorrarnos trabajo. Con tres list item que seleccionen el vrtice 1, 2 y 3 de cada
subsuperfcie debera valernos.
5. Dibujar la superfcie y dividirla.
6. Explotar las subsuperfcies y seleccionar los vrtices.
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.
7. Triangular y dar grosor a las barras.
manual de grasshopper nivel I
Miguel Vidal
Guillermo Ramrez
p0151
listas de
datos que
queremos
evaluar
resultado
de la
evaluacin
(lista de valores
booleanos)
fltrado de
los datos
iniciales a
travs del
resultado
evaluacin
de los datos
(generalmente
comparacin)
manual de grasshopper nivel I
Miguel Vidal
Guillermo Ramrez
p0152
- sucesin de datos (se colocan uno detrs de otro)
- el orden es relevante ({A, B, C} no es igual que {C, B, A})
- la longitud est determinada (list length)
- se accede a los datos refriendose al ndice dentro de la sucesin
- el primer objeto tiene el ndice cero
- estn formateadas con un tipo de dato (o nmeros, o puntos, etc., no todos a la vez)
ndice
ndice dato
0 1 2 3 4 5 6 7 8 9
1er TEM
longitud
ltimo TEM
dato dato datodato dato datodato dato dato dato
Estructura de datos: listas
manual de grasshopper nivel I
Miguel Vidal
Guillermo Ramrez
p0153
- list item
- list length
- shift list
- sort list
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).
Operaciones con listas
Este componente nos da la cantidad de temes de una
lista y tiene tan slo una entrada: L para la(s) lista(s)
de la(s) que queremos extraer la longitud.
Este componente desplaza el orden de los elementos
de la lista las posiciones que indiquemos. Tiene tre
slo 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 ordena listas. Las entradas y salidas K orde-
nan la lista de menor a mayor y A sirve para ordenar
otra lista con el mismo patrn con los que se ha orde-
nado K.
manual de grasshopper nivel I
Miguel Vidal
Guillermo Ramrez
p0154
- reverse list
Este componente modifca el orden de una lista,
colocndo los temes en el orden inverso de la lista.
Tiene tan slo 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 re-
sultado e I para los ndices.
manual de ejercicios
de grashopper nivel 2
miguel vidal calvet
guillermo ramrez camarero
02. geometra de mallas y deformacin de superfcies
01. Grasshopper como herramienta de visualizacin de datos
03. gestin de listas: estructura de rbol de datos
04. modelado con algoritmos evolutivos
ndice
aplicado al diseo algortmico de arquitectura
manual de ejercicios de grasshopper nivel 2
manual de grasshopper nivel I
aplicado al diseo de arquitectura
por miguel vidal calvet
y guillermo ramrez camarero
edicin Noviembre 2010
grasshopper v0.8.002
p0157
manual de grasshopper nivel 2
Miguel Vidal
Guillermo Ramrez
Grasshopper como herramienta de
visualizacin de datos: lectura y edicin de
datos externos
01
p0158
manual de grasshopper nivel 2
Miguel Vidal
Guillermo Ramrez
lectura de datos externos y gestin de cadenas de caracteres
01. objetivos
02. conceptos clave
03. procedimiento
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxx
x, x, x, x, x
1. xxxxxxxxxxxxxxxxx
2. xxxxxxxxxxxxxxxx
3. xxxxxxxxxxxxxx
4. xxxxxxxxxxxxxxxxx
1. xxxxxxxxxxxxxxxxxxx
E01
p0159
manual de grasshopper nivel 2
Miguel Vidal
Guillermo Ramrez
visualizacin y etiquetado de datos
01. objetivos
02. conceptos clave
03. procedimiento
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxx
x, x, x, x, x
1. xxxxxxxxxxxxxxxxx
2. xxxxxxxxxxxxxxxx
3. xxxxxxxxxxxxxx
4. xxxxxxxxxxxxxxxxx
1. xxxxxxxxxxxxxxxxxxx
E02
p0160
manual de grasshopper nivel 2
Miguel Vidal
Guillermo Ramrez
geometra de mallas y deformacin de
superfcies
02
p0161
manual de grasshopper nivel 2
Miguel Vidal
Guillermo Ramrez
subdivisin de superfcie no homognea
01. objetivos
02. conceptos clave
03. procedimiento
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxx
x, x, x, x, x
1. xxxxxxxxxxxxxxxxx
2. xxxxxxxxxxxxxxxx
3. xxxxxxxxxxxxxx
4. xxxxxxxxxxxxxxxxx
1. xxxxxxxxxxxxxxxxxxx
E03
p0162
manual de grasshopper nivel 2
Miguel Vidal
Guillermo Ramrez
deformacin de superfcie
01. objetivos
02. conceptos clave
03. procedimiento
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxx
x, x, x, x, x
1. xxxxxxxxxxxxxxxxx
2. xxxxxxxxxxxxxxxx
3. xxxxxxxxxxxxxx
4. xxxxxxxxxxxxxxxxx
1. xxxxxxxxxxxxxxxxxxx
E04
p0163
manual de grasshopper nivel 2
Miguel Vidal
Guillermo Ramrez
mallas
01. objetivos
02. conceptos clave
03. procedimiento
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxx
x, x, x, x, x
1. xxxxxxxxxxxxxxxxx
2. xxxxxxxxxxxxxxxx
3. xxxxxxxxxxxxxx
4. xxxxxxxxxxxxxxxxx
1. xxxxxxxxxxxxxxxxxxx
E05
p0164
manual de grasshopper nivel 2
Miguel Vidal
Guillermo Ramrez
gestin de listas: estructura de rbol de datos
03
p0165
manual de grasshopper nivel 2
Miguel Vidal
Guillermo Ramrez
Estructura de datos: rboles de Grasshoper
En Grasshopper, las listas datos se orde-
nan, acumulativamente, con una estruc-
tura ramifcada.
Fuente: Grasshopper Primer for version 0.6.0007
rama
rama
rama
rama
rama
ndice dato
p0166
manual de grasshopper nivel 2
Miguel Vidal
Guillermo Ramrez
Visualizacin de estructura de rbol en Grasshoper
Para visuali-
zar la estruc-
tura de una
lista, utiliza-
mos el com-
ponente pa-
ram viewer.
Podemos es-
coger entre
una vista tex-
tual, por de-
fecto, y una
vista grfca,
draw tree
(abajo).
Paths n-
mero de ra-
mas que hay.
{ 0 ; 0 ; 0 }
ruta de la
rama.
N nmero
de temes en
cada rama.
representacin
de esta lista
p0167
manual de grasshopper nivel 2
Miguel Vidal
Guillermo Ramrez
- tree branch
- tree item
Con este componente extrae-
mos ramas de una estructura
de rbol. Tiene dos entradas: T
para la(s) estructura(s) de rbol
de la que queremos extraer una
rama, P para el ruta de la rama
que queremos obtener. Las ru-
tas de las ramas son cadenas de
caracteres.
Con este componente extrae-
mos temes dentro de ramas de
una estructura de rbol. Tiene
cuatro entradas: T para la(s)
estructura(s) de rbol de la que
queremos extraer una rama, P
para el ruta de la rama que que-
remos obtener, i para el ndice
del item y W para wrap. Los
ndices de listas son enteros.
Se pueden realizar las mismas operaciones que con listas, pero con distintos componentes y, sobre todo, diferente sintaxis.
Operaciones sobre estructura de rboles
p0168
manual de grasshopper nivel 2
Miguel Vidal
Guillermo Ramrez
- fatten tree
- graft tree
Flatten tree convierte una es-
tructura de diversas ramas en
otra de una sola rama. Es decir
hace de una lista de sublistas
una lista nica. En D insertamos
la estructura y con P decidimos
la ruta en la que colocamos esa
lista.
Con graft tree hacemos la op-
eracin contraria: convertimos
en una rama cada item de la
lista original.
p0169
manual de grasshopper nivel 2
Miguel Vidal
Guillermo Ramrez
- explode tree
- merge/merge03/merge multiple
Extrae las ramas de una es-
tructura de rbol una por una.
Se aaden salidas haciendo
click con el botn derecho en
output manage.
Merge combina las listas de estructuras de rbol, teniendo en cuenta las rutas de dichas estructuras
de rbol, dando lugar a una lista de listas con las rutas correspondientes.
p0170
manual de grasshopper nivel 2
Miguel Vidal
Guillermo Ramrez
repeticin de nmeros en dos listas
01. objetivos
02. conceptos clave
03. procedimiento
- entender el concepto de ramas en estructura de rbol de datos en Grassshopper,
para ello, trataremos de saber la cantidad de veces que se repiten los nmeros
de una lista en otra
Convertimos la primera lista de nmeros en una lista de listas con un tem en
cada una de ellas, es decir, fabricamos una estructura de ramas para cada tme
de la lista con Graft tree.
Para hallar las repeticiones de la primera lista en la segunda, utilizamos un
componente de igualdad y nos quedamos slo con las coincidencias de True
con Dispatch.
Finalmente, contamos cuntos elementos hay en la lista de salida de Dispatch,
con List length: las ramas que no tengan ningn elemento contarn como cero.
Por ltimo, deshacemos la estructura de ramas con Flatten tree para compararlo
con la lista A.
graft tree, fatten tree
1. Estructura de rbol en la lista A
2. Repeticiones de la lista A en la lista B
3. Deshacer la estructura de rbol de la lista A
1. Estructura de rbol en la lista A
2. Repeticiones de la lista A en la lista B
3. Deshacer la estructura de rbol de la lista A
E06
p0171
manual de grasshopper nivel 2
Miguel Vidal
Guillermo Ramrez
convento de las Teresianas, Gaud
01. objetivos
02. conceptos clave
03. procedimiento
- trabajar con los conceptos de ramas en estructura de rbol de datos
- entender cmo funciona Loft con varias listas de curvas
Dibujamos unas curvas catenarias entre dos listas de puntos A y B con la misma
serie para las coordenadas Y, separadas una distancia para las coordenadas X,
una longitud L proveniente de un slider y una direccin de gravedad con vector
unitario Z.
Dibujamos una superfcie de transicin Loft a lo largo de la lista de curvas del
apartado anterior y la extrumos a lo largo del eje Z.
En primer lugar, desfasamos las curvas iniciales con Offset Curve para tener
las curvas de seccin planas de las vigas. Para dibujar, la superfcie plana
de los nervios, utilizamos un Loft de esas dos listas de curvas, pero primero
debemos tener la misma estructura en las listas, una lista para cada curva, para
ello aplicamos un Graft Tree a la lista de curvas iniciales (comparar las listas en
la captura de pantalla en la siguiente pgina).
En segundo lugar, nos queda extruir las superfcies del Loft para tener la
estructura defnitiva.
catenary, offset curve, loft, graft tree
1. Curvas de seccin de los arcos
2. Piel de cubierta
3. Estructura de cubierta
1. Curvas de seccin de los arcos
2. Piel de cubierta
3. Estructura de cubierta
E07
Colegio Teresiano, Barcelona, Antonio Gaud.
p0172
manual de grasshopper nivel 2
Miguel Vidal
Guillermo Ramrez
p0173
manual de grasshopper nivel 2
Miguel Vidal
Guillermo Ramrez
gusano paramtrico
01. objetivos
02. conceptos clave
03. procedimiento
- practicar las nociones de estructura de rbol de datos, dibujando una estructura
desfasada
xxxxxxxxxxxxxxxxxxxxxxxx
offset, fatten, param viewer, tree branch
1. xxxxxxxxxxxxxxxxx
2. xxxxxxxxxxxxxxxx
3. xxxxxxxxxxxxxx
4. xxxxxxxxxxxxxxxxx
1. xxxxxxxxxxxxxxxxxxx
E08
p0174
manual de grasshopper nivel 2
Miguel Vidal
Guillermo Ramrez
p0175
manual de grasshopper nivel 2
Miguel Vidal
Guillermo Ramrez
lamas no homogneas en superfcie
01. objetivos
02. conceptos clave
03. procedimiento
- entender cmo se tratan independientemente partes de geometra con estructura
de rbol de datos, para ello fabricaremos una fachada de lamas con distribucin
heterognea de la superfcie del ejercicio E08
- repasar conceptos de topologa y anlisis de curvas
Para dividir las curvas base en tramos, utilizamos la herramienta Shatter Curve,
que trabaja con el parmetro t de las curvas. Antes de nada, para que cada
curva tome un canal de informacin independiente, utilizamos Graft Tree.
Luego tomamos la curva, la desfasamos hacia adentro con Offset Curve. Para
hallar el parmetro t de divisin de las curvas, buscamos con Curve Closest
Point el punto ms cercano a las curvas de los puntos de divisin del ejercicio
anterior, que nos devuelve el parmetro t de dichas curvas que buscbamos.
2.1. Desplazamos cada tramo de curva a lo largo del eje Z: para dibujar
una fachada prototipo, tomamos valores de vectores de desplazamiento
pseudoaleatorios. En primer lugar, como en el apartado anterior, aplicamos
Graft Tree a la lista de tramos de curvas, para que cada una de ellas est en
una ruta de datos distinta. Para tener valores distintos de desplazamiento, pero
contenidos dentro del valor de la altura del recinto superior, limitamos esos
valores con un dominio. A continuacin, subidivimos ese dominio con un rango.
El valor de subdivisiones N est defnido por valores de un Random, limitado por
un dominio R de cantidad de huecos mnimo y mximo, el nmero de valores N
ser de tantos valores como temes tengamos en las listas (tomamos la longitud
de lista del Param Viewer) y tambin necesitaremos una semilla S diferente
para cada uno de ellos, por ejemplo, tomamos de una serie.
graft tree, fatten tree, shatter curve, offset, evaluate curve
1. Dividir las curvas en tramos
2. Mallar cada tramo de fachada independientemente
3. Dibujar la estructura de fachada
1. Dividir las curvas en tramos
2. Mallar cada tramo de fachada independientemente
E09
p0176
manual de grasshopper nivel 2
Miguel Vidal
Guillermo Ramrez
Para dibujar una estructura de fachada formada por perfles rectangulares,
necesitamos dibujar un rectngulo en cada punto base de las curvas superiores
orientado segn el vector normal a la curva en ese punto. Para ello, evaluamos
las curvas con Evaluate curve en cada uno de los parmetros t que hemos
obtenido antes. A continuacin, tomamos la salida P (puntos en la curva) y T
(vectores paralelos de la curva) para dibujar los planos que tomaremos como
orgenes para los rectngulos de seccin de la estructura. Los valores de X e Y
del rectngulo de seccin son los dominios de extensin para cada direccin.
Para terminar, slo nos queda extruir estos rectngulos.
3. Dibujar la estructura de fachada
2.2. Fabricar las superfcies planas de las lamas: necesitamos desfasar las
curvas base con Offset Curve y adems tener las listas de curvas con la misma
estructura de datos, para poder, por ejemplo, utilizar una superfcie de transicin
con Loft. Para ello, aplicamos un Graft Tree a las curvas base, puesto que con
Offset Curve, se hace una lista diferente para cada curva.
2.3. Extruir las superfcies planas de las lamas: tan slo tenemos que aplicar un
Extrude a lo largo del vector Z.
p0177
manual de grasshopper nivel 2
Miguel Vidal
Guillermo Ramrez
Voronoi masterplan
01. objetivos
02. conceptos clave
03. procedimiento
- comprender la relacin entre las rutas de la estructura de rbol y la geometra
que se va empleando en Grasshopper y modifcarlas con graph mapper
- trabajar con diferentes elementos geomtricos independientemente
Para dibujar una planta, tomamos la triangulacin plana de Voronoi, para lo cual
necesitaremos una coleccin de puntos (P).
1.1. Coordenadas de puntos: dibujaremos con dos colecciones numricas
pseudoaleatorias (Random) tanto para las coordenadas X como para las Y.
Adems, limitaremos la extensin del Voronoi con una Interval Box en B.
1.2 Diagramas de Voronoi: tomamos las entradas anteriores para dibujar los
polgonos de Voronoi.
1.3 Desechamos algunos polgonos: para tener algunos vacos en la planta,
aplicamos Random Reduce a la salida de Voronoi, que elimina R elementos de
una lista L, de un modo pseudoaleatorio, tomando una semilla S.
2.1. Puntos permetro base: dividimos los permetros de cada polgono de
Voronoi con Divide Curve, para ello, antes debemos tener cada polgono en
una rama distinta con Graft Tree.
2.2. Puntos permetro de coronacin: damos unos valores pseudoaleatorios,
limitados por una altura mnima y mxima con un dominio a la cota Z de cada
uno de los puntos de permetro base.
2.3. Superfcies para los cerramientos: uniendo los puntos base con los de
coronacin con una coleccin de lneas, podemos utilizar stas como curvas de
seccin de una superfcide de transicin Loft.
graft tree, voronoi, param viewer, path mapper
1. Planta. Diagramas de Voronoi
2. Cerramientos
3. Cubiertas
1. Planta. Diagramas de Voronoi
2. Cerramientos
E10
p0178
manual de grasshopper nivel 2
Miguel Vidal
Guillermo Ramrez
3.1. Puntos interiores base: dividimos los permetros de cada polgono de
Voronoi con Surface Divide, para ello, antes debemos convertir los polgonos
en superfcie con un parmetro de Surface.
3.2. Puntos interiores de coronacin: damos unos valores pseudoaleatorios,
limitados por una altura mnima y mxima con un dominio a la cota Z de cada
uno de los puntos interiores base.
3.3. Cubiertas: podemos utilizar una malla de Delaunay con los puntos de
coronacin. Antes debemos fusionar las dos listas de los puntos de permetro de
coronacin con los puntos interiores de coronacin con Merge. En Grasshopper,
la operacin de subdivisin de geometra, como la del apartado 3.1, da lugar a
nuevas subramas en cada polgono para cada columna de puntos de subdivisin,
las rutas de las dos lstas de puntos de coronacin, no van a coincidir.
Antes de nada, a efectos de claridad, eliminamos ndices de rutas sobrantes con
Simplify Tree. Ahora, para hacer corresponder las dos listas de puntos con las
mismas rutas para cada polgono, debemos deshacer la ruta que ha generado
Surface Divide para cada columna con Path mapper. Dicho componente trabaja
con operaciones lxicas sobre las rutas de la estructura de rbol. Cualquier
estructura lxica en la parte izquierda del componente ser sustituda por la de
la derecha. En nuestro caso, los ndices de la primera columna A equivalen a
cada uno de los polgonos, la segunda columna, con todo ceros, es residual de
algn componente y la tercera columna B, son cada una de las columnas de
puntos de cada polgono, la ltima es tambin residual. La tercera columna es
la que debemos eliminar en nuestra operacin lxica.
3. Cubiertas
p0179
manual de grasshopper nivel 2
Miguel Vidal
Guillermo Ramrez
interseccin de visuales
01. objetivos
02. conceptos clave
03. procedimiento
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxx
x, x, x, x, x
1. xxxxxxxxxxxxxxxxx
2. xxxxxxxxxxxxxxxx
3. xxxxxxxxxxxxxx
4. xxxxxxxxxxxxxxxxx
1. xxxxxxxxxxxxxxxxxxx
E11
p0180
manual de grasshopper nivel 2
Miguel Vidal
Guillermo Ramrez
modelado con algoritmos evolutivos
04
manual bsico
de scripting
con RhinoCommon
en Grasshopper
aplicado al diseo generativo de arquitectura
lenguajes C# y python
miguel vidal calvet
www.frikearq.com
edicin Octubre 2011
notas previas
Este documento no pretende ser una referencia para quien quiera aprender a
programar.
Este manual es un pequeo compendio de ejercicios, a modo de cuaderno de
apuntes, destinado a quien quiera introducirse en la elaboracin de scripts para
generar diseos. Necesariamente, se pasar por encima de los conceptos bsicos
de la programacin para empezar a escribir cdigo que entienda la mquina. Ser
una pasada rpida, pero sufciente para ponerse a escribir cdgio lo antes posible
de una manera solvente.
Esto NO es un manual de programacin
Esto S es un manual de scripting para Rhino elaborado por diseadores para
diseadores
manual bsico de scripting con Grasshopper
en C# y python
por miguel vidal calvet
y guillermo ramrez camarero
edicin Julio 2011
grasshopper v0.8.0010
A. Nociones bsicas de programacin
ANEXO 3. Glosario de trminos
ANEXO 1. Estructura de RhinoCommon
ANEXO 2. Processing
B. RhinoCommon en Grasshopper
A.1. Introduccin a la programacin aplicado al diseo generativo B.1. Microejercicios de iniciacin a C# y RhinoCommon
B.2. Ejemplos de aplicacin
A.2. Tipos de datos, declaracin y operaciones con variables
A.4. Funciones: abstraccin
A.3. Clasulas condicionales e Iteracin
ndice
ANEXOS
aplicado al diseo generativo de arquitectura
manual bsico de scripting con Grasshopper en C# y python
01 Programacin orientada a objetos.
02 Interfaz de scripting en Grasshopper
03 Declaracin de datos simples: enteros, decimales y booleanos.
04 Declaracin de datos compuestos: cadenas de caracteres, listas, y es-
tructura de rbol de datos.
07 Estructura de una Funcin
08 Valor de una funcin: return
05 Clusulas condicionales: clusulas if ... else y switch.
06 Estructuras terativas: bucles for y while.
E01 Dibujar cuatro puntos formando los vrtices de un cuadrado
E02 Dibujar cuatro puntos formando los vrtices de un cuadrado a partir de un
vrtice inicial y un valor de lado
E03 Medir las distancias diagonales e imprimirlas en un panel
E04 Introducir los puntos en una lista
E05 Unir los puntos en diagonal con lneas
E06 Dibujar un rectngulo a partir de esos puntos
E07 Elaborar una funcin que fabrica un vectores entre dos puntos
E08 Fabricar vectores a partir de los vrtices y visualizarlos dndoles color
E09 Unir los vrtices consecutivamente mediante lneas
E10 Extraer los puntos medios de cada segmento de rectngulo y unirlos con
lneas
B2.1 Pabelln temporal de la galera Serpentine del ao 2002, Toyo Ito con
Cecil Balmond
Programacin y
diseo generativo
A
manual de scripting con grasshopper
Miguel Vidal
Guillermo Ramrez
p0185
introduccin a la programacin aplicada al diseo generativo
A1
01. C# o python? 03. Qu es la programacin orientada a objetos?
C# es un lenguaje de programacin orientada a objetos basado en C y C++,
es muy similar a Java, tiene una extensa y actualizada documentacin y est
construido por una plataforma muy extendida como .NET. Debido a esto, hacen
que sea un lenguaje idneo para dar los primeros pasos en los entornos de
programacin.
En cuanto a las similaridades, principalmente con Java, y tambin C++, hacen
que sea sencillo entender y pasar fcilmente a otros entornos tiles para los
diseadores, sobre todo, Processing y Arduino, o tambin scripting con Maya.
Tambin puede ser un buen comienzo para ms adelante adoptar con facilidad
Python, que probablemente sea un lenguaje de programacin estndar para
desarrollar scripts en software de 3D y otros.
En cuanto a la documentacin, desde un punto de vista meramente prctico, el
hecho de estar respaldado por una plataforma potente como .NET (desarrollada
por Microsoft), aseguran las actualizaciones y soporte del mismo. Para
consultar la referencia, ir a:
http://msdn.microsoft.com/en-us/library/kx37x362.aspx
La programacin orientada a objetos es un paradigma de programacin que usa
objetos y sus interacciones para disear aplicaciones y programas informticos.
Los objetos son entidades que tienen un determinado estado, comportamiento
(mtodo) e identidad:
El estado est compuesto de datos, ser uno o varios atributos a los que se
habrn asignado unos valores concretos.
El comportamiento est defnido por los mtodos o mensajes a los que sabe
responder dicho objeto, es decir, qu operaciones se pueden realizar con l.
La identidad es una propiedad de un objeto que lo diferencia del resto, dicho
con otras palabras, es su identifcador (concepto anlogo al de identifcador de
una variable o una constante).
Un objeto contiene toda la informacin que permite defnirlo e identifcarlo frente
a otros objetos pertenecientes a otras clases e incluso frente a objetos de una
misma clase, al poder tener valores bien diferenciados en sus atributos. A su
vez, los objetos disponen de mecanismos de interaccin llamados mtodos, que
favorecen la comunicacin entre ellos. Esta comunicacin favorece a su vez el
cambio de estado en los propios objetos. Esta caracterstica lleva a tratarlos como
unidades indivisibles, en las que no se separa el estado y el comportamiento.
Fuente: wikipedia.org
manual de scripting con grasshopper
Miguel Vidal
Guillermo Ramrez
p0186
03. Interfaz de scripting en Grasshopper
Existen tres componentes de scripting en Grasshopper en los que se puede
escribir cdigo en otros tantos lenguajes:
- C# Script
- VB Script
- Python Script
Para extraer estos componentes,
ir a la pestaa de Math > Script.
Los dos primeros componentes
vienen cargados en la instalacin
de Grasshopper. En el momento
de la edicin de este manual,
el componente de scripting
con Python nicamente puede
utilizarse con Rhino 5. Para
instalarlo, visitar:
http://www.food4rhino.com.
Para escribir cdigo en estos componentes, hacer doble click en el cuerpo del
mismo o bien click con el botn derecho y luego Edit source. Se abrir una
ventana en la que escribiremos nuestro cdigo en donde se lee // your code
here.
Edicin del componente script
Podemos trabajar con tantas variables como queramos dentro del cdigo
que escribamos y tambin podemos utilizar las entradas del componente
para introducir datos de la defnicin de Grasshopper o de archivos de Rhino.
Adems, podremos tambin tener salidas de datos a nuestra eleccin.
Para modifcar las entradas de datos, haremos click con el botn con el botn
derecho e ir a Input manager ... Adems, stas deben ser formateadas del
modo adecuado para trabajar con ellas en nuestro componente. Hablaremos de
ello en el siguiente captulo. A continuacin, unas imgenes con los pasos de
este proceso
Para modifcar salidas de datos, hacer click con el botn con el botn derecho
e ir a Output manager ... Estos datos estn formateados por el componente
como Object y Grasshopper lo entiende como Generic Data (dato genrico), as
que no es necesario darle ningn formato especfco.
Entradas y salidas de variables del componente script
escribiremos el
cdigo a partir
de esta lnea
manual de scripting con grasshopper
Miguel Vidal
Guillermo Ramrez
p0187
La salida out
La funcin Print
La salida out del componente script tiene dos funciones:
- devolver los posibles errores del cdigo
- imprimir los datos que deseemos
Esta salida sera como la consola de cualquier entorno de programacin. Para visualizar cualquiera de ambos casos anteriores, conectaremos un panel.
La funcin Print escribe cadenas de caractares (ver tipos de datos compuestos),
es decir, texto en la salida out del componente script.
Esta funcin nos ser muy til para ir comprobando la validez de nuestro
cdigo, como veremos a lo largo del manual.
NOTA: A partir de ahora, todo el texto con la apariencia del prrafo inmediatamente superior,
corresponder a cdigo que introduciremos en el componente de script a partir de la lnea
donde se lee el texto //your code here, como antes se ha comentado.
Print(hola, cocacola);
C# python
manual de scripting con grasshopper
Miguel Vidal
Guillermo Ramrez
p0188
Comentarios en el cdigo
Otro asunto que tambin va a sernos muy til para hacer nuestros scripts es hacer comentarios dentro del cdigo. Los comentarios son texto que forma parte del cdigo,
pero que la mquina va a obviar cuando lo est leyendo.
Esto nos puede servir para anotar aspectos relevantes del cdigo o asuntos que son importantes recordar y tambin para ordenarlo. Esto nos servir no slo para no
perdernos nosotros mismos sino para posibles futuras segundas o terceras personas que puedan acceder a l.
Existen dos maneras de comentar el cdigo
- comentario de una sola lnea: cualquier texto que escribamos en una lnea a partir de los caracteres de barra // quedar comentado.
- comentario multilnea: cualesquiera lnea o lneas de texto entre los caracteres de apertura /* y de cierrre */ quedarn comentadas.
//la funcin print sirve para imprimir texto
Print(hola, cocacola);
/*
cdigo de prueba escrito como primer ejercicio
del manual de scripting de Frikearq :)
*/
//la funcin print sirve para imprimir texto
Print(hola, cocacola);
El intrprete lee el cdigo lnea a lnea de arriba a abajo y de izquierda
a derecha. Para que el intrprete cambie de lnea, es necesario aadir ; al
fnal de cada una de ellas, para que entienda que el cdigo contina en la
siguiente lnea.
C#
C#
python
python
manual de scripting con grasshopper
Miguel Vidal
Guillermo Ramrez
p0189
tipos de datos, declaracin y operaciones con variables
A2
05. Tipos de datos primitivos
Tipos de datos primitivos que ms vamos a utilizar y sus identifcadores
tipo de dato nombre (en ingls) identifcador
nmero entero integer int
nmero decimal double precision foating-
point number
double
valor booleano
(verdadero o falso)
boolean value (true o false) bool
caracter character char
Y un dato compuesto para empezar ...
tipo de dato nombre (en ingls) identifcador
cadena de caracteres string string
NOTA: Una cadena de caracteres, o sea, texto, es un tipo de dato, como el nombre indica,
compuesto de una sucesin de caracteres. El motivo por el cual lo mostramos en este punto,
es que la salida out imprime cadena de caracteres, esto quiere decir, que para que devuelva
cualquier dato hay que convertirlo previamente a string. Esto nos ser til para ir mostrando
en pantalla lo que vayamos haciendo.
C# python
manual de scripting con grasshopper
Miguel Vidal
Guillermo Ramrez
p0190
Existen funciones para convertir datos de un tipo a otro.
int entero = 1;
double decimal = 2.5;
bool verdadero = true;
//debemos convertir los datos a cadena de
caracteres para poder imprimirlos en pantalla
Print(entero.ToString());
Print(decimal.ToString());
Print(verdadero.ToString());
Algunas conversiones de datos habituales
Convertir ...
... a entero Convert.ToInt32(valor) o (int)valor
... a decimal Convert.ToDouble(valor) o (double)valor
... a booleano Convert.ToBoolean(valor)
... a cadena de caracteres valor .ToString()
NOTA: En programacin, sigue una lgica binaria, de verdadero o falso, en la que al valor
numrico entero 0 se le asigna el valor booleano falso (false) y al valor numrico entero 1
se le asigna el valor booleano verdadero (true).
C# python
manual de scripting con grasshopper
Miguel Vidal
Guillermo Ramrez
p0191
04. Variables
Una variable es un nombre que se asigna a una cantidad conocida o desconocida de informacin para poder trabajar con este nombre, independientemente de la
informacin que representa. La mayor parte del trabajo que vamos a realizar con nuestros scripts lo haremos a travs de variables.
Para trabajar con variables es necesario inicializarlas segn el tipo de dato que representa. El esquema bsico que sigue el lenguaje de programacin C# es el siguiente:
identifcador de
variable
(el tipo de dato que va a
contener esa variable)
nombre de
variable
(cualquier nombre
excepto los reservados)
asignacin valor
int a = 12 ;
identifcador de
variable
(el tipo de dato que va a
contener esa variable)
nombre de
variable
asignacin valor
int a = 12 ;
Inicializacin de variables
Asignacin de valor a variables
Inicializacin y asignacin en la misma lnea
int a = 12 ;
C# python
manual de scripting con grasshopper
Miguel Vidal
Guillermo Ramrez
p0192
07. Datos compuestos
Antes de comenzar con este apartado, recordamos que para declarar, inicializar y asignar valor a variables de datos compuestos, seguiremos el mismo esquema que
habamos visto en el apartado de variables, pero con una excepcin: debemos instanciarlos.
identifcador
de variable
(el tipo de
dato que va a
contener esa
variable)
tipo de
dato
(en qu
formato vamos
a almacenar
los datos)
nombre
de
variable
(el que
queramos)
asignacin
=
instanciacin
(new seguido del
tipo de dato)
valor
Listas
En programacin, las listas son sucesiones ordenadas de elementos. Para declarar e instanciar una lista, seguimos el esquema anterior:
La lista que acabamos de instanciar est vaca, para aadir elementos dentro
de ella, utilizamos la funcin .Add.
Finalmente, igualamos la salida con la lista que hemos fabricado.
Para extraer un tem, utilizamos el siguiente mtodo, que tambin lo podemos
asignar a otra salida del componente, despus de haberla aadido con Ouput
manager..
List<Point3d> listaPts = new List<Point3d>();
listaPts.Add(new Point3d(1, 1, 1));
listaPts.Add(new Point3d(2, 2, 2));
listaPts.Add(new Point3d(3, 3, 3));
B = listaPts[1];
A = listaPts;
C# python
manual de scripting con grasshopper
Miguel Vidal
Guillermo Ramrez
p0193
Matrices
Point3d[] puntos = new Point3d[3];
puntos[0] = new Point3d(1, 1, 1);
puntos[1] = new Point3d(2, 2, 2);
puntos[2] = new Point3d(3, 3, 3);
A = puntos;
B = puntos[2];
El trabajo con matrices es diferente al de listas. Para inicializar una matriz,
es necesario darle un tamao y no se pueden aadir elementos, sino que es
necesario igualar cada item a un valor.
C#
manual de scripting con grasshopper
Miguel Vidal
Guillermo Ramrez
p0194
Estructura de rbol de datos
DataTree<Point3d> puntos = new DataTree<Point3d>();
puntos.Add(new Point3d(1, 1, 1));
puntos.Add(new Point3d(2, 2, 2));
puntos.Add(new Point3d(3, 3, 3));
A = puntos;
B = puntos.Branch(0)[0];
DataTree<Point3d> puntos = new DataTree<Point3d>();
GH_Path ruta = new GH_Path(2);
puntos.Add(new Point3d(1, 1, 1), ruta);
puntos.Add(new Point3d(2, 2, 2), ruta);
puntos.Add(new Point3d(3, 3, 3), ruta);
A = puntos;
B = puntos.Branch(ruta)[0];
Tambin podemos asignar rutas en las que queremos almacenar la estructura
de rbol de datos, que declararemos con el tipo GH_Path. GH_Path se
construye con nmeros enteros. Las rutas o paths son nombres a las que se le
asignan a la estructura de rbol de datos.
C# python
manual de scripting con grasshopper
Miguel Vidal
Guillermo Ramrez
p0195
inicializacin
comprobacin
declaracin
actualizacin
(segn un rango
que establezcamos)
07. Iteracin
A3
for(inicializacin; comprobacin; rango de actualizacion)
{
declaracin;
}
for inicializacion in range(comienzo, rango):
declaracin
si es verdadero
si es falso
C# python
manual de scripting con grasshopper
Miguel Vidal
Guillermo Ramrez
p0196
A4
C# python
08. Funciones: abstraccin
Las funciones son subrutinas incluidas dentro de un programa ms grande y que nos permite resolver una tarea especfca. Las funciones son tiles para desarrollar
tareas que se van a repetir dentro del programa principal y para, de esta manera, modular el cdigo en apartados pequeos. Las funciones en C# devuelven un nico
valor, que se asigna con return.
Dicha subrutina, cuando es llamada dentro del cdigo principal, hace que la lectura de ese cdigo se detenga y se dirija a ejecutar el cdigo de la subrutina. En ciertos
lenguajes de programacin, como C#, las funciones son subrutinas que devuelven un valor. En los componentes de Grasshopper, tendremos que aadir el cdigo de la
funcin en el apartado de //<Custom additional code>.
Nuestra primera funcin, que fabricar vectores a partir de dos puntos, se llamar Vector2Puntos, y la podremos llamar desde nuestro cdigo como una funcin ms de
C# o RhnoCommon.
TIPO QUE DEVUELVE
(en caso de que devuelva
algn valor)
OPERACIONES DE LA FUNCIN
VALOR QUE QUEREMOS QUE DEVUELVA return
NOMBRE
{
}
Estructura de una funcin
;
(
)
PARMETROS DE LA
FUNCIN
(que hay que declarar en
este punto)
RhnoCommon en
Grasshopper
B
microejercicios de creacin de
geometra con RhinoCommon
B.1
manual de scripting con grasshopper
Miguel Vidal
Guillermo Ramrez
p0199
E01
dibujar cuatro puntos formando los vrtices de un cuadrado
private void RunScript(object x, object y, ref object A,
ref object B, ref object C, ref object D)
{
//declaramos las variables
double lado; // valor numrico decimal
Point3d vertice0; //punto3d (una clase de Rhino)
Point3d vertice1;
Point3d vertice2;
Point3d vertice3;
// asignamos valores a las variables
lado = 20;
// para los puntos, invocamos la clase Point3d con
new. El valor de las coordenadas X e Y del verticeOrigen
(propiedad de una clase) y le sumamos el valor de lado
vertice0 = new Point3d(0, 0, 0);
vertice1 = new Point3d(0, lado, 0);
vertice2 = new Point3d(lado, lado, 0);
vertice3 = new Point3d(0, lado, 0);
// asignamos cada uno de los puntos a una salida del
componente
A = vertice0;
B = vertice1;
C = vertice2;
D = vertice3;
}
# en primer lugar, tenemos que importar el mdulo de
geometra de Rhino
import Rhino.Geometry as rg
# con as asignamos un apodo a ese mdolu, de esta
manera, cada vez que llamamos a una clase de ese mdulo,
no tendremos que escribir todo su nombre, sino slo ese
apodo
# declaramos y asignamos la variable de lado
lado = 20
# declaramos y asignamos las variables de puntos
vertice0 = rg.Point3d.Origin
vertice1 = rg.Point3d(lado, 0, 0)
vertice2 = rg.Point3d(lado, lado, 0)
vertice3 = rg.Point3d(0, lado, 0)
# asignamos un vrtice a cada una de las salidas del
componente
a = vertice0
b = vertice1
c = vertice2
d = vertice3
01. objetivos
02. conceptos clave
03. procedimiento
- trabajar con variables
- construir puntos con RhinoCommon
double, Point3d
C#
python
manual de scripting con grasshopper
Miguel Vidal
Guillermo Ramrez
p0200
E02
dibujar cuatro puntos formando los vrtices de un cuadrado a partir de un vrtice inicial y un valor de lado
Tomamos dos variables exteriores al componente de script:
- una primera, que toma valores numricos de un slider. Deberemos hacer click con el botn derecho en la entrada y luego Type hint para que lo entienda como un
dato de tipo numrico decimal (double).
- otra segunda, a la que llamamos verticeInicial, que toma el valor del vrtice incial a partir del cual posicionamos el resto de puntos y que inicializamos como el tipo
Point3d de Rhino.
private void RunScript(double lado, Point3d
verticeOrigen, ref object A, ref object B, ref object C,
ref object D){
//declaramos las variables como punto3d (Point3d una
clase de Rhino) en una nica lnea
Point3d vertice1,vertice2,vertice3;
// asignamos un valor a la variable invocando la clase
Point3d con new El valor de las coordenadas X e Y del
punto(propiedad de una clase) y le sumamos el valor de lado
vertice1 = new Point3d(verticeOrigen.X + lado,
verticeOrigen.Y, 0);
vertice2 = new Point3d(verticeOrigen.X + lado,
verticeOrigen.Y + lado, 0);
vertice3 = new Point3d(verticeOrigen.X, verticeOrigen.Y
+ lado, 0);
// asignamos cada uno de los puntos a una salida
A = verticeOrigen;
B = vertice1;
C = vertice2;
D = vertice3;
}
# en primer lugar, tenemos que importar el mdulo de
geometra de Rhino
import Rhino.Geometry as rg
# con as asignamos un apodo cada vez que llamamos a una
clase de ese mdulo
# declaramos y asignamos las variables de puntos
vertice0 = rg.Point3d.Origin
vertice1 = rg.Point3d(lado, 0, 0)
vertice2 = rg.Point3d(lado, lado, 0)
vertice3 = rg.Point3d(0, lado, 0)
# asignamos un vrtice a cada una de las salidas del
componente
a = vertice0
b = vertice1
c = vertice2
d = vertice3
01. objetivos
02. conceptos clave
03. procedimiento
- acceder a propiedades de clases
- trabajar con input de datos externos al componente
double, Point3d
C# python
manual de scripting con grasshopper
Miguel Vidal
Guillermo Ramrez
p0201
E03
medir las distancias diagonales e imprimirlas en un panel
01. objetivos
02. conceptos clave
03. procedimiento
- imprimir texto por la salida out del componente de script y utilizar cadenas de caracteres
- utilizar funciones matemticas en el cdigo y los mtodos de Math
- trabajar con estructuras condicionales
double, Point3d, Distance, Print, if, else
Primero, calculamos la distancia algebraicomente y, luego, medimos la distancia con el mtodo Distance de Pointd3d. Por ltimo, comprobamos que ambas coinciden.
//// aadimos el cdigo del ejercicio anterior ////
// declaramos y asignamos las variables
double diagAlg1 = Math.Sqrt(Math.Pow((vertice2.X-
verticeOrigen.X), 2)+Math.Pow((vertice2.Y-
verticeOrigen.Y),2));//Math.Sqrt() es una raz cuadrada
double diagAlg2 = Math.Sqrt(Math.Pow((vertice3.X -
vertice1.X), 2) + Math.Pow((vertice3.Y - vertice1.Y), 2));
double diagPt1 = verticeOrigen.DistanceTo(vertice2);
double diagPt2 = vertice1.DistanceTo(vertice3);
// Math.Round redondea a los decimales que queramos
diagAlg1 = Math.Round(diagAlg1, 2);
diagAlg2 = Math.Round(diagAlg2, 2);
diagPt1 = Math.Round(diagPt1, 2);
diagPt2 = Math.Round(diagPt2, 2);
// estructura condicional
if((Math.Round(diagAlg1, 2) == Math.Round(diagPt1, 2))
&& (Math.Round(diagAlg2, 2) == Math.Round(diagPt2, 2)))
{
Print(guay!);
}
else
{
Print(horror!);
}
### aadimos, primero, el cdigo del ejercicio anterior ###
# importamos los mdulos que vamos a utilizar
import math
# declaramos y asignamos las variables de las diagonales
diagAlg1 = math.sqrt(math.pow((vertice2.X-vertice0.X), 2)+
math.pow((vertice2.Y-vertice0.Y) ,2))
#math.sqrt() es una raz cuadrada
diagAlg2 = math.sqrt(math.pow((vertice3.X - vertice1.X), 2)
+ math.pow((vertice3.Y - vertice1.Y), 2));
diagPt1 = vertice0.DistanceTo(vertice2)
diagPt2 = vertice1.DistanceTo(vertice3)
# round redondea el valor a tantos decimales como queramos
diagAlg1 = round(diagAlg1, 2)
diagAlg2 = round(diagAlg2, 2)
diagPt1 = round(diagPt1, 2)
diagPt2 = round(diagPt2, 2)
# estructura condicional
if((round(diagAlg1, 2) == round(diagPt1, 2)) &
(round(diagAlg2, 2) == round(diagPt2, 2))):
print(guay!)
else:
print(horror!)
C# python
manual de scripting con grasshopper
Miguel Vidal
Guillermo Ramrez
p0202
E04
introducir los puntos en una lista
01. objetivos
02. conceptos clave
03. procedimiento
- aprender a declarar, crear y aadir valores a una lista
List, new, Add
private void RunScript(double lado, Point3d verticeO-
rigen, ref object A)
{
//declaramos las variables como punto3d (una clase de
Rhino)
Point3d vertice1 = new Point3d(verticeOrigen.X + lado,
verticeOrigen.Y, 0);
Point3d vertice2 = new Point3d(verticeOrigen.X + lado,
verticeOrigen.Y + lado, 0);
Point3d vertice3 = new Point3d(verticeOrigen.X,
verticeOrigen.Y + lado, 0);
// declaramos una lista de puntos llamada vertices
List<Point3d> vertices;
// utilizamos el constructor predeterminado para crear
una lista de de puntos con una capacidad de 0
vertices = new List<Point3d>();
//aadimos valores a la lista en orden
vertices.Add(verticeOrigen);
vertices.Add(vertice1);
vertices.Add(vertice2);
vertices.Add(vertice3);
// asignamos la lista a una salida
A = vertices;
}
# importamos los mdulos que vamos a utilizar
import math
import Rhino.Geometry as rg
# declaramos y asignamos las variables de puntos
vertice0 = rg.Point3d.Origin
vertice1 = rg.Point3d(lado, 0, 0)
vertice2 = rg.Point3d(lado, lado, 0)
vertice3 = rg.Point3d(0, lado, 0)
# declaramos una lista a la que nombramos vertices
vertices = []
# aadimos a los puntos anteriormente crados a esa lista de
puntos
vertices.append(vertice0)
vertices.append(vertice1)
vertices.append(vertice2)
vertices.append(vertice3)
a = vertices
C# python
manual de scripting con grasshopper
Miguel Vidal
Guillermo Ramrez
p0203
E05
01. objetivos
02. conceptos clave
03. procedimiento
C# python
- aprender a fabricar vectores, planos y rectngulos
Plane, Vector3d, Rectangle3d
//// utilizamos el cdigo del ejercicio anterior,
aadiendo una nueva salida, a la que llamamos R //////
// para fabricar un rectngulo, necesitaremos un plano
y dos nmeros decimales para el ancho y el alto
Rectangle3d rec;
// podemos fabricar un plano de distintas maneras, pero
vamos a hacerlo a partir de un punto base y dos vectores
Plane planoRec;
Point3d ptoOrigenPlano = vertices[0]; // podemos
declarar la variable y asignarle valor en la misma linea
Vector3d vecXPlano = new Vector3d();// para construir
un vector necesitamos sus coordenadas XYZ
// sobreescribimos las propiedades X, Y y Z del vector
vecXPlano.X = vertices[1].X - vertices[0].X;
vecXPlano.Y = vertices[1].Y - vertices[0].Y;
vecXPlano.Z = vertices[1].Z - vertices[0].Z;
// tambin podemos declarar y construir el vector en la
misma lnea
Vector3d vecYPlano = new Vector3d(vertices[3].X -
vertices[0].X, vertices[3].Y - vertices[0].Y, vertices[3].Z
- vertices[0].Z);
planoRec = new Plane(ptoOrigenPlano, vecXPlano,
vecYPlano);
// ancho y alto: sern la misma medida, un lado
double ladoRec = vertices[0].DistanceTo(vertices[1]);
rec = new Rectangle3d(planoRec, ladoRec, ladoRec);
R = rec;
### utilizamos el mismo cdigo del ejercicio anterior,
aadiendo una nueva salida, a la que llamamos R ###
# para fabricar un rectngulo,necesitaremos, en primer
lugar, un plano y, en segundo lugar, dos nmeros decimales
para el ancho y el alto.
## PLANO: se define a partir de un punto y dos vectores
ptoOrigenPlano = vertices[0] # punto de origen plano
vecXPlano = rg.Vector3d.Unset # para definir los vectores,
podemos, primero declaramos el vector como unset (no
definido) y luego pasamos las variables X, Y, Z
vecXPlano.X = vertices[1].X - vertices[0].X
vecXPlano.Y = vertices[1].Y - vertices[0].Y
vecXPlano.Z = vertices[1].Z - vertices[0].Z
## o tambin podemos declarar y asignar el valor al vector
en la misma lnea
vecYPlano = rg.Vector3d(vertices[3].X - vertices[0].X,
vertices[3].Y - vertices[0].Y,
vertices[3].Z - vertices[0].Z)
planoRec = rg.Plane(ptoOrigenPlano, vecXPlano, vecYPlano)
## ANCHO y ALTO: este caso, sern la misma medida, un lado
ladoRec = vertices[0].DistanceTo(vertices[1])
rec = rg.Rectangle3d(planoRec, ladoRec, ladoRec)#rectngulo
R = rec # salida de datos
dibujar un rectngulo a partir de esos puntos
manual de scripting con grasshopper
Miguel Vidal
Guillermo Ramrez
p0204
E06
extraer los puntos medios y tercios de los segmentos del rectngulo anteriormente creado
01. objetivos
02. conceptos clave
03. procedimiento
- aprender cmo trabaja un bucle for
- acceder a a mtodos de curvas
for, List, List item, Add
//// utilizamos el mismo cdigo que en el ejercicio
anterior E05 con nuevas salidas en el componente, una para
los puntos medios y otra para los puntos tercios, a las que
llamamos PM y PT respectivamente ////
// definimos listas para los puntos medios y tercios
List<Point3d> ptosMedios = new List<Point3d>();
List<Point3d> ptosTercios = new List<Point3d>();
// no existe ningn mtodo en la clase Rectangle3d
de Rhino para poder acceder a sus segmentos. Para ello,
debemos, primero, convertir el rectngulo en polilnea, con
el que s podremos trabajar con los segmentos
Polyline pol = rec.ToPolyline();
// bucle para extraer los puntos medios y tercios
for(int i = 0; i < pol.SegmentCount; i++)
{
ptosMedios.Add(pol.SegmentAt(i).PointAt(0.5));
ptosTercios.Add(pol.SegmentAt(i).PointAt(0.333333));
// .SegmentAt() es el mtodo con el que accedemos a
las coordenadas locales de una curva para obtener un punto.
Una lnea est definida localmente en un dominio entre 0 y
1. El punto medio estar en 0.5 y el tercio en 0.333.
}
PM = ptosMedios;
PT = ptosTercios;
### utilizamos el mismo cdigo que en el ejercicio anterior
E05 con nuevas salidas en el componente, una para los
puntos medios y otra para los puntos tercios, a las que
llamamos PM y PT ###
# definimos listas para los puntos medios y tercios
ptosMedios =[]
ptosTercios = []
# no existe ningn mtodo en la clase Rectangle3d de Rhino
para poder acceder a sus segmentos. Para ello, debemos,
primero, convertir el rectngulo en polilnea, con el que
s podremos trabajar con los segmentos
rec = rec.ToPolyline()
# hacemos un bucle iterativo para unir puntos
consectivamente. Es necesario indentado el cdigo
for i in range(0, rec.SegmentCount):
# . SegmentCount es el mtodo que nos devuelve el nmero de
segmentos de la polilnea
ptosMedios.append(rec.SegmentAt(i).PointAt(0.5))
# .SegmentAt() es el mtodo con el que accedemos a las
coordenadas locales de una curva para obtener un punto. Una
lnea est definida localmente en un dominio entre 0 y 1.
El punto medio estar en 0.5 y el tercio en 0.333.
PM = ptosMedios
PT = ptosTercios
C# python
Si quieremos llevar a cabo una tarea muy repetitiva o que es iterativa, utlizaremos una secuencia de bucle for. En este caso, se tratar de extraer los puntos medios de
todos los segmentos del rectngulo que antes hemos creado.
manual de scripting con grasshopper
Miguel Vidal
Guillermo Ramrez
p0205
E07
unir consecutivamente los puntos medios y tercios mediante lneas
01. objetivos
02. conceptos clave
03. procedimiento
- repasar la estructura iterativa del bucle for y la condicional if ... else
- aprender a dibujar lneas
for, List, List item, Add
//// utilizamos el mismo cdigo que en el ejercicio
anterior con una nueva salida en el componente para las
lneas,a la que llamamos L ////
// declaracin de lista de lineas para los lados
List<Line> lineas = new List<Line>();
// bucle para unir los vrtices consecutivamente
for(int i = 0; i < ptosMedios.Count; i++)
{
// en primer lugar, aadimos una excepcin para el
ltimo elemento de la lista
if(i == ptosMedios.Count - 1)
{
lineas.Add(new Line(ptosMedios[i], ptosTercios[0]));
}
// si no colocramos la excepcin al comienzo,
obtendramos un error por acceso a un exceso de ndices de
lista
else
{
lineas.Add(new Line(ptosMedios[i], ptosTercios[i +
1]));
}
}
L = lineas; // salida de datos
### utilizamos el mismo cdigo que en el ejercicio anterior
con una nueva salida en el componente para las lneas, a la
que llamamos L ###
# definimos una lista para las lneas
lineas = []
# hacemos un bucle iterativo para unir puntos
consectivamente
for i in range(0, len(ptosMedios)):
# en primer lugar, aadimos una excepcin para el
ltimo elemento de la lista
if(i == len(ptosMedios) - 1):
lineas.append(rg.Line(ptosMedios[i],
ptosTercios[0]))
# para aadir lineas en cada pasada del bucle,
utilizamos el mtodo append
# si no colocramos la excepcin al comienzo,
obtendramos un error por acceso a un exceso de ndices de
lista
else:
lineas.append(rg.Line(ptosMedios[i], ptosTercios[i
+ 1]))
# salida de datos
L = lineas
C# python
manual de scripting con grasshopper
Miguel Vidal
Guillermo Ramrez
p0206
E08
extraer las intersecciones de las proyecciiones de lneas anteriormente creadas
01. objetivos
02. conceptos clave
03. procedimiento
- conocer cmo se trabaja con intersecciones de geometra
Intersection
# utilizamos el mismo cdigo que en el ejercicio anterior
con una nueva salida en el componente para los puntos de
interseccin, a la que llamamos I
# lista de intersecciones
intersecciones = []
for i in range (0, len(lineas)):
if(i == len(lineas) - 1):
hayInterseccion, a, b = rg.Intersect.Intersection.
LineLine(lineas[i], lineas[0], 0, False)
# hayInterseccion (boolean), a y b (double) son los
valores que devuelve la funcin de interseccin. El primero
nos dice si existe o no esa interseccin. Los otros dos son
los valores de coordenadas locales de dicha interseccin
para la primera y la segunda lnea respectivamente
else:
hayInterseccion, a, b = rg.Intersect.Intersection.
LineLine(lineas[i], lineas[i + 1], 0, False)
intersecciones.append(lineas[i].PointAt(a))
I = intersecciones
# comprobamos que las intersecciones de lneas no son las
de los tramos de los segmento de lnea sino de las lneas
como segmentos infinitos
//// utilizamos el mismo cdigo que en el ejercicio
anterior con una nueva salida a la que llamamos I ////
List<Point3d> intersecciones = new List<Point3d>();
double a, b;
for(int i = 0; i < lineas.Count; i++)
{
if(i == lineas.Count - 1){
bool hayInterseccion = Rhino.Geometry.Intersect.
Intersection.LineLine(lineas[i], lineas[0], out a, out b,
0.0, false);
if(hayInterseccion){
intersecciones.Add(lineas[i].PointAt(a));
}
}
else{
bool hayInterseccion = Rhino.Geometry.Intersect.
Intersection.LineLine(lineas[i], lineas[i + 1], out a, out
b, 0.0, false);
if(hayInterseccion){
intersecciones.Add(lineas[i].PointAt(a));
}
}
}
I = intersecciones;
C# python
Las intersecciones se encuentran en el espacio de nombres (Namespace) Intersect de Rhino. En este ejercicio, vamos a emplear el mtodo para intersecciones de
lneas, es decir, Intersect.Intersection.LineLine. Hay que tener en cuenta que el valor que devuelven las funciones de interseccin es un booleano: verdadero (true) o
falso (false) dependiendo de si hay interseccin o no la hay. Vamos a aprender a continuacin cmo extraer la geometra fruto de la interseccin en los dos lenguajes.
manual de scripting con grasshopper
Miguel Vidal
Guillermo Ramrez
p0207
E09
elaborar una funcin para fabricar vectores entre dos puntos
//<Custom additional code>
Vector3d Vector2Puntos(Point3d ptoA, Point3d ptoB)
{
Vector3d vec = new Vector3d(ptoB.X - ptoA.X, ptoB.Y -
ptoA.Y, ptoB.Z - ptoA.Z);
return vec;
}
01. objetivos
02. conceptos clave
03. procedimiento
- aprender a elaborar funciones
function, Vector3d, Rectangle3d
Este cdigo lo aadimos en el apartado custom additional code de tal manera que sirva para llamarlo en cualquier momento dentro del cdigo principal.
manual de scripting con grasshopper
Miguel Vidal
Guillermo Ramrez
p0208
ejemplos de aplicacin
B2
manual de scripting con grasshopper
Miguel Vidal
Guillermo Ramrez
p0210
pabelln de la Serpentine Gallery 2002, Toyo Ito con Cecil Balmond
B2
Fotografa: David Martin, fuente: fickr.com/photos/avidday
01. objetivos
02. conceptos clave
03. procedimiento
- crear geometra bidimensioneal y tridimensional con RhinoCommon
- entender el funcionamiento de estructura de datos en programacin orientada a objetos
- aprender a trabajar con funciones para modular el cdigo
List, DataTree, for, if
1. Dibujar el rectngulo inicial
2. Extraer los puntos medios y tercios
3. Dibujar las lneas de unin entre los puntos medios y tercios (lneas auxiliares)
4. Dibujar las lneas de interseccin con el rectngulo inicial (lneas de estructura)
5. Dibujar un nuevo rectngulo a partir de puntos medios y tercios
6. Introducir todas las funciones en un bucle iterativo
7. Terminar el dibujo de la cubierta y las fachadas
5. Nuevo rectngulo 4. Lneas de
estructura (en la 1
iteracin son coincidentes con
las lneas auxiliares)
7. Terminar de
modelar la curbierta y
fachadas *
6. Introducir todas
las funciones en un
bucle iterativo
2. Puntos medios y
tercios del rectngulo
inicial
3. Lneas auxiliares 1. Rectngulo inicial
El pabelln temporal del ao 2002 de la galera Serpentine, proyectado por Toyo Ito con Cecil Balmond,
de Arup, se construye a partir de un algoritmo iterativo que dibuja la cubierta. Partiendo de un cuadrado,
se van uniendo consecutivamente los puntos medios con los puntos tercios de sus segmentos.
* Este apartado del ejercicio, por su complejidad, se realizar con los componentes precargados de Grasshopper., por lo que no se explicar paso a paso en este manua.
manual de scripting con grasshopper
Miguel Vidal
Guillermo Ramrez
p0211
private void RunScript(double li, double cota, ref object rec_inic)
{
// declaracin de variable
Rectangle3d recInic;
// asignacin de variable
recInic = new Rectangle3d();
// inicializacin de variable (refiriendose adecuadamente a sus
constructores)
recInic = new Rectangle3d(new Plane(new Point3d(0, 0, cota), Vector3d.XAxis,
Vector3d.YAxis), new Interval(0, li), new Interval(0, li)); // el valor del lado
del cuadrado es un slider (li)

// asignar la variable construida a la salida rec_inic
rec_inic = recInic;
}
1. Dibujar el rectngulo inicial
Nuestro componente de script tendr dos entradas conectadas a sliders: li, que defne el lado del
cuadrado inicial, y cota, que defne la cota de arranque de la cubierta; y una salida: rec_inic:
manual de scripting con grasshopper
Miguel Vidal
Guillermo Ramrez
p0212
private void RunScript(double li, double cota, ref object rec_inic)
{
// declaracin, asignacin e inicializacin de variable en la misma lnea
Rectangle3d recInic = new Rectangle3d(Plane.WorldXY, new Interval(0, li), new
Interval(0, li));
// asignar la variable construida a la salida rec_inic
rec_inic = recInic;
// lista contenedora de puntos
List<Point3d> ptosMedios = new List<Point3d>();
List<Point3d> ptosTercios = new List<Point3d>();
//dividimos los segmentos
// para ello, convertimos el rectngulo en polilnea con Rectangle3d.
ToPolyline(), de tal manera que podemos acceder a cada uno de los segmentos con el
mtodo SegmentAt(indiceDeSegmento)
for(int s = 0; s < recInic.ToPolyline().SegmentCount; s++)
{
Point3d ptoMedio = recInic.ToPolyline().SegmentAt(s).PointAt(0.5);
ptosMedios.Add(ptoMedio);
Point3d ptoTercio = recInic.ToPolyline().SegmentAt(s).PointAt(0.333);
ptosTercios.Add(ptoTercio)
}
// devolvemos las variables por salidas diferentes
ptos_medios = ptosMedios;
ptos_tercios = ptosTercios;
}
2. Extraer puntos medios y tercios
manual de scripting con grasshopper
Miguel Vidal
Guillermo Ramrez
p0213
3. Dibujar las lneas auxiliares
Para dibujar las lneas auxiliares, tendremos que unir el punto medio con el punto tercio del siguiente
segmento. Tendremos que incluir una excepcin para el ltimo segmento del rectngulo, puesto que si
dejamos que la lista vaya hasta el ltimo elemento, el script dar un error. La excepcin consistir en
que, cuando llegue al ltimo ndice, se una con el primer elemento y no con el siguiente.
private void RunScript(double li, ref object rec_inic, ref object ptos_medios,
ref object ptos_tercios, ref object LA)
{
// declaracin, asignacin e inicializacin de variable
Rectangle3d recInic = new Rectangle3d(Plane.WorldXY, new Interval(0, li), new
Interval(0, li));
rec_inic = recInic; // asignar la variable construida a la salida rec_inic
// listas contenedoras de puntos
List<Point3d> ptosMedios = new List<Point3d>();
List<Point3d> ptosTercios = new List<Point3d>();
//lista contenedora de lineas
List<Line> lineas = new List<Line>();
// convertimos el rectngulo a polilnea con la funcin .ToPolyline() al
principio
// y se la asignamos a una variable para no tener que llamarla luego tantas
veces
Polyline pol = recInic.ToPolyline();
//dividimos los segmentos
for(int s = 0; s < pol.SegmentCount; s++)
{
//variables que se sobreescriben en cada pasada del bucle
Point3d ptoMedio = new Point3d();
Point3d ptoTercio = new Point3d();
Line lPmPt = new Line();
//excepcin en primer lugar para no caer en error con los ndices de
manual de scripting con grasshopper
Miguel Vidal
Guillermo Ramrez
p0214
listas
if(s == pol.SegmentCount - 1)
{
ptoMedio = pol.SegmentAt(s).PointAt(0.5);
ptoTercio = pol.SegmentAt(0).PointAt(0.333);
lPmPt = new Line(ptoMedio, ptoTercio);
}
else
{
ptoMedio = pol.SegmentAt(s).PointAt(0.5);
ptoTercio = pol.SegmentAt(s + 1).PointAt(0.333);
lPmPt = new Line(ptoMedio, ptoTercio);
}
//aadimos a las listas
ptosMedios.Add(ptoMedio);
ptosTercios.Add(ptoTercio);
lineas.Add(lPmPt);
}
// devolvemos las variables por salidas diferentes
ptos_medios = ptosMedios;
ptos_tercios = ptosTercios;
LA = lineas;
}
manual de scripting con grasshopper
Miguel Vidal
Guillermo Ramrez
p0215
4. Dibujar las lneas de estructura (interseccin con el rectngulo inicial)
Hemos llamado lneas de estructura a aquellas que son la proyeccin de las lneas auxiliares sobre el rectngulo inicial. En la primera iteracin, las lneas auxiliares
coincidirn con las lneas de estructura, pero en las dems no.
Para dibujar estas lneas, primero hallaremos la interseccin entre las lneas auxiliares con cada uno de los segmentos del rectngulo inicial. En Rhino, una interseccin
entre dos lneas se puede tomar como la interseccin entre dos lneas similares pero de longitud infnita, as que no es necesario que se intersequen fsicamente para
que devuelvan los puntos de interseccin.
//(...) todo el bloque de cdigo del ejercicio anterior
//dividimos los segmentos
for(int s = 0; s < pol.SegmentCount; s++)
{
//(...) todo el bloque de cdigo del ejercicio anterior
// INTERSECCIN DE DOS LNEAS
//lista de intersecciones
List<Point3d> inter = new List<Point3d>();
// ruta para los datatree
GH_Path ruta = new GH_Path(s);
// fabricamos un nuevo bucle para las intersecciones
con el rectngulo inicial
for(int i = 0; i < pol.SegmentCount; i++)
{
double a; // parametro t de la primera linea
double b; // parametro t de la segunda linea
bool rc = Rhino.Geometry.Intersect.Intersection.
LineLine(lPmPt, pol.SegmentAt(i), out a, out b, 0.0,
false);
if(rc && (a >= 0 && b >= 0))// algunas de las
intersecciones devolver nulo o fuera de una linea (-1),
manual de scripting con grasshopper
Miguel Vidal
Guillermo Ramrez
p0216
as que colocamos esta excepcin para no caer en error
{
inter.Add(pol.SegmentAt(i).PointAt(b));
}
}
//aadimos a la lista de puntos e intersecciones
ptosInt.AddRange(inter, ruta);
lineasEst.Add(new Line (inter[0], inter[1]), ruta);
///////////////////////////////////////////
//aadimos a las listas
ptosMedios.Add(ptoMedio);
ptosTercios.Add(ptoTercio);
lineas.Add(lPmPt);
}
// devolvemos las variables por salidas diferentes
ptos_medios = ptosMedios;
ptos_tercios = ptosTercios;
LA = lineas;
PI = ptosInt;
LE = lineasEst;
manual de scripting con grasshopper
Miguel Vidal
Guillermo Ramrez
p0217
5. Dibujar un rectngulo a partir de las lneas auxiliares anteriores
Rectangle3d RectanguloAPartirDeAuxiliares(List<Line> lineasAux)
{
Rectangle3d rec; //variable que vamos a devolver
List<Point3d> verRec = new List<Point3d>(); //vertices del plano del
rectangulo
Plane pl; //plano del rectngulo
// este bucle nos sirve para encontrar los vertices del rectangulo
for (int j = 0; j < lineasAux.Count - 1; j++)
{
bool hayInterseccion;
double paramLinea1, paramLinea2;
hayInterseccion = Rhino.Geometry.Intersect.Intersection.
LineLine(lineasAux[j], lineasAux[j + 1],
out paramLinea1, out paramLinea2, 0, false);
if(hayInterseccion && (paramLinea2 <= 1))
{
//aadimos a la lista de intersecciones en el rectangulo
verRec.Add(lineasAux[j + 1].PointAt(paramLinea2));
}
}
pl = new Plane(verRec[0], verRec[1], verRec[2]);//plano del rectangulo
// construimos el nuevo rectangulo
return rec = new Rectangle3d(pl, verRec[0].DistanceTo(verRec[1]),
verRec[1].DistanceTo(verRec[2]));
}
Elaboramos una funcin que devuelva un rectngulo a partir de una lista de lneas, que sern las lneas
auxiliares. A dicha funcin la hemos llamado RectanguloAPartirDeAuxiliares.
El resutlatdo de esta funcin tiene que sobreescribirse en cada iteracin.
manual de scripting con grasshopper
Miguel Vidal
Guillermo Ramrez
p0218
6. Introducimos todas las funciones en un bucle iterativo
Al introducir todas los pasos anteriores en sus correspondientes funciones y llamarlas desde un cdigo
principal, obtendremos la siguiente solucin con cada funcin a continuacin:
private void RunScript(double li, int nIt, ref object rec_inic, ref object
lineas_auxiliares, ref object lineas_estructura)
{
// rectngulo inicial
Rectangle3d recInic = new Rectangle3d(Plane.WorldXY, new Interval(0, li),
new Interval(0, li));
DataTree<Line> lineasAux = new DataTree<Line>();
DataTree<Line> estructura = new DataTree<Line>();
Rectangle3d rec = recInic;
for (int i = 0; i < nIt; i++)
{
//almacenamos cada paso del bucle en una rama diferente
GH_Path ruta = new GH_Path(i);
List<Line> ln = FabricarDivisiones(rec);
List<Line> est = LineasEstructura(recInic, ln);
lineasAux.AddRange(ln, ruta);
estructura.AddRange(est, ruta);
// rectangulo que se va a ir sobreescribiendo en cada paso del bucle
rec = RectanguloAPartirDeAuxiliares(ln);
}
// salida de datos
rec_inic = recInic;
lineas_auxiliares = lineasAux;
lineas_estructura = estructura;
}
manual de scripting con grasshopper
Miguel Vidal
Guillermo Ramrez
p0219
FUNCIN PARA CONSTRUIR LAS LNEAS AUXILIARES
List<Line> LineasAuxiliares(Rectangle3d recInic)
{
// lista contenedora de puntos
List<Point3d> ptosMedios = new List<Point3d>();
List<Point3d> ptosTercios = new List<Point3d>();
//lista contenedora de lineas
List<Line> lineas = new List<Line>();
for(int s = 0; s < recInic.ToPolyline().SegmentCount; s++)
{
//variables que se sobreescriben en cada pasada del bucle
Point3d ptoMedio = new Point3d();
Point3d ptoTercio = new Point3d();
Line lPmPt = new Line();
//excepcin en primer lugar para no caer en error con los ndices de
listas
if(s == recInic.ToPolyline().SegmentCount - 1)
{
ptoMedio = recInic.ToPolyline().SegmentAt(s).PointAt(0.5);
ptoTercio = recInic.ToPolyline().SegmentAt(0).PointAt(0.333);
lPmPt = new Line(ptoMedio, ptoTercio);
}
else
{
ptoMedio = recInic.ToPolyline().SegmentAt(s).PointAt(0.5);
ptoTercio = recInic.ToPolyline().SegmentAt(s + 1).PointAt(0.333);
lPmPt = new Line(ptoMedio, ptoTercio);
}
//aadimos a las listas
ptosMedios.Add(ptoMedio);
ptosTercios.Add(ptoTercio);
manual de scripting con grasshopper
Miguel Vidal
Guillermo Ramrez
p0220
lineas.Add(lPmPt);
}
//devolvemos un valor de la funcin
return lineas;
}
FUNCIN PARA CONSTRUIR LAS LNEAS AUXILIARES
List<Line> LineasEstructura (Rectangle3d recInic, List<Line> div)
{
// declaramos e inicializamos la lista de lneas que vamos a querer devolver
List<Line> lineas = new List<Line>();
for(int i = 0; i < div.Count; i++)
{
// fabricamos el plano
Plane plano = new Plane(div[i].From, Vector2Points(div[i].From, div[i].
To), Vector3d.ZAxis);
// declaramos la lista de intersecciones
List<Point3d> pi = new List<Point3d>();
//fabricamos la interseccin con todos los segmentos del rectangulo
for(int s = 0; s < recInic.ToPolyline().SegmentCount; s++)
{
Rhino.Geometry.Intersect.CurveIntersections ci = Rhino.Geometry.
Intersect.Intersection.CurvePlane(recInic.ToPolyline().SegmentAt(s).
ToNurbsCurve(), plano, 0.0);

//para no caer en error cuando no hay intersecciones, aadimos la
excepcin de que slo aadimos los puntos cuando haya interseccin
if(ci != null)
manual de scripting con grasshopper
Miguel Vidal
Guillermo Ramrez
p0221
{
//aadimos los puntos
for (int p = 0; p < ci.Count; p++)
{
pi.Add(ci[p].PointA);
}
}
}
//fabricamos la lnea y la aadimos a la lista
lineas.Add(new Line(pi[0], pi[1]));
}
return lineas;
}
FUNCIN PARA CONSTRUIR UN RECTNGULO A PARTIR DE LAS LNEAS AUXILIARES
Rectangle3d RectanguloAPartirDeAuxiliares(List<Line> lineasAux)
{
Rectangle3d rec; //variable que vamos a devolver
List<Point3d> verRec = new List<Point3d>(); //vertices del plano del
rectangulo
Plane pl; //plano del rectngulo
// este bucle nos sirve para encontrar los vertices del rectangulo
for (int j = 0; j < lineasAux.Count - 1; j++)
{
bool hayInterseccion;
double paramLinea1, paramLinea2;
hayInterseccion = Rhino.Geometry.Intersect.Intersection.
LineLine(lineasAux[j], lineasAux[j + 1], out paramLinea1, out paramLinea2, 0,
false);
manual de scripting con grasshopper
Miguel Vidal
Guillermo Ramrez
p0222
if(hayInterseccion && (paramLinea2 <= 1))
{
//aadimos a la lista de intersecciones en el rectangulo
verRec.Add(lineasAux[j + 1].PointAt(paramLinea2));
}
}
pl = new Plane(verRec[0], verRec[1], verRec[2]);//plano del rectangulo

// construimos el nuevo rectangulo
return rec = new Rectangle3d(pl, verRec[0].DistanceTo(verRec[1]), verRec[1].
DistanceTo(verRec[2]));
}
FUNCIN PARA CONSTRUIR UN VECTOR A PARTIR DE DOS PUNTOS
Vector3d Vector2Points(Point3d ptoA, Point3d ptoB)
{
Vector3d vec = new Vector3d(ptoB.X - ptoA.X, ptoB.Y - ptoA.Y, ptoB.Z -
ptoA.Z);
return vec;
}
manual de scripting con grasshopper
Miguel Vidal
Guillermo Ramrez
p0223
ANEXOS
Estructura de
RhinocCommon
ANEXO 1
RHINOCOMMON
RHINO GRASHOPPER
GRASHOPPER_IO
GRASHOPPER
RHINO PYTHON RHINO FOR MAC
Rhino
Rhino.ApplicationSettings
Rhino.Collections
CurveList
Rhino.Commands
Rhino. Display
CustomDisplay
Text3d
Rhino.DocObjects
RhinoObject
Rhino.DocObjects.Custom
Rhino.DocObjects.Tables
Rhino.FileIO
Rhino. Geometry
Point3d
Vector3d
Box
Brep
Curve
Polyline
Rectangle3d
Surface
Rhino. Geometry.Collections
BrepFace
BrepEdge
Rhino. Geometry.Intersect
CurveIntersection
Intersection
IntersectionEvent
Rhino.Input
Rhino.Input.Custom
Rhino.Plugins
Rhino.Render
Rhino.Render.Custom
Rhino.Runtime
Rhino.Runtime.InteropWrapper
Rhino.UI
GH_ISerializable
Interface
GH_IO.Serialization
GH_IO.Types
GH_IO.UserInterface
GH_InstanceServer
Grasshopper.GUI
Grasshopper.Kernel
GH_Path
GH_Document
NOTA: Se resaltan en negrita los NameSpace que utilizamos en los ejercicios del manual. Se muestran slo las clases con las que vamos a trabajar.
Processing
01. Estructura bsica de un programa de Processing
02. El lienzo y la consola
03. Algunas funciones de dibujo bsico
04. Algunas funciones de interaccin bsicas
05. Ejemplos de aplicacin
ANEXO 2
manual de scripting con grasshopper
Miguel Vidal
Guillermo Ramrez
p0228
01. Estructura de la interfaz de Processing: el lienzo y la consola
size(ancho, alto); //tamao del lienzo
background(155);
El lienzo es el espacio de pantalla en el que vamos a hacer nuestro dibujo de
Processing y consiste en una rejilla de pxeles de color.
El lienzo tiene dos propiedades.
- tamao o size
- color de fondo o background
El ancho y alto del lienzo se pueden llamar en cualquier
Es la ventana en la que imprimimos textodesde el codigo de Processing.
Utilizamos dos funciones:
- print: escribe cadenas de caracteres de un modo continuo
- println: escribe cadenas de caracteres aadiendo un salto de carro
El lienzo (canvas)
La consola
x
y
manual de scripting con grasshopper
Miguel Vidal
Guillermo Ramrez
p0229
02. Colores y formas
Es el espacio de pantalla en el que vamos a hacer nuestro dibujo de Processing.
Tiene dos propiedades.
- tamao o size
- color de fondo o background
El lienzo (canvas)
manual de scripting con grasshopper
Miguel Vidal
Guillermo Ramrez
p0230
03. Declaracin de variables
manual de scripting con grasshopper
Miguel Vidal
Guillermo Ramrez
p0231
manual de scripting con grasshopper
Miguel Vidal
Guillermo Ramrez
p0232
02. El lienzo y la consola
// Esta primera parte es la que se ejecuta primero cuando
el programa corre.
as que declararemos las variables globales al principio
del cdigo, que podrn ser llamadas en cualquier apartado
del programa
int y = 0;
// a continuacin, vienen las funciones setup y draw. cada
programa tiene una sola de cada una de estas funciones.
Los corchetes de cada una de ellas definen un bloque
independiente
// el bloque de la funcin setup se ejecuta una nica vez
por programa y en ella colocamos, fundamentalmente, las
propiedades del dibujo de processing
void setup()
{
size(300, 300); //tamao del lienzo
}
// el bloque de la funcin draw se ejecuta continuamente
hasta que el programa para
void draw()
{
line(0, y, 300, y); //dibujo de una lnea
y = y + 4;
}
manual de scripting con grasshopper
Miguel Vidal
Guillermo Ramrez
p0233
02. Algunas funciones bsicas de dibujo en Processing
Dibujar un punto
point (x, y);
x entero o decimal: coordenada x del punto
y entero o decimal: coordenada y del punto
Dibujar una lnea
line (x1, y1, x1, y1);
x1 entero o decimal: coordenada x del punto origen
y1 entero o decimal: coordenada y del punto origen
x2 entero o decimal: coordenada x del punto destino
y2 entero o decimal: coordenada y del punto destino
Dibujar un rectngulo
rect(x, y, ancho, alto);
x entero o decimal: coordenada X del vrtice superior
izquierdo
y entero o decimal: coordenada Y del vrtice superior
izquierdo
ancho entero o decimal: anchura del rectngulo
alto entero o decimal: altura del rectngulo
Dibujar una elipse
ellipse(x, y, ancho, alto);
x entero o decimal: coordenada X de la elipse
y entero o decimal: coordenada Y de la elipse
width entero o decimal: anchura de la elipse
height entero o decimal: altura de la elipse
Dibujar una curva

beginShape();
curveVertex(x, y);
endShape();
x entero o decimal: coordenada X del vrtice de la
curva
y entero o decimal: coordenada Y del vrtice de la
curva
Dibujar texto
PFont miFuente;
miFuente = createFont(FFScala, 32); // crea
automticamente una fuente y la guarda en la carpeta data
de nuestro dibujo de Processing
textFont(miFuente);// esta funcin asigna el tipo de fuente
con la que se va a dibujar a continuacin
text(hola cocacola, x, y);
texto caracter o cadena de caracteres
x entero o decimal: coordenada X del texto
y entero o decimal: coordenada Y del texto
Colocar una imagen
PImage p;
p = loadImage(nombre);
image(p, x, y);
nombre cadena de caracteres: nombre de la imagen, si
est en la carpeta data, si no, ruta de la misma
x entero o decimal: coordenada X de la imagen
y entero o decimal: coordenada Y de la imagen
manual de scripting con grasshopper
Miguel Vidal
Guillermo Ramrez
p0234
03. Propiedades del dibujo de Processing
Las propiedades fundamentales de lo que dibujamos en processing son las
siguientes:
Color
Color de trazo
stroke(gray);
stroke(gray, alpha);
stroke(value1, value2, value3);
stroke(value1, value2, value3, alpha);
stroke(color);
stroke(color, alpha);
Grosor de trazo
strokeWeight ();
Color de relleno
fill();
No dibujar trazo
noStroke();
No dibujar relleno
noFill();
Suavizar bordes
smooth();
No suavizar bordes
noSmooth();
manual de scripting con grasshopper
Miguel Vidal
Guillermo Ramrez
p0235
04. Algunas funciones bsicas de interaccin en Processing
Posicin del ratn
mouseX
mouseY
pmouseX
pmouseY
Eventos de ratn
mousePressed()
mouseReleased()
mouseMoved()
mouseDragged()
manual de scripting con grasshopper
Miguel Vidal
Guillermo Ramrez
p0236
05. Ejemplos de aplicacin
Dibujar una curva a partir de las coordenadas del ratn
void setup()
{
size(640, 200);
background(102);
}
void draw()
{
stroke(255);
if(mousePressed)
{
line(mouseX, mouseY, pmouseX, pmouseY);
}
}
Dibujar una interfaz de interaccin con botones
// tamao visor
int ancho = 450;
int alto = 200;
//tamao botones
int lado = 30;
//posicion botones
int posX = 50;
int posY = 50;
// colores
color cBotInicial = color(80);
color cBotEncima = color(20, 20, 180);
color cBotPulsado = color(255);
color colorRect;
void setup()
{
size(ancho, alto);
background(0);
noStroke();
rectMode(CORNER);
}
void draw()
{
colorRect = cBotInicial;

if ((mouseX >= posX && mouseX <= posX+lado) &&
(mouseY >= posY && mouseY <= posY+lado))
{
colorRect = cBotEncima;
}
if(((mouseX >= posX && mouseX <= posX+lado) &&
(mouseY >= posY && mouseY <= posY+lado)) &&
mousePressed)
manual de scripting con grasshopper
Miguel Vidal
Guillermo Ramrez
p0237
{
colorRect = cBotPulsado;
}

fill(colorRect);
rect(posX, posY, lado, lado);

}
Glosario de trminos
ANEXO 3
programacin script RhinoCommon
SDK (Software Developement Kit)
Plug-in
lenguaje de programacin
intrprete
mquina virtual
Common Language Runtime
C#
programacin orientada a objetos
plataforma .NET
Proceso por el cual se escribe, se prueba, se
depura, se compila y se mantiene el cdigo
fuente de un programa informtico.
(Se traduce literalmente del ingls como guin,
archivo de rdenes, sera la traduccin
adecuada).
Se trata de un programa simple.
Los scripts son casi siempre interpretados, es
decir, que son ejecutados por un intrprete.
Es una SDK (Software Developement Kit)
construda bajo la plataforma .NET para el
desarrollo de plug-ins para todas las plataformas
de Rhinoceros, esto es, Rhino 5 (32 y 64 bits),
Rhino para Macintosh, Grasshopper y Phyton
scripting para Rhino.
Conjunto de Herramientas de desarrollo que
permiten la creacin de aplicaciones para un
determinado paquete o plataforma de software,
hardware o plataformas similares.
En computacin, se trata de un conjunto
de componentes de software que aaden
capacidades especifcas a una aplicacin mas
grande.
Fuente: wikipedia.org
Idioma artifcial diseado para expresar
instrucciones que pueden ser llevadas a cabo
por mquinas, como una computadora.
Como tal idioma est formado por un conjunto
de smbolos y reglas sintcticas que defnen su
estructura y el signifcado de sus expresiones.
Programa infrormtico capaz de analizar y
ejecutar otros programas.
Los intrpretes realizan la traduccin a cdigo
mquina (unos y ceros) a medida que sta
es necesaria, tpicamente instruccin por
instruccin y sin guardar el resultado de dicha
traduccin. Esto hace que los programas
interpretados sean ms lentos, pero a cambio
ms fexibles para reemplazar o aadir partes
del programa y, adems, ofrecen al programa
un entorno no dependiente de la mquina
donde se ejecuta el intrprete (lo que se conoce
comnmente como mquina virtual).
Software que emula a una computadora y
puede ejecutar programas como si fuese una
computadora real.
(entorno en tiempo de ejecucin de lenguje
comn)
Es el entorno de ejecucin para los cdigos de
los programas de la plataforma .NET, como C#
o Visual Basic.NET. Se encarga de compilar
un cdigo intermedio al cdigo mquina nativo.
Se ejecuta slo en Microsoft Windows. No es
exactamente una mquina virtual, pero su
objetivo es el mismo.
Lenguaje de programacin orientado a objetos
desarrollado y estandarizado por Microsoft
como parte de su plataforma .NET. Su sintaxis
bsica deriva de C y C++ y utiliza el modelo de
objetos similar al de Java.
Paradigma de programacin que usa objetos
y sus interacciones para disear aplicaciones
y programas informticos. Est basado en
varias tcnicas, entre las que se incluyen la
herencia, la abstraccin, el polimorfsmo y el
encapsulamiento.
Plataforma de software, que corre principalmente
en Microsoft Windows, que incluye una extensa
biblioteca de clases soportada por diversos
lenguajes de programacin, como C# o Visual
Basic.NET, y un entorno de software en el
cual se ejecutan las aplicaciones (Common
Language Runtime), similar a una mquina
virtual de aplicaciones
www.frikearq.com
introduccin al
diseo generativo
con processing
miguel vidal calvet
guillermo ramrez camarero
www.frikearq.com
diseo generativo
Christopher Wren, plan de reconstruccin de Londres tras el incendio de 1666.
Christopher Wren, tipos normalizado de edifcacin del plan.
Christopher Wren, 51 iglesias del plan de reconstruccin de Londres.
Broadway boogie woogie, 1942-44, Piet Mondrian.
Two vehicle events, 1961, George Brecht.
Generator project, 1976-79, Cedric Price.
CASEY REAS, 2001,
Tissue: path 06.
procesos
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
idea
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
idea modelo
matemtico
(leyes de relacin
entre objetos)
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
idea modelo
matemtico
implementacin
(cdigo fuente)
(leyes de relacin
entre objetos)
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
idea modelo
matemtico
implementacin
informacin
(cdigo fuente)
(leyes de relacin
entre objetos)
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
idea modelo
matemtico
implementacin
resultados
informacin
(cdigo fuente)
(leyes de relacin
entre objetos)
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
2 paradigmas
- diseo paramtrico
- diseo discriminativo
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
proceso de
diseo paramtrico
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
datos
proceso de
diseo paramtrico
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
algoritmo
datos datos
proceso de
diseo paramtrico
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
algoritmo
resultados
datos datos
proceso de
diseo paramtrico
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
proceso de
diseo discriminativo
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
algoritmo
resultados
datos datos
proceso de
diseo discriminativo
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
algoritmo
resultados
datos datos
evaluacin
proceso de
diseo discriminativo
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
algoritmo
algoritmo de
seleccin
resultados
datos datos
evaluacin
proceso de
diseo discriminativo
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
algoritmo
algoritmo de
seleccin
resultados
resultados
datos datos
evaluacin
s
proceso de
diseo discriminativo
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
algoritmo
algoritmo de
seleccin
resultados
resultados
datos datos
evaluacin
s
no
proceso de
diseo discriminativo
aplicaciones prcticas
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
diseo del proceso y no de un resultado concreto. 01
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
diseo del proceso y no de un resultado concreto.
posibilidad de gestionar complejidad de datos.
01
02
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
diseo del proceso y no de un resultado concreto.
posibilidad de gestionar complejidad de datos.
automatizar la generacin de mltiples soluciones adaptadas a
un entorno.
01
02
03
dummy sustantivo

(in window display, for dressmaker) maniqu m
(in tests, stunts) mueco m;
ventriloquists ~ mueco de ventrlocuo
(in US football) domi m
(for baby) (BrE) See Also pacifer
(fool) (colloq) bobo, -ba m,f (fam)
(in bridge, whist) mano f del muerto;
(player) muerto m
Fuente: Concise Oxford Spanish Dictionary 2009 Oxford University Press
Esto NO es un curso de programacin
Esto S es un taller de scripting elaborado por
DISEADORES para DISEADORES
programacin
Proceso por el cual se escribe, se
prueba, se depura, se compila y se
mantiene el cdigo fuente de un
programa informtico.
Fuente: Diccionario RAE.
script
(Se traduce literalmente del ingls
como guin, archivo de rdenes,
sera la traduccin adecuada).
Se trata de un programa simple,
generalmente, ejecutados por un
intrprete.
processing
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
se comunica con la consola virtual de java.
intrprete.
lenguaje y un entorno de programacin de cdigo abierto. 01
02
03
qu es processing?
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
01. Estructura de la interfaz de Processing: el lienzo y la consola
size(ancho, alto); //tamao del lienzo
background(155);
El lienzo es el espacio de pantalla en el que vamos a hacer nuestro dibujo de
Processing y consiste en una rejilla de pxeles de color.
El lienzo tiene dos propiedades.
- tamao o size
- color de fondo o background
El ancho y alto del lienzo se pueden llamar en cualquier
Es la ventana en la que imprimimos textodesde el codigo de Processing.
Utilizamos dos funciones:
- print: escribe cadenas de caracteres de un modo continuo
- println: escribe cadenas de caracteres aadiendo un salto de carro
El lienzo (canvas)
La consola
x
y
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
Comentarios en el cdigo
Otro asunto que tambin va a sernos muy til para hacer nuestros scripts es hacer comentarios dentro del cdigo. Los comentarios son texto que forma parte del cdigo,
pero que la mquina va a obviar cuando lo est leyendo.
Esto nos puede servir para anotar aspectos relevantes del cdigo o asuntos que son importantes recordar y tambin para ordenarlo. Esto nos servir no slo para no
perdernos nosotros mismos sino para posibles futuras segundas o terceras personas que puedan acceder a l.
Existen dos maneras de comentar el cdigo
- comentario de una sola lnea: cualquier texto que escribamos en una lnea a partir de los caracteres de barra // quedar comentado.
- comentario multilnea: cualesquiera lnea o lneas de texto entre los caracteres de apertura /* y de cierrre */ quedarn comentadas.
//la funcin print sirve para imprimir texto
print(hola, cocacola);
/*
cdigo de prueba escrito como primer ejercicio
del manual de scripting de Frikearq :)
*/
//la funcin print sirve para imprimir texto
print(hola, cocacola);
El intrprete lee el cdigo lnea a lnea de arriba a abajo y de izquierda
a derecha. Para que el intrprete cambie de lnea, es necesario aadir ; al
fnal de cada una de ellas, para que entienda que el cdigo contina en la
siguiente lnea.
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
02. Algunas funciones bsicas de dibujo en Processing
Dibujar un punto
point (x, y);
x entero o decimal: coordenada x del punto
y entero o decimal: coordenada y del punto
Dibujar una lnea
line (x1, y1, x1, y1);
x1 entero o decimal: coordenada x del punto origen
y1 entero o decimal: coordenada y del punto origen
x2 entero o decimal: coordenada x del punto destino
y2 entero o decimal: coordenada y del punto destino
Dibujar un rectngulo
rect(x, y, ancho, alto);
x entero o decimal: coordenada X del vrtice superior
izquierdo
y entero o decimal: coordenada Y del vrtice superior
izquierdo
ancho entero o decimal: anchura del rectngulo
alto entero o decimal: altura del rectngulo
Dibujar una elipse
ellipse(x, y, ancho, alto);
x entero o decimal: coordenada X de la elipse
y entero o decimal: coordenada Y de la elipse
width entero o decimal: anchura de la elipse
height entero o decimal: altura de la elipse
Dibujar una curva

beginShape();
curveVertex(x, y);
endShape();
x entero o decimal: coordenada X del vrtice de la
curva
y entero o decimal: coordenada Y del vrtice de la
curva
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
03. Propiedades del dibujo de Processing
Las propiedades fundamentales de lo que dibujamos en processing son las
siguientes:
Color
Color de trazo
stroke(gray);
stroke(gray, alpha);
stroke(value1, value2, value3);
stroke(value1, value2, value3, alpha);
stroke(color);
stroke(color, alpha);
Grosor de trazo
strokeWeight ();
Color de relleno
fill();
No dibujar trazo
noStroke();
No dibujar relleno
noFill();
Suavizar bordes
smooth();
No suavizar bordes
noSmooth();
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
04. Variables
Una variable es un nombre que se asigna a una cantidad conocida o desconocida de informacin para poder trabajar con este nombre, independientemente de la
informacin que representa. La mayor parte del trabajo que vamos a realizar con nuestros scripts lo haremos a travs de variables.
Para trabajar con variables es necesario inicializarlas segn el tipo de dato que representa. El esquema bsico que sigue el lenguaje de programacin C# es el siguiente:
identifcador de
variable
(el tipo de dato que va a
contener esa variable)
nombre de
variable
(cualquier nombre
excepto los reservados)
asignacin valor
int a = 12 ;
identifcador de
variable
(el tipo de dato que va a
contener esa variable)
nombre de
variable
asignacin valor
int a = 12 ;
Inicializacin de variables
Asignacin de valor a variables
Inicializacin y asignacin en la misma lnea
int a = 12 ;
Tipos de datos primitivos que ms vamos a utilizar y sus identifcadores
tipo de dato nombre (en ingls) identifcador
nmero entero integer int
nmero decimal double precision foating-
point number
double
valor booleano
(verdadero o falso)
boolean value (true o false) bool
caracter character char
Y un dato compuesto para empezar ...
tipo de dato nombre (en ingls) identifcador
cadena de caracteres string string
NOTA: Una cadena de caracteres, o sea, texto, es un tipo de dato, como el nombre indica,
compuesto de una sucesin de caracteres. El motivo por el cual lo mostramos en este punto,
es que la salida out imprime cadena de caracteres, esto quiere decir, que para que devuelva
cualquier dato hay que convertirlo previamente a string. Esto nos ser til para ir mostrando
en pantalla lo que vayamos haciendo.
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
// Esta primera parte es la que se ejecuta primero cuando
el programa corre.
as que declararemos las variables globales al principio
del cdigo, que podrn ser llamadas en cualquier apartado
del programa
int y = 0;
// a continuacin, vienen las funciones setup y draw. cada
programa tiene una sola de cada una de estas funciones.
Los corchetes de cada una de ellas definen un bloque
independiente
// el bloque de la funcin setup se ejecuta una nica vez
por programa y en ella colocamos, fundamentalmente, las
propiedades del dibujo de processing
void setup()
{
size(300, 300); //tamao del lienzo
}
// el bloque de la funcin draw se ejecuta continuamente
hasta que el programa para
void draw()
{
line(0, y, 300, y); //dibujo de una lnea
y = y + 4;
}
05 Estructura bsica de un programa de Processing
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
inicializacin
comprobacin
declaracin
actualizacin
(segn un rango
que establezcamos)
07. Estructuras iterativas
si es verdadero
si es falso
for(inicializacin; comprobacin; rango de actualizacion)
{
declaracin;
}
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
08. Funciones: abstraccin
Las funciones son subrutinas incluidas dentro de un programa ms grande y que nos permite
resolver una tarea especfca. Las funciones son tiles para desarrollar tareas que se van a
repetir dentro del programa principal y para, de esta manera, modular el cdigo en apartados
pequeos. Las funciones que devuelven un valor, se asigna con return.
Dicha subrutina, cuando es llamada dentro del cdigo principal, hace que la lectura de ese
cdigo se detenga y se dirija a ejecutar el cdigo de la subrutina. En ciertos lenguajes de
programacin, las funciones son subrutinas que devuelven un valor.
TIPO QUE DEVUELVE
(en caso de que devuelva
algn valor)
void
OPERACIONES DE LA FUNCIN OPERACIONES DE LA FUNCIN
VALOR QUE QUEREMOS QUE DEVUELVA return
NOMBRE NOMBRE
{ {
} }
Estructura de una funcin que devuelve un valor Estructura de una funcin que no devuelve ningn valor
;
( ( ) ) PARMETROS DE LA
FUNCIN
(que hay que declarar en
este punto)
PARMETROS DE LA
FUNCIN
(que hay que declarar en
este punto)
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
09. Estructura de una clase
class
CONSTRUCTOR (SOBRECARGAS)
METODOS
DECLARACIN DE PROPIEDADES
PROPIEDADES
NOMBRE
CONSTRUCTOR
MTODOS
{
{
{
}
}
}
NOMBRE DE LA CLASE
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
iniciacin al
diseo generativo
con Grasshopper
programacin script RhinoCommon
SDK (Software Developement Kit)
Plug-in
lenguaje de programacin
intrprete
mquina virtual
Common Language Runtime
C#
programacin orientada a objetos
plataforma .NET
Proceso por el cual se escribe, se prueba, se
depura, se compila y se mantiene el cdigo
fuente de un programa informtico.
(Se traduce literalmente del ingls como guin,
archivo de rdenes, sera la traduccin
adecuada).
Se trata de un programa simple.
Los scripts son casi siempre interpretados, es
decir, que son ejecutados por un intrprete.
Es una SDK (Software Developement Kit)
construda bajo la plataforma .NET para el
desarrollo de plug-ins para todas las plataformas
de Rhinoceros, esto es, Rhino 5 (32 y 64 bits),
Rhino para Macintosh, Grasshopper y Phyton
scripting para Rhino.
Conjunto de Herramientas de desarrollo que
permiten la creacin de aplicaciones para un
determinado paquete o plataforma de software,
hardware o plataformas similares.
En computacin, se trata de un conjunto
de componentes de software que aaden
capacidades especifcas a una aplicacin mas
grande.
Idioma artifcial diseado para expresar
instrucciones que pueden ser llevadas a cabo
por mquinas, como una computadora.
Como tal idioma est formado por un conjunto
de smbolos y reglas sintcticas que defnen su
estructura y el signifcado de sus expresiones.
Programa infrormtico capaz de analizar y
ejecutar otros programas.
Los intrpretes realizan la traduccin a cdigo
mquina (unos y ceros) a medida que sta
es necesaria, tpicamente instruccin por
instruccin y sin guardar el resultado de dicha
traduccin. Esto hace que los programas
interpretados sean ms lentos, pero a cambio
ms fexibles para reemplazar o aadir partes
del programa y, adems, ofrecen al programa
un entorno no dependiente de la mquina
donde se ejecuta el intrprete (lo que se conoce
comnmente como mquina virtual).
Software que emula a una computadora y
puede ejecutar programas como si fuese una
computadora real.
(entorno en tiempo de ejecucin de lenguje
comn)
Es el entorno de ejecucin para los cdigos de
los programas de la plataforma .NET, como C#
o Visual Basic.NET. Se encarga de compilar
un cdigo intermedio al cdigo mquina nativo.
Se ejecuta slo en Microsoft Windows. No es
exactamente una mquina virtual, pero su
objetivo es el mismo.
Lenguaje de programacin orientado a objetos
desarrollado y estandarizado por Microsoft
como parte de su plataforma .NET. Su sintaxis
bsica deriva de C y C++ y utiliza el modelo de
objetos similar al de Java.
Paradigma de programacin que usa objetos
y sus interacciones para disear aplicaciones
y programas informticos. Est basado en
varias tcnicas, entre las que se incluyen la
herencia, la abstraccin, el polimorfsmo y el
encapsulamiento.
Plataforma de software, que corre principalmente
en Microsoft Windows, que incluye una extensa
biblioteca de clases soportada por diversos
lenguajes de programacin, como C# o Visual
Basic.NET, y un entorno de software en el
cual se ejecutan las aplicaciones (Common
Language Runtime), similar a una mquina
virtual de aplicaciones
con fnes creativos en diseo
Introduccin a la
Visualizacin
de informacin
Miguel Vidal
www.frikearq.com
Rplica de un microscopio de van Leeuwenhoek, de fnales del s. XVII
Fuente: wikimedia.org
EJERCICIO
PRCTICO
Visualizacin de datos climticos
de la comunidad de Madrid
Sistema energtico hbrido elico solar
0
1
2
Nociones iniciales
de computacin
Lectura y filtrado
de datos
Representacin
de datos
Nociones iniciales
de computacin
Comentarios e impresin por consola
Tipos de datos
Trabajo con variables
Estructuras condicionales
Estructuras de repeticin
Gestin de cadena de caracteres
Trabajo con arrays
1
2
3
4
5
6
7
Imprimir por consola
Comentarios
de una lnea
imprimir
// este texto no computa
// este texto tampoco
/*
este texto no computa
ni este tampoco
*/
multilnea
imprimir con salto de carro
print ( texto ); println ( texto );
Colecciones de
datos
vector o matriz array []
Datos
compuestos
cadena de caracteres string String
Datos
simples
tipo de dato nombre (en ingls) identifcador
valor booleano boolean value bool
nmero entero integer int
nmero decimal foating-point number foat
caracter character char
Datos
Variables
Colecciones
de datos
Datos
compuestos
Datos
simples
declaracin construccin asignacin
identifcador + nombre;
int miNum ;
-
nombre+=+valor;
miNum = 10 ;
identifcador + nombre;
String miTexto;
nombre+=+new+identifcador();
miTexto = new String();
nombre+=+valor;
miTexto = abc;
String[] misDatos;
nombre+=+new+identifcador[];
misDatos = new String[longitud];
nombre+=+{ , , };
misDatos=
{abc, def};
Estructuras condicionales
comprobacin
comprobacin
declaracin
si es verdadero
si es falso
if(comprobacin)
{
declaracin;
}
else
{
declaracin;
}
if(i > 0)
{
println(hola);
}
else
{
println(cocacola);
}
inicializacin
comprobacin
declaracin
actualizacin
(segn un rango
que establezcamos)
si es verdadero
Estructuras de repeticin
si es falso
for(inicializacin; comprobacin; rango de actualizacion)
{
declaracin;
}
for(int i = 0; i < 10; i++)
{
println(i);
}
Formatear
datos
numricos a
texto
Concatenar
texto
Longitud
Caracter
+
string.length();
string.charAt();
String.format( tipo de formato, variable numrica );
tipo de formato para enteros %d
tipo de formato para decimales %f
Gestin de cadenas de caracteres
Arrays
Declaracin
Construccin
Item
Longitud
Propiedades
- sucesin de elementos (item)
- ordenada
- asignacin de un ndice (index) a cada elemento
- tamao defnido, que se denomina longitud (length)
String[] datos;
datos = new String[ longitud ];
datos[ index ];
datos.length;
Filtrado (parsing)
de datos
CDIGOS DE ANLISIS (14 dgitos)
8 primeros dgitos: cdigo de estacin
8-10 dgitos: cdigo de parmetros
10-12: cdigo de tcnica analtica
12-14: cdigo de perodo de anlisis
FECHA (6 dgitos)
13-16: ao
16-18: mes
18-20: da
DATOS (144 dgitos a partir de la posicin 19)
14-19: 1 hora
19-24: 2 hora
25-31: 3 hora
32-37: 4 hora
37-42: 5 hora
42-47: 6 hora
48-53: 7 hora
54-59: 8 hora
60-65: 9 hora

Ayuntamiento de Madrid
http://www.mambiente.munimadrid.es/opencms/opencms/calaire/consulta/descarga.html?__locale=es
Comunidad de Madrid
http://gestiona.madrid.org/azul_internet/html/web/InformExportacionAccion.icm?ESTADO_MENU=7_4
Procedencia de la informacin
Filtrado de la informacin
28065013070802110101080.0V095.0V041.0V08.00V01.00V02.00V03.00V05.00V013.0V014.0V09.00V09.00V04.00V06.00V05.00V05.00V05.00V05.00V07.00V06.00V07.00V09.00V021.0V032.0V
28065013070802110101
toda la lnea
datos
datos
ndices
ndices
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
0 1 2 3 4 5 6 7 8 9 10 11 12 13 1415 16 17 18 19
Dibujo con
Processing
size(ancho, alto); //tamao del lienzo
background(155);
El lienzo es el espacio de pantalla en el que vamos a hacer nuestro dibujo de
Processing y consiste en una rejilla de pxeles de color.
El lienzo tiene dos propiedades.
- tamao o size
- color de fondo o background
El ancho y alto del lienzo se pueden llamar en cualquier
Es la ventana en la que imprimimos textodesde el codigo de Processing.
Utilizamos dos funciones:
- print: escribe cadenas de caracteres de un modo continuo
- println: escribe cadenas de caracteres aadiendo un salto de carro
El lienzo (canvas)
La consola
x
y
Interfaz de Processing: editor, consola y lienzo
Color
Color de trazo
stroke(gray);
stroke(gray, alpha);
stroke(value1, value2, value3);
stroke(value1, value2, value3, alpha);
stroke(color);
stroke(color, alpha);
Grosor de trazo
strokeWeight ();
Color de relleno
fill();
No dibujar trazo
noStroke();
No dibujar relleno
noFill();
Suavizar bordes
smooth();
No suavizar bordes
noSmooth();
Propiedades de dibujo
Dibujar un punto
point (x, y);
x entero o decimal: coordenada x del punto
y entero o decimal: coordenada y del punto
Dibujar una lnea
line (x1, y1, x1, y1);
x1 entero o decimal: coordenada x del punto origen
y1 entero o decimal: coordenada y del punto origen
x2 entero o decimal: coordenada x del punto destino
y2 entero o decimal: coordenada y del punto destino
Dibujar un rectngulo
rect(x, y, ancho, alto);
x entero o decimal: coordenada X del vrtice superior izquierdo
y entero o decimal: coordenada Y del vrtice superior izquierdo
ancho entero o decimal: anchura del rectngulo
alto entero o decimal: altura del rectngulo
Dibujar una elipse
ellipse(x, y, ancho, alto);
x entero o decimal: coordenada X de la elipse
y entero o decimal: coordenada Y de la elipse
width entero o decimal: anchura de la elipse
height entero o decimal: altura de la elipse
Funciones de dibujo bsicas
Dibujar texto
PFont miFuente;
miFuente = createFont(FFScala, 32); // crea automticamente una fuente y la guarda en
la carpeta data de nuestro dibujo de Processing
textFont(miFuente);// esta funcin asigna el tipo de fuente con la que se va a dibujar a
continuacin
text(hola cocacola, x, y);
texto caracter o cadena de caracteres
x entero o decimal: coordenada X del texto
y entero o decimal: coordenada Y del texto
Colocar una imagen
PImage p;
p = loadImage(nombre);
image(p, x, y);
nombre cadena de caracteres: nombre de la imagen, si est en la carpeta data, si no,
ruta de la misma
x entero o decimal: coordenada X de la imagen
y entero o decimal: coordenada Y de la imagen
// Esta primera parte es la que se ejecuta primero cuando el programa corre.
// Aqu declararemos las variables globales, que podrn ser llamadas ms adelante
int y = 0;
// a continuacin, vienen las funciones setup y draw. cada programa tiene una sola
de cada una de estas funciones. Los corchetes de cada una de ellas definen un bloque
independiente
// el bloque de la funcin setup se ejecuta una nica vez por programa y en ella
colocamos, fundamentalmente, las propiedades del dibujo de processing
void setup()
{
size(300, 300); //tamao del lienzo
}
// el bloque de la funcin draw se ejecuta continuamente hasta que el programa para
void draw()
{
line(0, y, 300, y); //dibujo de una lnea
y = y + 4;
}
Estructura de un programa con refresco de lienzo
Anexo I:
Referencias y
bibliografa
Edward Tufte
Envisioning information; Graphics Pr (May 1990), ISBN-10: 0961392118.
The visual display of quantitative information; Graphics Pr, 2nd edition (May 2001;
ISBN-10: 0961392142.
Rudolf Arnheim
Arte y percepcin visual; Alianza Editorial (2 de noviembre de 1999), ISBN-10:
8420686913.
Portales web
Visualizar Medialab Prado, http://medialab-prado.es/visualizar
http://visualcomplexity.com
http://cs171.org/ (Harvard School of Engineering and Applied Sciences)
http://processing.com
http://wolframalpha.com
http://bestiario.org
Ejemplos de otras disciplinas
Informacin cientfica:
NASA, http://www.nasa.gov/;
EADS, http://www.eads.com/eads/int/en.html.
Anexo II:
Glosario de
trminos
programacin script RhinoCommon
SDK (Software Developement Kit)
Plug-in
lenguaje de programacin
intrprete
mquina virtual
Common Language Runtime
C#
programacin orientada a objetos
plataforma .NET
Proceso por el cual se escribe, se prueba, se
depura, se compila y se mantiene el cdigo
fuente de un programa informtico.
(Se traduce literalmente del ingls como guin,
archivo de rdenes, sera la traduccin
adecuada).
Se trata de un programa simple.
Los scripts son casi siempre interpretados, es
decir, que son ejecutados por un intrprete.
Es una SDK (Software Developement Kit)
construda bajo la plataforma .NET para el
desarrollo de plug-ins para todas las plataformas
de Rhinoceros, esto es, Rhino 5 (32 y 64 bits),
Rhino para Macintosh, Grasshopper y Phyton
scripting para Rhino.
Conjunto de Herramientas de desarrollo que
permiten la creacin de aplicaciones para un
determinado paquete o plataforma de software,
hardware o plataformas similares.
En computacin, se trata de un conjunto
de componentes de software que aaden
capacidades especifcas a una aplicacin mas
grande.
Idioma artifcial diseado para expresar
instrucciones que pueden ser llevadas a cabo
por mquinas, como una computadora.
Como tal idioma est formado por un conjunto
de smbolos y reglas sintcticas que defnen su
estructura y el signifcado de sus expresiones.
Programa infrormtico capaz de analizar y
ejecutar otros programas.
Los intrpretes realizan la traduccin a cdigo
mquina (unos y ceros) a medida que sta
es necesaria, tpicamente instruccin por
instruccin y sin guardar el resultado de dicha
traduccin. Esto hace que los programas
interpretados sean ms lentos, pero a cambio
ms fexibles para reemplazar o aadir partes
del programa y, adems, ofrecen al programa
un entorno no dependiente de la mquina
donde se ejecuta el intrprete (lo que se conoce
comnmente como mquina virtual).
Software que emula a una computadora y
puede ejecutar programas como si fuese una
computadora real.
(entorno en tiempo de ejecucin de lenguje
comn)
Es el entorno de ejecucin para los cdigos de
los programas de la plataforma .NET, como C#
o Visual Basic.NET. Se encarga de compilar
un cdigo intermedio al cdigo mquina nativo.
Se ejecuta slo en Microsoft Windows. No es
exactamente una mquina virtual, pero su
objetivo es el mismo.
Lenguaje de programacin orientado a objetos
desarrollado y estandarizado por Microsoft
como parte de su plataforma .NET. Su sintaxis
bsica deriva de C y C++ y utiliza el modelo de
objetos similar al de Java.
Paradigma de programacin que usa objetos
y sus interacciones para disear aplicaciones
y programas informticos. Est basado en
varias tcnicas, entre las que se incluyen la
herencia, la abstraccin, el polimorfsmo y el
encapsulamiento.
Plataforma de software, que corre principalmente
en Microsoft Windows, que incluye una extensa
biblioteca de clases soportada por diversos
lenguajes de programacin, como C# o Visual
Basic.NET, y un entorno de software en el
cual se ejecutan las aplicaciones (Common
Language Runtime), similar a una mquina
virtual de aplicaciones
Guillermo Ramrez Camarero
Miguel Vidal Calvet
www.frikearq.com
Miguel Vidal
miguel@frikearq.com
February 2013
frikearq.com

S-ar putea să vă placă și