Here’s my take with Khaled’s idea.
It requires a bit of intuition, finding the right values to cluster low points and get 2 points in the end, but the thinking behind it is elegant.

I think you’ve maybe got something funky in your input there - it’s not internalised though so I can’t check.
I haven’t seen any bug like this in the polylabel library and can’t reproduce it.

The generation of the slicing involves :
-Choice of the material thickness
-choice of starting point.
-Angle of the slicing planes

The later two are done with the guidance of the artist in this case as it is a sculpture.

So if you place the dowels before slicing , I can understand that you could place them as far away from the object’s skin as possible (which would make the challenge 3D instead of 2D !) , it would achieve a good placement, but how would you guarantee that each resulting part has 2 dowels on each side ?

Ah, it looks like the function requires the curves to be oriented correctly.
Making it into a surface and taking the boundary curve is an easy way to ensure this, then it finds the correct point

Of course you have a choice for the orientation of this line (and if you have some wild spiral shapes, or something with many holes it would need further changes).

thanks, the global view helps – my naive thought is that once you have the artist’s input, you will define the slicing planes, from which you know the normal direction for the dowels, and can shoot lines through the full object, moving them laterally along each plane until they do not violate the outer shell; beyond that, you could transform each plane with its two neighboring planes to XY to do the moves, constraining only within this three plane set, your two dowels for the current plane. Whether done in 3d or 2d, I guess what seems different about this than what (I gather) I see so far in the thread, is to avoid trying to do each plane in isolation

Well, using long dowels through multiple strata would be an economy of dowels, but would require lots of hammering…
Some small pieces might end up having 0 or only 1 dowel depending on how you array them, right ?

Yay ! It works fine. Thanks Daniel !
There’s just the “unwanted” splitting that comes with these arched shapes, and I end up with 3 points per piece, but that’s no big issue.

by that (“each plane in isolation”), I meant to avoid trying to compute holes that are supposed to line up between different shapes, one shape at at time, in isolation – I am getting that from here, could be misunderstanding still

so if we discard putting dowels through multiple layers, then the suggestion reduces to: use a plane and its two neighbors for finding the locations, instead of just the plane (it is basically the same idea as locating in the whole model before slicing, just we are only considering two layers at a time, locating the two dowels that will join them, and then slicing them)

Actually, the title of the thread is kind of misleading.
I should narrow it to just finding 2 pinning points on a 2D shape.
Let’s imagine the shapes are made of paper : where would you place 2 pins so that, if you try to rotate the part around it’s centroid, you get the least chance of tearing the paper.
Pinning far from the edged makes sense, so does placing the 2 pins as far apart as possible (more resisting lever).

For each section “N”, I project the section “N+1” and “N-1”, and then find the intersection region.
That intersection is suitable for then locating the 2 dowel points.

It seems you are trying to automate a generalized solution for 2 continuous dowels, but could you also implement a logic to pseudo “splice” or step dowels over the course of multiple sections to allow for more dowels to be used?

Edit: Just re-read your latest post and it sounds like you are already planning to use a unique pair of dowels for each section Ni that extend up to Ni+1 and below to Ni-1. Is that correct? That also means each section will typically have (6) unique holes? Or are you trying to minimize the number of unique holes?

What I mean by “section” is the 2D region between 2 “slices”.
For each “Section N”, I consider “Section N-1” and “Section N+1”.

A secure area to place dowels for each “Section N” is the intersection of the three.
Then, Daniel’s tool finds the most appropriate location for the dowels in this intersection.
Given the way it works, with certain input regions, it yields 3 points instead of the minimum 2 points.

Since I’m cutting the “Slices” and drilling the holes for the dowels at the same time, I have to drill all the holes foe “Section N” and “Section N+1”.
To be able to distinguish, I drill through holes for “N+1” and blind holes for “N”.