derstanding of the graphical algorithm editor, and then dive into more complex parametric models. We’ll also learn tricks to keep our project responsive and enjoyable to use.Course outline
covering similar content as the first part of the primer(http://www.grasshopper3d.com/page/tutorials-1)
novel material
duration: 3 days (24 hours)
Including
An understanding of the Grasshopper interface and the visual programming theory
Base parameters, large numbers of points and vectors, and small geometrical instances
Data flow
Troubleshooting definition problems and solutions
Know the main component types
Be able to join, and manage connections and trees
Expressions for both calculation and boolean creation
Understand Data Matching and casting
Managing long lists of objects within Grasshopper
Have an understanding of the functioning of Grasshopper components
Experience creating definitions
Parametric geometry examples, like attractors and list culling
Re-utilizable modeling examples: colored panelization, surface population, gradient and picture sampling and manipulation, catenary line and weaving
Spline animation examples
Getting ready to prepare own definitions in groups
More information...
…
th one element which is a list of 10 numbers?
I can flatten it and get (I think) a list of 10 elements (even though when I hover over the output of "Flatten" it says "Tree(T) as tree"). I'm surprised I can flatten at all what would appear to common sense to be a simple list of 10 numbers.
I'm hoping that if I can get this answered it will become obvious why we have trees of lists rather than just lists of lists as you would in most computer languages. That's my real goal - to understand the purpose of adding what seems like an unnecessary complication - trees - to the concept of lists in GH. It seems to me as though a "tree" is just a list of other "trees" until you get to the leaves where you can have "lists" which are identical to trees but can have something other than a tree in them. Whether you can have lists of trees or trees with no lists I'm unclear on. Do the leaves of trees have to be lists? Do lists have to be contained in trees? It would appear from the series example where a tree is produced for no obvious reason to contain the list that this is the case but given that you can flatten it, I guess not - or is the "List" I see in the param viewer just another type of "tree"?
I've found many tutorials that talk about how to manipulate trees and lists and I've managed to get along fairly well with them so far, but nothing seems to explain the reasoning behind the existence of trees and the philosophy for how and when they should be used and when lists should/could be used and precisely what the difference is between them.
Sorry to be long winded but I'm so confused!
Darrell Plank
P.S. I've seen David Rutten's diagram with the colored leaves in Grasshopper Primer 2 and that seems helpful. It would appear that trees can only have lists at their leaves and lists can't have trees although I'm not sure that it comes out and says that directly but at least there are no examples of this shown in his tree diagram. I thought I had it down pretty much so decided to test myself. Apparently I'm as confused as ever:
It certainly appears to me that this tree has two levels - a first level with one limb and a second with 10 limbs - and that I should be able to index it with {0;0} and retrieve a tree with one item in it - the list {0}. The panel data seems to confirm this with indices of {0;0;0}, etc. so I put this path in with quite a bit of confidence that it would work and...bust. The error reads "Path {0;0} does not exist within this tree". Huh? Again, I'm just so confused.…
Added by Darrell Plank at 12:17am on January 20, 2015
tract subsets, be sure you always perform the same actions on a list of increasing numbers. So, before you start to manipulate a list of 100 points, create a list of 100 integers (0, 1, 2, ..., 99) and make sure it gets mutilated in the exact same way as the pointlist.
Then, when all your points are modified, bring them all into the same list again and sort that list using the integer array as keys. This ought to put them back into the right order.
2) Reverse Engineering: since you know all your points are along well defined curves (lines in your case), you could project them all onto a line that spans the entire model. This will give you a list of curve parameters (floating point numbers). You can then sort your points once again, but this time using the parameters as keys. (See image: by sorting all the points using the curve parameters, you get the order in which they appear from left to right)
2b) If you need to do this thing on points which are in a grid (i.e. 2D sorting), you have to project onto a surface so you get uv parameters for every point. Then vastly multiply only the u (or only the v) values, since you want to give rows (or columns) a higher weighting. Finally add u and v together and this will give you another list of floating point numbers which can be used as a keys array in a sort operation.…
.0001, the functionality is been put into dedicated components (see this post for further details).
Different branches are always combined using Longest List logic. I'm unhappy about this as well, I need to give more control over how different branches are combined, but I haven't figured out yet how to expose such functionality without it being utterly incomprehensible to 99% of the users.
If you want to ignore the data inside the fourth branch, you'll need to remove that branch before the data goes into the Line component. It's easy to remove a specific branch, somewhat trickier to make this removal dependant on variables elsewhere in the network.
You can use the Split Tree component to achieve this either way. Using a fixed mask (like in the image below) may be sufficient.
The !3 means that any branch is allowed except when it has a 3 in that location. The [0-2] means that only branches which have a number in between and including 0 and 2 will be allowed.
--
David Rutten
david@mcneel.com
Poprad, Slovakia…
d" floor side).
Rails are obviously defined with slope adjustments at start/end: Imagine a rail ramp curve made via, say, 20 control points: at start p0 is not moved, p1 is moved half the step .... p19 is moved half the step*17 and p20 is moved the full distance. Thus we have what is called "slope adjustment" in our trade.
a myriad of options controls where the spaghetti starts (curve.PoitAt(userControllableT)) what is the continuity mode (sequential or steady[shown]) and what type of profile is used for the sweep.
…
that ... blah, blah) but each of those cores will be running at lower speeds because of the thermal restrictions.
For instance, a dual core may have base clock speeds of 3.5 GHz for each processor while a quad core processor may only run at 3.0GHz. Focusing to single core (on each of them) the dual core processor will be able to about fourteen percent faster than on the quad core. Thus, if you have a program/app that is only single threaded (99% of what's available for AEC puproses to be honest), the dual core processor is actually better. Then again, if you have something that can (?) use (??) all (???) four processors such as the notorious Nexus rendering engine (Modo/Microstation/AECOSim), then the quad core processor will actually be about seventy percent faster than that dual core processor.
But no AEC engineer worth his name cares about rendering stuff, he he.
AMD and Intel have introduced technologies that can dynamically increase the speed of a processor core to help offset these differences between the dual and quad/octa core products. For instance, Intel may have the quad core processor with a base clock speed be 3.0GHz but when only a single processor core is in use at full load, that processor core will be boosted up to 3.4GHz. This would then make the quad core processor just three percent slower than a dual core processor that runs at 3.5GHz.
In general and theoretically, a multiple core processor is a "better" choice but that does not necessarily mean that you will better overall performance.…
switch this talking off-line if you are interested to know the real reasons in depth.
What is the pro way? Well ... imagine objects (blobs et all) that are placed in 3d space by some per object policy whilst their "property" (bend,repulse) is user controlled on a per object basis. Then imagine variants of all that spaghetti yielded (the rays, that is) stored in parameters in order to do the obvious : take control of all your previous attempts (replace, remove, swap, reset etc etc).
Get a 10-- minute thingy (straight out of my head: NO checks OF ANY kind performed [bugs possible], just a grid that shoots rays and a single blob (a sphere) that does the job). Not even a decent random policy is applied in order to have some nice looking rays (not to mention their directions).
Now ... imagine any collection of breps distorting the ray chaos: i.e. a ray meets a blob > is distorted (or not) > then meets another > ... > blah, blah (plus some policy for killing rays heading to Sahara instead of Vienna - but that's elementary).
This requires at least 2 hours of coding to do it properly (+ the variants "management" C#).
But ... well ... it could be a good real-life case when Solaronix "sponge" type of U/V collectors could be available (rather soon) > I'll do it > the future > the glory > the cash > the polar bears.…
gain profits falls in the latter category.
The challenge here is to do the job (up to a point) using "anodyne" ways at the cost of providing slow, incomplete and quite inefficient solutions.
That said this specific vault case requires addressing 4 "classes" of problems (for instance: regions due to ccx events or alternatively circuits in graphs etc etc).
Back to business:
Creating a realistic "random" W truss of that type is one of the most challenging tasks in parametric adventures (in fact ... is the top dog by some miles). One of the many issues is an approach to manage "on-the-fly" clash situations by individually modifying nodes (without been sure that you can arrive to an all overall valid solution). Since one "path" tried may yield dead-end(s) this means keeping track of your corrective actions in a hierarchical manner and been able to follow a different "path". Another (obvious) issue is to use instance definitions for all the "components" thus achieving almost real-time response (try to manage 100K++ "solids" [sleeves, cones etc etc] to see what I mean) ... etc etc.
The big thing is: what are you going to tell to your instructors about the required code part? (that 99% mentioned) And if a "complete" solution is primarily based on "black boxes" could - in the instructor's eyes - your Master Thesis qualify as yours?
That said Vaults_V1 is achievable solely via components.…
ng (It's a bit similar to the Knapsack problem):
I have a Variable --> XandI Have fix numbers (can we call "pieces") 9,12,15,18
I'd like to reach the X, with the summing of these numbers and using the minimum pieces ,it can't be lower than X, but it can be higher, maximum with 3.After this it has to found the most optimal combination which mostly use the same pieces
E.G.
X=98
The wrong solution is like = 1pcs of 18 = 9pcs of 9
Sum of pieces are 10
OR
= 3pcs of 18 = 1pcs of 15 = 1pcs of 12 = 2pcs of 9
Sum of pieces are 7
The right solution in this case = 5pcs of 18 = 1pcs of 9
(5*18)+(1*9)=99 it's good beacuse it's over with maximum 3 and uses the minimum pieces
Then it sends to a list like18 : 5pcs15 : 0pcs12 : 0pcs9 : 1pcsCan somebody help me ? Or is it possible to make this ?
Thank you…
Added by Petrik Kollár at 1:09am on November 10, 2017
(tree info, relationships to certain other objects, etc.) after it's been baked, so that our team can hand tool some of the results, delete certain objects, etc. I'm using the doc.objects.find(guid) function right now - which works fine when I feed a string into the VB component and set the input as a GUID, but am having a hard time casting my strings from Excel into the GUID directly in the VB component. Hopefully it's easy to do and I can whack my palm on my face, as often I do. Here's my script...I get the "specified cast is not valid" error at: Dim obj As Guid = xlSheet.Range(strGUIDColumn & I).Value.
If activate = True Then
Dim xlApp, xlSheet As Object
xlApp = System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application")Dim strSheet As String = "MEM_6"
Dim strGUIDColumn As String = "C"
Dim strDeleteColumn As String = "F"
Dim intCheck As Int16 = xlApp.Worksheets("META").Range("B4").Value
Dim I As Int16
xlSheet = xlApp.Worksheets(strSheet)
For I = 2 To intCheck + 1
Dim obj As Guid = xlSheet.Range(strGUIDColumn & I).Value <- returns my casting error
If doc.Objects.Find(obj) Is Nothing Then
xlSheet.Range(strDeleteColumn & I).Value = "X"
End If
Next
End If
thanks!…
Added by David Stasiuk at 8:05am on December 15, 2010