#include <QtGui>
#include "container.h"
#include "dimension.h"
+#include "geometry.h"
#include "mathconstants.h"
#include "painter.h"
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)));
pen = QPen(QColor(0x00, 0x5F, 0xDF));
painter->SetPen(pen);
painter->DrawText(textRect, Qt::AlignVCenter, text);
+#else
+ painter->DrawInformativeText(text);
+#endif
}
}
/*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);
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:
/*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);
}
}
-/*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;
}