Commit Graph

460 Commits

Author SHA1 Message Date
whitequark
7e64c405dd Expose SLVS_RESULT_REDUNDANT_DIDNT_CONVERGE. 2016-10-25 13:53:36 +00:00
Evil-Spirit
cf7db87b38 Write params if system is solved as REDUNDANT_OKAY.
A system solved as REDUNDANT_OKAY is still solved correctly,
even if the UI would consider this an error, in case that
g->allowRedundant==false. So there's no reason to discard this
solution; we might find it useful if a system loses a degree of
freedom while dragging, or to avoid regeneration after redundant
constraints are allowed.

This commit also reverts commit 3ff236c, as that is not necessary
anymore.
2016-10-25 13:50:50 +00:00
whitequark
000bf71a50 Add a setting that permits a group to include redundant constraints.
This setting is generally useful, but it especially shines when
assembling, since the "same orientation" and "parallel" constraints
remove three and two rotational degrees of freedom, which makes them
impossible to use with 3d "point on line" constraint that removes
two spatial and two rotational degrees of freedom.

The setting is not enabled for all imported groups by default
because it exhibits some edge case failures. For example:
  * draw two line segments sharing a point,
  * constrain lengths of line segments,
  * constrain line segments perpendicular,
  * constrain line segments to a 90° angle.

This is a truly degenerate case and so it is not considered very
important. However, we can fix this later by using Eigen::SparseQR.
2016-10-25 13:48:49 +00:00
EvilSpirit
27767f7a48 Try to solve even very overconstrained systems.
Before this commit, overconstraining a system past a certain point
resulted in a wrong error message: instead of "redundant constraints",
"unsolvable constraints" was displayed.

To reproduce, place more six or more length constraints with the same
value onto the same line segment.
2016-10-25 13:48:30 +00:00
EvilSpirit
1e56860f88 Distinguish overconstrained and redundantly constrained sketches.
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").
2016-10-25 13:48:05 +00:00
whitequark
981f772d81 Reword error messages that are displayed when a group fails to solve.
The current messages accurately reflect what happens to the system
of equations that represents the sketch, but can be quite confusing
to users that only think in terms of the constraints.

We use "unsolvable" and not "impossible" because while most of
the cases that result in this error message will indeed stem from
mutually exclusive sets of constraints, it is still possible that
there is some solution that our solver is unable to find using
numeric methods.
2016-10-25 13:47:06 +00:00
whitequark
3b31ab9190 Perform rank test after solving the system.
Before this change, it was possible to adjust constraints in a way
that removes a degree of freedom and makes the sketch unsolvable,
but rank test was performed before solving the system, and an error
was not displayed immediately. Instead, a solution would seemingly
be found, but it would be very unstable--unrelated changes to
the sketch would cause rank test to fail.

To reproduce the bug, do this:
  * Draw a triangle.
  * Create a length constraint for all sides.
  * Set side lengths to a, b, and c such that a + b = c.
  * Add a line segment.
2016-10-25 13:46:18 +00:00
Jonathan Westhues
0cbd48bd67 Don't falsely detect inconsistent systems with small angle constraints. 2016-10-25 13:44:26 +00:00
whitequark
479c406d2b Remove Windows-isms and add a CMake buildsystem. 2016-10-25 13:42:13 +00:00
whitequark
2ecc612801 Trim trailing whitespace. 2016-10-25 13:10:06 +00:00
whitequark
15446e8f0a Remove all UI-related files, and move the rest to match master. 2016-10-25 13:06:34 +00:00
Jonathan Westhues
defeb6411a Clean up SolveSpace makefile, and add forgotten copyright notice.
[git-p4: depot-paths = "//depot/solvespace/": change = 2213]
2013-07-28 14:53:30 -08:00
Jonathan Westhues
bc426a2a7f Delete obsolete text in solvespace/doc/..., superseded by the
stuff on the website.

[git-p4: depot-paths = "//depot/solvespace/": change = 2212]
2013-07-28 14:40:37 -08:00
Jonathan Westhues
0ee8ba1457 Changes in preparation for the release of SolveSpace under the GPL,
to add that license, and change all copyright notices to me, not
Useful Subset, LLC.

[git-p4: depot-paths = "//depot/solvespace/": change = 2211]
2013-07-28 14:08:34 -08:00
Jonathan Westhues
1abd87954c Oops, fix gross memory leak in SolveSpace library due to failure
to destroy temporary heap.

[git-p4: depot-paths = "//depot/solvespace/": change = 2210]
2013-03-15 08:43:35 -08:00
Jonathan Westhues
7919e7171d Make SolveSpace work unrestricted without a license file, and
increase its version number to 1.9.

