#include "object.h"
#include <stdlib.h>
+#include <math.h>
// Initialize static variables
bool Object::fixedAngle = false;
bool Object::dontMove = false;
bool Object::selectionInProgress = false;
QRectF Object::selection;
+double Object::gridSpacing;
Object::Object(): position(Vector(0, 0)), parent(0), type(OTObject),
{
snapToGrid = state;
}
+
+
+//
+// This looks strange, but it's really quite simple: We want a point that's
+// more than half-way to the next grid point to snap there while conversely we
+// want a point that's less than half-way to to the next grid point then snap
+// to the one before it. So we add half of the grid spacing to the point, then
+// divide by it so that we can remove the fractional part, then multiply it
+// back to get back to the correct answer.
+//
+Vector Object::SnapPointToGrid(Vector point)
+{
+ point += gridSpacing / 2.0; // *This* adds to Z!!!
+ point /= gridSpacing;
+ point.x = floor(point.x);//need to fix this for negative numbers...
+ point.y = floor(point.y);
+ point.z = 0; // Make *sure* Z doesn't go anywhere!!!
+ point *= gridSpacing;
+ return point;
+}
+
+