February 21, 2018, 6:13pm
I’ve created a grid of circles that I would like to scale using attractor points. I’ve used a Minimum component to limit the effect / operating range of the attractor. I haven’t been able to figure out how to add additional attractors to the definition - ideally I’d like to add multiple points.
Many thanks in advance,
attractors_circles.gh (10.2 KB)
Use Pull Point’s Distance output.
Some brief comments to consider - before I dig deeper for your answer.
This white group is how I would generate a random list of attractor points:
It seems odd to me that you create all circles with a fixed radius and scale them later instead of creating circles with different radii based on proximity to attractors?
Cull every other circle seems odd to me, instead of creating a grid with more separation in the first place? Use ‘V Count’ = 125 instead of 250 for SDivide.
Ideally, you would use the grid points instead of
Area ‘C’ (Centroid)
TBC (To Be Continued)
Later… I replaced
Dist with CP (Closet Point - singular!) This is an important detail.
Scale as you had it but would recommend changing that to create the circles with radii based on distance instead.
February 21, 2018, 7:21pm
Thank you for your answers – extremely helpful and clear.
To answer a couple of your questions:
This was intended to control the density of the original pattern, in conjunction with SDivide, but I see how you’ve created a Max. Radius with ReMap instead - that’s much better.
I forgot to flatten the output of CircleCNR; want to have the ability to make it a running pattern with Cull. I imagine this can still work with either of your definitions?
February 21, 2018, 7:23pm
Thank you very much for your suggestion – this is a great alternative. I need to add a few more parameters in this case but am saving your definition for future use.
Two more improvements:
A/B thing wasn’t sitting right with my way of thinking so I ditched it. Added a ‘min radius’ slider (blue group) to set the smallest circle size.
Yes, that will work.
Note that I disabled
Boundary at the end because it’s rather slow. It’s more fun to play with the ‘Seed’ and ‘Count’ slider inputs to PopGeo when the model is fast.
February 21, 2018, 11:00pm
Thank you again. I reconstructed your definition to trace your logic and it works perfectly.
I have two other questions –
I would like to apply this to a curved surface. I tried replacing the ‘Circle’ elements with ‘CircleCNR’ to find the surface normal; it worked on the original surface (it oriented them vertically) but had some problems with the curved one (photo below).
If I wanted to control the attractor points, rather than create random ones, do you have any suggestions? I know you recommended ‘PopGeo’ to create multiple points, but in this case it will be important to control the points of greatest material density.
attractors_circles_normals.gh (18.2 KB)
#, it’s not difficult to restore that 1 Circle CNR… Here it is:
#2, you can choose the points any way you like, just replace the ones generated by PopGeo.
February 22, 2018, 12:15am
Perfect, got it –
attractors_circles_manualpoints.gh (15.2 KB)
February 22, 2018, 4:35am
One more – any suggestions for trimming the circles from the surface? Everything I’ve tried so far crashes.
I reduced the “resolution” (grid point count) because this is
SLOW and might not work at all with thousands of holes. Even so, this took nearly ten minutes, so I disabled the yellow group on the attached file:
To get around the performance issue, the surface can be split up to reduce the number of holes per surface. More here:
Hi there everyone,
Rhino + GH novice here.
I’m currently trying to make a lightshade for a linear pendant light, and I am wanting to create a cut out mesh of different scaled circles to accentuate the form where is it bending inwards.
I’m using a grasshopper def to place these circles over the geometry, using attractor curves to influence the size of the circles at different points on the geometry. Unfortunately I cannot figure out how to use multip…
The split is very slow because that
method uses all the cutters as once - it is like surface.Face.Split(listOfCutters, splitTolerance); So it evaluates all the cutters and makes some split.
I have found in a lot of cases that just using anemone to split with one splitter at a time really improves the performance. So keep looping the next cutter with the previously cut surface.
(Miguel Villegas Ballesta)
February 22, 2018, 3:38pm
Never would have thought that that approach would improve performance… must try it someday.
It still can be slow (but not as slow), but at least it always seems to finish rather than hang up.
Here with Anemone fast loop. 75 seconds to finish. Without Anemone, I am still here waiting going on 8 minutes now…
@DavidRutten can split be improved for Gh2? It’s just one of those things most everybody needs. attractors_circles_Anemone.gh
February 22, 2018, 6:09pm
It’s not a Grasshopper thing, Split (like almost all geometric operations short of Delaunay, Voronoi and Bi-Arcs) are a Rhino thing. I can put it on the list for Future Rhino, but it’ll carry more weight if users request this instead of me.
February 22, 2018, 9:06pm
I tried to translate that to C#, but it doesnt work.I think I need to feed everytime the surface back in?
Not for comparing splitting time, I just see it as exercise
Maybe you could help me?
SplitLoop.gh (12.5 KB)
Something like this is the same thought behind the Anemone way.
Basically using one curve at a time as a list (since split requires a list).
And actually you get the same speed advantage of the Anemone way even a bit faster. Here I cut about 2000 circles out in 86 seconds:
The Gh split took 244 seconds for the same 2000 circles:
@DavidRutten seems a simple change like that can greatly improve the performance for whatever reason.
SplitLoop2.gh (15.0 KB)