e the meaning or posting "ready" (kinda) solutions in response to something asked in the code related forum? (that could be rather ridiculous: Greetings code freaks: a user - that you've never heard of - asked this and I did that ... utterly ridiculous).
Now .. if a request comes from a novice either a component based solution or a freaky one ... well ... they have a very limited usage (if any usage at all) on a per se basis: because only time combined with a certain experience could yield the required ability to deal with issues before happening.
On the other hand ...to tell you the truth I believe that's far easier for a novice to get some "basic" programming skills and deal with his/her issues (who are in 99% of cases data management related ones) than to attack them via components.
On the other hand I believe that in the future (not the distant one) ... anyone involved in this ugly business AND not speaking some freaky language he could be rated as class D citizen (brave new world: here we are).
But that's a highly personal opinion (extreme to the max, as usual, he he).
PS: I don't think that the majority of posts here come from novices (yesterday a fellow user asked a very challenging thing: the one with the max rectangle).
take care …
u are posting in the wrong place.
99% of the posted questions in the general discussion forum are from novice grasshopper users who have lack of very basic knowledge.
In my opinion, the best response to these posts is providing the simplest (easiest to understand) solution to the problem, plus an explanation of why the definition wasn't working, plus some suggested fields of study.
On the other hand, you provide a very fancy solution, which gets the job done (and usually a bunch of other jobs as well), but there is 0% chance it will be comprehended or further developed by the OP...
This is the typical giving_fish_VS_teaching_how_to_fish debate.
As for the "please ignore me if you enjoy being primitive" argument, I am afraid it is not as simple as that. A post with 3-4 replies (which, in this case, would be 3 subsequent versions of your solution, plus an awkward "ehm, tyvm" from the OP) has a great chance of going unnoticed by anyone who could provide a gh solution...
And finally I have to point out that the right place for coding discussion is just a doorstep away.
cheers,
a not-pissed-off co-member of this forum …
Added by nikos tzar at 8:29am on February 15, 2015
ostly via C# because ... er ... the remaining 99% (how to do some real-life canopy and/or a real-life truss out of the relaxed line graph) is only doable via code - no ExoW/IL (so ... the 1% is indeed doable).
At first ... just double click the Kangaroo1 engine, halt the simulation AND ONLY THEN redirect the resulting line list to the ExoW/IL. As delivered neither is active.
Note: ExoW and/or IntraLattice MAY or MAY NOT work (each one has his own issues, but ExoW despite the glitches yields way better looking liquid stuff). So the liquid root may or may not be the holly grail that you expect (life sucks).
Note: As is delivered this only does a liquid node load bearing structure (ideal for Planet Utopia). Paint the thing black, do some proper pavement, populate with birds of pray, wait for the envelope def (that's freaky), put humans inside, lock the doors > massacre.
…
narity constrains as well. Let's over-simplify the case. Using that planar test data set shown we create a classic Adjacency Matrix that tells us what node is connected with what (you can use Sandbox for making the connectivity required in order to make the Matrix) :
Some other freaky thingy gets the Matrix, does freaky things (using recursion) and finally yields node indices that belong to a closed loop/cycle (see the forefront and the back). The other indices shown (describing "bigger" loops) are used for other type of stuff/checks:
More soon…
to perform the kind of merge I want. Basically:
I have a series of three integers, each representing a radius measure:
Radii[0-2]
I have a three sets of series of 3Dpoints, each set with ~100-400 vals:
PListOne[0-333]
PListTwo[0-333]
PListThree[0-333]
I want to link the data paths up so that the Radii form the first dimension of the array, and that the second dimension is the corresponding points set. So
Radii[0] = 500 (the radius)
Radii[0][0] = 50,75,0 (the first point in PListOne)
...
Radii[2][99] = 44,66,0 (the 100th point in PListThree)
This should be really simple, but I cant seem tog et my head around the right components to do it. I've attached a file with number series in place of the radii/points lists. If someone could show me how to merge the components in the manner above, it would be extremely appreciated.…
all the other rules.
2. No Flattening! use path shift / trim tree instead of flattening.
3. No Path Mapper! I have never met a data operation with the path mapper that could not be achieved through relative means.
4. No Simplify! It makes things *look* nicer but believe it or not those zeros are meaningful and shouldn't just be eliminated. If you are OCD about the way your paths look, then Path shift after every operation that introduces a new branch level (a new "0" at the end) IF AND ONLY IF you are sure that in the case of your definition the component will always function "1 to 1" - that is, for every single input there is only one output.
5. If you absolutely must flatten (to take a global bounds, or generate random values for every item, or whatever) be sure to Unflatten before continuing.
6. Design for the worst case - start with primary inputs in the most complex data structure your definition is likely to need to be able to handle (a tree for instance) rather than a single item.
If you follow the above rules, 99% of the time your definitions will respond appropriately to any change in upstream data structure. If you want an example of how this works in practice, post your definition and I can help find "relative" approaches to the "absolute" things you are currently doing. …
ake a modest notice about the two new Ladybug components, one of which creates a 3d terrain shading mask and another one which visualizes and exports horizon angles. A terrain shading mask is essentially a diagram which maps the silhouette of the surrounding terrain (hills, valleys, mountains, tree tops...) around the chosen location, and account for the shading losses from the terrain. It can be used as a context_ input in mountainous or higher latitude regions for any kind of sun related analysis: sunlight hours analysis, solar radiation analysis, view analysis, photovoltaics/solar water heating sunpath shading...
My home town is an example of the shading caused by the terrain. Here is how it looks from the tallest building in the town:
And the created terrain shading mask:
A mask for any land location up to 60 degrees North can be created:
There will also be a support for a few major cities above this limit.
Both Terrain shading mask and Horizon angles components can be downloaded from here. An example .gh file can be found in here.
Component will prompt the user to download and copy certain files in order to be able to run.
It was created with assistance from Dr. Bojan Savric. Support on various issues was further given by: Dr. Graham Dawson, Dr. Alec Bennett, Dr. Ulrich Deuschle, Andrew T. Young, LiMinlu, Jonathan de Ferranti, Michal Migurski, Christopher Crosby, Even Rouault, Tamas Szekeres, Izabela Spasic, Mostapha Sadeghipour Roudsari, Dragan Milenkovic, Chen Weiqing, Menno Deij-van Rijswijk and gis.stackexchange.com community.
I hope somebody might find the components useful.…
st between those two applications. But as soon as every frame is re-calculated I noticed that intersection function is very slow. It is actually so slow, that maximum number of polygons to play with is only 10 or less.
Could you help me to find a faster solution for my script?
calculation of intersection lines;
//////////////////////////////////////////////////////////////////////////////////////////
import ghpythonlib.components as ghcompimport rhinoscriptsyntax as rsdef ctr(crv): pts = ghcomp.Explode(crv)[1] pts = ghcomp.CullDuplicates(pts,0.001)[0] return ghcomp.Average(pts)pts = []lines = []ctr_c1 = ctr(C1)for crv in C2: if ctr(crv) != ctr_c1: int = ghcomp.CurveXCurve(C1, crv)[0] if int: [pts.append(x) for x in int] lines.append(rs.AddLine(int[0],int[1]))
/////////////////////////////////////////////////////////////////////////////////////////////
The overall description of the script:
a)Processing+ghowl is used for moving objects and physics
b)python script (slowest part) calculates intersection lines
c)intersected parts of polygons are rotated in 90 degrees.
I have attached grasshopper and processing files. (processing is not necessary to test the script)
Thank you in advance,
Pereas.
…
simple, there are many symetries in 3 main planes. So I used arcs rotated 45° from the main planes and I generate a pentagon which was mirrored and rotated many times.
At the end there are 24 pentagons and 8 hexagons so 32 faces, 54 points/vertex and 84 edges.
It could generate some others tessalation styles
…
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