Wish: Selecting tangent curves and Show curve ends

Wish 1. In the “Select curves” menu, add new commands for selecting curves that are:
a) tangent to each other (G1 or G2).
b) touching each other, but not tangent (G0).

Option “a” is especially useful for automatic selection in situations with thousands of curves, where the regular chain selection is quite slow wince it requires manual picking of every curve. The attached image shows multiple curves that form hexagonal shapes with rounded edges (fillets). Being able to select only those curves that are tangent to each other will heavily reduce the time for figuring out if there is some missing fillet somewhere.

Wish 2. A similar approach could be added to the “Show curve ends” menu. Currently, this tool is not capable of showing only the curve ends that have G0 contact to nearby curves, while hiding the curve ends with G1 or G2 transitions (or vice versa).
This tool could also benefit from adding a secondary Point color - one for open curve starts and another for open curve ends.
And it will be even more useful, of there is a dedicated button in this windows named “Select”, so that it will select all curves with currently visible curve ends of any tipe (such like curves that touch each other with G1).

Hello - SelChain may be handy for this.


Hi Pascal, as far as I know, “SelChain” will only work with manual picking of each separate row of curves. This could take a lot of time if these separate curves (the hexagonal shapes) are thousands, like the example in my image above. The ability to select only the fully tangent curves in the entire scene (or across pre-selected curves) with a single mouse click, while excluding the ones with lack of tangency in-between, is a game changer to people who deal with similar kind of designs (shoe designs, architectural designs, mesh grilles, paneling tool shapes etc). Without such functionality, it takes hours to manually verify every one of these hexagonal figures for missing tangent curve.

Another advantage of an eventual “SelTangent” command is that it can distinguish the curves that are tangent to another curve at the first end but non-tangent at the opposite end. “SelChain” can’t to this in the following case:

Hello - the fillet-verifying tool seems (to me) to be separate from selection. It would be easy to mark off tangent discontinuities in joined curves - if that is really the goal, I’d do it that way and leave selection, even an eventual SelTangent do its own thing…

I can make you a thing to test I think… hold on a bit.


Hi Pascal, I tried again the “SelChain” command and the “Show curve ends” tool with several designs similar to the mesh grille above, but I can’t find the functionality that I described in the OP. The idea is to not join the curves, because doing that will convert the degree 1 lines into degree 3 curves, and sometimes this is the very reason for issues with laser cutting when exported as DXF.

An alternative, slow way to verify continuity between curves (or missing fillets) is to extrude them into surfaces, then join the surfaces into polysurfaces and change the viewport to Technical display mode, but this takes a lot of time or doing unnecessary work.

PS: Who is Bogdan? :smiley: My name is Bobi, by the way.

This is why I generally don’t greet when the post is not signed, I cannot keep track.

See if this is even useful - go ahead and Join the curves and then check them with

MarkTangentDiscontinuities.py (916 Bytes)

@Rhino_Bulgaria - I added grouping - download again…

To use the Python script use RunPythonScript, or a macro:

_-RunPythonScript "Full path to py file inside double-quotes"


1 Like

That works just great! Thank you very much! This deserves to be a default Rhino command in the future releases!

By the way, is it possible to make the output points grouped? I can run “SelLast” and group them manually, but I guess that sometimes I may forget to do it. Obviously, I can’t add a working macro on top of the Python script by adding “_Pause _SelLast _Group”. :slight_smile:


PS: I downloaded the updated version of the script. Works as intended. Thanks! :slight_smile: