, Engineer and Researcher from France with broad programming experience. He is the author of the City in 3D Rhinoceros plugin for creation of buildings according to geojson file and with real elevation. Guillaume already created a new component: "Address to Location". It enables getting latitude and longitude values for the given address:
2) Support of Bathymetry data: automatic creation of underwater (sea/river/lake floor) terrain. This feature is now available through new source_ input of the "Terrain generator" component. Here is an example of terrain of the Loihi underwater volcano, of the coast of Hawaii:
3) A new terrain source has been added: ALOS World 3D 30m. ALOS is a Japanese global terrain data. Gismo "Terrain Generator" component has been using SRTM 30m terrain data, which hasn't been global and was limited to -56 to +60 latitude range. With this addition, it is possible to switch between SRTM and ALOS World 3D 30m models with the use of source_ input.
4) 9 new components have been added:
"Address To Location" - finds latitude and longitude coordinates for the given address.
"XY To Location" - finds latitude and longitude coordinates for the given Rhino XY coordinates. "Location To XY" - vice versa from the previous component: finds Rhino XY coordinates for the given latitude longitude coordinates. "Z To Elevation" - finds elevation for particular Rhino point. "Rhino text to number" - convert numeric text from Rhino to grasshopper number. "Rhino unit to meters" - convert Rhino units to meters. "Deconstruct location" - deconstructs .epw location. "New Component Example" - this component explains how to make a new Gismo component, in case you are interested to make one. We welcome new developers, even if you contribute a single component to Gismo! "Support Gismo" - gives some suggestions on how to make Gismo better, how to improve it and support it.
5) Ladybug "Terrain Generator" component now supports all units, not only Meters. So any Gismo example file which uses this component, can now use Rhino units other than Meters as well. Thank you Antonello Di Nunzio for making this happen!!
Basically just forget about this yellow panel:
This panel is not valid anymore, so just use any unit you want.
6) A number of bugs have been fixed, reported in topics for the last couple of weeks. We would like to thank members in the community who invested their time in testing, finding these bugs and reporting them: Rafat Ahmed, Peter Zatko, Mathieu Venot, Abraham Yezioro, Rafael Alonso. Thank you guys!!! Apologies if we forgot to mention someone.
The version 0.0.2 can be downloaded from here:
https://github.com/stgeorges/gismo/zipball/master
And example files from here:
https://github.com/stgeorges/gismo/tree/master/examples
Any new suggestions, testing and bug reports are welcome!!…
Added by djordje to Gismo at 5:13pm on March 1, 2017
u can still find some wonky behaviour in GH related to datatrees. My experience is that new users quite quickly get the hang of it once they learn that a tree is in fact not a tree but in the first place set of lists, where the path shows how the pieces of data used to be grouped.
Branch Count checking A component has multiple tree inputs, but has different amount of branches, each having branch count > 2. (While I understand the logic of combining multiple trees, I've not once encounted once that combining a component with e.g. an input of 2 branches and an input of 4 branches to give any kind of sensible output.
Desired behaviour: If a component has branches (each being > 2 path count), the component should throw a warning. ("Strict branches behaviour?). For example: take an offset component, with 6 branches of curves and 5 branches of offsets. It is extremely likely that this is the result of an error earlier in the definition. This works however without a problem - the last branch is repeated again, and it's later on quite hard to discover something went wrong.
Checking branch Count The most important numeric is the amount of branches, and the amount of items in the tree. It's desired that the hovers show the amount of data and the amount of branches.
Desired behaviour
Trees with paths of different rank Trees that contain {0;0} and {0} and {0;0;1} is usually a sign of trouble of not well merged trees, faulty C# components, or just nasty coding habits.
Trim as undo graft instead of flatten Having the trim in the context menu would provide an easy way to undo a graft. Right now the easiest way for many people is to flatten it, and then start all over again - while just getting rid of the last index keeps the underlying history and makes it easier to write reuseable pieces of code when you prepend datatrees to it.
Component to get branch by index, not by path Would be great. Suppose you have a grid of points, grouped by row. It would help to show: "look, this is in the first path, it's called {0;0;1}, it's got 10 points, these points are the first row".
Analogue to using list item to show what is the first point, second point, and so on.
Semantic path names (maybe far fetched) But what if we can add a short name of each method that was executed to the path list, so it can show:
{Slider 0; Series 0; Point 0}{Slider 0; Series 0; Point 1}
{Slider 0; Series 0; Point 2}
{Slider 0; Series 0; Point 3}
{Slider 0; Series 1; Point 0}
{Slider 0; Series 1; Point 1}
{Slider 0; Series 1; Point 2}
{Slider 0; Series 1; Point 3}
Make the input/data matching inside components explicit Can we make it even more obvious that a component is not a black box that's executed once, but in fact an iteration machine that tries to make sense of the inputs that's fed to this box?
Show data combination. How data input A relates to data input B and data input C, is currently very implict and is just plain hard to learn., and required the ability to be able to relate the output back to the input. If we can textually or even graphically show what data matching occured inside a component, it would greatly help the understanding (and debugging) of "what's going on here in this component"
A verbose explanation of the data matching in component A
Iteration one: - Geometry: We take the data item from Branch 0, Position 0: (Point 0,0,0) - Motion: We take the data item from Branch 0, Position 0: (Vector 0,0,0)
Iteration two:
- Geometry: We take the data item from Branch 0, Position 0: (Point 0,0,0)
- Motion: We take the data item from Branch 0, Position 1: (Vector 10,0,0)
Iteration three:
- Geometry: We take the data item from Branch 0, Position 0: (Point 0,0,0)
- Motion: We take the data item from Branch 0, Position 1: (Vector 20,0,0)
etc.
A verbose explanation of the data matching in component B
Iteration one: - Geometry: We take the data item from Branch 0, Position 0: (Point 0,0,0) - Motion: We take the data item from Branch 0, Position 0: (Vector 0,0,0)
..
Iteration seven:
- Geometry: We take the data item from Branch 0, Position 0: (Point 0,0,0)
- Motion: We take the data item from Branch 7, Position 0: (Vector 0,70,0)
..
Iteration 27:
- Geometry: We take the data item from Branch 0, Position 7: (Point 80,0,0)
- Motion: We take the data item from Branch 2, Position 0: (Vector 0,20,0)
…
is our fault that it fell through the cracks.
To answer your questions:
1. With the current capabilities in Honeybee, there are three possible ways by which air enters a zone and each has its own separate set of inputs. These three are:
1) Infiltration
2) Ventilation through the HVAC System
3) Natural Ventilation
The reason for having these three separate set of inputs is because each of these has a separate reason for why the air is entering the zone:
1) Infiltration - This is air flow into the zone through cracks in the walls that you cannot control.
2) Ventilation through the HVAC System - This is additional ventilation that you do to ensure that occupants have enough fresh air to breathe and that smells do not accumulate. Note that ventilation through the mechanical system can only happen if the zone is conditioned so, if you wanted to adequate minimum ventilation in a completely passive zone, you have you use the third option below (or boost up your infiltration to an acceptable level).
3) Natural Ventilation - This is ventilation, usually at high volumes, that you are doing to cool down the zone in place of using mechanical cooling.
You can set the first two (infiltration and ventilation through the mechanical system) with the 'Set EnergyPlus Zone Loads' component. For the case that you describe, you should not add the two together but input them like so:
I am assuming that the minimum ventilation to ensure occupants have enough fresh air is 0.5, in which case, you don't need to add the two but can subtract the infiltration from the mechanical ventilation. I have included Abraham's awesome converter components from ACH to m3/s-m2, which should make things easier in your case. For natural ventilation, you have to use the "Set EP Airflow" component.
2. Oh gosh, I did not realize that I had said that in the videos. As you have stated, you are absolutely right that you want to leave a bit of room between your heating setpoint and your minTemperatureForNatVent. I know that there currently is not a video on the Set EP Airflow and I will make this clear when I put up a video on it soon. I should also probably take out the example of an infiltration schedule from the videos too since I know that was the best the components could offer in terms of air flow at the time. I usually leave at least 2 C between my heating setpoint and the minimum temperature for natural ventilation (usually my heating setp is 20C and nat vent setpoint is somewhere between 22-26C depending on how tightly controlled temperature needs to be in the space). This is the case, unless I am crafting some special type of summertime night flushing scheme where I will use the HVACAvailabilty input on the 'Set EnergyPlus Zone Schedules' to shut down the heating system for part of the year. To clarify again what happened in your case, setting the minTempForNatVent to the heating setpoint will mean that windows immediately open once the heating setpoint is reached, causing the heating system to immediately turn back on after it has just been turned off. Over time, you have this rapid oscillation between heating and opening windows that just blows through a ton of energy.
3. You cannot use the 'Set Ideal Air Loads Parameters' to account for a COP. By definition an ideal air system does not include a COP (ideal air is the type of HVAC system that the 'Run Energy Simulation' component uses). Ideal air systems can only tell you the heat removed or added to the zone by the system - NOT the values of electricity or fuel that it might take to add or remove this heat. If you want to obtain a rough estimate of your heating and cooling with those COPs you can post-process the results using the native grasshopper division component like so:
We did not include a formal Honeybee component to perform this division operation because we want you to be aware of what is going on. This division gives you a rough estimate of the energy but it is not as accurate as modelling a complete HVAC system. We are currently building out the capability to do this with the OpenStudio component. I have attached a file with the native GH division for you.
4. Looking at your file, it makes sense that the constructions in general would not change the simulation much since you only have a single side of the box that is not adiabatic. However, I imagine that the bigger reason why the simulation is not changing much is that the constructions I see that you are using have poor R-values for the heating-dominated climate that you are working in. Try just making a no-mass material and boost up the R-value to a high amount (maybe something crazy like 15) and you will see the maximum cutting of heating energy you can get by making a thick envelope.
Sorry again that no one got back to you in a good time frame but I also realize this discussion took a long response. In the future, it might be better to break this up into a few discussions with more focused topics. That way, the people who know the individual topics you brig up can get back to you individually much faster.
-Chris…
Meeting Agenda:
1) Discuss what the group would like to learn this term through our regular scheduled meetings. Topics include the priority and sequence of Grasshopper exercises we would like to explore during the winter term from http://www.digitaltoolbox.info/grasshopper_basic.html and Processing tutorials from the Processing Handbook I received from MIT.
2) Watch the Matt Storus Church Machine video and have a discussion about parametric and generative tools in design.
If you have a chance, please read the following article by Tim Love called Between Mission Statement and Parametric Model at:
http://places.designobserver.com/entry.html?entry=10757
3) Discuss a possible design build project over the following winter and spring terms using the skill set this group is developing. Conversation led by Chris Nielson (please see comments below for a brief backstory)
4) Discuss possible applied research and design work for the National Conference on the Beginning Design Student paper, Machine Craft and the Contemporary Designer: exploring parameters and variables through making physical artifacts. I wrote the attached abstract and submitted it for the conference the past fall and it was accepted. To continue with the research I need to assemble a team of students that will help explore the principles I set forth by making physical objects with the cnc router. In exchange for helping with the research I will show participants how to use the cnc router, how to author machine code and provide you with the cnc controller interface software necessary to simulate machine movements. Not to mention, your work will be sited in the research paper I present at the conference at UNC Charlotte in March. More tomorrow night, of course.
Thank you for your interest and I hope to see you there.
Sincerely,
Erik Hegre
Chris Nielson Reply by Eugene Parametric Society on January 7, 2010 at 12:02pm
All,
In response to Erik, who requested that I describe my intentions in a design-build project and to the article posted (definitely required reading for this group) I propose that we begin development of a project that spans the realm of "sustainable social" architecture and parametric design. The particulars of such a design do need to be made concrete, and it will be important to define the goals of such a project.
Therefore, I would suggest that this serve as a forum for the next few weeks for those interested in producing a built project. I agree with Nico that it may not be feasible to create the built piece, whatever it may be, this term; however we should have the groundwork and a plan in place by the end of the next 10 weeks.
Either way, I would ask that everyone who is interested to please provide as many concepts to this forum to begin a discussion. If you are indeed interested, please submit goals that this project could achieve (energy, socially, aesthetically, economically, related) and perhaps what you envision the project to physically be (shading device, public bench, water catchment, interactive thermal contraption, etc . . . )
I look forward to hearing your thoughts!
Cheers,
Christopher…
cess informing the user the network is incomplete.
I've been thinking for a while about reading in these blobs of incomprehensible data in an attempt to maintain them through an open/save cycle, but I'll never be able to get this process watertight.
2) When you release components, you should try and make sure that they are backwards compatible previous releases. For example, if you decide to change the number of inputs/outputs or the type of inputs/outputs, this might well break file IO. What you should do in those cases is:
- Copy-paste the old component source code and change the ComponentGuid property. In essence, you make a different component which will have the changes.
- Change the Exposure property on the old component to be GH_Exposure.hidden. This will hide the component from the interface.
This basically means that when people open a file that uses the old style component, they'll get the old-style component. If people instantiate the component anew, they'll get the new component.
Grasshopper and it's default gha assemblies feature dozens upon dozens of these hidden components, sometimes there's as many as 4 old-style components out there.
3) If you want to store additional data in the ghx file for a specific component, you'll need to override the Read() and Write() methods. Something like this:
Public Overrides Function Write(ByVal writer As GH_IO.Serialization.GH_IWriter) As Boolean
writer.SetBoolean("MySpecialBooleanValue", m_myBoolean)
writer.SetString("MySpecialStringData", m_myString)
Return MyBase.Write(writer)
End Function
and
Public Overrides Function Read(ByVal reader As GH_IO.Serialization.GH_IReader) As Boolean
m_myBoolean = False 'Default state
m_myString = String.Empty 'Default state
reader.TryGetBoolean("MySpecialBooleanValue", m_myBoolean)
reader.TryGetString("MySpecialStringData", m_myString)
Return MyBase.Read(reader)
End Function
It is usually possible to make the Reading process smart enough to handle backwards compatibility. You can ask the reader object whether or not a certain value exists and you can then decide whether you can safely use old or new reading logic. So any changes to this part probably don't require you to create a duplicate component and hide the old one.
--
David Rutten
david@mcneel.com
Poprad, Slovakia…
Added by David Rutten at 2:34am on February 26, 2011
--
Did you try the package Camilo posted earlier and did you get any input by what he set up for processing? (If not I can give you a short guide, but won't if not necessary, you need to install a few libaries along with processing and set your LPDs device number in the processing sketch.. ).
Anyway - he got an Input from what he did into GH via a UDP signal read by Firefly or Ghowl.
His only problem was, he had the following input when he turned a knob... for instance ... :
Knob 1, turn fully right position: (1;129)
Knob 2, turned to middle: (2; 64)
Kno 2, tuned to left: (3;1)
But when he turned button 2; the first input was "gone" since the second signal arrived via UDP; and so was his parametric value and therefor he couldn't use more than one button to assign different values to his parametric model..
Therefor in GH, the UDP Listener gets connected to split and fed into 2 Item lists.
The item lists get inserted into a c# script (maybe you can do this in GH differently, but I have no idea how....):
Now, you create a C# script in GH. It comes with 2 inputs, I named them "WAHL" for the number channel (which knob), and "wert" for their value. They get connected to the 2 Lists. Both inputs should be set to integers.
Then zoom in and add more outputs to the GH C#-component, as many as you have buttons, I named them after LPDs Numeration K1-K8. The code when you doubleclick it as such is, for 2 buttons:
if( WAHL == 1){ a = wert; } if( WAHL == 2){ b = wert; }
K1 = a; K2 = b;
// and under the following section I set the following
//<Custom additional code> int a = 1;int b = 1;
Just add more lines for more buttons.
That's it. It just assigns the input value depending on which button is pressed to a reference object in the #c script, so the value won't get lost.
----
Now my problem is still that through Camilos processing script I don't get any signal from the buttons in the first place, only from the knobs. With the midibus library I did get them though, but his script uses the proMidi library... something to ask around for in the processing forums... …
s mostly related with panelization. Panelization means many things, for instance (1.1) designing an aluminum facade system (most common case: "hinged" extrusion profiles that contain opaque or transparent materials - the "facets"), (1.2) designing insulation and final "coating" in roofs, (1.3) ... (1.n) continue at infinitum.
2. Let's stick to the least understood (and less glamorous) part : topic (1.2). The best core material for the core job is FOAMGLAS:
http://www.foamglas.co.uk/building/applications/
3. Most ignorants in our trade believe that the main point/task of a thermal insulation is the U thing. But in fact is the Dew Point (DP) management the most important of them all (DP = critical temperature at witch the relative humidity reaches saturation). Thus we arrive to the compact "roof" (or some compact "part" of the AEC thing) matter: (3.1): Dew point INSIDE the thermal insulation, (3.2): no thermal bridges, (3.3): no air from the application medium (say plywood, corrugated/flat sheets, special Foamglas Px panels etc etc) up to to the water proofing membrane(s) (say 2 layers of SBS bituminous membranes). Here's the most typical case of them all (special tapered inserts not shown - notice the cladding fixing method without perforating the sheets, no other insulating material can do that):
4. The above image brings us directly to Kangaroo matters (if we add the "liquid" thing meaning no linear geometry around). By "liquid" I mean that our working surface is no more "flat":
In particular we must: (4.1) test if the corrugated sheets can follow the curvature (they can up to a point), (4.2) test if the FOAMGLAS panels (straight "boxes") can safely AND FULLY adhere to the medium without spending the GNP of Nigeria to do it (*), (4.3) test if the VM Zink (or Kalzip) cladding systems can cut the mustard - they are more flexible than the corrugated sheets (and can been tapered on-the-fly, Germans are very innovative on that matter) ... but... well ... you understand where the issue is, I do hope.
(*) you can use 85/25 bitumen (cheap and nightmare to put it) or PC500 (very expensive and easy to apply). Obviously some mechanical fixing is required as well.
And what is the most important test of them all? Well ... the 4.2 thing, what else?
more soon.
…
Send Feedback
Defines enumerated values for all implemented corner styles in curve offsets.
Namespace: Rhino.GeometryAssembly: RhinoCommon (in RhinoCommon.dll) Version: 5.1.30000.12 (5.0.20693.0)
Syntax
C#
public enum CurveOffsetCornerStyle
Visual Basic
Public Enumeration CurveOffsetCornerStyle
Members
Member name
Value
Description
None
0
The dafault value.
Sharp
1
Offsets and extends curves with a straight line until they intersect.
Round
2
Offsets and fillets curves with an arc of radius equal to the offset distance.
Smooth
3
Offsets and connects curves with a smooth (G1 continuity) curve.
Chamfer
4
Offsets and connects curves with a straight line between their endpoints.
…
s, Mesh Pleated Inflation". I am not an expert of this way of modelisation (first time today) but it is named funicular.
Almost 2 ways
1) Kangarooo from Daniel Piker , see example
2) http://www.grasshopper3d.com/profiles/blogs/finding-funicular-forms-using-the-dynamic-mass-method
I propose you a script, far from the real one but could help you to build a surface like you want, a smooth one. The real is not like that it has a lot of V shapes.
1) draw on XY plane the main lines of the structure
2) draw surface with rhino with corner points. Always with the same way in order to have U and V aligned correctly.
3) extract fixed edges with rhino (yellow here) put them on a specific layer
4) F10 => select all control point except edges moves them upper (z > 0)
I gave you an example far from perfect at this time. It uses kangaroo. Open rhino first followed by GH script.
Ways to improve :
In real shapes begin in zigzag.
Surface must be added to kangaroo, surely through mesh... play with goals of Kangaroo ... …
ach object has a "Source" property (layer, parent, object) - my fix causes it to look at this source property in order to determine where to draw the plot width value from. I was already doing this for color and material, but had neglected to do it for plot width.
2. The "Print Preview" viewport display option is calling the "PrintDisplay" command in Rhino, which you will notice takes a "Thickness" value - this is the conversion factor between plot weights/print widths (in mm) and the number of pixels in absolute screen width. As you note, this is a relative and not an absolute width in model units, so it does not change when you zoom. In most design applications it would be quite strange to specify the print widths of your geometry in absolute units - e.g. setting your lines to be 50 ft thick. In illustrator you are always working in "Paper Space" whereas in Rhino you have to be aware of the differences between Model Space and Paper Space (or Layout Space in Rhino terminology.)
My lineweight preview component operates on the basis of pixels - if you tell it "2" it will display a 2px-wide line irrespective of your zoom. The 4x conversion ratio you note is purely a function of the setting of your PrintDisplay command in Rhino.
3. The good news is my custom preview component ALSO supports "Absolute" lineweights in world-space units - so that they create a line that gets fatter when you zoom in and thinner when you zoom out (though it can't get thinner than a pixel, naturally.) Set the "Absolute" toggle (the 4th option" on the component - I think it will create the "Illustrator-like" behavior you're looking for, without having to create surfaces from your lines.
4. The dynamic pipeline component updates when the by-object plot weight changes. It does not update when the layer-level plot weight changes. In the end I have had to make some judgment calls about what kinds of changes should trigger a component refresh: too sensitive, and a definition could be forced to recompute unnecessarily on every little change; too insensitive, and you require too many forced refreshes.
In general I have focused on triggering updates from object-level attribute changes (Where they conceptually represent data about THIS OBJECT) and NOT from layer-level attribute changes (Where they conceptually represent data about a category). The Layer Table is the component that is designed to report changes to layer-level settings - and with "Auto Update" enabled on this component, it will in fact trigger an update on layer-level attribute changes.
With this approach, you may have to match up your geometry to the layers it belongs to, and then use the layer table component to retrieve the plot weight settings. The definition shown below is an example of how to do this. It assumes you are using layer-level plot weights.
…