X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fline.cpp;h=90b5dc21e96485391fcaad161d1147d54c98912c;hb=c58b8a9f8b1ae5494857fc423ed8e33b2bbcf329;hp=37b43c8865cb86740da00abda5767ad562a512d7;hpb=e8987f4028a1f9c0eeb33a45bd11b2e409b9c2c5;p=architektonas diff --git a/src/line.cpp b/src/line.cpp index 37b43c8..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" @@ -93,11 +94,9 @@ Line::~Line() double absAngle = (Vector(endpoint - position).Angle()) * RADIANS_TO_DEGREES; double absLength = Vector(position - endpoint).Magnitude(); - QString text; - - text = QObject::tr("Length: %1 in.\n") + QChar(0x2221) + QObject::tr(": %2"); + QString text = QObject::tr("Length: %1 in.\n") + QChar(0x2221) + QObject::tr(": %2"); text = text.arg(absLength).arg(absAngle); - +#if 0 QPen pen = QPen(QColor(0x00, 0xFF, 0x00), 1.0, Qt::SolidLine); painter->SetPen(pen); painter->SetBrush(QBrush(QColor(0x40, 0xFF, 0x40, 0x9F))); @@ -109,6 +108,9 @@ Line::~Line() pen = QPen(QColor(0x00, 0x5F, 0xDF)); painter->SetPen(pen); painter->DrawText(textRect, Qt::AlignVCenter, text); +#else + painter->DrawInformativeText(text); +#endif } } @@ -121,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); @@ -444,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: @@ -508,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); } @@ -564,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; }