1 // rs_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 "rs_actiondrawcircle3p.h"
17 #include "rs_commandevent.h"
18 #include "rs_dialogfactory.h"
19 #include "graphicview.h"
20 #include "rs_preview.h"
22 RS_ActionDrawCircle3P::RS_ActionDrawCircle3P(RS_EntityContainer & container, GraphicView & graphicView): RS_PreviewActionInterface("Draw circles",
23 container, graphicView)
28 RS_ActionDrawCircle3P::~RS_ActionDrawCircle3P()
32 void RS_ActionDrawCircle3P::reset()
35 point1 = Vector(false);
36 point2 = Vector(false);
37 point3 = Vector(false);
40 void RS_ActionDrawCircle3P::init(int status)
42 RS_PreviewActionInterface::init(status);
47 void RS_ActionDrawCircle3P::trigger()
49 RS_PreviewActionInterface::trigger();
55 RS_Circle * circle = new RS_Circle(container,
57 circle->setLayerToActive();
58 circle->setPenToActive();
59 container->addEntity(circle);
64 document->startUndoCycle();
65 document->addUndoable(circle);
66 document->endUndoCycle();
69 Vector rz = graphicView->getRelativeZero();
70 graphicView->moveRelativeZero(Vector(0.0, 0.0));
71 graphicView->drawEntity(circle);
72 graphicView->moveRelativeZero(rz);
79 RS_DIALOGFACTORY->requestWarningDialog(tr("Invalid circle data."));
82 void RS_ActionDrawCircle3P::preparePreview()
86 if (point1.valid && point2.valid && point3.valid)
88 RS_Circle circle(NULL, data);
89 bool suc = circle.createFrom3P(point1, point2, point3);
92 data = circle.getData();
96 void RS_ActionDrawCircle3P::mouseMoveEvent(QMouseEvent * e)
98 Vector mouse = snapPoint(e);
116 RS_Circle * circle = new RS_Circle(preview, data);
120 preview->addEntity(circle);
127 void RS_ActionDrawCircle3P::mouseReleaseEvent(QMouseEvent * e)
129 // if (RS2::qtToRsButtonState(e->button())==RS2::LeftButton)
130 if (e->button() == Qt::LeftButton)
132 Vector ce(snapPoint(e));
133 coordinateEvent(&ce);
135 // else if (RS2::qtToRsButtonState(e->button())==RS2::RightButton)
136 else if (e->button() == Qt::RightButton)
140 init(getStatus() - 1);
144 void RS_ActionDrawCircle3P::coordinateEvent(Vector * e)
155 graphicView->moveRelativeZero(mouse);
156 setStatus(SetPoint2);
161 graphicView->moveRelativeZero(mouse);
162 setStatus(SetPoint3);
175 void RS_ActionDrawCircle3P::commandEvent(RS_CommandEvent * e)
177 QString c = e->getCommand().toLower();
179 if (checkCommand("help", c))
181 RS_DIALOGFACTORY->commandMessage(msgAvailableCommands()
182 + getAvailableCommands().join(", "));
187 QStringList RS_ActionDrawCircle3P::getAvailableCommands()
193 void RS_ActionDrawCircle3P::updateMouseButtonHints()
198 RS_DIALOGFACTORY->updateMouseWidget(tr("Specify first point"),
203 RS_DIALOGFACTORY->updateMouseWidget(tr("Specify second point"),
208 RS_DIALOGFACTORY->updateMouseWidget(tr("Specify third point"),
213 RS_DIALOGFACTORY->updateMouseWidget("", "");
218 void RS_ActionDrawCircle3P::updateMouseCursor()
220 graphicView->setMouseCursor(RS2::CadCursor);
223 void RS_ActionDrawCircle3P::updateToolBar()
226 RS_DIALOGFACTORY->requestToolBar(RS2::ToolBarSnap);
228 RS_DIALOGFACTORY->requestToolBar(RS2::ToolBarCircles);