A particular flavor of constraint solving is geometric constraint solving, where constraints such as "this line is parallel to this line" and "this line is tangent to this curve". This is widely used in pretty much everything single mechanical CAD tool worth its salt.<p>But you know what it is missing from: electrical CAD tools.<p>For footprints this would be especially useful. Some think that footprints are just one size fits all, but that is far from the truth. Footprints should vary depending on the environment, production tolerances, manufacturing method. Right now I have several varieties of the same footprint for different deratings and uses -- what if I could simply specify a parametric footprint which actually adapted to specifications made in the design process.<p>This could be done with wizard programs (several commercial options exists), but I think an approach based upon geometric constraint solvers and parametric drawings is a far, far more user-friendly and powerful approach. The widespread usage in mechanical CAD tools prove that this is not a far-fetched application; it simply hasn't taken a foothold within electrical CAD tools.<p>I've been toying with the ideas and researching how it could be done for quite a while, but I haven't made much code-wise progress yet. However, there is a lot of tools to draw upon (libraries for geometric constraint solving exists). If someone is interested in co-developing on some ideas, or already knows of such a project, then I'd love to hear about it (email is in profile) -- I'm getting tired of manually calculating grid sizes and offsets.
Hmm, this looks like Cassowary solver that was first used in 1940 as stated here: <a href="https://cassowary.readthedocs.io/en/latest/topics/theory.html" rel="nofollow">https://cassowary.readthedocs.io/en/latest/topics/theory.htm...</a><p>The only difference is that it is using Simplex method instead of gradient descent (as in article). Simplex and GD are slightly different methods of finding local minimums in systems of linear equations.
Isn't there an incremental way to solve this? Seems a bit wasteful to recompute everything from scratch for every tiny change in constraints (in the example for every movement of the mouse).