String literals in C++ are implicitly typed as 'const char *', and with
this change, their const-ness is maintained when assigning them to
variables or passing them as arguments. This significantly cuts down the
number of warnings generated by the compiler.
rotation. Also clean up the handling of units, by putting the
conversion factors in only one place, and clean up the
expression-parsing but removing all the copies of the same error
message.
[git-p4: depot-paths = "//depot/solvespace/": change = 2093]
tricky; can't just use the dot product, since that blows up when
you cross pi radians. A gear shift approach, use either sin or cos,
same kind of thing as the 3d-parallel constraint.
And report a NaN constraint as unconverged, of course.
[git-p4: depot-paths = "//depot/solvespace/": change = 1890]
an Expr *, since that complicates multiple units and also memory
management. Now it's just a double.
[git-p4: depot-paths = "//depot/solvespace/": change = 1791]
metadata. And add point-on-face constraints to go with that. Still
needs some cleanup for the user interface.
[git-p4: depot-paths = "//depot/solvespace/": change = 1766]
create a `new' stack-allocated instance of an object; just From,
possibly different versions with different arg types.
[git-p4: depot-paths = "//depot/solvespace/": change = 1763]
translation; or equivalently, rotation about an arbitrary axis).
Those will be important for step and repeats, and for imported
parts.
Also fix a terrible memory corruption bug: I was freeing the remap
list after I loaded it from the file, but the code that put that
into the SS.group list made only a shallow copy.
[git-p4: depot-paths = "//depot/solvespace/": change = 1715]
constraints. And generate the constraint equations for entities
(e.g., that our unit quaternions have magnitude one). Numerical
troubles there, but it sort of works. Also some stuff to draw
projection lines with projected constraints, and to auto-insert
more constraints as you draw.
[git-p4: depot-paths = "//depot/solvespace/": change = 1711]
workplanes. And fix up our polygon normals, so that everything gets
shaded correctly (and so that later we can generate our STL files
with correct normals).
[git-p4: depot-paths = "//depot/solvespace/": change = 1706]
vectors", represented by unit quaternions. This permits me to add
circles, where the normal defines the plane of the circle.
Still many things painful. The interface for editing normals is not
so intuitive, and it's not yet clear how I would e.g. export a
circle entity and recreate it properly, since that entity has a
param not associated with a normal or point.
And the transformed points/normals do not yet support rotations.
That will be necessary soon.
[git-p4: depot-paths = "//depot/solvespace/": change = 1705]
or taking partials (constant folding). Also keep a little hash
table to mark with params are used in each equation, in order to
quickly discard trivial partial derivatives. This is solving a
64x64 system in <20 ms. I suspect this is now much faster than
Sketchflat.
Slightly fake situation, though, since substitution solver has not
yet been written, and no partitioning. I'll do those next.
[git-p4: depot-paths = "//depot/solvespace/": change = 1698]
not have much motivation behind them, but they seem to work. And
make sure that we don't solve multiple times without repainting in
between, and tweak the text window a bit more.
[git-p4: depot-paths = "//depot/solvespace/": change = 1696]
the label associated with a constraint. And that even works,
changes the length of the line.
[git-p4: depot-paths = "//depot/solvespace/": change = 1678]
and point-in-plane. These work, but the equation is still stupid,
solving everything at once and not substituting trivial equations.
[git-p4: depot-paths = "//depot/solvespace/": change = 1677]
points are now entities like any others; so a line segment request
will generate three entities, the line segment and its endpoints. I
think that's cleaner.
When I do step and repeats (and imports, and other similar), I'll
need a consistent way to assign those entity ids. That assignment
must not change if the sketch is edited. I don't have a clean way
to do that; best thought right now is to keep a record of what maps
have been used previously, and not pick a new map as long as it's
possible to use one that was used previously.
This all means that more crap gets pushed in to the Entity
structure, so that they can keep track of what solver variables
define them. Still seems better, though. I'm closer to ready
to start solving.
[git-p4: depot-paths = "//depot/solvespace/": change = 1673]
expressions that we wish to keep around. And make the 2d coordinate
system (that causes points to generate 2 unknowns, not 3) an
attribute of the request, not the group, and add user interface to
change that.
[git-p4: depot-paths = "//depot/solvespace/": change = 1670]
syntax tree. That's what I'll used for entered dimensions, and
algebraic constraints and such. Needs to be extended to handle
stuff like points and entities, but I think that it can be.
[git-p4: depot-paths = "//depot/solvespace/": change = 1669]
on-screen, and I can drag the label. That's progress. Also
implement a bunch of untested expression stuff, since I'll need
that for the values of the dimensions, for example.
[git-p4: depot-paths = "//depot/solvespace/": change = 1668]
the plane basis vectors) work, easy. Tweak the text window a bit,
for cosmetics, and start to add the symbolic expression code.
[git-p4: depot-paths = "//depot/solvespace/": change = 1667]
just for display, and any text entry will happen via some floating
text box, same as entering a dimension on the sketch.
Add the hover and selection mechanism, which now seems to work.
Still not clear how to do imported parts, for assemblies and
hierarchy. The handle formats may still have to change.
[git-p4: depot-paths = "//depot/solvespace/": change = 1662]
progress. I want to change the sketch.h stuff fairly significantly,
I think, before proceeding.
[git-p4: depot-paths = "//depot/solvespace/": change = 1657]