GeoSolver Project Page
GeoSolver is a Python package for geometric constraint solving.
A geometric constraint problem (GCP) is a set of geometric constraints
on/between geometric variables. The problem is finding a configuration
of the geometric variables so that all constraints are satisfied.
Geometric variables are objects with an unknown position, orientation,
shape, size, etc. Variables in a GCP can be points, lines,
planes, spheres, cylinders and more complex shapes. Geometric
constraints are relations such as the distance between objects (e.g.
between a pair of points or between a point and a plane), the angle
between objects (e.g. the angle between two planes), tangency of curves
and surfaces, othogonality and parellelism, etc.
Geometric constraint problems are found in CAD applications, robotics,
simulations, and many other scientific areas. Generic constraint
solving/satisfaction methods are typically not
suitable for geometric constraint problems, so specialised geometric
constraint solving (GCS) algorithms are needed.
GeoSolver
The GeoSolver Python package provides classes and functions for
specifying, analysing and solving geometric constraint problems.
It can be used in python applications that need to solve geometric constraint problems.
Features:
- 3D geometric constraint problems, consisting of:
- point variables
- two-point distance constraint
- three-point angle constraint
- Problems with other geometric variables (lines, planes, spheres,
etc.) and constraints can be mapped to these basic constraints on point
variables
- Solution selection:
- chiralty constraints (clock and handedness constraints)
- protoype-based (sketch-based) selection
- Finds a generic
solution, from which all particular solutions, for different parameter
values (e.g. distances and angles), can be easily derived
- Incremental algorithm that it can efficiently deal with changes
in the GCP (i.e. adding and removing constraints and variables and
changing parameter values)
- Extensible solving framework, allowing for new types of geometric variables and constraints
GCS Workbench
The Geometric Constraint Solving Workbench provides a nice GUI for
interactively editing, analysing and solving geometric constraints
problems. It uses the GeoSolver package for analysis and solving, and
pyQt and pyOpenGL for interactive 3D graphics.
The workbench is currenly used for debugging/testing the GeoSolver
package. It may also be used as a teaching tool, and perhaps some day
may evolve into a complete geometric design tool kit.
Features:
- Easy interactive editing of constraint problems
- 3D views of problem and solution
- Decompition view: shows how problem is decomposed into a tree of rigid clusers
Download & Documentation
Download GeoSolver + GCS Workbench (version 20090901)
Browse GeoSolver API reference (generated by pydoc)
[to do: GCS Workbench user manual]
Development
The GeoSolver project is hosted on Sourceforge.
Project information, source code and forums can be found on
the sourceforge project page.
You can directly get the latest version from the subversion tree, using the following command:
svn checkout svn://svn.code.sf.net/p/geosolver/code/trunk geosolver-code
Licence
The GeoSolver package was written by Rick van der
Meiden. The GCS Workbench was written by Rogier de Regt and maintained
by Rick van der Meiden.
The GeoSolver package and the GCS Workbench are distributed with the GNU Public Licence version 3.0. See distribution files for more information.
Publications
An research paper on the geometric constraint solving algorithm used in GeoSolver:
Hilderick A. van der Meiden and Willem F. Bronsvoort, 2009,
A non-rigid cluster rewriting approach to solve systems of 3D geometric constraints, Computer-Aided Design 42(1), pp. 36-49 [doi:10.1016/j.cad.2009.03.003] [Download PDF]
The GCS Workbench is presented in this paper:
Rogier de Regt, Hilderick A. van der Meiden and Willem F. Bronsvoort, 2008, A Workbench for Geometric Constraint Solving, Computer-Aided Design and Applications, Volume 5, Numbers 1-4 (Proceedings CAD'08, June 23-27, 2008, Orlando, Florida) [doi: 10.3722/cadaps.2008.471-482] [Download PDF]