I am working on creating this circular pattern in Grasshopper. I have multiple circles with dynamic radii placed on a surface.
There are two types of circles:
Type A: complete circular cutouts
Type B: circles with an inner offset circle, where only the outer ring should be cut out
My goal is:
completely cut out the Type A circles
cut out only the outer ring area of the Type B circles, as shown in the attached image
Currently, I am using the Split Surface component. It successfully splits the surface, but I cannot automatically remove the unwanted surfaces afterward. At the moment, I have to manually delete the extra surfaces in Rhino, which becomes difficult when I change the number, size, or position of the circles.
I would like to make the entire workflow fully parametric so that any changes update automatically without manual cleanup.
I am also attaching my Grasshopper definition and reference images. If anyone could take a look and suggest a better workflow or components for automatically selecting/removing the correct surfaces, I would really appreciate it.
Create a Boundary Surface out of the surface envelope, circles A and circles B. Then create surfaces out of the offset of circles B (simply pushing the circles through a Surface container will turn the circles to surfaces)
Thank you @Volker_Rakow . It is working perfectly as I wanted. I really appreciate your help.
Now I would like to develop this pattern further and explore two additional ideas:
Creating the pattern inside a larger boundary curve
For example, I have a large rectangular boundary curve, and I would like all these circular patterns to be generated only inside that boundary area.
Creating a dynamic offset based on circle radius
I would like the offset distance to change automatically depending on the circle size.
For example:
a circle with radius 0.3 would have an offset of 0.03
a circle with radius 1.0 would have an offset of 0.1
So the offset value would scale proportionally according to the circle radius instead of using a fixed value.
I would appreciate any suggestions on the best workflow or Grasshopper components to achieve this parametric behavior.
The more circles and bounding curves, the more evaluation intensive the script becomes. It might be better to simply apply the script to each set of curve and circles at a time. Look how long it is taking the Bouncy Solver to converge:
And this is for a relatively low density of points. The solver needs to finish before you pass the circles through the Data Dam to create your surfaces. Perhaps there is something to solver settings that can speed things up. Either way, you are not guarenteed to get non-intersecting circles if their size and count are too large for the bounding curve area.
I have made the number of generated circles dependent on the % area of the bounding curve to the largest bounding curve area in the bounding curves set: