algorithmic modeling for Rhino
Sort Points component. Sorts by X first, Y second and Z third. Note that points that seem to have the same X coordinate when you look at the numbers through the Grasshopper UI may in fact differ in the least significant digits. Ie. 3.500000000000001 and 3.4999999999997 will sort different even though both will look like 3.5 in the UI.
The more generic answer to your question about how to sort using more than one key is actually rather complicated. There are two common approaches when doing that in code:
The first approach is the most flexible but also very difficult to implement in Grasshopper. It's not really possible to define methods as component networks and use those networks as input for other components. Sometimes you can do it, sometimes you can't and actual VB, C# or Python code is needed.
The second option is probably easier. You need to combine your multi-variate properties into a single value (either a number or a string) which then becomes the sorting key. For example you could use
k = x * 1000 + y / 1000
where k is the sorting key, and x and y are the point coordinates. By multiplying x by a large number and dividing y by a large number, you can weigh the relative importance of the x and y properties. A tiny difference in x will result in a big difference in k, whereas a large difference in y will result in a small difference in k. This is not a mathematically watertight approach, when two xs are very similar and the ys are very different, the sort order will not be as expected.
There is another way to sort by multiple values, as noted in this post two weeks ago. You can create fake points where the X, Y and Z values are assigned arbitrary values before using 'Sort Pt (Sort Points)', which sorts by X/Y/Z. In the example, I reversed X and Y so now 'Sort Pt' effectively sorts by Y first and then X but you would use some other arbitrary value instead:
For example, this code sorts first by the volume of the spheres and then by their X value:
Not that it matters for the purpose of demonstrating this multi-value sort method but there were extraneous 'List Item'/'Round' components in the previous code that distorted the random distribution of sphere radii due to truncation instead of rounding. This is the result I intended - choosing randomly between three possible radius values:
Welcome to
Grasshopper
Added by Parametric House 0 Comments 0 Likes
Added by Parametric House 0 Comments 0 Likes
Added by Parametric House 0 Comments 0 Likes
Added by Parametric House 0 Comments 0 Likes
Added by Parametric House 0 Comments 0 Likes
© 2024 Created by Scott Davidson. Powered by