X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdrawdimensionaction.cpp;h=d366c2277dacee4137a551b3d46e5e17fb645269;hb=4d6ba8a6eb781dbee818b6a55d21df7b52468936;hp=66b2bfb1a176c149107eb5782e56859155590eac;hpb=9590e4ed45fd4e05eccc16bd8e9d51596aea5a6d;p=architektonas diff --git a/src/drawdimensionaction.cpp b/src/drawdimensionaction.cpp index 66b2bfb..d366c22 100644 --- a/src/drawdimensionaction.cpp +++ b/src/drawdimensionaction.cpp @@ -12,11 +12,14 @@ // #include "drawdimensionaction.h" +#include "applicationwindow.h" #include "dimension.h" +#include "drawingview.h" +#include "line.h" #include "painter.h" -enum { FIRST_POINT, NEXT_POINT }; +enum { FIRST_POINT, NEXT_POINT, NO_POINT }; DrawDimensionAction::DrawDimensionAction(): state(0), dimension(NULL) @@ -33,12 +36,11 @@ DrawDimensionAction::~DrawDimensionAction() { painter->SetPen(QPen(Qt::red, 2.0, Qt::DotLine)); - // I think stuff like crosshairs should be done in the DrawingView, tho if (state == FIRST_POINT) { painter->DrawHandle(p1); } - else + else if (state == NEXT_POINT) { painter->DrawLine(p1, p2); painter->DrawHandle(p2); @@ -48,6 +50,21 @@ DrawDimensionAction::~DrawDimensionAction() /*virtual*/ void DrawDimensionAction::MouseDown(Vector point) { + obj = ApplicationWindow::drawing->document.lastObjectClicked; + + if (obj) + { + if (obj->type == OTLine) + { + // Make sure we didn't hit an endpoint... + if (!(((Line *) obj)->hitPoint1 || ((Line *)obj)->hitPoint2)) + { + state = NO_POINT; + return; + } + } + } + if (state == FIRST_POINT) p1 = point; else @@ -66,7 +83,12 @@ DrawDimensionAction::~DrawDimensionAction() /*virtual*/ void DrawDimensionAction::MouseReleased(void) { - if (state == FIRST_POINT) + if (state == NO_POINT) + { + HandleAddDimensionToObject();//ApplicationWindow::drawing->document.lastObjectClicked); + state = FIRST_POINT; + } + else if (state == FIRST_POINT) { p2 = p1; state = NEXT_POINT; @@ -93,3 +115,27 @@ DrawDimensionAction::~DrawDimensionAction() { } + +void DrawDimensionAction::HandleAddDimensionToObject(void)//Object * obj) +{ +//printf("Adding dimension to object...\n"); + if (obj->type == OTLine) + { + Object * existing = ((Line *)obj)->FindAttachedDimension(); + + if (existing) + { + ((Dimension *)existing)->FlipSides(); + } +//printf("--> type == LINE\n"); + // Should also check here to see if it hit the line proper or just hit + // an endpoint... + else + { + dimension = new Dimension(p1, p2); + ((Line *)obj)->SetDimensionOnLine(dimension); + emit ObjectReady(dimension); + } + } +} +