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. …
ay how many valid permutations exist.
But allow me to guesstimate a number for 20 components (no more, no less). Here are my starting assumptions:
Let's say the average input and output parameter count of any component is 2. So we have 20 components, each with 2 inputs and 2 outputs.
There are roughly 35 types of parameter, so the odds of connecting two parameters at random that have the same type are roughly 3%. However there are many conversions defined and often you want a parameter of type A to seed a parameter of type B. So let's say that 10% of random connections are in fact valid. (This assumption ignores the obvious fact that certain parameters (number, point, vector) are far more common than others, so the odds of connecting identical types are actually much higher than 3%)
Now even when data can be shared between two parameters, that doesn't mean that hooking them up will result in a valid operation (let's ignore for the time being that the far majority of combinations that are valid are also bullshit). So let's say that even when we manage to pick two parameters that can communicate, the odds of us ending up with a valid component combo are still only 1 in 2.
We will limit ourselves to only single connections between parameters. At no point will a single parameter seed more than one recipient and at no point will any parameter have more than one source. We do allow for parameters which do not share or receive data.
So let's start by creating the total number of permutations that are possible simply by positioning all 20 components from left to right. This is important because we're not allowed to make wires go from right to left. The left most component can be any one of 20. So we have 20 possible permutations for the first one. Then for each of those we have 19 options to fill the second-left-most slot. 20×19×18×17×...×3×2×1 = 20! ~2.5×1018.
We can now start drawing wires from the output of component #1 to the inputs of any of the other components. We can choose to share no outputs, output #1, output #2 or both with any of the downstream components (19 of them, with two inputs each). That's 2×(19×2) + (19×2)×(19×2-1) ~ 1500 possible connections we can make for the outputs of the first component. The second component is very similar, but it only has 18 possible targets and some of the inputs will already have been used. So now we have 2×(18×2-1) + (18×2-1)×(18×2-1) ~1300. If we very roughly (not to mention very incorrectly, but I'm too tired to do the math properly) extrapolate to the other 18 components where the number of possible connections decreases in a similar fashion thoughout, we end up with a total number of 1500×1300×1140×1007×891×789×697×...×83×51×24×1 which is roughly 6.5×1050. However note that only 10% of these wires connect compatible parameters and only 50% of those will connect compatible components. So the number of valid connections we can make is roughly 3×1049.
All we have to do now is multiply the total number of valid connection per permutation with the total number of possible permutations; 20! × 3×1049 which comes to 7×1067 or 72 unvigintillion as Wolfram|Alpha tells me.
Impressive as these numbers sound, remember that by far the most of these permutations result in utter nonsense. Nonsense that produces a result, but not a meaningful one.
EDIT: This computation is way off, see this response for an improved estimate.
--
David Rutten
david@mcneel.com
Poprad, Slovakia…
Added by David Rutten at 12:06pm on March 15, 2013
ss lots of questions,Hope guys show me some more different ways to figure out thoes kinds of problems,Thanks.
That is a construction project,the balconies should be overhang between 1 to 3 meters.
Program A is a patten consist of increasing balconies as the floors get upper.(In the picture is 29 at the first floor and ended with 2 more balconies for each floor, )Each part for a different floor,the twelfth floor have 29+(12-1)*2=51 balconies.
Questions From A,
A1:How to use the {(series)} to creat this atrium,As the floors increase the number of the balconies change by arithmetic progression.
A2:How to control the angle of the balconies,both the angle with floor and the balconies ending part.
Program B is use line to shape the commercial atrium,program A is more small pieces of rectangles.The {(TweenCrv)} command.
Questions From B,
B1:How to draw random points between the 1 to 3 meters region of the balcony,And those point form a shape also belongs to that region.
B2:Use a curve or other ways to control the changing speed of each floors' balcony.Right now the balcony is a Linear change.
Thanks for your Help.
Q1:Is there a way in Grasshopper to control the model to Modulus,less different unit parts to build such a Atrium.(For Exanple,only use 900mm and 600mm two different width of the Glass railings to bulid the model A OR B)…
t BBox will then be mapped relative to the UVW space of that box to the new target boxes.
Where your definition is slipping up is the data matching aspect of GH. You have two lists (that count). One list contains 100 items of target boxes and the other contains 2 items of geometry. GH defaults to the Longest List data matching
List A --> List B
Target Box A0 --> Cuboid
Target Box A1 --> Cylinder
Target Box A2 --> (Oops List B has run out of items. Now GH will repeat the last item = Cylinder)
Target Box A3 --> Cylinder
.....
Target Box J9 --> Cylinder
Solution
There are two approaches to rectify this the most logical would be to group the geometries into one object (What you had in mind with the bounding box) to do this use the Group Component on the Transform Tab > Utility Panel.
The other approach is far more common in GH mentality. Use the Graft, right click the G input of Morph and select Graft from the Context Menu. This places all of the items in the List on to separate branches. Creating a list of lists (although these new list only have one item). When GH now tries to data match them it will apply the whole of the first geometry list (Only the Cuboid) to all of the target boxes and all of the second list (Cylinder) to the target boxes again.
I hope this helps…
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
…
te some cut sheets, but not to optmize material, rather define some cut lines. Everything that I am cutting is made of planar wood elements, but there are very specific geometries (mostly straight lines) and I have to put tolerances and radiasas at the corners in order to cut on the cnc mill. Spending time to figure out how to automate is necessary, but I am stuck!
One thing the definition is doing is taking my brep modeled components in rhino and makking them into 2d close curves and laying them side by side. It works...not ideal as its not layed out in a sheet, but that is not the most important part.
Another particular problem is that you will see some notches in the curves, which other pieces will slip into, so different slots need different specific offsets (making them larger) as a toelrance to allow for material play. This I don't even know how to set up so maybe it will just have to wait.
THE MAIN QUESTION, and super important would be, LIFESAVER:
At all 'inward' corners...which I think will always mean concave corners (most are 90 degrees, but are within to sides, instead of a corner sticking out). I'm sure its obviousy, but the reason being the outward corners a circular dril bit can cut, but inward ones need an arc profile extended beyond where the corner of the other piece will fit into. The drill bit i am using is 6mm, so 6mm diamters arcs is what i'm working with.
I have managed to put such an arc at every vertices of each cut piece. The problem being some stick outward isntead of cutting into the piece. So each one needs to be orieneted correctly. Ideally they would also only draw into inward corners, but I can always delete them out. I think maybe I am missing a more logical mathematical way of defining?
For these geometries it is not very important which side the half circle arc in on in the inward corners, but I also have some geometries that I will have to control where the circles face according to the rest of the cut piece.
The cutouts in the middle of the pieces that are curves do not need such corners obviously.
The picture is an example drawn
I hope this isn't too specific and long. in general though automating fabrication, and controling pracitcal math and orientation problems like this is itnersting to me!
THANKS…