WooHoo!
I have some working code of angle-via-point.
EllipseAngleViaPoint branch.
Features and benefits:
* angle via point works for all combinations of edges: line, circle, arc, ellipse, arc of ellipse.
* tangency-via-point constraint can be achieved by setting an angle to zero or 180 degrees.
* when used as tangency, it locks down the type of tangency (internal tangency will never swap to external). Angle of 0 corresponds to internal tangency, angle of 180 - external tangency.
* can be used as perpendicular constraint between anything, just as for tangency.
* old constraints are still there.
* no switches like if a is arc and b is ellipse. The appropriate formulas are picked automatically thanks to polymorphism (that's what my fight with c++ was about).
Instructions:
* Select two curves and a point where you want the angle, and click the angle constraint on toolbar (point can be an endpoint of an arc, or whatever point you choose.) The angle is counted from first selected edge to second selected edge in ccw direction.
Known issues/todos
* [solved] angle is not precalculated basing on existing geometry, and angle of zero constraint is applied immediately, often causing unsolvable situations. I'll address this asap.
* [fixed]partials are numeric, so expect problems with very large and very small stuff.
* [fixed] autoconstraints can cause the point that was thrown in to become constrained onto one of the curves. In this case, angle via point creates an extra (redundant) point-on-object constraint that has to be manually deleted. Similar problem will happen if the point of angle is already constrained onto one of the curves (there is a check only for endpoints now).
* angle icon in 3d view is not placed properly.