Over the last 7 years the authors have been developing an object-oriented constraint solving toolkit, called QOCA, which is expressly designed for interactive graphical applications and which is intended to overcome the above two problems. It is written in C++ and also has a Java version. A major design goal has been to provide an interface which is simple yet flexible enough to be used in a wide variety of applications and which treats constraints as first class objects. The other goal has been to provide constraints which are expressive enough to be useful and yet which can be solved sufficiently quickly for real-time direct manipulation.
Currently QOCA provides three different solvers. All are based on keeping the current constraints in a tableau and using pivoting to keep them in a solved form. The first, QcLinEqSolver, provides linear equalities and uses the square of the (weighted) Euclidean distance to compare solutions. The second, QcLinInEqSolver, also uses the square of the Euclidean distance but also allows linear inequalities. It is based on linear complementary pivoting. The third, QcCassSolver, is based on the Cassowary algorithm. It also provides linear equalities and inequalities but instead uses the (weighted) Manhattan distance to compare solutions.
Download Files (local site)Offical Site
This page last modified on 2008-07-10