Placing flat surfaces and numbering Rhino and Gs

I have some wings ( as you see in the files) that I need to placing flat for laser cutting in a 3000 to 1500mm sheet.

I need to cut some 16mm holes in every Ving. its easy to do it before placing flat and then add numbering in Rhino. My question, more for future projects and workflow are follow.

  1. Is it possible to lay the circles (or line normals for the center) for the holes separately flat and in correct position so we can cut the holes when the vings are flat down?

  2. The shape of those vings make it hard to put the numbering inside the surfaces for laser score in GS any idea how I can automatise it

In general any idea and tips about the workflow in cases as this.

Thanks a lot
fish.3dm (2.9 MB) (18.3 KB)

I adjusted 5 of the circles in your original file. The boundaries of the red circles were outside the boundaries of the surface they are on. The blue circles were not on the same plane with the surfaces they are supposed to be on.

The answer to your first question is yes - it is pretty simple to arrange your surfaces with holes using the OpenNest plug-in. After a few hundred nesting iterations, they fit into a 606.27mm x 765.67mm area.

Your second question was more difficult (finding the optimal placement for the text tags). I ended up using some code posted by Daniel Piker found in this thread:

It is slow with the polylines in this file (~2 minutes on my computer). More polyline segments = slower (polylines used here have 17 To 51 segments).

I converted the holes to notches to get closed polylines - this code could use some clean-up, but it works.

If you open this file be patient - it takes ~2 minutes to find optimal placement for the text tags. After that you can toggle the Run input on the OpenNest component to True to start running nesting iterations. The nesting if fairly quick (~450ms per iteration). (105.7 KB - geometry internalized)

Edit: much faster version posted below.



For tags this new component also work and also very fast.
It is an implementation of a code to find the largest inscribable circle:

logic behind:

1 Like

Result differs very slightly, but very fast.
:+1: :+1: :+1:

File updated with InscribeCircle component - runs much faster. (96.0 KB)

Edit: Simplified and cleaned up file. (80.8 KB)


1 Like

For fast location of largest inscribed circle see also this code I posted more recently here:

(I think maybe @Petras_Vestartas is using that same code from Polylabel?)

1 Like

Yup, also works with the holes:

1 Like

Yes, it’s nice to have these things wrapped as packaged components, but I was just gently nudging that when you use open source libraries it’s good practice to acknowledge them (sometimes it is legally required by the license, sometimes not, but either way I think it is just good form).

1 Like

I knew it you would mention this, and for this, there is this:

Referencing is important, I have also seen stuff used from my side without further mentioning.
I think this make your work better too if you do proper mention.

1 Like

Thanks so much. I will study the GS definition so I understand the workflow. The InscribeCircle method so helpful. Kevin you say that some the blue circles were not on the same plane with the surfaces. I don’t know what I have done wrong. This is a part of a sculpture where tubes will go trough the holes. My workflow to create the circles is : Cplane>Surface then Circle > Around curve or Line > Normal, then Circle > Around curve. I used the centreline of the tubes as centre so maybe there I have done something wrong and don’t pick at a intersection . Its kind a mess but this is what I got to work with. I just discover openNest last 2 days as I have newer laser cut something. So much learning for you inputs!!!
Fish2.3dm (12.6 MB)

Okay, good to see you have added some acknowledgement on F4R, though with PackageManager now I think these things are easily missed.
When a component is a direct wrapper of something from another library or code pasted from somewhere else, personally I’d include a short mention of that even on the component text itself, like eg. MeshEdit does with its 3d Delaunay components that wrap the MIConvexhull library.

Yes, package manager it is a bit of a black hole since it is one click install. The description could be a good a location, did not think about that.

1 Like

I am not sure what you are trying to achieve, but this is a for the tag: (98.7 KB)

Can you upload the final model to get the overall scope?

I did not know about this either, I am learning here too. This simplifies things even further.

Further simplified, organized, and cleaned up file: (72.5 KB)


If you set the active cplane as you described cplane → surface (or use cplane → object as it doesn’t prompt for orgin and axis). Then open the BoxEdit panel and select this circle:

You can see that this circle is 0.92 units above the cplane (this is from the file in your last post).

Also, from this view of the middle fin on top of your model you can see that this circle extends outside the boundary of the surface:


1 Like