Commit Graph

1598 Commits (25fe77f777f95f3d05cf6efd1613f8990e708d0b)

Author SHA1 Message Date
Jonathan Westhues ddf2b30b98 Remove some of the oops() calls that tend to blow because of issues
in the numerical code.

And clean some other stuff, in particular simplifying whenever I
have to take the maximum (or minimum) of three quantities.

[git-p4: depot-paths = "//depot/solvespace/": change = 1855]
2008-02-10 05:34:32 -08:00
Jonathan Westhues 22b78e4427 Assemble the group polygon ourselves when exporting a DXF; that
lets us export open curves, if the user drew them that way.

Also increase the limits on how many pwls we will generate for a
single curve.

[git-p4: depot-paths = "//depot/solvespace/": change = 1854]
2008-02-10 04:43:48 -08:00
Jonathan Westhues 0c10efdab6 Add a simple license key: I take the CRC of the license info, plus
some magic numbers. This would be trivial to break, but still more
difficult than patching the binary to skip the check...

[git-p4: depot-paths = "//depot/solvespace/": change = 1853]
2008-02-09 05:52:01 -08:00
Jonathan Westhues 5a2803617b Previous speedup for regenerating vertex-to-vertex mesh was broken;
it did nothing when GenerateAll got called with an explicit range
(vs. with no args, to run on the dirty groups), so the emphasized
edges ended up out of date. I think this is better.

Also check in latest updates to manual.

[git-p4: depot-paths = "//depot/solvespace/": change = 1852]
2008-02-07 09:44:27 -08:00
Jonathan Westhues a58680201f Oops, didn't clear the hover when auto-deleting horiz/vert
constraints when adding symmetric constraints. So that could blow
up and trigger an oops.

[git-p4: depot-paths = "//depot/solvespace/": change = 1851]
2008-02-07 09:17:09 -08:00
Jonathan Westhues 04141aa59d Go back to randomizing the faces before adding to the BSP, rather
than sorting by area. I had hoped that would help with normal
accuracy, but I don't think it helped much, and it sometimes became
very slow.

[git-p4: depot-paths = "//depot/solvespace/": change = 1850]
2008-02-07 01:57:59 -08:00
Jonathan Westhues 7b7d2f92e9 Add code to evaluate the volume of a mesh, thanks to the divergence
theorem; it's evaluated as a surface integral over each triangle.

And don't regenerate the emphasized edges unless we have to;
specifically, don't do it when the only dirty group is the
drawing group.

[git-p4: depot-paths = "//depot/solvespace/": change = 1849]
2008-02-07 01:53:52 -08:00
Jonathan Westhues 115dbce61b Oops, wasn't closing the PNG file after exporting to it.
[git-p4: depot-paths = "//depot/solvespace/": change = 1848]
2008-07-20 17:34:09 -08:00
Jonathan Westhues 304c8f8be9 Add equal-angle constraints. These are implemented by brute force,
as the difference between the cosines of the two angles. All of the
angle stuff generates huge expressions (Expr *), but doesn't seem
noticeably slow.

[git-p4: depot-paths = "//depot/solvespace/": change = 1847]
2008-07-20 04:24:43 -08:00
Jonathan Westhues 8fe910da4d Add feature to trace a point; so I can show the path that a
linkage traces out, and export the coordinates.

[git-p4: depot-paths = "//depot/solvespace/": change = 1846]
2008-07-20 03:27:22 -08:00
Jonathan Westhues d2c4d2cdb7 Swap meaning of middle and right mouse buttons (now center means
drag, right means pan), and extend reference manual.

