1 // actiondrawcircle3p.cpp
3 // Part of the Architektonas Project
4 // Originally part of QCad Community Edition by Andrew Mustun
5 // Extensively rewritten and refactored by James L. Hammons
6 // (C) 2010 Underground Software
8 // JLH = James L. Hammons <jlhamm@acm.org>
11 // --- ---------- -----------------------------------------------------------
12 // JLH 06/03/2010 Added this text. :-)
15 #include "actiondrawcircle3p.h"
17 #include "rs_commandevent.h"
18 #include "rs_dialogfactory.h"
19 #include "graphicview.h"
20 #include "rs_preview.h"
22 ActionDrawCircle3P::ActionDrawCircle3P(RS_EntityContainer & container,
23 GraphicView & graphicView): ActionInterface("Draw circles",
24 container, graphicView)
29 ActionDrawCircle3P::~ActionDrawCircle3P()
33 void ActionDrawCircle3P::reset()
36 point1 = Vector(false);
37 point2 = Vector(false);
38 point3 = Vector(false);
41 void ActionDrawCircle3P::init(int status)
43 ActionInterface::init(status);
48 void ActionDrawCircle3P::trigger()
50 ActionInterface::trigger();
56 RS_Circle * circle = new RS_Circle(container, data);
57 circle->setLayerToActive();
58 circle->setPenToActive();
59 container->addEntity(circle);
64 document->startUndoCycle();
65 document->addUndoable(circle);
66 document->endUndoCycle();
70 Vector rz = graphicView->getRelativeZero();
71 graphicView->moveRelativeZero(Vector(0.0, 0.0));
72 graphicView->drawEntity(circle);
73 graphicView->moveRelativeZero(rz);
80 RS_DIALOGFACTORY->requestWarningDialog(tr("Invalid circle data."));
83 void ActionDrawCircle3P::preparePreview()
87 if (point1.valid && point2.valid && point3.valid)
89 RS_Circle circle(NULL, data);
90 bool success = circle.createFrom3P(point1, point2, point3);
93 data = circle.getData();
97 void ActionDrawCircle3P::mouseMoveEvent(QMouseEvent * e)
99 Vector mouse = snapPoint(e);
117 // RS_Circle * circle = new RS_Circle(preview, data);
121 // preview->addEntity(circle);
128 void ActionDrawCircle3P::mouseReleaseEvent(QMouseEvent * e)
130 if (e->button() == Qt::LeftButton)
132 Vector ce(snapPoint(e));
133 coordinateEvent(&ce);
135 else if (e->button() == Qt::RightButton)
139 init(getStatus() - 1);
143 void ActionDrawCircle3P::coordinateEvent(Vector * e)
154 graphicView->moveRelativeZero(mouse);
155 setStatus(SetPoint2);
160 graphicView->moveRelativeZero(mouse);
161 setStatus(SetPoint3);
174 void ActionDrawCircle3P::commandEvent(RS_CommandEvent * e)
176 QString c = e->getCommand().toLower();
178 if (checkCommand("help", c))
180 RS_DIALOGFACTORY->commandMessage(msgAvailableCommands()
181 + getAvailableCommands().join(", "));
186 QStringList ActionDrawCircle3P::getAvailableCommands()
192 void ActionDrawCircle3P::updateMouseButtonHints()
197 RS_DIALOGFACTORY->updateMouseWidget(tr("Specify first point"), tr("Cancel"));
201 RS_DIALOGFACTORY->updateMouseWidget(tr("Specify second point"), tr("Back"));
205 RS_DIALOGFACTORY->updateMouseWidget(tr("Specify third point"), tr("Back"));
209 RS_DIALOGFACTORY->updateMouseWidget("", "");
214 void ActionDrawCircle3P::updateMouseCursor()
216 graphicView->setMouseCursor(RS2::CadCursor);
219 void ActionDrawCircle3P::updateToolBar()
222 RS_DIALOGFACTORY->requestToolBar(RS2::ToolBarSnap);
224 RS_DIALOGFACTORY->requestToolBar(RS2::ToolBarCircles);