inventive collaborative environment.
The workshop is part of a series of PARAMETRICA events, promoting computational design thinking and exploring the new possibilities of parametric design.
The workshop is aimed at: students, postgraduates, architects, interior, product and urban designers, engineers, anybody interested.
> Workshop CONCEPT (16th – 28th July 2013):
The advancement of digital technology is helping architects to understand and respond to the complexity of the environment surrounding us.
In this 14 day workshop the various energies which exist in a given environment will be identified, analysed and then digital simulated.
Experimental structures capable of reconfiguring themselves in response to the mapped forces will be generated and fabricated.
> Conference CONCEPT (29th July 2013):
During this day we will present the final workshop projects and our special guest, Patrik Schumacher will exploit the subject of computational design thinking and parametric architecture, by putting the accent on the subject “Parametric Semiology – Architecture as the interface of communication”
> OBJECTIVES:
The workshop objectives are two-fold, in the first phase the workshop focuses on the identification and analysis of resources inherent to the environmental context, thus developing a better understanding of their nature as well as optimized methods of use or response.
In the next phase, the objective is to generate structures which through either means of fabrication or material properties can respond to, or utilize the environmental energy sources.
> The project TEAM:
Key lecturer: PATRIK SCHUMACHER (DE)
Profile: Director, Zaha Hadid Architects, London
Dr Phil, Dip Ing, ARB, RIBA
Founder AA Design Reseach Lab London
Lecturer: Ina Leonte (RO)
Profile: PhDc, teaching assistant (UAIM, Bucharest, Romania)
Co-founder, Zest
Workshop main tutors:
HOOMAN TALEBI [IR]
Profile: MArch (AADRL, London), MSc (AUT, Tehran)
Lead Designer, Zaha Hadid – London
FARSHAD MEHDI’ZADEH [IR]
Profile: March (IaaC-UPC, Barcelona, Spain)
Co-founder, Tehran Architecture Studio (Iran)
Workshop assistant:
MOHSEN MARIZAD [IR]
Profile: MAA 2010 - Architect (IaaC-UPC, Barcelona, Spain)
Parametric design expert
Workshop coordinator: Diana Nitreanu (RO)
Profile: MAA 2010 - Architect/Urban Designer (IaaC-UPC, Barcelona, Spain)
Official Rhino Trainer
Co-founder, Laboratorul de Arhitectura; Co-founder & Tutor, Parametrica
> EQUIPMENT Workshop: Each participant must provide their own laptop with the following software installed: A. Rhinoceros 3D 5.0 B. Grasshopper 3D (Latest Version) C. Arduino
Machines to work on: 1. Laser Cutter - small laser for prototyping 2. Big laser cutter for final production
Materials (provided by Parametrica) - To be specified according to the subject of study for each group;
FOR MORE INFO®ISTRATION:
www.dynamicfields.ro
www.parametrica.ro
office@parametrica.ro
…
ised in the past to accurately and fairly describe exactly the observations David has made:
'Identikit Architecture': One place to start is close to home, scan the GH image library: twisty tower count? Voronoi-_add geometry of choice_ count? Tons of cringe worthy, samey, pointless, architectural diarrhoea;
and then there is:
'Architectural Autism': Here, only the 'designer' himself understands his project and imagery (...but actually, he probably doesn't). It’s self serving, lacks rationale, and inhibits the ability for critical appraisal as any critic is reduced to the equivalent level of retardation inherent in the work as only two utterly pointless conclusions can ever be made: either 1) "I like it", or 2) "I don't like it". An example can be seen in the nonsensical imagery critiqued by David on his blog post. (Also found in the vast majority of schools of architecture).
The reaction so far since the blogs publication, plus the defence for "intuitive" design and a “pure artistic” approach to architectural design, proves just how deep the rot is in the system of education: the institutions and the professional bodies are all in denial, so unsurprisingly, so are the students. Most tutors and the ubiquitous ‘guest critics’ don’t even have any qualifications to teach. Worse still, almost all of them haven’t even built anything. If architecture really is a profession, the education must be vocational, and of worthy academic merit.
A knock-on impact of this issue arises in practice where the disconnect between what is taught at university and what the reality in office is like becomes apparent. So many students get lulled into a false sense of security at schools of architecture. When it comes to being serious in a professional environment they either do not have what it takes to do the job, or are perplexed when faced with the fundamentals of building design. Students should demand that what is taught at schools of architecture is relevant to their chosen field of work – it’s a massive con and a serious disservice to anyone undertaking the course.
Then there is the huge gulf in quality between one architect to the next; what ever happened to consistency and professional rigour? It would appear that the professional bodies, whose role it is to create prestige that in-turn improves the quality of the profession, have become complacent. Even some prominent names in the industry – individuals who have strategic roles in government advisory groups for the built environment - do not have any qualifications in architecture. It makes a mockery of the whole profession as well as the long commitment to its study.
Ultimately, architecture is unique in that is it the only one of the professions that is suffering from a profound intellectual retardation. All of the other technical-based professions are constantly looking for ways to progress, ways to utilise the latest technology, ways to re-invent the wheel and look outside the box (engineering etc). Yet, the cutting edge of architecture can only conjure up whimsical manifestos who the vast majority of poorly educated students indoctrinated at institutions buy into: 'Parametricism' for example. So with all the advancements in technology, construction and the digital industries, the best architects can come up with is a pseudo-intellectual movement which has no relevance to any of the challenges we face today, and one which is obsessed purely with style. It’s all so primitive, backwards and embarrassing. Hopefully the abysmal pay scales after 5-7 years worth of study should now become self explanatory and self justifying.
This can only change if architectural education is totally overhauled and refocused back on architecture for architectures sake, rather than this lazy, narrow-minded, cerebrally-stunted obsession with art and creating pretty, or incomprehensible imagery that can only withstand by assigning a polemic guff.
Irrelevant, confused and complacent. Sadly, the whole industry is now yesterday’s game.…
er). With the command "End Bulge" I noticed that G2 moves perpendicular to G1! But with an increase which is not equal... and is different, every time, depending on the angle between G0 and G1 and G2. How do I predict the position of G2 compared to G1 simulating the "End Bulge" command? Thank you for your professional answers.
^___^
Below you can see an example with a curve crimson ... If I move G1 of 1 unit G2 moves of 0.42 units (perpendicular) .. If I move of 2 units the next step is 0.46 unit... 3 units --> step 0,50 units... etc.
And each time changes depending on the initial conditions (G0/G1/G2 angle).
…
Added by Lucius Santo at 4:21pm on September 20, 2012
or GH with: 1. Animation Timeline 2. Rendering 3. API
Summary:
Animation Timeline: Smooth animation system that plays at the real-world speed; so you know the robot will run just right when you upload the code.
Rendering: Extensive options and outputs; so you can generate amazing videos.
API: Access our functions through Python and C# scripting; so you can manage parameters and actions for complex processes for each target.
More info:
Animation Timeline:
Build an animation from a list of Planes, it's that easy! Get these from points, curves or surfaces. Download the example files with the trial and test it yourself.
The unique Timeline component displays all the important robot warnings and the digital Input/Ouput:
RED – clash detection BLUE - singularities YELLOW – over rotation ORANGE – out of reach Digital Inut/Output: red=off, green=on
Rendering:
IO smoothly interpolates between all the Planes you set. This means you can generate keyframes for positions between Planes too e.g. you have two planes defining a tool path, IO can generate 2000 keyframes. Smooooth!
Rendered in full colour as standard, not GH red :-)
LiveBaking - let's you use Rhino render settings in real-time (can be a bit slow!)
Slider animation - use the native 'Animate' option to export hi-res images and create videos easily. Just set the number of frames you need (hint: divide total time in seconds by the frames-per-second rate)
Bake unlimited meshes as keyframes for export to render-pipelines in 3DS etc.
API
Accessing the IO functions through Python and C# let's you build more powerful definitions. You can assign data to every position the robot reaches, allowing you to control speed, acceleration, wait-times, actions and more. Examples comparing C# with Python are included in the examples files.
You can also use teh API build your own plugins that use the IO timeline to do all the hard work like IK and creating valid code, while you enjoy developing your new process...
Check out the website for more features and videos of the example definitions: www.robots.io
Download the PDF guide: 150314_IO_Primer_v1.pdf.
See www.robots.io for more info and pricing.
Developed by RoboFold Ltd. Used by leading academics, researchers and professionals.
…
Added by Gregory Epps at 10:15am on November 7, 2014
the data structure of the input.
I'll create a component that aims to write all the GH_Paths inside the input data structure into separate output parameters. I'll add a menu item to the component that allows users to synch the number of outputs with the current data.
Note that there are some bugs I found related to Undo here, but I'll attempt to fix those asap. The mechanisms employed in this example are correct.
Let's start with the Component class definition and the constructor:
Public Class GH_ExampleComponent_VarOutput
Inherits GH_Component
Public Sub New()
MyBase.New("Extract Paths", "ExPath", "Extract all the paths from a tree", "Sets", "Tree")
End Sub
End Class
Now, the RegisterXXXXParams methods:
Protected Overrides Sub RegisterInputParams(ByVal pManager As GH_Component.GH_InputParamManager)
pManager.Register_GenericParam("Tree", "T", "Data tree to examine", GH_ParamAccess.tree)
End Sub
Protected Overrides Sub RegisterOutputParams(ByVal pManager As GH_Component.GH_OutputParamManager)
'We'll add one output parameter, just to not have a jagged output.
pManager.Register_PathParam("Path 1", "1", "1st path in tree")
End Sub
SolveInstance() is somewhat special, but not very complicated:
Protected Overrides Sub SolveInstance(ByVal DA As IGH_DataAccess)
'We have only one input parameter and it is set to Tree,
'so SolveInstance will only be called once for every solution.
'We don't actually need the data inside the input, we're only interested in the paths.
'So we don't actually need to call DA.GetDataTree, we can just go in and extract the
'paths directly:
Dim paths As IList(Of GH_Path) = Params.Input(0).VolatileData.Paths
'Abort if there is no tree.
If (paths.Count = 0) Then Return
'Post a warning if the number of output parameters does not
'equal the number of paths in the tree.
If (paths.Count < Params.Output.Count) Then
AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, "There are more outputs than paths in the tree.")
ElseIf (paths.Count > Params.Output.Count) Then
AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, "There are fewer outputs than paths in the tree.")
End If
'Iterate over all paths and assign to output parameters.
For i As Int32 = 0 To Math.Min(Params.Output.Count, paths.Count) - 1
DA.SetData(i, paths(i))
Next
End Sub
Adding a menu item to the component menu is relatively straightforward, however handling the menu command requires a fair bit of logic:
Protected Overrides Sub Menu_AppendCustomComponentItems(ByVal iMenu As System.Windows.Forms.ToolStripDropDown)
'Add a single item to the component menu.
Menu_AppendGenericMenuItem(iMenu, "Synch outputs", AddressOf Menu_SynchOutputClicked)
End Sub
Private Sub Menu_SynchOutputClicked(ByVal sender As Object, ByVal e As EventArgs)
'Here we have to synch the number of output parameters with the number
'of paths in the volatile data tree in the input parameter.
'This requires a few steps:
'1. Determine whether something needs to happen at all.
'2. Record an undo event.
'3. Remove excess outputs or add missing outputs.
Dim paths As IList(Of GH_Path) = Params.Input(0).VolatileData.Paths
If (paths.Count = Params.Output.Count) Then Return 'yay, nothing needs to be done.
'Something needs to be done, record an undo state.
RecordUndoEvent("Synch output")
'We either have too few or too many outputs, determine which is the case.
If (paths.Count > Params.Output.Count) Then
'Add the missing outputs
For i As Int32 = Params.Output.Count + 1 To paths.Count
Dim param As New Grasshopper.Kernel.Parameters.Param_GenericObject()
param.Name = "Path " & i.ToString()
param.NickName = i.ToString()
If (i.ToString.EndsWith("1")) Then
param.Description = i.ToString() & "st path in tree"
ElseIf (i.ToString.EndsWith("2")) Then
param.Description = i.ToString() & "nd path in tree"
ElseIf (i.ToString.EndsWith("3")) Then
param.Description = i.ToString() & "rd path in tree"
Else
param.Description = i.ToString() & "th path in tree"
End If
Params.RegisterOutputParam(param)
Next
Else
'Remove excessive outputs
Do
If (Params.Output.Count <= paths.Count) Then Exit Do
Dim param As IGH_Param = Params.Output(Params.Output.Count - 1)
Params.UnregisterOutputParameter(param)
Loop
End If
Params.OnParametersChanged()
ExpireSolution(True)
End Sub
Finally, we must make sure that the component properly (de)serializes. This means we have to override the Write and Read methods and add additional information to the GHX archive:
Public Overrides Function Write(ByVal writer As GH_IO.Serialization.GH_IWriter) As Boolean
'We must make sure that the number of output parameters is correctly stored.
'We'll use a special function on the GH_ComponentParamServer to accompish this
'without too much sweat.
Params.WriteParameterTypeData(writer)
Return MyBase.Write(writer)
End Function
Public Overrides Function Read(ByVal reader As GH_IO.Serialization.GH_IReader) As Boolean
'Very important, we must make sure all parameters exist before we
'start with the main deserialization.
Params.Clear()
Params.ReadParameterTypeData(reader)
Return MyBase.Read(reader)
End Function
I attached a VB file that contains the code outlined above.
--
David Rutten
david@mcneel.com
Seattle, WA…
Added by David Rutten at 11:43pm on October 27, 2010
bi-directional link, the link is unidirectional (downflow only), because of the use of proxies.
Matrix transforms and persistent constraints: I don't think this is true. The parts can have mates to other parts that preserve geometric relationships like 'coincident' , 'aligned' etc. These are essentially bi-directional. GH's algorithmic approach does not do relationships in the same / flexible way. In GH, the 'relationship' has to be part of the generation method that dependent on the creation sequence. I.e. draw line 2 perpendicularly from the end of point of line 1. If you are thinking about parts or assemblies sharing, or referencing parameters as part of the regen process, this is also possible. iLogic does this, and adds scripting. So does Catia. Inventor/iLogic can also access Excel and have all the parameter processing done centrally, if required.
Consequently, scripting the placement of components is irrelevant in GH, unless you decide that each component needs to be contained in its own separate file.
I wouldn't be too hasty here. Yes, you are right about compartmentalisation. I think this needs to happen with GH, in order to deal with scalability/everyday interoperability requirements. Confining projects to one script is not sustainable. MCAD apps have been doing this for ages with 'Relational Modeling'.The Adaptive Components placement example illustrates that it is beneficial to be able to script some 'hints' that can be used on placement of the component. Say, if your component requires points as inputs, then its should be able to find the nearest points to the cursor as it moves around. I think Aish's D# / DesignScript demo'd this kind of behaviour a few years ago. Similarly, Modo Toolpipe reminds me how a lot of UI based transactions can be captured as scripts (macro recorder etc). Allowing this input to be mixed in and/or extended by GH I think will yield a lot of 'modeling efficiency' around the edges. This is a (mis)using GH as an user-programmable 'jig' for placing/manipulating 'dumb' elements in Rhino. It may even give the 'dumb elements' a bit more 'intelligence' by leaving behind embedded attributes, like links to particular construction planes etc.Even if we confine ourselves to scripting. GH is a visual or graphic programming interface. A lot of 'insert and connect' tasks can be done more easily using graphic methods. If we need to select certain vertices on a mesh as inputs for, say, a facade panel, its going to be quicker to do this 'graphically' (like the AC example), then ferreting out the relevant indices in the data tree et al. The 'facade panel' script would then have some coding to filter/prompt the user as to what inputs were acceptable, and so on.
This also brings up the point that generating components and assemblies in MCAD is not as straightforward. In iParts and iAssemblies, each configuration needs to be generated as a "child" (the individual file needs to be created for each child) before those children can be used elsewhere.
Not sure what you mean here. If the i-parts are built up using sketches /profiles or other more rudimentary features (like Revits' profile/face etc family templates) then reuse should be fairly straight forward. I suppose you could make it like GH scripting, if you cut and paste or include script snippets that generate the desired Inventor features.
One of the reasons why the distributed file approach makes perfect sense in MCAD, is that in industry you deal with a finite set of objects. Generative tools are usually not a requirement. Most mechanical engineers, product engineers and machinists would never have any use for that.
I don't think this is true. Look at the automotive body design apps, which are mostly Catia based. All of the body parts are pretty much 'generative' and generated from splines, in a procedural way, using very similar approaches to GH. Or sheet metal design. It's not always about configuration of off-the-shelf items like bolts. And, the constraints manager is available to arbitrate which bit of script fires first, and your mundane workaday associative dimensions etc can update without getting run over by the DAG(s) :-)
…
the results myself and I am open to changing the name/description of the input based on what you have found here. modulateFlowOrTemp is not the best name for what seems to be going on and we should change it to reflect more what is happening in the IDF.
Here is how I am understanding the results of the different cases:
1) When the variable flow option is selected (and the outdoor air set to "None"), the heating and cooling of the space seems to happen only through re-circulation of the indoor air. My comparison to a VAV system was not appropriate and perhaps it would be better to compare it to a window air conditioner or a warm air furnace, which, as far as I understand, only re-circulate indoor air and do not bring in outside air.
2) My reasoning for the name modulateFlowOrTemp came mostly from my realization that the supply air temperature remained within the defined limits when the variable flow option is selected (and the outdoor air set to "None"). When the outdoor air was set to Maximum or Sum, the supply air temperature went way out of the temperature limits that I initially set. I realize now that the flows are varying in both cases and the name of the input really must change.
3) I think that the reason why we don't see any effect from the air side economizer is because the heating/cooling energy results that you get from an ideal air system are just the sum of the sensible and the latent heat added/removed from the zone by the system. This value of heat added or removed from the zone does not change whether the added/removed heat comes from outside air or from a cooling/heating coil. Since there is no cooling coil or boiler or chiller in an ideal air system, there is no way to request an output of the energy added/removed by such a coil or chiller as opposed to that removed/added by outside air. In other words, the air side economizer option on the ideal air system is practically useless because it does not help us differentiate the cooling that comes from the outside air vs. that which comes from a coil. All that it does is change the outdoor air fraction while keeping the reported cooling/heating values the same.
Please let me know if you think that this explanation makes sense, Burin and, in light of all this, I am very interested in your suggestions.
From my own perspective, I am now convinced that the default should definitely have the outside air requirements set to "None" since, otherwise, we cannot distinguish cooling/heating that happens from addition of outside air and that which must be supplied by a coil. At least when we get rid of the outside air requirement, we can be sure that the ideal air system values are only showing heating/cooling from a coil or HVAC system.
I have decided to remove the airsideEconomizer input since it seems to give misleading expectations. I am going to recommend here on out that, if you want to estimate the effect of increasing outside air on cooling, you should use the "Set EP Airflow" component, use fan-driven natural ventilation, and you should connect a custom CSV schedule of airflow. You will have to create such a schedule with native GH components using the outside air temperature, your zone setpoints, and the times that you are cooling in your initial run of E+. Either you do this or you set up a full-blown system with OpenStudio.
I have also decided to get rid of the heatRecovery input since it seems like this will also produce misleading expectations by the same logic.
Lastly, I am going to change the name of the modulateFlowOrTemp_ input to outdoorAirReq_. The default will be to have no indoor air requirement as stated above but you can input either "maximum" or "sum" to have the IDF run accordingly.
Let me know if this sounds good or if you have suggestions. Updated GH file attached. The github has the new Ideal Air Loads component. Make sure that you have sync correctly and restart GH after updating your components.
-Chris…
h, and using the BScale and BDistance are creating havoc somehow too. I've simplified first, and used the Kangaroo Frames component along with setting internal iterations, to make MeshMachine act like a normal component, along with releasing the FixC and FixV. The FixV didn't make any sense anyway. I've also set Pull to 0 to speed it up during testing, since much less calculation is involved to just let the meshes collapse, prevented from disappearing altogether by using a mere 15 iterations.
Also, your breps are open so that allows much more chaos and then collapse, though they did manage to close themselves too at times. Here is closed breps with a full 45 iterations:
So now that it's working, lets re-Fix the curves, and the problem arises that there is an extra seam line that is getting fixed too, running along the cylinder, stopping the mesh from pulling tight under tension wherever a vertex happens to be near that line:
So lets grab only the naked edge curves instead:
And what happens if we lose the end caps, now that we don't have an extra line skewing the result?:
There is no real curvature differences since it's not a curvy brep so the Adapt at full 1 setting has little to do. Now what does the BScale and BDist do? Nothing! Why? Your scale is out of whack, 99 mm high cylinders but only a falloff maximum of about 5, so let's make the falloff be 25 instead, but I must restore the end caps or the meshes collapse away for some reason and freezes Rhino for a minute or so the first time I try it:
It's a start.
If I intersect the cylinders, nothing changes, since they are being treated as separate runs. MeshMachine outputs a sequence of two outputs though, due to Frames being set to a bare minimum of 2 needed to get it to work, so I filter out the original run, which is just the unmodified initial mesh it creates.
The lesson so far is that closed meshes are much less prone to collapse and glitches leading to screw ups.
A Boolean union of the cylinders is when it gets funner, here show with and without the fixed curves that seem to define boundaries too where really there are just polysurface edges:
…
xternal loads acting on the structure.But if gravity is zero and I change the material or the cross section (while the external loads are unchanged), than the values of the section forces change as well.The difference is not much, but it is there. How is this explained?
I made two files to address the gravity problem.
The first test file is based on a simple supported beam. Here, whether the gravity is on or not, you don't see any change in the values of the section forces of the load case (LC1) with the external load (when you are looking at the lists which are the output of the section force component), if the material or the cross section is changed.
And this is how it should be because these list list the values for each loadcase, and the values of the loadcase with the external load don't take into account the gravity (hence material and cross section).
The second file is a smaller definition of the main file I have been working on.
It is with beams and springs, corresponding to a deployable scissor structure.
To use this file, you have to use the corresponding rhino file. You have to set the curves (in the grasshopper file, indicated with the arrows). In the first set of curves (GH) you set the curves of layer 1 (RH), the red ones, and please do so by selecting them clockwise. In the second set of curves (GH) you set the curves of layer 2 (RH), the purple ones, again selecting them clockwise.
Normally the Karamba output should appear now.
In this file the values of the section forces of the loadcase with the external loads (LC1) (output list of the section force component) change when you change the material (steel or aluminium) and the cross section.
And this is not correct, because these values should be independent from gravity, whether gravity is on or not, right?
Is it because I am using springs (and their related cross section and material)?
Thanks for the help!
Best
Lara…
ay to use a sine wave length along a curve with the grasshopper script below. [Update: done, thank you TOM].
I am trying to figure out a way to reverse the sine wavelength.
Current problems:
1.) Reversing the sine wavelength along the curve. And provide a graph to allow for different graphs.
I.e., I want to have a sine wavelength on the base, and 3200mm above a wavelength of a different sort. Current File: (apply curve to any curve)
Brick%20problem.gh
2.) Contouring when lofted to allow for HFrame placement
I need to be able to apply the script to curves; and be able to adjust a series of points, and the multipiers to adjust the width the curve extrudes in the y axis away from the curve at a perpendicular angle.
Current: (took a long time but this is where I am now)
OLD:
Fixing: Achieved:
Also, is there a way to do this without series and by linking surfaces already in Rhino3d?
Sine wavelength below, and intention to use the brick wall on in picture after.
I've been following Nick Senske's work on YouTube for those wondering.
I hope to achieve something similar to the pictures attached:
http://www.zja.nl/image/2014/10/15/2112_500_325.jpg(mediaclass-default.f996b08cf5abfa43b3b03133a89ec231272756a9).jpg
http://www.zja.nl/en/page/2311/parametric-design-for-brick-surfaces
Edits: Removal of unneeded content and grammar. Update of pictures and progress. Thanks to Tom for his assistance. …
Added by Iain McQuin at 9:52pm on October 18, 2016