[git-p4: depot-paths = "//depot/solvespace/": change = 2198]
2012-01-21 12:12:00 -08:00
Jonathan Westhues
e11347f613 Oops, update copyright date to 2011 for SolveSpace.
[git-p4: depot-paths = "//depot/solvespace/": change = 2195]
2011-07-04 11:25:17 -08:00
Jonathan Westhues
c98a0b381f Increment SolveSpace's version number to 1.8.
[git-p4: depot-paths = "//depot/solvespace/": change = 2194]
2011-07-04 11:10:00 -08:00
Jonathan Westhues
fc3dc68f83 Check in the VB.NET example for the SolveSpace library, and update
the documentation accordingly. Also rename the C example for
consistency, and update copyright dates.

[git-p4: depot-paths = "//depot/solvespace/": change = 2190]
2011-03-13 00:04:09 -08:00
Jonathan Westhues
b3bdadfeb8 Fix that typo elsewhere in the slvs.dll examples, and note that
VB.NET example in the documentation.

[git-p4: depot-paths = "//depot/solvespace/": change = 2188]
2011-03-05 14:33:05 -08:00
Jonathan Westhues
3dc21ec8dd Make oops() calls exit instead of entering debugger by default,
since the latter looks worse if it happens to someone else.

[git-p4: depot-paths = "//depot/solvespace/": change = 2187]
2011-03-05 12:52:57 -08:00
Jonathan Westhues
dcfae0f341 Typo in SolveSpace library example, embarrassing.
[git-p4: depot-paths = "//depot/solvespace/": change = 2186]
2011-03-05 12:22:59 -08:00
Jonathan Westhues
3dea64af47 Make default text in dimension box the exact (up to ten digits
after decimal) current value of the dimension, not the value
truncated to the same number of digits that are usually displayed.

And make the paste transformed screen accept expressions, not
just integers, for the count, angle, and scale.

[git-p4: depot-paths = "//depot/solvespace/": change = 2181]
2010-10-11 19:13:41 -08:00
Jonathan Westhues
cc3b17f60e Make the number of digits after the decimal point (for dimensions,
as they are displayed on the drawing, and for many other places) a
user-configurable parameter.

Also reshuffle some options in the configuration screen, to put all
the stuff relating to exports together.

[git-p4: depot-paths = "//depot/solvespace/": change = 2179]
2010-09-23 18:58:34 -08:00
Jonathan Westhues
e672706770 Due to questionable decision to use copy-number values of 1000
and up for special things, the number of times that a group may
be stepped is limited to 999. So avoid a crash by not letting
the user specify more than that.

[git-p4: depot-paths = "//depot/solvespace/": change = 2178]
2010-09-17 18:20:08 -08:00
Jonathan Westhues
307965d53f Update selection of extrusion/lathe solid model color to use new
color picker.

And apply same rule to rewrite nearly-white colors (when exporting
with a file format typically viewed on a white background) for fill
color as for stroke color.

[git-p4: depot-paths = "//depot/solvespace/": change = 2176]
2010-08-14 11:00:25 -08:00
Jonathan Westhues
439e4d3124 Add a color picker, with a fancy HSV (actually, a modified version
of that, where you can pick the hue and blackness, and then the
whiteness) color picker and some swatches.

This is used in three places now: the special colors in the config
screen, the background color, and the style colors.

[git-p4: depot-paths = "//depot/solvespace/": change = 2174]
2010-07-20 21:04:03 -08:00
Jonathan Westhues
98897af77b Fix typo in SolveSpace library documentation.
[git-p4: depot-paths = "//depot/solvespace/": change = 2173]
2010-07-15 02:07:54 -08:00
Jonathan Westhues
cedb360af2 Note in documentation for SolveSpace library that the constraint to
place a point on a circle also works for arcs.

[git-p4: depot-paths = "//depot/solvespace/": change = 2172]
2010-07-14 06:55:54 -08:00
Jonathan Westhues
824cc00915 Put wrappers around the functions to show and hide the edit control
in the text window. This means that I can move the conversion from
half-row and column to (x, y) into the platform-independent code,
and that I'll be ready to add my color picker.

[git-p4: depot-paths = "//depot/solvespace/": change = 2171]
2010-07-11 23:51:12 -08:00
Jonathan Westhues
319ba16541 When curves to be split intersect at multiple points, don't just
choose arbitrarily. Instead, split at the point closest to the
mouse pointer.

[git-p4: depot-paths = "//depot/solvespace/": change = 2170]
2010-07-11 22:47:14 -08:00
Jonathan Westhues
9ae29aa0e9 Build the demo version of the solver library as a DLL, not a static
library. If I understand correctly, that will avoid all the
compiler version issues with different required versions of libc.

[git-p4: depot-paths = "//depot/solvespace/": change = 2167]
2010-07-10 10:53:30 -08:00
Jonathan Westhues
46a7d0f719 Disable buffer overrun protection in the library that we build,
since that makes it more difficult to interoperate with the MSVC6
compiler.

[git-p4: depot-paths = "//depot/solvespace/": change = 2165]
2010-07-06 21:01:17 -08:00
Jonathan Westhues
d8b84a9bf0 The box when additional things get deleted (because they depend on
whatever just got deleted explicitly) should be a message, not an
error.

