How to make holes every 20mm across the model

How to make holes every 20mm across the model? I would like to use Boolean difference to drill holes in that thin-walled solid object, but I wonder how to incorporate cutters around the model, no matter what shape it will be. Grasshopper is the answer, I think, but I`m not sure where to start.

For a single surface (not a polysurface) ArraySrf may be useful. Be aware it may not be possible to position objects over a 3D surface with uniform spacing.

If you want the spacing to be defined on a plane and projected to the object (since you mentioned drilling), you can, in grasshopper:

  • Reference your object
  • Make a Bounding Box
  • Choose the top (or bottom) rectangle (resize/reshape it if you want margins or something other)
  • Divide it by the desired length
  • Make cylinders from the points
  • Get the difference from your object and the cylinders

I’ll leave some example screenshots here for you. (I’m making a few more operations here than described, such as moving and extending the cylinders to make them bigger than the bounding box)


If you want the spacing to be defined by the the object’s surface it gets a bit more complicated.
You could extract the area you want, divide the UV, and make cylinders aligned with the surface’s normals…

One could also use the “Populate geometry 3d” component in GH to create a pseudo-random distribution of points - IIRC the distribution is fairly even - adjust the density until the apprimate/average distance between point neighbors is what you want, get the surface normals at the points and then punch the holes… This just from my memory at the moment, not at my computer.

Project an array of curves 20mm apart. Divide those projected curves every 20mm with points. Create holes at those points. You might need to get the surface direction at each point and orient your hole accordingly.

This approach, holes perpendicular to a plane and evenly spaced on the plane, should take a few minutes to accomplish in Rhino without Grasshopper.
Cylinder to create a cylinder to use as the cutter.
Array to create a distribution of the cylinders with the desired spacing.
Drag/move the array of cylinders to the desired position.
Select the cylinders corresponding to where holes are desired.
BooleanDifference the object and the cylinders.

But the intent of the original poster is not clear.

array.gh (12.5 KB)

Oh yeah, projecting the curves and then dividing by the length was nicely thought. Didn’t cross my mind.

I think it wouldn’t be regularly spaced in the example provided by the OP, but maybe that’s their goal.

I’ve thought about something like a triplanar procedural texture (without the need for UV), which would have equal-spaced dots. But I like that idea. Thanks a lot for all your input.