1 // rs_actiondrawarc3p.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_actiondrawarc3p.h"
17 #include "rs_actiondrawarc.h"
18 #include "rs_commandevent.h"
20 #include "rs_dialogfactory.h"
21 #include "graphicview.h"
22 #include "rs_preview.h"
24 RS_ActionDrawArc3P::RS_ActionDrawArc3P(RS_EntityContainer & container, GraphicView & graphicView):
25 RS_PreviewActionInterface("Draw arcs 3P", container, graphicView)
30 RS_ActionDrawArc3P::~RS_ActionDrawArc3P()
34 void RS_ActionDrawArc3P::reset()
37 point1 = Vector(false);
38 point2 = Vector(false);
39 point3 = Vector(false);
42 void RS_ActionDrawArc3P::init(int status)
44 RS_PreviewActionInterface::init(status);
49 void RS_ActionDrawArc3P::trigger()
51 RS_PreviewActionInterface::trigger();
56 RS_Arc * arc = new RS_Arc(container, data);
57 arc->setLayerToActive();
58 arc->setPenToActive();
59 container->addEntity(arc);
64 document->startUndoCycle();
65 document->addUndoable(arc);
66 document->endUndoCycle();
70 graphicView->moveRelativeZero(Vector(0.0, 0.0));
71 graphicView->drawEntity(arc);
72 graphicView->moveRelativeZero(arc->getEndpoint());
79 RS_DIALOGFACTORY->commandMessage(tr("Invalid arc data."));
82 void RS_ActionDrawArc3P::preparePreview()
86 if (point1.valid && point2.valid && point3.valid)
88 RS_Arc arc(NULL, data);
89 bool suc = arc.createFrom3P(point1, point2, point3);
96 void RS_ActionDrawArc3P::mouseMoveEvent(QMouseEvent * e)
98 Vector mouse = snapPoint(e);
111 RS_Line * line = new RS_Line(preview, RS_LineData(point1, point2));
115 preview->addEntity(line);
126 RS_Arc * arc = new RS_Arc(preview, data);
130 preview->addEntity(arc);
140 void RS_ActionDrawArc3P::mouseReleaseEvent(QMouseEvent * e)
142 if (e->button() == Qt::LeftButton)
144 Vector ce(snapPoint(e));
145 coordinateEvent(&ce);
147 else if (e->button() == Qt::RightButton)
151 init(getStatus() - 1);
155 void RS_ActionDrawArc3P::coordinateEvent(Vector * e)
166 graphicView->moveRelativeZero(mouse);
167 setStatus(SetPoint2);
172 graphicView->moveRelativeZero(mouse);
173 setStatus(SetPoint3);
186 void RS_ActionDrawArc3P::commandEvent(RS_CommandEvent * e)
188 QString c = e->getCommand().toLower();
190 if (checkCommand("help", c))
192 RS_DIALOGFACTORY->commandMessage(msgAvailableCommands()
193 + getAvailableCommands().join(", "));
197 if (RS_COMMANDS->checkCommand("center", c, rtti()))
200 graphicView->setCurrentAction(new RS_ActionDrawArc(*container, *graphicView));
204 QStringList RS_ActionDrawArc3P::getAvailableCommands()
210 void RS_ActionDrawArc3P::updateMouseButtonHints()
215 RS_DIALOGFACTORY->updateMouseWidget(tr("Specify startpoint or [Center]"), tr("Cancel"));
219 RS_DIALOGFACTORY->updateMouseWidget(tr("Specify second point"), tr("Back"));
223 RS_DIALOGFACTORY->updateMouseWidget(tr("Specify endpoint"), tr("Back"));
227 RS_DIALOGFACTORY->updateMouseWidget("", "");
232 void RS_ActionDrawArc3P::updateMouseCursor()
234 graphicView->setMouseCursor(RS2::CadCursor);
237 void RS_ActionDrawArc3P::updateToolBar()
240 RS_DIALOGFACTORY->requestToolBar(RS2::ToolBarSnap);
242 RS_DIALOGFACTORY->requestToolBar(RS2::ToolBarArcs);