Loop'. The fun part of the slower version is that you can see what it's doing while it's running. 'Fast Loop' gives no indication that it's working, so you want to test it with small numbers and be sure it's coded properly before bumping the iteration count up.
The GH profiler running the slow version showed between 1 and 1.5 seconds per loop, but the reality was more like ~10 seconds per loop toward the end of an 11 X 11 grid, or ~20 minutes total. It's easier to be patient because you know it's working.
The 'Fast Loop' finished the same grid in 1.6 minutes! An impressive improvement. I've been running it on a 30 X 30 grid (900 points) for ~23 minutes so far and see nothing yet. Not the ~12 minutes I had hoped for... Now 36 minutes on this loop for 900 points... hope it's not stuck. Not fast! Later - DONE!! Profiler says 59 minutes for 900 points but it was more like an hour and twenty minutes total. It succeeded, I have a single 'Closed Brep' from 900 extruded rings, baked to Rhino.
Another strategy to explore would be doing 'SUnion' on a smaller grid using the Anemone loop, then replicate it by moving it as needed to form a larger grid; then run the copies through another 'SUnion' loop. I went ahead and implemented that while waiting. It works and is fast! Started with 3 X 3 and ran the result again as 5 X 5 (9 X 25 = 225 total) in barely ~70 seconds!? Trying 36 X 36 now... 1,296 points appears to have succeeded in less than ten minutes! Though it seems to take quite awhile after the loop ends before control is restored to GH/Rhino. I'll let you do your own experiments and benchmarks.
I encapsulated the loop in a cluster called 'suLoop' (blue groups).
Internal of 'suLoop' cluster:
…
Added by Joseph Oster at 11:14pm on March 22, 2017
nput parameter and then set the named values on the second?
protected override void BeforeSolveInstance() { Param_Integer param0 = Params.Input[0] as Param_Integer; Param_Integer param1 = Params.Input[1] as Param_Integer; param1.ClearNamedValues();
GH_Structure<GH_Integer> data = param0.VolatileData as GH_Structure<GH_Integer>; if (data.IsEmpty) return; foreach (GH_Integer value in data.AllData(true)) { switch (value.Value) { case 1: param1.AddNamedValue("First option for 1", 11); param1.AddNamedValue("Second option for 1", 12); param1.AddNamedValue("Third option for 1", 13); break;
case 2: param1.AddNamedValue("First option for 2", 21); param1.AddNamedValue("Second option for 2", 22); param1.AddNamedValue("Third option for 2", 23); break;
case 3: param1.AddNamedValue("First option for 3", 31); param1.AddNamedValue("Second option for 3", 32); param1.AddNamedValue("Third option for 3", 33); break; } return; } }
--
David Rutten
david@mcneel.com…
Added by David Rutten at 1:56am on December 18, 2013
where each branch contains all the points generated by dividing each curve, so if you divide into 10 segments, you'll get:
{0;0}(N = 11)
{0;1}(N = 11)
{0;2}(N = 11)
{0;3}(N = 11)
{0;4}(N = 11)
Where the second integer in the curly brackets refers back to the index of the curve in the original list.
Another way to look at this data is to see it as a table. It's got 5 rows (one for each original curve) and 11 columns, where every column contains a specific division point.
--
David Rutten
david@mcneel.com
Poprad, Slovakia…
e
7. True
8. True <-- this one
9. True
10. False
11. True
12. False
13. True
14. True <-- this one
15. True
16. False
17. True
18. False
19. True
20. True <-- this one
21. True
22. False
23. True
24. False
25. True
26. True <-- this one
27. True
28. False
29. True
30. False
31. True
32. True <-- this one
33. True
Any idea how I can solve this?
Thanks!…
onsecutive points at the same height then your 'Break at discontinuities' component eliminates the middle point completely and then the 'Interpolate Curve' component gives a much bigger bump in the wrong direction. This was enough to get curves to meet from opposite sides.
I fixed this by changing the heights to 1.1 or 2.9, rather than 1.0 and 3.0, but it took a little while to work it out! Sigh.
I attach a new version. But I actually preferred it as it was before. See what you think!
Bob
p.s. in the first list, elements 11, 12, 23 and 24 go from 1 to 3; elements 17 and 18 go from 3 to 1. In the second list, elements 6, 17, 18 and 29 go from 1 to 3; elements 12 and 23 go from 3 to 1. Given the above fix, these can be easily seen.…
Added by Bob Mackay at 10:40pm on November 24, 2015
in the desired order.
0 = 0
1 = 1
2 = 6
3 = 7
4 = 8
5 = 9
6 = 12
7 = 13
8 = 2
9 = 3
10 = 4
11 = 5
12 = 10
13 = 11
Where the first number is the index and the second number is the actual sorting key. Then you sort these keys while sorting your curves in parallel using the A input of the Sort component.
--
David Rutten
david@mcneel.com
Poprad, Slovakia…