![]() When a solver error arises after a change to the sketch, it should be easy to understand exactly why it happened. Before this change, two functionally distinct modes of failure were lumped into one: the same "redundant constraints" message was displayed when all degrees of freedom were exhausted and the had a solution, but also when it had not. To understand why this is problematic, let's examine several ways in which we can end up with linearly dependent equations in our system: 0) create a triangle, then constrain two different pairs of edges to be perpendicular 1) add two distinct distance constraints on the same segment 2) add two identical distance constraints on the same segment 3) create a triangle, then constrain edges to lengths a, b, and c so that a+b=c The case (0) is our baseline case: the constraints in it make the system unsolvable yet they do not remove more degrees of freedom than the amount we started with. So the displayed error is "unsolvable constraints". The constraints in case (1) remove one too many degrees of freedom, but otherwise are quite like the case (0): the cause of failure that is useful to the user is that the constraints are mutually incompatible. The constraints in cases (2) and (3) however are not like the others: there is a set of parameters that satisfies all of the constraints, but the constraints still remove one degree of freedom too many. It makes sense to display a different error message for cases (2) and (3) because in practice, cases like this are likely to arise from adjustment of constraint values on sketches corresponding to systems that have a small amount of degenerate solutions, and this is very different from systems arising in cases like (0) where no adjustment of constraint values will ever result in a successful solution. So the error message displayed is "redundant constraints". At last, this commit makes cases (0) and (1) display a message with only a minor difference in wording. This is deliberate. The reason is that the facts "the system is unsolvable" and "the system is unsolvable and also has linearly dependent equations" present no meaningful, actionable difference to the user, and placing emphasis on it would only cause confusion. However, they are still distinguished, because in case (0) we list all relevant constraints (and thus we say they are "mutually incompatible") but in case (1) we only list the ones that constrain the sketch further than some valid solution (and we say they are "unsatisfied"). |
||
---|---|---|
cmake | ||
debian | ||
exposed | ||
extlib | ||
include | ||
src | ||
tools | ||
.gitattributes | ||
.gitignore | ||
.gitmodules | ||
.travis.yml | ||
appveyor.yml | ||
CMakeLists.txt | ||
COPYING.txt | ||
README.md | ||
wishlist.txt |
SolveSpace
This repository contains the official repository of SolveSpace.
Installation
Debian (>=jessie) and Ubuntu (>=trusty)
Binary packages for Ubuntu trusty and later versions are available in ~whitequark/solvespace PPA.
Mac OS X (>=10.6 64-bit)
Binary packages for Mac OS X are available via GitHub releases.
Other systems
See below.
Building on Linux
Building for Linux
You will need CMake, libpng, zlib, json-c, fontconfig, gtkmm 2.4, pangomm 1.4, OpenGL and OpenGL GLU. On a Debian derivative (e.g. Ubuntu) these can be installed with:
apt-get install libpng12-dev libjson-c-dev libfontconfig1-dev \
libgtkmm-2.4-dev libpangomm-1.4-dev libgl-dev libglu-dev \
libglew-dev cmake
After that, build SolveSpace as following:
mkdir cbuild
cd cbuild
cmake ..
make
sudo make install
A fully functional port to GTK3 is available, but not recommended for use due to bugs in this toolkit.
Building for Windows
You will need CMake, a Windows cross-compiler, and Wine with binfmt support. On a Debian derivative (e.g. Ubuntu) these can be installed with:
apt-get install cmake mingw-w64 wine-binfmt
Before building, check out the submodules:
git submodule update --init
After that, build 32-bit SolveSpace as following:
mkdir cbuild
cd cbuild
cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-mingw32.cmake ..
make solvespace
Or, build 64-bit SolveSpace as following:
mkdir cbuild
cd cbuild
cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-mingw64.cmake ..
make solvespace
The application is built as cbuild/src/solvespace.exe
.
Space Navigator support will not be available.
Building on Mac OS X
You will need XCode tools, CMake and libpng. Assuming you use homebrew, these can be installed with:
brew install cmake libpng
XCode has to be installed via AppStore; it requires a free Apple ID.
After that, build SolveSpace as following:
mkdir cbuild
cd cbuild
cmake ..
make
The app bundle is built in cbuild/src/solvespace.app
.
Building on Windows
You will need cmake and Visual C++.
You will also need to check out the git submodules.
After installing them, create a directory build
in the source tree
and point cmake-gui to the source tree and that directory. Press
"Configure" and "Generate", then open build\solvespace.sln
with
Visual C++ and build it.
Alternatively it is possible to build SolveSpace using MinGW.
Run cmake-gui as described above but after pressing "Configure" select
the "MSYS Makefiles" generator. After that, run make
in the build
directory; make sure that the MinGW compiler is in your PATH
.
License
SolveSpace is distributed under the terms of the GPL3 license.