//
#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)
{
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);
/*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
/*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;
{
}
+
+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);
+ }
+ }
+}
+