@vectorstyler: Okay, now I have both sets of clean code exhaustively tested.
Bezigon Code without Tangent Node implementation. About 200 lines of CPP code.
Bezigon Code with Tangent Node implementation and non-destructive node conversions - that is, toggling between tangent, cusp, and smooth retains the origin state. For instance, if I create a smooth node, then toggle it to cusp, and tangent, and then to smooth back again, I will return to the original state in which it was created. It is true of all 3 nodes. This is a major draw back in FreeHand too, because there was no way of predicting how changes affected the curve. Now, after 35 bloody years, it is refined. About 500 lines of CPP code. Tangent node handling makes it exponentially complex.
Question for you, dev: How should I hand you this code? What sort of documentation would you like?
We have written the code so that it is easy to integrate into any program without dependencies. But equally, everything - all the rules, conditional statements - are carefully documented within the code itself.
We have also written a test code to check the math of the code too.
What do you need from me? I have the whole history of the project including the permutation tables for all three nodes and click patterns.
Let me know. I'll package it and drop it. I am also giving the code to Inkscape and PhotoLine devs as part of MIT License. Just FYI.
I think if implemented correctly, it will the single most useful step up in the curve handling functionality in all three. The missing piece has always been the tangent node.