#include "painter.h"
-Dimension::Dimension(Vector p1, Vector p2, DimensionType dt/*= DTLinear*/ ,Object * p/*= NULL*/):
+Dimension::Dimension(Vector p1, Vector p2, DimensionType dt/*= DTLinear*/, Object * p/*= NULL*/):
Object(p1, p), endpoint(p2),
dragging(false), draggingHandle1(false), draggingHandle2(false),
length(p2.Magnitude()), dimensionType(dt), size(0.25), point1(NULL), point2(NULL)
// This is bad, p1 & p2 could be NULL, causing much consternation...
-Dimension::Dimension(Connection p1, Connection p2, DimensionType dt/*= DTLinear*/ , Object * p/*= NULL*/):
+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)
{
/*virtual*/ void Dimension::Draw(Painter * painter)
{
+#if 0
// If there are valid Vector pointers in here, use them to update the internal
// positions. Otherwise, we just use the internal positions by default.
if (point1.object)
if (point2.object)
endpoint = point2.object->GetPointAtParameter(point2.t);
+#endif
painter->SetPen(QPen(Qt::magenta, 2.0, Qt::DotLine));
if ((state == OSSelected) || ((state == OSInactive) && hitPoint2))
painter->DrawHandle(endpoint);
-#if 0
+#if 1
if (state == OSSelected)
- painter->SetPen(QPen(Qt::red, 2.0, Qt::DotLine));
+ painter->SetPen(QPen(Qt::cyan, 1.0 * Painter::zoom * size, Qt::SolidLine));
else
// painter->SetPen(QPen(Qt::blue, 1.0, Qt::SolidLine));
#endif
/*virtual*/ void Dimension::PointerMoved(Vector point)
{
-#if 0
- // We know this is true because mouse move messages don't come here unless
- // the object was actually clicked on--therefore we *know* we're being
- // dragged...
- objectWasDragged = true;
-
-/* if (dragging)
- {
- // Here we need to check whether or not we're dragging a handle or the object itself...
- Vector delta = point - oldPoint;
-
- position += delta;
- endpoint += delta;
-
- oldPoint = point;
- needUpdate = true;
- }
- else*/ if (draggingHandle1)
+ if (selectionInProgress)
{
- Vector delta = point - oldPoint;
-
- position += delta;
+ // Check for whether or not the rect contains this line
+ if (selection.contains(position.x, position.y)
+ && selection.contains(endpoint.x, endpoint.y))
+ state = OSSelected;
+ else
+ state = OSInactive;
- oldPoint = point;
- needUpdate = true;
+ return;
}
- else if (draggingHandle2)
- {
- Vector delta = point - oldPoint;
-
- endpoint += delta;
- oldPoint = point;
- needUpdate = true;
- }
- else
- needUpdate = false;
-#else
// Hit test tells us what we hit (if anything) through boolean variables. (It
// also tells us whether or not the state changed. --not any more)
SaveHitState();
oldPoint = point;
needUpdate = true;
}
-#endif
}
}
+/*virtual*/ void Dimension::MovePointAtParameter(double parameter, Vector v)
+{
+ if (parameter == 0)
+ position += v;
+ else if (parameter == 1.0)
+ endpoint += v;
+ else
+ {} // Not sure how to handle this case :-P
+}
+
+
/*virtual*/ void Dimension::Connect(Object * obj, double param)
{
// There are four possibilities here...