[git-p4: depot-paths = "//depot/solvespace/": change = 2162]
2010-06-13 20:42:47 -08:00
Jonathan Westhues
9a0591cfc4 Indicate diameter symbol on diameter dimensions, instead of just a
bare number.

[git-p4: depot-paths = "//depot/solvespace/": change = 2157]
2010-05-22 22:21:42 -08:00
Jonathan Westhues
5ba5371ae8 Put a link the rounding screen to return home, just in case the one
at the top left isn't obvious enough.

[git-p4: depot-paths = "//depot/solvespace/": change = 2155]
2010-05-16 17:54:19 -08:00
Jonathan Westhues
e4312cc79a Fix tooltip; arc and tangent arc are separate operations now.
[git-p4: depot-paths = "//depot/solvespace/": change = 2150]
2010-05-16 11:29:05 -08:00
Jonathan Westhues
2cd6ca882f Oops, camera tangent was defaulting to 300, not 0.3, very bad.
[git-p4: depot-paths = "//depot/solvespace/": change = 2149]
2010-05-16 10:46:10 -08:00
Jonathan Westhues
00231a6799 Add two more icons to the toolbar, for text in a TrueType font and
for the tangent arc thing.

And update the version number to 1.7, in preparation for the next
release.

[git-p4: depot-paths = "//depot/solvespace/": change = 2147]
2010-05-16 09:04:56 -08:00
Jonathan Westhues
fe2ea5d5e1 Improve the non-parametric rounding. It now works on both lines and
circles, using a numerical method. And the user can specify a
radius, instead of letting us choose automatically, and specify
whether the original lines should be kept and made construction, or
deleted.

[git-p4: depot-paths = "//depot/solvespace/": change = 2146]
2010-05-16 08:36:23 -08:00
Jonathan Westhues
a05cc4dda8 Add a checkbox to group screens to toggle visibility; seemed silly
to have that available from the list of groups, but not there.

[git-p4: depot-paths = "//depot/solvespace/": change = 2143]
2010-05-11 20:57:41 -08:00
Jonathan Westhues
a95054890f Fix some cases where the green line (that indicates the center of
an in-plane rotation of the view, or of a set of entities) would
remain on screen after the action was over.

[git-p4: depot-paths = "//depot/solvespace/": change = 2142]
2010-05-11 20:47:58 -08:00
Jonathan Westhues
949df4d139 Add a constraint for tangency between any combination of arcs
and cubics. Also add that to the library interface.

It might have been better to use a single constraint for that,
plus all the line-curve or line-line cases, but it would break
backwards compatibility if I did that now, and perhaps be
confusing with the 'other' member (which is meaningless for
lines) anyways.

[git-p4: depot-paths = "//depot/solvespace/": change = 2141]
2010-05-09 20:14:06 -08:00
Jonathan Westhues
9f7ff34b98 Add option to treat all dimensions as reference dimensions. This is
useful because it makes it possible to add cosmetic dimensions to
an existing model, without REF appended.

[git-p4: depot-paths = "//depot/solvespace/": change = 2140]
2010-05-09 17:06:09 -08:00
Jonathan Westhues
8481c54012 Major UI changes, to use the checkboxes and radio buttons wherever
possible. This replaces all of the color-coded links, that I liked
but that were nonstandard.

Also rip out the old sweep and helical sweep UI; that was disabled,
but the code was still present.

And fix dependencies in makefile, since textwin.cpp depends on the
icons now.

[git-p4: depot-paths = "//depot/solvespace/": change = 2139]
2010-05-09 10:25:23 -08:00
Jonathan Westhues
2dbb21aecd Add special characters to font, to represent checkboxes and radio
buttons. This requires some tools to convert .png images to that,
and that I put the characters in a two-dimensional grid in the
texture (since one-dimensional strip gets wider than the hardware
supports).

[git-p4: depot-paths = "//depot/solvespace/": change = 2138]
2010-05-08 17:20:02 -08:00
Jonathan Westhues
7a2941d2ea Add locked-where-dragged constraint to library interface, and
update some copyright dates and bad grammar in comments.

[git-p4: depot-paths = "//depot/solvespace/": change = 2137]
2010-05-06 18:13:57 -08:00
Jonathan Westhues
f27b567f5c Note when an entity is construction, when we describe it in the
text window.

[git-p4: depot-paths = "//depot/solvespace/": change = 2136]
2010-05-03 21:13:35 -08:00
Jonathan Westhues
4628048d45 Add "lock point where dragged" constraint, in either 2d or 3d.
And call the cubic things splines, not segments, since that's what
they are now.

[git-p4: depot-paths = "//depot/solvespace/": change = 2135]
2010-05-03 21:11:52 -08:00
Jonathan Westhues
ef7f6c6057 Oops, clear hovered icon in the text window when the mouse leaves
that window; otherwise it remains highlighted, and may even get
tooltipped.

[git-p4: depot-paths = "//depot/solvespace/": change = 2134]
2010-05-02 21:43:42 -08:00