How to create geometry with large number of holes?

Well James, that’s sure interesting. Have you applied this same concept to other operations that you use? Or do you do a similar thing for large amounts of splits?

Also, to everyone testing did you useextrusions set to simple extrusions? I’m curious who and which methods the user was sure they used simple extrusions vs ones that were unsure?

Sometimes the computer speed stuff is interesting. Like doesn’t you computer speed up when you are extremely active sometimes, vs crashing because of the way the drives cycle memory or something? I know jack about computers though or various factors that affect cpu speed.

According to my chart, slab can use lightweight extrusion when possible. In the case of it being a simple shape, and having only 1 distance, and no taper it would meet these requirements of a scenario where lightweight extrusion could be used. Just curious if you could look at the properties of the slabs, and see.

I think I might gather other info from threads relating to this which I have seen similar ones, and gather another mindmap on this topic since it seems kinda quick and easy and useful. Those ultimate ones like everything relating to text, extruding text, projecting text and their applications in 3d printing, 3 axis cnc mills, 4 axis, 5 axis take a little time.

No, I’ve only used this for large perforated panels. They can take a long time. I’ve tried extruding the entire panel as well but it seem like there was some problem. I can’t remember what it was now…

I’m not sure if these were lightweight extrusions or not. I’m guessing that they were. I really don’t use the lightweight extrusions that much. When I realized they were what prevented most of my object snaps from working, I was horrified!

You know, I did not ever know that James. Thanks for sharing it with me, and giving me the opportunity to bring my teddy bear with just in case. There’s a lotta stuff I don’t know, and I’m gonna have to investigate and update a chart I put up on lightweight extrusions. That would be like the number 1 most important item in the thing!

Hi James, i am not sure if i understand well your method. Can you please show me some few steps with pictures?
Slab larger in which directions and what i BooleanDifference from the big polysurface? I got lost in words.


Hi thinslicevolta, what you mean by simple extrusions vs. unsure?

I am asking if you were using simple extrusions, or if your extrusions were polysurfaces.

Heres a link to a thread on the command _UseExtrusions

If you use this command, it simplifies the geometry of the extrusion and use less memory/faster speeds.

Also, note that this would be useful for some things, and somethings not useful at all. For 3d animation or something with a bunch of cylinders, like 10000 cylinders!

But as James pointed out, the geometry is too simple for most OSNAPS to work on, which outweighs the lightness of it in most scenerios. It is still accurate, and too tolerance. But, if profile is simplified too much, the OSNAPS wont work I guess.

LightweightExtrusions Thread


I tried various ways of doing this as I was curious myself, but didn’t get too far after rhino crashed. Then I had too many applications open, and stuff, and my computer was freaking out on 95% or above memory usage, which I gotta still figure out.

I was gonna test with lightweight extrusions vs. polysurfaces using a a mix of lopacki’s and mitch’s tidbit, but didn’t get far and had to do some other stuff.

I really should research a lot of things. The right computer, graphics cars, etc…Tolerances I am working on. I may have a 50 page tutorial or so someday here. I got 30 topics to cover, and a turial with a lot of tests that give you some hands on experience and able to interactively tell what rhino stores, operates, and displays.

Obvious or not if you set your tolerances lower, this operation with the 10,000 holes would be faster.

Why make a solid at all? If this is to be cut then vectors should suffice. In fact many CAM products allow instancing a toolpath, so that all you need is one circle. Talk to your vendor, it may be simpler than you think.

Frank C.

I was just curious if Rhino can somehow handle such type of geometry and how to easily make it.

With only 400 holes there is no need to do all that IMO, just draw a circle, array it 20 x 20, put a rectangle around it and extrude all the curves solid=yes. It’s virtually instantaneous here.

However, the same is not true for 10K holes (100 x 100). 1000 is already way slower than 500, and the progression is more like exponential than linear, to the point where with 10K holes it just can’t complete in a reasonable time.


If this is a planar panel, I think it will be faster to make a Plane and an Array of Circles, then use Split to make holes in the plane, delete the little disks, and if you really need a thickened panel, use ExtrudeSrf to thicken it.
If you do it in smaller pieces, like 25 - 20 x 20 hole planes instead of 1 - 100 x 100 hole plane and join them together it will also be faster.

If making such a sheet becomes a huge issue, perhaps you can create a small piece of the mesh, create a block from it, and create an array of instances. Basically, you will be making a 3D repeating texture.

It may look ugly in wireframe, but you can change the hole spacing or size on a single piece, and the whole sheet will change : )

[Though Rhino should be fixed to have the capability to do this, given memory constraints.]

Hi lowell,

thank you for this tip. I like it.
It sounds it should work, i have to try it :wink:


I tried to measure the time needed for creating surfaces with lots of holes in several sizes. I used grid of circle curves with applying PlenarSrf command to it. The reasonable time for creating surfaces with lots of holes is up to 1000 holes (I used grid 30x30). It takes just a few seconds to have a perforated surface and if you Copy the result side by side, then apply commands Join and MergeAllFaces it all happens quite fast and if you repeate it several times in that order, you will get the big pattern faster then waiting for surface calculated from lots of circle curves.

See the picture for measured times:

When I tryed to compare Split command vs. PlenarSrf, the results are much faster for Split.
To get surface from grid 40x40 circles it took just 5 seconds (PleanrSrf 148 sec)
To get surface from grid 50x50 circles it took just 13 seconds (PleanrSrf 373 sec)

Wow! split performance confirmed. 100k hole flat surface in about 3min 40sec using split method. Then another 40sec or so to extrudesrf. Very helpful! Thank you @PiT_79 and @lowell Would never even attempt that with planarsrf.

(note: this on a two year old 3.4GHZ i7-3770)

I don’t quite know how to generalize this in a helpful way, but this might help some.

The more a command is capable of doing, at least usually, the more code and intricate workflow it needs to do it.

So in this example, a command that can take several arbitrary 3d solids and figure out where to split and join them all will have a lot more intricate code running than one that figures out how to map a planar curve to the parameter space of a plane. I know that’s not very rigorous, but maybe you get the idea.

The reason the time goes up fast when you have more circles is that each new one added to the surface has to be checked against all of the ones already applied to see it they intersect or not.

Hi Petr, This split trick works great on the rhino end but you should also keep in mind the fabrication side.

If your part is going to be RP you need this file with holes, but if you are going to cut/perforate a material in CNC we use a great shortcut that save our machinists a lot of time.

We give them a solid of the part we want without holes (usually a step file) and also a separate .iges files of the center-points of each circle (iges support points data). Then we tell them to run a tool path of perforations following the pound using the tool diameter of your choice. If you are using metal, you will want to give them a heads up of buying a few bits and change them often, BEFORE they break and screw up the whole part.


1 Like

Good to know that, this tip is also very valuable.
Thanks @gustojunk

You’re welcome. BTW this trick also applies to 3D perforations. You just have to give them an array of normal to surface curves instead of points.

It would be awesome if your rock starts could come up with a way to divide in 3D space the work into smaller chunks Boolean each chunk on a processor (all in parallel) and then join back the chunks.

Even use a user defined splitter group of curves of needed.

I can imagine this would be easier to do for grasshopper grids/patterns since you know all the inputs and the areas of no intersection even before you call the Boolean command so you have a clear way of where you can split the model.