X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fline.cpp;h=90b5dc21e96485391fcaad161d1147d54c98912c;hb=c58b8a9f8b1ae5494857fc423ed8e33b2bbcf329;hp=74c40b5a3b6a027f409bf574ada59b9e475e6b5a;hpb=143b369c0308a8cd524cb0ed51c5d67d6be69603;p=architektonas diff --git a/src/line.cpp b/src/line.cpp index 74c40b5..90b5dc2 100644 --- a/src/line.cpp +++ b/src/line.cpp @@ -21,6 +21,7 @@ #include #include "container.h" #include "dimension.h" +#include "geometry.h" #include "mathconstants.h" #include "painter.h" @@ -122,6 +123,15 @@ Line::~Line() /*virtual*/ bool Line::Collided(Vector point) { +/* +what we can do here is set ignoreClicks to true to keep other objects that are +selected from deselecting themselves. Will that fuck up something else? Not sure +yet... :-/ +*/ + // Someone told us to fuck off, so we'll fuck off. :-) + if (ignoreClicks) + return false; + // We can assume this, since this is a mouse down event here. objectWasDragged = false; HitTest(point); @@ -445,7 +455,8 @@ the horizontal line or vertical line that intersects from the current mouse posi Vector lineSegment = endpoint - position; Vector v1 = point - position; Vector v2 = point - endpoint; - double t = Vector::Parameter(position, endpoint, point); +// double t = Vector::Parameter(position, endpoint, point); + double t = Geometry::ParameterOfLineAndPoint(position, endpoint, point); double distance; // Geometric interpretation: @@ -509,7 +520,7 @@ the horizontal line or vertical line that intersects from the current mouse posi /*virtual*/ void Line::Enumerate(FILE * file) { - fprintf(file, "LINE (%lf,%lf) (%lf,%lf)\n", position.x, position.y, endpoint.x, endpoint.y); + fprintf(file, "LINE %i (%lf,%lf) (%lf,%lf)\n", layer, position.x, position.y, endpoint.x, endpoint.y); } @@ -565,13 +576,40 @@ same reference number. } -/*virtual*/ void Line::Rotate(Vector point, double angle) +/*virtual*/ void Line::Rotate(Point point, double angle) +{ + Point l1 = Geometry::RotatePointAroundPoint(position, point, angle); + Point l2 = Geometry::RotatePointAroundPoint(endpoint, point, angle); + position = l1; + endpoint = l2; +} + + +/*virtual*/ void Line::Scale(Point point, double amount) +{ +} + + +/*virtual*/ void Line::Mirror(Point p1, Point p2) +{ + Point l1 = Geometry::MirrorPointAroundLine(position, p1, p2); + Point l2 = Geometry::MirrorPointAroundLine(endpoint, p1, p2); + position = l1; + endpoint = l2; +} + + +/*virtual*/ void Line::Save(void) { + Object::Save(); + oldEndpoint = endpoint; } -/*virtual*/ void Line::Scale(Vector point, double amount) +/*virtual*/ void Line::Restore(void) { + Object::Restore(); + endpoint = oldEndpoint; }