: August 15 & 16Time: 8:00am - 5:00pmPrice: US$495
Course Description:
This workshop will give students a functional understanding of Grasshopper and generative data driven design. This will allow them to build on this understanding into more advanced projects of their own including design optimization and cutting models on a laser machine. Basic knowledge of Rhino is required.
Details...
Location:McNeel Miami1538 NW 89th CourtDoral, FL 33172United States
Register here!
…
available yet on this front.
Here's a basic breakdown:
1. Galapagos populates the first generation (G[0]) with random individuals. Basically the sliders are all set at random values.
2. Now we step into the generic evolutionary loop, so G[0] becomes G[n], as this is the same for all generations.
3. For each individual in G[n] the fitness is computed. This is the most time consuming operation in the solver.
4. The individuals in G[n] must populate G[n+1], there are two ways in which this can happen:
- Individuals 'survive' the generation gap and are present in both G[n] and G[n+1]
- Individuals mate to produce offspring that populates G[n+1]
Often, fit individuals will use both vectors.
5. Creating offspring is a complex procedure and there are many factors that affect it.
5a. Coupling: this step involves picking individuals from G[n] for mating couples. Individuals can be picked isotropically (i.e. everyone has an equal chance of being picked, regardless of fitness), exclusively (i.e. only the fittest X% are allowed to mate, but they are all equally likely to mate) and biased (i.e. the fitter an individual, the higher the chance it finds a mate, but everybody has a chance)
5b. Mate selection: this step involves someone picking a mate from G[n]. When an individual has been selected to mate (step 5a), he/she needs to find a mate. Instead of picking another fit individual, mate selection happens based on genetic distance. For example, individuals could be said to prefer very similar individuals, or they could be said to prefer very different individuals, or something in between. This is called the "Inbreeding factor" in Galapagos. A high inbreeding factor will result in 'incestuous' couples, a low factor will result in 'zoophilic' couples. Neither extreme is healthy.
5c. Coalescence: Once a couple has been formed, offspring needs to be generated. Basically coalescence defines how the genomes of mommy and daddy are combined to produce little johnny. The best analogy with biological coalescence is crossover, where P out of Q genes are inherited from mom and (Q - P) genes are inherited from dad. In Galapagos, these genes are always consecutive, thus if the genome consists of 5 genes, the first 3 come from mom and the last 2 come from dad. Or the first 1 comes from mom and the last 4 come from dad. The amount of genes per parent is random. Genes can also be interpolated (there is no analogy for this in biological evolution). Since a single gene in Galapagos is nothing more than a slider position, it is quite easy to average the positions for mom and dad. Finally, genes can be created via preference blending. Very similar to interpolation, but the blending is weighted by the relative fitness of both parents.
5d. Mutations: Once the offspring genome has been created in step 5c, mutations are applied. Mutations are random events that affect gene values in random ways. Although the Galapagos engine supports several kinds of mutations, in Grasshopper it only makes sense to allow for point mutations, as it it not possible grow or shrink the number of sliders.
6. Finally, a new generation is populated and solved for fitness. There is an optional final step which can ensure that fit individuals do not get lost in the process. The "Maintain High Fitness" value controls what percentage of individuals from G[n] are allowed to displace individuals in G[n+1] provided they are fitter. By default this percentage is 10. Which basically means that the 10% fittest individuals in G[n] are compared to the 10% lamest individuals in G[n+1] and if grandpa is indeed fitter, he's allowed to bump junior off the list.
7. This process (step 2 - step 6) repeats until the maximum number of generations has been reached, until no progress has been made for a specified number of generations or until a specific fitness value has been reached.
--
David Rutten
david@mcneel.com
Poprad, Slovakia…
ipe Pecegueiro Type of participants Students, graduate students, researchers, professionals Duration 2 days, Sat – Sun Prerequisites 1 / participants skills Experience in Rhino and Grasshopper; programming experience with Processing or Arduino IDE is recommended but not necessary Prerequisites 2 / hardware Participants should bring their own computer with Windows XP or 7 64 bit OS Prerequisites 3 / software Rhinoceros Version 4 sr9, Grasshopper 0.8.0050, Arduino IDE, Processing, Google Earth* *Software versions should be the most updated versions at the time of the workshop. Rhino 5 is also acceptable. Description An associative model is only as relevant as the information it seeks to manage. This workshop will engage the associative model by feeding it with real time and real world data captured through prefabricated sensor nodes known as the Ambient Sensor Kit (ASKit). The ASKit is an Open Hardware platform for personal data collection and sharing. The ASKit project is based on the premise that a personal understanding of the information around us is key to a sustainable and informed habitation of our environment. http://uask.it. Workshop participants will be working with Grasshopper, a generative,logic based design environment where participants will be able associate real world data to their models. Several other tools will be employed including Processing, Pachube, Google Earth, and gHowl (a set of custom components which extend the functionality of Grasshopper). This two day workshop will focus on a specific area in Berlin to understand, through data, the differences between the physical barriers and invisible forces which define certain urban functions. The participants will engage in: - environmental data collection - site surveying with open hardware/DIY electronics - data visualization and analysis - associative modeling with collected data Day 1: Demonstration of ASKit hardware platform for data collection and associative modeling. Data capture session in specific zones in Berlin. Data visualization and associative modeling in Grasshopper. Day 2: Focused Data Capture Session Directed projects applying associative modeling with collected data.…
Added by Luis Fraguada at 11:34am on August 23, 2011
ag gets pinned in Temeswar)
7 days of training + exhibition and party!
During the the first 3 days we have prepared a training course where the participants will get acquainted with the basic notions and elementary algorithms in Grasshopper. Within the following 4 days you will have to apply your general knowledge in order to design and produce a 1:1 mockup of the digital model.
It’s going to be massive!
_ORGANIZERS AND TUTORS:
F-O-R
Oana Simionescu
Alex Cozma
DtArchLab + Idz
Ionut Anton
Dana Tanase
T_A_I
Irina Bogdan
_HOSTS:
EduKube Multimedia Center
Find out how to apply here and make sure to keep an eye on our blog. You cand also keep yourself updated by following our facebook page.
See you at EduKube, Timisoara on the 16th of July!
…
ally to describe a process of repeating objects in a self-similar way. Simply stated, the definition of a recursive function includes the function itself. Fractals are among the canonical examples of recursion in mathematics and programming. A loop can simply be a way to apply the same operation to a list of elements, but it is an iterative loop if the results from one step are used in the calculation of the next step. In design research controlling recursion becomes a new strategy to define new forms and spaces.
BRIEF
In this workshop we will be exploring iterative strategies through parametric design. Main tool for the course will be grasshopper3d and its add-on Anemone. Anemone is a simple but effective plug-in for Grasshopper that enables for loops in a simple and linear way. We will explore several strategies such iterative growth, L systems, fractals, recursive subdivisions and more. Our course will focus on how those methods can affect three-dimensional geometries, generating unexpected conformations.
TOPICS
intro to rhinointro to grasshopperadvanced grasshopperdata managementintro to loopscellular automatal-systemsagent based modelling
SCHEDULE
Day 1 / friday 16:00Tour Green Fab LabBasics of 3D modeling in RhinocerosBasics of GrasshopperOpen Lecture by Jan Pernecky, founder of rese arch
Day 2 / saturday 10 am- 18 pmRecursive iterative methodsAdvanced Topics of looping
Day 3 / sunday 10 am – 18 pmRecursive iterative methodsFinal presentation session
REQUIREMENTS
The workshop is open to all participants, no previous knowledge of Rhinoceros and Grasshopper is required (although an introductory knowledge is welcome). Participants should bring their own laptop with a pre-installed software. The software package needed has no additional cost for the participant (Rhino can be downloaded as evaluation version, Grasshopper and plugins are free). These softwares are subject to frequent updates, so a download link to the version used in the workshop will be sent to the participants a few days before the workshop.…
Added by Aldo Sollazzo at 11:10am on October 6, 2015
r visual programming tools in the games world. MS's Kodu, looks interesting. Kismet and Visual3d look even more interesting..... mainly because they are more 'interactive' or 'reactive', rather than DAG-based.
Seems like the evolution path for GH-similar apps is:
1. base 3d or CAD app based on C/C++ code.
2. Add scripting language interface
3. Add some kind of visual interface
4. Add graph sorting / propagation engine
5. Re-jig base 3d or CADD app to make managed/interpreted scripts run faster, multi-threaded.
6. Add dynamic typed language, DLR stuff
6. ....
6. Add constraints solver...?
7. Rebuild CAD display engine to be procedural at the GPU level?
Seems like there are available tools for converting scripts into some kind of flowchart. There are even visual debuggers. MS even has something called the 'Debugger Canvas'. Spreadsheet constraints.
Seems like the time is ripe for lots of new apps like GH.
…
4 explode the text
5 select the exploded text, which are now curves, and the border from step 2 and use the planarsrf command again
6 make your surface using the two curves at top and bottom and a section. Use the sweep2 command
7 select your negative text surfaces and use the flowalongsrf command
maybe the scale of the text can be edited by the size of the surface or of the text but I bet you can figure that out! good luck!…
2013 | mayo 30, 31 y 1 de junio. 15 Hrs.
Horario: 18:00 – 22.00 Jueves, Viernes y Sábado de 8:00 a 16:00 Hrs. Instructor_ Arch. David Hernández Melgarejo.
http://bioarchitecturestudio.wordpress.com
Objetivos:
El curso está dirigido a cada diseñador, ingeniero o arquitecto que quiere obtener una sólida base en modelado generativo y paramétrico dentro del flujo de trabajo en Rhinoceros.
En el curso se explorarán y construirán estructuras en el espacio paramétrico, incorporando entidades geométricas (Curvas, Superficies, Puntos, etc…) y usando patrones algorítmicos.
Cada paso será soportado con ejercicios que gradualmente incrementarán su complejidad.
El alumno aprenderá cómo trabajar con asociación geométrica y parámetros. Para perfeccionar asociación geométrica – asociación entre partes, asociación dinámica – las formas geométricas son generadas al seguir la conexión lógica entre la parte geométrica y su restricción, dimensión paramétrica y él proceso dinámico del diseño: en pocas palabras estimulamos el pensamiento relacional.
Resultados:
Los participantes con éste entrenamiento obtendrán las siguientes fundamentos.
· Construir, modificar, depurar y correr aplicaciones de Grasshopper.
· Comprender el editor gráfico algorítmico y sus patrones usando grupos y cables conectores.
· Trabajar con dimensiones dinámicas, parámetros y listas.
· Generar aplicaciones orientadas a la documentación del diseño y la fabricación.
Palabras clave:
Diseño Computacional, Scripting, Rhinoceros 5.0 + Grasshopper, Parametrización, Análisis, Fabricación Digital.
Para mayor información:
MArch. Kathrin Schröter. E-mail: kschroter@itesm.mx
Dirección de Arquitectura. Oficinas de Aulas 1, segundo piso.…
.
Things have been working swimmingly in many areas of the plugin, but one particular problem has been tough to solve. I have two components that are trying to read/write to the same memory at the same time, causing Rhino exceptions and crashes.
The conflicts appear to be happening between two components -- one is a "Layer Events Listener" that reports essentially what type of layer event just happened. The other is a "Set Layer Visibility" component that toggles the visibility of a list of layers.
The code:
public class LayerTools_LayerEventsListener : GH_Component { /// <summary> /// Initializes a new instance of the LayerTools_LayerListener class. /// </summary> public LayerTools_LayerEventsListener() : base("Layer Events Listener", "Layer Listener", "Get granular information about the layer events happening in the Rhino document.", "Squirrel", "Layer Tools") { }
/// <summary> /// Registers all the input parameters for this component. /// </summary> protected override void RegisterInputParams(GH_Component.GH_InputParamManager pManager) { pManager.AddBooleanParameter("Active", "A", "Set to true to listen to layer events in the Rhino document.", GH_ParamAccess.item, false); pManager.AddTextParameter("Exclusions", "E", "Provide a list of exclusions to stop reading specific events (Added, Deleted, Moved, Renamed, Locked, Visibility, Color, Active).", GH_ParamAccess.list); pManager[1].Optional = true; }
/// <summary> /// Registers all the output parameters for this component. /// </summary> protected override void RegisterOutputParams(GH_Component.GH_OutputParamManager pManager) { pManager.AddBooleanParameter("Initialized", "I", "Whether the listener changed from passive to active.", GH_ParamAccess.item); pManager.AddTextParameter("Document Name", "doc", "Name of the Rhino document that is changing.", GH_ParamAccess.item); pManager.AddTextParameter("Layer Path", "path", "Path of the modifed layer.", GH_ParamAccess.item); pManager.AddIntegerParameter("Layer Index", "ID", "Index of the modified layer.", GH_ParamAccess.item); pManager.AddIntegerParameter("Sort Index", "SID", "Sort index of the modified layer.", GH_ParamAccess.item); pManager.AddTextParameter("Event Type", "T", "Type of the modification.", GH_ParamAccess.item); pManager.AddBooleanParameter("Added", "A", "If the layer has been added.", GH_ParamAccess.item); pManager.AddBooleanParameter("Deleted", "D", "If the layer has been deleted.", GH_ParamAccess.item); pManager.AddBooleanParameter("Moved", "M", "If the layer has been moved.", GH_ParamAccess.item); pManager.AddBooleanParameter("Renamed", "R", "If the layer has been renamed.", GH_ParamAccess.item); pManager.AddBooleanParameter("Locked", "L", "If the layer locked setting has changed.", GH_ParamAccess.item); pManager.AddBooleanParameter("Visibility", "V", "If the layer's visibility has changed.", GH_ParamAccess.item); pManager.AddBooleanParameter("Color", "C", "If the layer's color has changed.", GH_ParamAccess.item); pManager.AddBooleanParameter("Active", "Act", "If the active layer has changed.", GH_ParamAccess.item); }
/// <summary> /// This is the method that actually does the work. /// </summary> /// <param name="DA">The DA object is used to retrieve from inputs and store in outputs.</param> protected override void SolveInstance(IGH_DataAccess DA) { bool active = false; List<string> exclusions = new List<string>();
DA.GetData(0, ref active); DA.GetDataList(1, exclusions);
RhinoDoc thisDoc = null;
bool initialize = false;
string dName = null; string activePath = null; int layerIndex = -1; int sortIndex = -1; string eventType = null; bool added = false; bool deleted = false; bool moved = false; bool renamed = false; bool locked = false; bool visibility = false; bool color = false; bool current = false;
if (active) { thisDoc = RhinoDoc.ActiveDoc;
initialize = (!previouslyActive) ? true : false;
RhinoDoc.LayerTableEvent -= RhinoDoc_LayerTableEvent; RhinoDoc.LayerTableEvent += RhinoDoc_LayerTableEvent; previouslyActive = true;
} else {
RhinoDoc.LayerTableEvent -= RhinoDoc_LayerTableEvent; previouslyActive = false; }
if (ev != null) { dName = ev.Document.Name; layerIndex = ev.LayerIndex; eventType = ev.EventType.ToString();
if (!exclusions.Contains("Active")) { if (ev.EventType.ToString() == "Current") { // active layer has just been changed current = true; }
}
if (!exclusions.Contains("Moved")) { if (ev.EventType.ToString() == "Sorted") { // active layer has just been changed moved = true; }
}
if (!exclusions.Contains("Added")) { if (ev.EventType.ToString() == "Added") { // layer has just been added activePath = ev.NewState.FullPath; added = true; }
}
if (!exclusions.Contains("Active")) { if (ev.EventType.ToString() == "Deleted") { // layer has just been added
deleted = true; } }
if (ev.EventType.ToString() == "Modified") { // layer has been modified activePath = ev.NewState.FullPath;
//skip sortindex eventType = ev.EventType.ToString();
if (ev.OldState != null && ev.NewState != null) { if (!exclusions.Contains("Locked")) { if (ev.OldState.IsLocked != ev.NewState.IsLocked) locked = true;
} if (!exclusions.Contains("Visibility")) { if (ev.OldState.IsVisible != ev.NewState.IsVisible) visibility = true; }
if (!exclusions.Contains("Moved")) { if (ev.OldState.ParentLayerId != ev.NewState.ParentLayerId) moved = true; }
//if (ev.OldState.SortIndex != ev.NewState.SortIndex) moved = true; if (!exclusions.Contains("Renamed")) { if (ev.OldState.Name != ev.NewState.Name) renamed = true; }
if (!exclusions.Contains("Color")) { if (ev.OldState.Color != ev.NewState.Color) color = true; } }
} }
DA.SetData(0, initialize); DA.SetData(1, dName); DA.SetData(2, activePath); DA.SetData(3, layerIndex); DA.SetData(4, sortIndex); DA.SetData(5, eventType); DA.SetData(6, added); DA.SetData(7, deleted); DA.SetData(8, moved); DA.SetData(9, renamed); DA.SetData(10, locked); DA.SetData(11, visibility); DA.SetData(12, color); DA.SetData(13, current);
}
static bool previouslyActive = false; Rhino.DocObjects.Tables.LayerTableEventArgs ev = null;
void RhinoDoc_LayerTableEvent(object sender, Rhino.DocObjects.Tables.LayerTableEventArgs e) { ev = e;this.ExpireSolution(true); }
And for the layer visibility component:
public LayerTools_SetActiveLayer() : base("Set Active Layer", "SetActiveLayer", "Set the active layer in the Rhino document.", "Squirrel", "Layer Tools") { }
/// <summary> /// Registers all the input parameters for this component. /// </summary> protected override void RegisterInputParams(GH_Component.GH_InputParamManager pManager) { pManager.AddBooleanParameter("Active", "A", "Set to true to change the active layer in Rhino.", GH_ParamAccess.item, false); pManager.AddTextParameter("Path", "P", "Full path of the layer to be activated.", GH_ParamAccess.item); }
/// <summary> /// Registers all the output parameters for this component. /// </summary> protected override void RegisterOutputParams(GH_Component.GH_OutputParamManager pManager) { pManager.AddIntegerParameter("Layer ID", "ID", "Index of layer that has been activated.", GH_ParamAccess.item); pManager.AddBooleanParameter("Status", "St", "True when the layer has been activated.", GH_ParamAccess.item); }
/// <summary> /// This is the method that actually does the work. /// </summary> /// <param name="DA">The DA object is used to retrieve from inputs and store in outputs.</param> protected override void SolveInstance(IGH_DataAccess DA) { bool active = false; string path = "";
if (!DA.GetData(0, ref active)) return; if (!DA.GetData(1, ref path)) return;
int layer_index = -1; bool status = false;
if (path != null) {
Rhino.RhinoDoc doc = Rhino.RhinoDoc.ActiveDoc; Rhino.DocObjects.Tables.LayerTable layertable = doc.Layers;
layer_index = layertable.FindByFullPath(path, true);
if (layer_index > 0) { // if exists RhinoDoc.ActiveDoc.Layers.SetCurrentLayerIndex(layer_index, true); status = true; } }
DA.SetData(0, layer_index); DA.SetData(1, status); }
Now originally I was getting exceptions when changing multiple layers' visibility properties, which would cause the Event Listener to fire and try to read the Visibility property before the memory has been released by the Set Layer Visibility component. That led me to add an "Exceptions" input, that would allow me to disable the reading of Visibility events at the source in the Layer Events listener. That helped me manage about 95% of the crashes I was getting, but I still get strange crashes in other event properties, even when that property shouldn't be affected. For instance, I am getting a crash here on the Name property in the event from the delegate function, even though I am only changing Visibility at any one time:
I have a few ideas but they all seem pretty hacky. One is to try to set a flag that is readable by any component in the plugin -- so that the event listener can see if a "set" component is currently running and abort before causing an exception. The other is creating a delay in the event listener, somthing like 200ms, to allow any set components to finish what they are doing before reading the event. Neither seems super ideal.
Any ideas?
Thanks,
Marc
…
with Istanbul Technical University, will continue to rediscover verticality through novel generative design techniques and large-scale physical prototypes. Abstracted as a fusion of various sub-systems, each subsystem of the tower will be investigated in relation to their various performance criteria. The correlations between the separate sets of performance criteria and evaluation methods will be analyzed, leading to the generation of unified design alternatives for a vertical system typology. In addition to the custom-made digital design and evaluation tools supporting the core methodology, Vertical Interventions will also highlight the fabrication and assembly of a large scale working prototype integrating the performative characteristics of each system in examination.
As in 2012, the design agendas of AA Athens and AA Istanbul Visiting Schools will directly create feedback on one another, allowing participation in either one or both Programmes.
Discounts
The AA offers several discount options for participants wishing to apply as a group or participants wishing to apply for both AA Istanbul and AA Athens Visiting Schools:
1. Standard application
The AA Visiting School requires a fee of £695 per participant, which includes a £60 Visiting Membership. If you are already a member, the total fee will be reduced automatically by £60 by the online payment system. Fees are non refundable.
2. Group registration
For group applications, there will be a range of discounts depending on the number of people in the group. The discounted fee will be applied to each individual in the group.
Type A. 3-6 people group: £60 (AA Membership fee) + 635*0.75 = £536.25 (25 %) Type B. 6-15 people group: £60 + 635*0.70 = £504.5 (30%) Type C. more than 15 people group: £60 + 635*0.65 = £472.75 (35%)
3. Participants attending both AA Istanbul and AA Athens | 40% discount
For people wishing to attend both AA Istanbul 2013 and AA Athens 2013, a discount of 40% will be made for each participant. (The participant will pay the £60 membership fee only once.)
£60 (AA Membership fee) + (635*0.60)*2 = £822
For more information in discounts, please visit:
http://ai.aaschool.ac.uk/istanbul/portfolio/discounts-2013/
Applications
The deadline for applications is 21 March 2013. A portfolio or CV is not required, only the online application form and payment. The online application can be reached from:
http://www.aaschool.ac.uk/STUDY/VISITING/istanbul…
Added by elif erdine at 11:41am on December 13, 2012