his comes in the form of an HTML page with links to every component, so you will need to view it in your web browser. (I use Chrome and it doesn't seem to be working correctly, but when opened in IE its fine.)
2) Included in each help topic for each component is the Inputs and Outputs descriptions and data types.
3) You supply the data. What you supply and how you supply it is for you to decide. There are umpteen different ways. Are you asking for a list of those ways for each input?
4) Points can either be Rhino objects or 3D co-ordinates. To create a point you can use any of these methods, but it mostly comes down to user preference. I like using Panels as this displays outside of the component.
5) Because of the nature of vectors they represent magnitude and direction but they don't have an independent location, so there is a component that will display vectors in Rhino.
6) The user.
7) There is a Primer on the front page. Here you find the Basics, but because GH is ever evolving in its current beta state you might find things that aren't relevant any more or simply don't work the same. And here is the reason why nobody is writing an update because it could be soon out of date.
8) Importing images by either dragging them from explorer onto the canvas or right click context menu Image...
9) Single line = Single Item of Data. Double line = Multiple items of data on the same Branch. Dashed Double Line = Multiple Data on Multiple Branches.
10) User preference
11) Toolbar management is probably the bane of David's life. Most things are logically placed. For example the Curve Tab, Primitives are any simple curve types that you are creating from scratch. Similarly Splines is for more complex curve types created from scratch. Analysis is where you find components that are finding answers supplied by curves, control points, curvature, parameters, end points etc. Division is a subset of this category but has a group of its own. And Utilities is where you find curve related actions that you want to perform, offsetting, rebuilding projecting, exploding etc.
12) I would image it would have been the Point On Curve component in Curve>Analysis. Why that group? You are not putting a point on a curve you are analysing a curve for the location of a point based on some parameters that you are supplying. For example "what is the mid point?"
I hope this goes some way towards answering you questions. No doubt this will have generated more so don't be afraid to ask, it took me several releases of Explicit History (aka Grasshopper) before I realised what the egg did, it never occurred to me that I could put my objects into Rhino when I was finished. Or the fact that I could use panels to 'see' data outputs.
Al the best,
Danny…
Added by Danny Boyes at 3:48am on December 9, 2010
s, the participants will focus on the key advantages of Grasshopper’s capabilities through a range of design challenges in order to aid designers in both their drafting tasks and modelling capabilities.
The workshop covers many concepts such as Object Attributes/Parameters, Data Types, Data Structures, and Designing with Algorithms. Specifically, this course will focus on understanding both Lists and Data Trees, as well as the best practices for integrating Grasshopper into your Professional Design Workflow. The workshop offers guided curriculum and continuous support, based on in-depth and professional learning experiences.
Workshop outcomes:Teach the participants how to:-
+ be proficient in parametric logics learning the key benefits of parametric techniques in architecture design workflow (when to use it & how to use it)+ Correctly communicate with different 3D and BIM packages in order to keep the geometry clean and light while preserving all NURBS information.+ Develop architecture design based on mathematical equations to create non-standard free form building skin.+ Create a pattern that changes dynamically based on specific inputs which can be applied over the building façade, interior walls or ceiling or even floor pattern.+ Automate and Optimize design variables to achieve the optimum solution for the design problem.
Program Outline:
DAY 1:-Introduction to Parametric Design -Introduction to Grasshopper & Rhino (technical tools).
DAY 2:-Exploring the parametric workflow. -Setup the design algorithm & generating a list of data.
DAY 3:-Introducing the new ways of generating parametric curves and surfaces.-Parametric form generation in-dept
DAY 4:-Introducing Data Tree logic and parametric transformations.-Creating Associative techniques – Attractors (points, curves and vectors).
DAY 5:-Working with advanced form generation with dynamic pattern.-Parametric optimization based on environmental analysis -featuring the Performance-Driven Design possibilities
DURATION:6 – 8 hours per day [50 - 60 hours Total]Every Saturday [9.00 Am : 1.00 Pm & 2.30 Pm : 6.00 Pm]
PREREQUISITES:No need of any specific knowledge of Rhinoceros or Grasshopper.
REGISTRATION:In order to register, you will need to fill the Registration Form .https://docs.google.com/forms/d/1PckdW1hrWs9fJAHWBZlVsuhH8K0PfDuMWIpXHT_4FYw/viewform
REGISTRATION DEADLINE:23th October 2014.…
Added by ayman wagdy at 7:48am on October 19, 2014
.
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
…
rid that works on the left and/or right edge of the components, so that it's easier to align them (similarly to the align functions that show up when multiple objects are selected)
Overall, I think we'd just need a basic grid for alignment, so whatever is easy/quick to implement might be good enough.
4) great, I didn't know about aliases - that pretty much answers my question.
Related to this, when I press F4 and search for a component, if the mouse/pen pointer is above the list, when I press enter Grasshopper will insert the component under the pointer, and not the one I have found with the keyboard. Am I missing something? In case could it be fixed?
As a side note, at the moment the keyboard focus is always on the Rhino Command Line. Would it be possible to optionally change the focus when the Grasshopper window is active so that we can insert new components just by typing, without pressing F4 or doubleclicking? I just find myself constantly using the keyboard to insert components, so that'd be a very nice timesaving.
5) Your idea would be great to manage complex panels and I think would be very nice to have.
However I was thinking of a different workflow, that could be useful - for instance - when working with several objects in Rhino that are referenced in Grasshopper as basis to create more complex objects.
For example: I have three different surfaces that are used to create framed grille elements. It would make sense to select these surfaces in Rhino and access to a panel that shows the element properties (for example frame dimensions, type of grille, etc.) - similarly to the property panel in Rhino.
Additionally, If I need to create a new grille element from another Rhino surface, I could just duplicate the RPC component along with the definition without the need of manually publishing all the parameters to a new RPC group. I hope this makes sense.
I understand this may not be an "urgent" feature, however I find that working with RPCs is very pleasant so I'd really like to see this feature expanded in some way :-)
6) Just perfect :-)
Thanks again David!
Marco
…
truss right?
2. Trusses are NOT made via lines ... they are made by real-life components like balls, rods and other mysterious (and maybe ominous, he he) paraphernalia.Good news for you: lot's of C# stuff around me that do that (but they are not exactly "entry-level").
3. PRIOR talking to ANY FEA/FIM thingy you need to address clash situations: I mean IF a given node is doable or not (because lines they don't rise clash issues ... but rods/struts/tubes/cones do). Good news for you: lot's of C# stuff around me that do that (but they are not exactly "entry-level").
4. Then you have to use some real-life (or at least some "realistic") components like the ones found in, say, a classic MERO "ball" system (and especially the adapter cones between the balls and the tubes). Or at least "some" of them that outline a "realistic" truss.Good news for you: see above.
5. Then you could validate the whole structure AND the parts VS structural loads: I mean there's absolutely no meaning "doing the whole" without taking into account the load bearing capability of the parts. For instance, say, what happens if the geometry (i.e. the topology) is "capable" but a given bolt is weak? That sort of stuff.
6. Now ... this is Academic ... but following the "abstract" way (I don't care about bolts because I'm a student)... this could teach you the entirely wrong way to use FEA/FIM for validating any structural ability of ... anything. And besides FEA/FIM is used for making the damn thing in the real-world ... and that involves (unfortunately) "some" bolts and nuts.
I can arrange a (rather long) Skype session for a demo of all the above ... but first I strongly advise to post here a finished thing (in terms of 3d component geometry) ... and THEN we can examine the whole strategy: what to export, how and especially what could be an "interactive" (both ways) protocol/strategy in order to give the green light for that truss.
BTW: Kangaroo is a physics engine and as such it's used as an abstract "shape" finder. I have no idea what Karamba does ... but always have in mind: BIM things ... are BIM things (meaning that without a serious BIM umbrella ... don't go out when it rains).…
ate):
1) go to: https://github.com/mostaphaRoudsari/ladybug/2) click on "clone or download"/Download ZIP
3) Download and extract the folder wherever you want on your machine
4) Open the folder and open "userObjects"
5) you'll see something like this
6) open Grasshopper/File/Special Folders/User Object Folder
7) Select and delete all Ladybug components
8) Drag all components of the point 5) into the canvas of Grasshopper wherever you want or inside the "User Object Folder"... it is the same thing.
And it should be fine.
Let me know if it works.
Best
Antonello
…
gns. There were a few issues with your case. I will try to list them, hoping that this can also be helpful to you but also other users in the forum.
1. The Rhino model contained a lot of open polysurfaces. This is a big enemy of meshing and CFD. The way meshing works is that every single open area, that can be reached from your locationInMesh with a polyline, will be included in meshing. Some of your lanscape volumes were open. I have rectified this in the .gh file attached and now they should be ok to mesh.
2. It is strongly suggested to rotate the geometry and not the incoming wind when creating the wind tunnel. This might as well have been the reason for meshing awkwardly, although can't be sure. I have rotated the geometry by 45 degrees to allow your original wind to have a Y+ direction.
3. I could see a decomposition component in your case study although I cannot be sure if this could be the reason of your problems. It was not connected to anything, but perhaps it might have been the culprit for the paralle issues you were having. I have disabled the component so the case would run in single processor, but you can freely enable it and your case will be run in parallel (4 cores).
4. Your post-processing surfaces have large parts inside the building volumes and under the landscape (if included). You will probably get some issues with visualizing some probes, although this will not affect your study in any way. I recommend to only pass probes that you know to be sure will be inside the mesh to OF.
5. If you decide to include the landscape (I have it disabled in the attached .gh file) I strongly recommend to allow for more cells than 2m. 10m would be a good start imo for this case.
6. I did not check, as it will not make your case break, but your grading was a bit imbalanced at first glance. Try and keep some balance, especially in the X-direction, and make sure to visualize the blockMesh and make sure you achieved what you had in mind.
I did not actually run the case btw, I leave that to you. I believe it will run without problems, although I cannot be sure it will not diverge (this is something that is very educational for you to deal with).
Good luck!
Theodore.…
e curve and uses the resulting surface/subdivisions to:
1. Smooth wall surface, varied via the Image Mapper
2. Segmented wall surface, varied via the Image Mapper
3. Populate the surface with spheres (with or without the "wall" surface)
4. Ribbed wall surface (Horizontal and / or Vertical)
5. Protrussions from the surface, driven by Image Sampler
6. Wall of Tubes, driven by Image Sampler
7. Gridded Web Surface
The options have to be enabled/disabled to achieve various results, but the idea is that this script permits a variety of looks, all in one script. See attachments at bottom.
I think this is a decent example file showing a variety of things that can be done using the Image Sampler Component in Grasshopper. This is a working version, so I am sure there are a lot better ways to achieve some of these effects. Hopefully, this will help some of you out and / or inspire some ew idea.
In the script, there is a User Object I downloaded from digitalsubstance. It is a self contained point attractor cluster, super cool, super fun. Link to the site is below.
http://digitalsubstance.wordpress.com/subcode/
If there is interest, I will update this post with an annotated version.
My blog, still in progress
http://thatsnotarchitecture.tumblr.com/
…
oks like the design in the following images:
Concept Images:
Shape:
Design_Request.pdf CR_tower_shape.ghdiagrid.gh
Shape Routine:
Diagrid Routine:
Example and Inspiration:http://www.solaripedia.com/images/large/4226.jpg
Goals:
The goal is to create a grasshopper routine that recreates a modifiable design concept as shown in the concept images. The following parameters should be modifiable
1) The size and elevation of all the basic triangles, circles and the ellipse.
2) The elevation and shape of the opening and the shape and size of the three legs.
3) The shape of the crown. The angle of the tilted ellipse.
4) The loft shape between the edges.
5) The grid size (U,V) of the diagrid.
6) The size of the 2 pipes used for the structure.
Rhino Grasshopper Workflow:
I attempted Boolean difference of a solid (Brep) and the surface in question to create the opening in the surface as shown above but that did not work. What should i do to recreate the concept in grasshopper ? I would appreciate any feedback and advice. Thank you very much !
-Christoph AKA Stoph
…
will cover one of the latest and greatest topics from recent development. Although the webinars will be happening each Thursday around 12:30 Eastern Standard Time, registration will give you indefinite access to recordings of the webinars so that you can reference them when the time comes to apply them on your work!
The grand list of workshops is as follows:
1 - High-Quality Graphics, Visualizations and Animations with LadybugMarch 9th, 12:30 PM EST
2 - Brute Force Parametric Energy Modeling and Sensitivity Analyses in Early DesignMarch 23rd, 12:30 PM EST
3 - Wintertime Indoor Thermal Comfort Visualization - Eliminating Perimeter Heat with High-Performing FacadesMarch 30th, 12:30 PM EST
4 - Summertime Indoor Thermal Comfort Visualization - Setpoints and Blinds Up with Right Shade + ControlsApril 6th, 12:30 PM EST
5 - Condensation Modeling with HoneybeeApril 20th, 12:30 PM EST
6 - Urban Heat Island Modeling with DragonflyApril 27th, 12:30 PM EST
7 - Expanding Your Climate Data Sources with DragonflyMay 4th, 12:30 PM EST
8 - CFD Simulation with OpenFOAM, Rhino/Grasshopper and Butterfly (Advanced)May 11th, 12:30 PM EST
This series will have a similar arc as the one in the Fall, starting with basic topics and moving to advanced ones as we progress down the list. The first one will be accessible to all users regardless of prior experience and all of the workshops listed here will cover topics for which there is currently no tutorial video content. Hope that you can attend!…