1 // actiondimangular.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 "actiondimangular.h"
17 #include "rs_commandevent.h"
18 #include "rs_dialogfactory.h"
19 #include "graphicview.h"
20 #include "rs_information.h"
21 #include "rs_preview.h"
23 ActionDimAngular::ActionDimAngular(RS_EntityContainer & container, GraphicView & graphicView): ActionDimension("Draw Angular Dimensions",
24 container, graphicView)
29 ActionDimAngular::~ActionDimAngular()
33 /*virtual*/ RS2::ActionType ActionDimAngular::rtti()
35 return RS2::ActionDimAngular;
38 void ActionDimAngular::reset()
40 ActionDimension::reset();
41 edata = RS_DimAngularData(Vector(false), Vector(false), Vector(false), Vector(false));
44 center = Vector(false);
45 RS_DIALOGFACTORY->requestOptions(this, true, true);
48 void ActionDimAngular::trigger()
50 ActionInterface::trigger();
52 if (line1 != NULL && line2 != NULL)
54 RS_DimAngular * newEntity = NULL;
56 newEntity = new RS_DimAngular(container,
60 newEntity->setLayerToActive();
61 newEntity->setPenToActive();
63 container->addEntity(newEntity);
68 document->startUndoCycle();
69 document->addUndoable(newEntity);
70 document->endUndoCycle();
73 Vector rz = graphicView->getRelativeZero();
74 graphicView->moveRelativeZero(Vector(0.0, 0.0));
75 graphicView->drawEntity(newEntity);
76 graphicView->moveRelativeZero(rz);
79 RS_DEBUG->print("ActionDimAngular::trigger:"
83 void ActionDimAngular::mouseMoveEvent(QMouseEvent * e)
85 RS_DEBUG->print("ActionDimAngular::mouseMoveEvent begin");
87 Vector mouse(graphicView->toGraphX(e->x()), graphicView->toGraphY(e->y()));
99 if (line1 && line2 && center.valid)
101 Vector mouse = snapPoint(e);
102 edata.definitionPoint4 = mouse;
104 // RS_DimAngular * d = new RS_DimAngular(preview, data, edata);
109 // preview->addEntity(d);
118 RS_DEBUG->print("ActionDimAngular::mouseMoveEvent end");
121 void ActionDimAngular::mouseReleaseEvent(QMouseEvent * e)
123 if (e->button() == Qt::LeftButton)
129 RS_Entity * en = catchEntity(e, RS2::ResolveAll);
132 && en->rtti() == RS2::EntityLine)
134 line1 = (RS_Line *)en;
142 RS_Entity * en = catchEntity(e, RS2::ResolveAll);
145 && en->rtti() == RS2::EntityLine)
147 line2 = (RS_Line *)en;
149 VectorSolutions sol =
150 RS_Information::getIntersectionLineLine(line1, line2);
152 if (sol.get(0).valid)
156 if (center.distanceTo(line1->getStartpoint())
157 < center.distanceTo(line1->getEndpoint()))
159 edata.definitionPoint1 = line1->getStartpoint();
160 edata.definitionPoint2 = line1->getEndpoint();
164 edata.definitionPoint1 = line1->getEndpoint();
165 edata.definitionPoint2 = line1->getStartpoint();
168 if (center.distanceTo(line2->getStartpoint())
169 < center.distanceTo(line2->getEndpoint()))
171 edata.definitionPoint3 = line2->getStartpoint();
172 data.definitionPoint = line2->getEndpoint();
176 edata.definitionPoint3 = line2->getEndpoint();
177 data.definitionPoint = line2->getStartpoint();
179 graphicView->moveRelativeZero(center);
188 Vector ce(snapPoint(e));
189 coordinateEvent(&ce);
194 else if (e->button() == Qt::RightButton)
199 init(getStatus() - 1);
203 void ActionDimAngular::coordinateEvent(Vector * e)
211 edata.definitionPoint4 = *e;
222 void ActionDimAngular::commandEvent(RS_CommandEvent * e)
224 QString c = e->getCommand().toLower();
226 if (checkCommand("help", c))
228 RS_DIALOGFACTORY->commandMessage(msgAvailableCommands()
229 + getAvailableCommands().join(", "));
233 // setting new text label:
234 if (getStatus() == SetText)
237 RS_DIALOGFACTORY->requestOptions(this, true, true);
238 graphicView->enableCoordinateInput();
239 setStatus(lastStatus);
244 if (checkCommand("text", c))
246 lastStatus = (Status)getStatus();
247 graphicView->disableCoordinateInput();
252 QStringList ActionDimAngular::getAvailableCommands()
261 cmd += command("text");
271 void ActionDimAngular::showOptions()
273 ActionInterface::showOptions();
275 RS_DIALOGFACTORY->requestOptions(this, true);
278 void ActionDimAngular::hideOptions()
280 ActionInterface::hideOptions();
282 RS_DIALOGFACTORY->requestOptions(this, false);
285 void ActionDimAngular::updateMouseButtonHints()
290 RS_DIALOGFACTORY->updateMouseWidget(tr("Select first line"),
295 RS_DIALOGFACTORY->updateMouseWidget(tr("Select second line"),
300 RS_DIALOGFACTORY->updateMouseWidget(
301 tr("Specify dimension arc line location"), tr("Cancel"));
305 RS_DIALOGFACTORY->updateMouseWidget(tr("Enter dimension text:"), "");
309 RS_DIALOGFACTORY->updateMouseWidget("", "");