[git-p4: depot-paths = "//depot/solvespace/": change = 1845]
2008-07-18 05:31:22 -08:00
Jonathan Westhues a783f14eff Add an icon file (ugly, but at least it's not the default anymore).
And add the manifest that gets us visual styles on the controls
under Win32.

[git-p4: depot-paths = "//depot/solvespace/": change = 1844]
2008-07-18 01:50:52 -08:00
Jonathan Westhues 222007f3d8 Oops, make path relative routine was broken when the filenames
shared a prefix (/path/abc.slvs, /path/abcdef.slvs).

[git-p4: depot-paths = "//depot/solvespace/": change = 1843]
2008-07-16 21:29:10 -08:00
Jonathan Westhues 98b0f65cea But still draw the edges when the faces are coplanar, if the faces
are different colors.

[git-p4: depot-paths = "//depot/solvespace/": change = 1842]
2008-07-15 23:08:39 -08:00
Jonathan Westhues 3765175ec3 Don't emphasize edges between coincident plane faces, and check in
beginnings of reference manual.

[git-p4: depot-paths = "//depot/solvespace/": change = 1841]
2008-07-15 21:45:11 -08:00
Jonathan Westhues bc2a9c11b3 Better error messages when creating groups, too.
[git-p4: depot-paths = "//depot/solvespace/": change = 1840]
2008-07-13 21:20:55 -08:00
Jonathan Westhues 90133b6b5d Add better error messages when creating constraints, and add a link
when creating requests to cancel operation (works same as Esc).

[git-p4: depot-paths = "//depot/solvespace/": change = 1839]
2008-07-13 20:29:43 -08:00
Jonathan Westhues 4afc881bf2 Add a command to create an arc that's tangent to two line segments.
This was possible before (by drawing everything explicitly), but
now it's easy.

[git-p4: depot-paths = "//depot/solvespace/": change = 1838]
2008-07-13 18:45:11 -08:00
Jonathan Westhues f70bbb3e7f This BSP split and simplify thing is stupid, but a hard-coded limit
on the number of pieces that we know how to reassemble is even
stupider. Now dynamically allocated.

[git-p4: depot-paths = "//depot/solvespace/": change = 1837]
2008-07-13 04:58:52 -08:00
Jonathan Westhues 88fc69116f Add tangency constraints, for line segments against arcs or cubics.
These are just a convenience, since it would be possible to get the
same result by drawing a construction line.

[git-p4: depot-paths = "//depot/solvespace/": change = 1836]
2008-07-13 04:44:05 -08:00
Jonathan Westhues 36870360cb Little stuff: show polygon assembly errors only for draw-in-plane
groups, rename "drawing" groups to "sketch" groups, and keep
assembling even after finding an open curve.

[git-p4: depot-paths = "//depot/solvespace/": change = 1835]
2008-07-13 01:57:46 -08:00
Jonathan Westhues 6269d702fb Report the number of degrees of freedom for each group.
[git-p4: depot-paths = "//depot/solvespace/": change = 1834]
2008-07-09 23:42:35 -08:00
Jonathan Westhues cdeeb67d83 Oops, the ASCII codes for some characters I was using overlapped
with the VK codes for some keys that I wasn't. Ugly, but work
around that.

[git-p4: depot-paths = "//depot/solvespace/": change = 1833]
2008-07-09 23:26:41 -08:00
Jonathan Westhues 44795175ee A suggestion when we fail to converge or go singular.
[git-p4: depot-paths = "//depot/solvespace/": change = 1832]
2008-07-09 23:17:35 -08:00
Jonathan Westhues 7cf0deb9f4 Reassign the keyboard shortcuts so that the constraints don't all
start with Shift, since that's hard to type.

[git-p4: depot-paths = "//depot/solvespace/": change = 1831]
2008-07-09 23:06:07 -08:00
Jonathan Westhues 49b6e9a74d Remove the back button from the text window, since I never used it.
And fix a bug; wasn't asking the user whether to save before
abandoning file when a new file was opened recent.

[git-p4: depot-paths = "//depot/solvespace/": change = 1830]
2008-07-09 22:11:56 -08:00
Jonathan Westhues 7622534b2a Make the piecewise linear stuff for cubics and quadratics adaptive,
based on a chord tolerance. And rewrite the pwl circles to work
against a chord tolerance too (which they really were doing before,
but in funny units).

Also make "assemble" combine type do a union after interference
checking; was previously just copying, which meant that coplanar
faces could break subsequent operations.

And make right-clicking effectively toggle shift key, instead of
forcing it on; so you can pan or rotate with either right or middle
button.

[git-p4: depot-paths = "//depot/solvespace/": change = 1829]
2008-07-09 21:26:08 -08:00
Jonathan Westhues 6852b4134f Request a deeper z buffer and color depth. Doesn't seem like that
could hurt, but still make offsets work as if it's a 16 bit buffer,
since I don't seem to actually get 24 bits.

[git-p4: depot-paths = "//depot/solvespace/": change = 1828]
2008-07-08 22:41:42 -08:00
Jonathan Westhues dd23aa11a2 Make rotations default to 360/n degrees (uniform about a circle)
if no constraints set the rotation.

[git-p4: depot-paths = "//depot/solvespace/": change = 1827]
2008-07-08 22:13:49 -08:00
Jonathan Westhues 4c42f329cd Show the open filename in the title bar of the graphics window.
[git-p4: depot-paths = "//depot/solvespace/": change = 1826]
2008-07-08 00:02:22 -08:00
Jonathan Westhues 9136d86bff Split solvespace.cpp; leave the file menu and general-purpose stuff
where it was, move the export (DXF, PNG, STL) stuff to export.cpp,
and move the regen/solve stuff to generate.cpp.

[git-p4: depot-paths = "//depot/solvespace/": change = 1825]
2008-07-07 23:45:47 -08:00
Jonathan Westhues 72d188619d Add a scale factor when exporting; the user specifies a number, and
all coordinates are divided by that number as we export.

And add functions to store a float in the registry. I'm using those
for the scale factor, and also to replace the crazy scaled integers
that I was using for light positions etc. before.

[git-p4: depot-paths = "//depot/solvespace/": change = 1824]
2008-07-07 23:41:29 -08:00
Jonathan Westhues b2f2f90a27 Add DXF export. The complexity comes from all the different ways to
specify the plane from which we want to grab the triangles. Shared
edges are then removed with the same code used to check for
watertight meshes, and the remaining edges are assembled into
polygons.

[git-p4: depot-paths = "//depot/solvespace/": change = 1823]
2008-07-07 22:30:13 -08:00
Jonathan Westhues b4a9ac993c Add export of the mesh as an STL file. That's trivial.
[git-p4: depot-paths = "//depot/solvespace/": change = 1822]
2008-07-06 01:24:31 -08:00
Jonathan Westhues cad77c9c47 Add routines to remove T intersections from the mesh, which are
introduced by the bsp routines. It's usually, though not always,
possible to generate a watertight mesh. The occasions where it's
not look ugly, floating point issues, no quick fix.

And use those to generate a list of edges where two different faces
meet, which I can emphasize for cosmetic reasons (and some UI to
specify whether to do that, and with what color).

And make the right mouse button rotate the model, since that was
previously doing nothing.

[git-p4: depot-paths = "//depot/solvespace/": change = 1821]
2008-07-05 23:56:24 -08:00
Jonathan Westhues d4d5ab578d Add a special case when raising quaternions almost equal to
(+/-1, 0, 0, 0) to some power; that was failing if the magnitude of
w was slightly greater than 1, so that acos() returned NaN.

[git-p4: depot-paths = "//depot/solvespace/": change = 1820]
2008-07-02 01:52:32 -08:00
Jonathan Westhues fd4abd5519 Add a perpendicular constraint; identical to constraining a ninety
degree angle, but shows with a right angle symbol instead of a
numerical angle you can edit.

[git-p4: depot-paths = "//depot/solvespace/": change = 1819]
2008-07-02 01:21:29 -08:00
Jonathan Westhues 1bc68779d9 Test the rank of the Jacobian by Gram-Schmidt, instead of by a
questionable tolerance on the pivot while row reducing.

[git-p4: depot-paths = "//depot/solvespace/": change = 1818]
2008-07-02 00:18:25 -08:00
Jonathan Westhues 48c5018613 Add symmetric about line constraint. This applies only when locked
in a workplane, since it would otherwise be ambiguous.

[git-p4: depot-paths = "//depot/solvespace/": change = 1817]
2008-07-01 22:59:49 -08:00
Jonathan Westhues 8a70efed05 Make sliver triangle tests work on the minimum altitude, not on
area.

[git-p4: depot-paths = "//depot/solvespace/": change = 1816]
2008-07-01 20:32:24 -08:00
Jonathan Westhues b77cb053e2 Move `Solve Once Now' to the Edit menu, and call it `Regenerate';
and fix some other problems with the menu labels.

[git-p4: depot-paths = "//depot/solvespace/": change = 1815]
2008-06-30 01:34:03 -08:00
Jonathan Westhues 273339d5c4 Add TrueType font support to SolveSpace. This uses a modified
version of the code from SketchFlat, with all arbitrary limits
removed.

The TTF text is its own entity, and that entity includes the
font file basename and the text. That's an extra 128 bytes in the
entity, which is around a 50% increase, kind of a shame. It was
simple, though.

[git-p4: depot-paths = "//depot/solvespace/": change = 1814]
2008-06-30 01:09:17 -08:00
Jonathan Westhues a31782e1ea If any equations are soluble in a single variable, then handle them
separately, even before doing the rank test. In some cases, that's
a huge speedup.

[git-p4: depot-paths = "//depot/solvespace/": change = 1811]
2008-06-26 01:34:26 -08:00
Jonathan Westhues a47a77c37c Back to opengl's tesselator for triangulation. I'll spend more time
writing mine later.

[git-p4: depot-paths = "//depot/solvespace/": change = 1810]
2008-06-25 23:28:29 -08:00
Jonathan Westhues 9b008ad1cd Check in a broken triangulation code (by stupid ear clipping),
which I will shortly revert. gl does a much better job, and I'll
have to spend more time to get something reasonable.

[git-p4: depot-paths = "//depot/solvespace/": change = 1809]
2008-06-25 23:25:42 -08:00
Jonathan Westhues 12942a74cf Add logic to remember imported files' relative filenames, and use
that to try to find them if we can't find them by absolute path.
This is intended to make everything still work if you copy an
entire directory tree of files that import each other.

Also add a mechanism to not paint the scene if we're not sure it's
consistent; otherwise got some crashes on startup. And disable both
text and graphic window when displaying a modal dialog, wasn't
doing that always.

[git-p4: depot-paths = "//depot/solvespace/": change = 1808]
2008-06-24 21:14:49 -08:00
Jonathan Westhues 2ff309590e Oops, was calling glBegin() once for each triangle when showing
mesh!

[git-p4: depot-paths = "//depot/solvespace/": change = 1807]
2008-06-23 00:48:19 -08:00
Jonathan Westhues bc5b43de85 Split the BSP stuff off the mesh stuff, and the text screens
themselves of the text window utility functions.

[git-p4: depot-paths = "//depot/solvespace/": change = 1806]
2008-06-23 00:37:12 -08:00
Jonathan Westhues 6eaca10e2f Clarify description of helix in text window.
[git-p4: depot-paths = "//depot/solvespace/": change = 1805]
2008-06-23 00:27:11 -08:00
Jonathan Westhues 3ddd1703b1 Add helical sweeps. These aren't as parametric as I would have
liked, but my more parametric attempts were very difficult to use.
The pitch (both axial and radial) gets specified by typing a
distance in a textbox.

[git-p4: depot-paths = "//depot/solvespace/": change = 1804]
2008-06-23 00:25:17 -08:00