type = OTDimension;
}
-#if 0
-// This is bad, p1 & p2 could be NULL, causing much consternation...
-Dimension::Dimension(Connection p1, Connection p2, DimensionType dt/*= DTLinear*/, Object * p/*= NULL*/):
- dragging(false), draggingHandle1(false), draggingHandle2(false),
- length(0), dimensionType(dt), size(0.25)//, point1(p1), point2(p2)
-{
- type = OTDimension;
-}
-#endif
Dimension::~Dimension()
{
// need to make another handle drawing function in Painter, instead of this
if (hitLine)
{
+#if 0
Point p9 = ((position + endpoint) / 2.0) + (orthogonal * 14.0)
+ (unit * 7.0);
painter->DrawLine(p11, p12);
painter->DrawLine(p12, p13);
painter->DrawLine(p13, p10);
+#else
+ if (hitFlipSwitch)
+ painter->SetPen(QPen(Qt::magenta, 2.0, Qt::DotLine));
+
+ Point hp1 = (p1 + p2) / 2.0;
+ painter->DrawHandle(hp1);
+#endif
}
}
draggingHandle2 = true;
return true;
}
+ else if (hitFlipSwitch)
+ {
+ FlipSides();
+ hitFlipSwitch = hitLine = false;
+// state = OSInactive;
+// return true;
+ }
state = OSInactive;
return false;
/*virtual*/ bool Dimension::HitTest(Point point)
{
- Vector orthogonal = Vector::Normal(position, endpoint);
+// Vector orthogonal = Vector::Normal(position, endpoint);
+ Vector orthogonal = Vector::Normal(linePt1, linePt2);
// Get our line parallel to our points
#if 0
Point p1 = position + (orthogonal * 10.0 * size);
// double t = Geometry::ParameterOfLineAndPoint(position, endpoint, point);
double t = Geometry::ParameterOfLineAndPoint(p1, p2, point);
double distance;
+ Point hFSPoint = Point((p1 + p2) / 2.0, point);
if (t < 0.0)
distance = v1.Magnitude();
else if ((distance * Painter::zoom) < 5.0)
hitLine = true;
- return (hitPoint1 || hitPoint2 || hitLine ? true : false);
+ if ((hFSPoint.Magnitude() * Painter::zoom) < 8.0)
+ hitFlipSwitch = true;
+
+ return (hitPoint1 || hitPoint2 || hitLine || hitFlipSwitch ? true : false);
}
oldHitPoint1 = hitPoint1;
oldHitPoint2 = hitPoint2;
oldHitLine = hitLine;
+ oldHitFlipSwitch = hitFlipSwitch;
}
bool Dimension::HitStateChanged(void)
{
- if ((hitPoint1 != oldHitPoint1) || (hitPoint2 != oldHitPoint2) || (hitLine != oldHitLine))
+ if ((hitPoint1 != oldHitPoint1) || (hitPoint2 != oldHitPoint2) || (hitLine != oldHitLine) || (hitFlipSwitch != oldHitFlipSwitch))
return true;
return false;
#include "drawlineaction.h"
#include "line.h"
+#include "mathconstants.h"
#include "painter.h"
painter->DrawLine(p1, p2);
painter->DrawHandle(p2);
- QString text = tr("Length: %1 in.");
- text = text.arg(Vector::Magnitude(p1, p2));
+ Vector v(p1, p2);
+ double absAngle = v.Angle() * RADIANS_TO_DEGREES;
+ double absLength = v.Magnitude();
+ QString text = tr("Length: %1 in.\n") + QChar(0x2221) + tr(": %2");
+ text = text.arg(absLength).arg(absAngle);
painter->DrawInformativeText(text);
}
}