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 // Portions copyright (C) 2001-2003 RibbonSoft
7 // Copyright (C) 2010 Underground Software
8 // See the README and GPLv2 files for licensing and warranty information
10 // JLH = James L. Hammons <jlhamm@acm.org>
13 // --- ---------- -----------------------------------------------------------
14 // JLH 06/03/2010 Added this text. :-)
17 #include "actiondrawarc3p.h"
19 #include "actiondrawarc.h"
20 #include "rs_commandevent.h"
22 #include "rs_dialogfactory.h"
23 #include "graphicview.h"
24 #include "rs_preview.h"
26 ActionDrawArc3P::ActionDrawArc3P(RS_EntityContainer & container, GraphicView & graphicView):
27 ActionInterface("Draw arcs 3P", container, graphicView)
32 ActionDrawArc3P::~ActionDrawArc3P()
36 void ActionDrawArc3P::reset()
39 point1 = Vector(false);
40 point2 = Vector(false);
41 point3 = Vector(false);
44 void ActionDrawArc3P::init(int status)
46 ActionInterface::init(status);
51 void ActionDrawArc3P::trigger()
53 ActionInterface::trigger();
58 RS_Arc * arc = new RS_Arc(container, data);
59 arc->setLayerToActive();
60 arc->setPenToActive();
61 container->addEntity(arc);
66 document->startUndoCycle();
67 document->addUndoable(arc);
68 document->endUndoCycle();
72 graphicView->moveRelativeZero(Vector(0.0, 0.0));
73 graphicView->drawEntity(arc);
74 graphicView->moveRelativeZero(arc->getEndpoint());
81 RS_DIALOGFACTORY->commandMessage(tr("Invalid arc data."));
84 void ActionDrawArc3P::preparePreview()
88 if (point1.valid && point2.valid && point3.valid)
90 RS_Arc arc(NULL, data);
91 bool suc = arc.createFrom3P(point1, point2, point3);
98 void ActionDrawArc3P::mouseMoveEvent(QMouseEvent * e)
100 Vector mouse = snapPoint(e);
113 // RS_Line * line = new RS_Line(preview, RS_LineData(point1, point2));
117 // preview->addEntity(line);
128 // RS_Arc * arc = new RS_Arc(preview, data);
132 // preview->addEntity(arc);
142 void ActionDrawArc3P::mouseReleaseEvent(QMouseEvent * e)
144 if (e->button() == Qt::LeftButton)
146 Vector ce(snapPoint(e));
147 coordinateEvent(&ce);
149 else if (e->button() == Qt::RightButton)
153 init(getStatus() - 1);
157 void ActionDrawArc3P::coordinateEvent(Vector * e)
168 graphicView->moveRelativeZero(mouse);
169 setStatus(SetPoint2);
174 graphicView->moveRelativeZero(mouse);
175 setStatus(SetPoint3);
188 void ActionDrawArc3P::commandEvent(RS_CommandEvent * e)
190 QString c = e->getCommand().toLower();
192 if (checkCommand("help", c))
194 RS_DIALOGFACTORY->commandMessage(msgAvailableCommands()
195 + getAvailableCommands().join(", "));
199 if (RS_COMMANDS->checkCommand("center", c, rtti()))
202 graphicView->setCurrentAction(new ActionDrawArc(*container, *graphicView));
206 QStringList ActionDrawArc3P::getAvailableCommands()
212 void ActionDrawArc3P::updateMouseButtonHints()
217 RS_DIALOGFACTORY->updateMouseWidget(tr("Specify startpoint or [Center]"), tr("Cancel"));
221 RS_DIALOGFACTORY->updateMouseWidget(tr("Specify second point"), tr("Back"));
225 RS_DIALOGFACTORY->updateMouseWidget(tr("Specify endpoint"), tr("Back"));
229 RS_DIALOGFACTORY->updateMouseWidget("", "");
234 void ActionDrawArc3P::updateMouseCursor()
236 graphicView->setMouseCursor(RS2::CadCursor);
239 void ActionDrawArc3P::updateToolBar()
242 RS_DIALOGFACTORY->requestToolBar(RS2::ToolBarSnap);
244 RS_DIALOGFACTORY->requestToolBar(RS2::ToolBarArcs);