Ok, so I've been working out what an alignment module would look like - specifically a set of tools designed to create horizontal and vertical alignments.
There's a number of elements to include, but at the most basic level, it consists of connecting lines and arcs end-to-end with tangential constraints. Most of the functionality can already be demonstrated in the Sketcher workbench, as seen below:
There are a number of domain-specific behaviors that would control how these curves are laid out. For example, the first two arcs represent a 2-center curve, where the center of the curve of lesser radius is constrained to the line defined by the center point of the other curve, and the point of tangency bewteen the curves (as demonstrated in the above image).
Thus it becomes necessary to predefine these curve types to ensure this essential constraint is always in effect. Further, appended or inserted curves and tangents are always constrained tangentially at their connected ends. There's really a variety of other domain-specific constraints that need to be included, as well.
While the fact that the core functionality is so readily demonstrated in Sketcher is really encouraging, it appears to me that Sketcher is implemented almost entirely in C++. Further, there doesn't appear to be any API documentation, (nor much of an API so far as I can tell). Is there more information on how to interact with Sketcher via Python?
Also, one of the things that I noticed in the documentation is that the sketcher objects are intended to generate a 3D object and that the sketcher geometry exists in only the sketcher design stage.
With an alignment object, this poses a couple of problems:
1. The alignment object is a real object that must exist in the final model, though it is never more than curvelinear.
2. The alignment object is the superposition of two curvelinear objects in orthogonal planes (horizontal and vertical)
Meeting these requirements seems to be complicated using Sketcher...
Can anyone perhaps fill in the gaps in my understanding that might make this easier to visualize?