X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Factions%2Frs_actiondimdiametric.cpp;h=ce4757055d41e86f7be761f56fd7062537aa8dea;hb=3f46c180da0806c9c263e6d87d0f1404632402da;hp=18b7aa5647c4fc2f9b42dafad165b93a6e5309d3;hpb=16ce54abf01ca3032e42a5bb11a4afcf9014dcca;p=architektonas diff --git a/src/actions/rs_actiondimdiametric.cpp b/src/actions/rs_actiondimdiametric.cpp index 18b7aa5..ce47570 100644 --- a/src/actions/rs_actiondimdiametric.cpp +++ b/src/actions/rs_actiondimdiametric.cpp @@ -1,334 +1,322 @@ -/**************************************************************************** -** $Id: rs_actiondimdiametric.cpp 1161 2004-12-09 23:10:09Z andrew $ -** -** Copyright (C) 2001-2003 RibbonSoft. All rights reserved. -** -** This file is part of the qcadlib Library project. -** -** This file may be distributed and/or modified under the terms of the -** GNU General Public License version 2 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. -** -** Licensees holding valid qcadlib Professional Edition licenses may use -** this file in accordance with the qcadlib Commercial License -** Agreement provided with the Software. -** -** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -** -** See http://www.ribbonsoft.com for further details. -** -** Contact info@ribbonsoft.com if any conditions of this licensing are -** not clear to you. -** -**********************************************************************/ +// rs_actiondimdiametric.cpp +// +// Part of the Architektonas Project +// Originally part of QCad Community Edition by Andrew Mustun +// Extensively rewritten and refactored by James L. Hammons +// (C) 2010 Underground Software +// +// JLH = James L. Hammons +// +// Who When What +// --- ---------- ----------------------------------------------------------- +// JLH 06/03/2010 Added this text. :-) +// #include "rs_actiondimdiametric.h" -#include "rs_creation.h" -#include "rs_snapper.h" +#include "rs_graphicview.h" #include "rs_dialogfactory.h" +#include "rs_preview.h" - - -RS_ActionDimDiametric::RS_ActionDimDiametric( - RS_EntityContainer& container, - RS_GraphicView& graphicView) - :RS_ActionDimension("Draw Diametric Dimensions", - container, graphicView) +RS_ActionDimDiametric::RS_ActionDimDiametric(RS_EntityContainer & container, RS_GraphicView & graphicView): RS_ActionDimension("Draw Diametric Dimensions", + container, graphicView) { reset(); } - -QAction * RS_ActionDimDiametric::createGUIAction(RS2::ActionType /*type*/, QObject * /*parent*/) +RS_ActionDimDiametric::~RS_ActionDimDiametric() { - QAction * action = new QAction(tr("&Diametric"), 0); -// QAction* action = new QAction(tr("Diametric"), tr("&Diametric"), -// QKeySequence(), NULL); - action->setStatusTip(tr("Diametric Dimension")); +} - return action; +/*virtual*/ RS2::ActionType RS_ActionDimDiametric::rtti() +{ + return RS2::ActionDimDiametric; } void RS_ActionDimDiametric::reset() { - RS_ActionDimension::reset(); - - edata = RS_DimDiametricData(Vector(false), - 0.0); - entity = NULL; - pos = Vector(false); - RS_DIALOGFACTORY->requestOptions(this, true, true); + RS_ActionDimension::reset(); + edata = RS_DimDiametricData(Vector(false), 0.0); + entity = NULL; + pos = Vector(false); + RS_DIALOGFACTORY->requestOptions(this, true, true); } - - void RS_ActionDimDiametric::trigger() { - RS_PreviewActionInterface::trigger(); - - preparePreview(); - if (entity!=NULL) { - RS_DimDiametric* newEntity = NULL; - - newEntity = new RS_DimDiametric(container, - data, - edata); - - newEntity->setLayerToActive(); - newEntity->setPenToActive(); - newEntity->update(); - container->addEntity(newEntity); - - // upd. undo list: - if (document!=NULL) { - document->startUndoCycle(); - document->addUndoable(newEntity); - document->endUndoCycle(); - } - deleteSnapper(); - Vector rz = graphicView->getRelativeZero(); - graphicView->moveRelativeZero(Vector(0.0,0.0)); - graphicView->drawEntity(newEntity); - graphicView->moveRelativeZero(rz); - - } else { - RS_DEBUG->print("RS_ActionDimDiametric::trigger:" - " Entity is NULL\n"); - } + RS_PreviewActionInterface::trigger(); + + preparePreview(); + + if (entity != NULL) + { + RS_DimDiametric * newEntity = NULL; + + newEntity = new RS_DimDiametric(container, + data, + edata); + + newEntity->setLayerToActive(); + newEntity->setPenToActive(); + newEntity->update(); + container->addEntity(newEntity); + + // upd. undo list: + if (document != NULL) + { + document->startUndoCycle(); + document->addUndoable(newEntity); + document->endUndoCycle(); + } + deleteSnapper(); + Vector rz = graphicView->getRelativeZero(); + graphicView->moveRelativeZero(Vector(0.0, 0.0)); + graphicView->drawEntity(newEntity); + graphicView->moveRelativeZero(rz); + } + else + RS_DEBUG->print("RS_ActionDimDiametric::trigger:" + " Entity is NULL\n"); } - - void RS_ActionDimDiametric::preparePreview() { - if (entity!=NULL) { - double radius=0.0; - Vector center = Vector(false); - if (entity->rtti()==RS2::EntityArc) { - radius = ((RS_Arc*)entity)->getRadius(); - center = ((RS_Arc*)entity)->getCenter(); - } else if (entity->rtti()==RS2::EntityCircle) { - radius = ((RS_Circle*)entity)->getRadius(); - center = ((RS_Circle*)entity)->getCenter(); - } - double angle = center.angleTo(pos); - - data.definitionPoint.setPolar(radius, angle+M_PI); - data.definitionPoint += center; - - edata.definitionPoint.setPolar(radius, angle); - edata.definitionPoint += center; - } + if (entity != NULL) + { + double radius = 0.0; + Vector center = Vector(false); + + if (entity->rtti() == RS2::EntityArc) + { + radius = ((RS_Arc *)entity)->getRadius(); + center = ((RS_Arc *)entity)->getCenter(); + } + else if (entity->rtti() == RS2::EntityCircle) + { + radius = ((RS_Circle *)entity)->getRadius(); + center = ((RS_Circle *)entity)->getCenter(); + } + double angle = center.angleTo(pos); + + data.definitionPoint.setPolar(radius, angle + M_PI); + data.definitionPoint += center; + + edata.definitionPoint.setPolar(radius, angle); + edata.definitionPoint += center; + } } - - -void RS_ActionDimDiametric::mouseMoveEvent(QMouseEvent* e) +void RS_ActionDimDiametric::mouseMoveEvent(QMouseEvent * e) { - RS_DEBUG->print("RS_ActionDimDiametric::mouseMoveEvent begin"); + RS_DEBUG->print("RS_ActionDimDiametric::mouseMoveEvent begin"); - Vector mouse(graphicView->toGraphX(e->x()), - graphicView->toGraphY(e->y())); + Vector mouse(graphicView->toGraphX(e->x()), graphicView->toGraphY(e->y())); - switch (getStatus()) { - case SetEntity: - entity = catchEntity(e, RS2::ResolveAll); - break; + switch (getStatus()) + { + case SetEntity: + entity = catchEntity(e, RS2::ResolveAll); + break; - case SetPos: - if (entity!=NULL) { - pos = snapPoint(e); + case SetPos: - preparePreview(); - RS_DimDiametric* d = new RS_DimDiametric(preview, data, edata); - d->update(); + if (entity != NULL) + { + pos = snapPoint(e); - deletePreview(); - clearPreview(); - preview->addEntity(d); - drawPreview(); - } - break; + preparePreview(); + RS_DimDiametric * d = new RS_DimDiametric(preview, data, edata); + d->update(); - default: - break; - } - - RS_DEBUG->print("RS_ActionDimDiametric::mouseMoveEvent end"); -} + deletePreview(); + clearPreview(); + preview->addEntity(d); + drawPreview(); + } + break; + default: + break; + } + RS_DEBUG->print("RS_ActionDimDiametric::mouseMoveEvent end"); +} -void RS_ActionDimDiametric::mouseReleaseEvent(QMouseEvent* e) +void RS_ActionDimDiametric::mouseReleaseEvent(QMouseEvent * e) { - - if (RS2::qtToRsButtonState(e->button())==RS2::LeftButton) { - switch (getStatus()) { - case SetEntity: { - RS_Entity* en = catchEntity(e, RS2::ResolveAll); - if (en!=NULL) { - if (en->rtti()==RS2::EntityArc || - en->rtti()==RS2::EntityCircle) { - - entity = en; - Vector center; - if (entity->rtti()==RS2::EntityArc) { - center = - ((RS_Arc*)entity)->getCenter(); - } else if (entity->rtti()==RS2::EntityCircle) { - center = - ((RS_Circle*)entity)->getCenter(); - } - graphicView->moveRelativeZero(center); - setStatus(SetPos); - } else { - RS_DIALOGFACTORY->commandMessage(tr("Not a circle " - "or arc entity")); - } - } - } - break; - - case SetPos: { - RS_CoordinateEvent ce(snapPoint(e)); - coordinateEvent(&ce); - } - break; - - default: - break; - } - } else if (RS2::qtToRsButtonState(e->button())==RS2::RightButton) { - deletePreview(); - deleteSnapper(); - clearPreview(); - init(getStatus()-1); - } - + if (e->button() == Qt::LeftButton) + { + switch (getStatus()) + { + case SetEntity: { + RS_Entity * en = catchEntity(e, RS2::ResolveAll); + + if (en != NULL) + { + if (en->rtti() == RS2::EntityArc + || en->rtti() == RS2::EntityCircle) + { + entity = en; + Vector center; + + if (entity->rtti() == RS2::EntityArc) + center = + ((RS_Arc *)entity)->getCenter(); + else if (entity->rtti() == RS2::EntityCircle) + center = + ((RS_Circle *)entity)->getCenter(); + graphicView->moveRelativeZero(center); + setStatus(SetPos); + } + else + RS_DIALOGFACTORY->commandMessage(tr("Not a circle " + "or arc entity")); + } + } + break; + + case SetPos: { + Vector ce(snapPoint(e)); + coordinateEvent(&ce); + } + break; + + default: + break; + } + } + else if (e->button() == Qt::RightButton) + { + deletePreview(); + deleteSnapper(); + clearPreview(); + init(getStatus() - 1); + } } - -void RS_ActionDimDiametric::coordinateEvent(RS_CoordinateEvent* e) +void RS_ActionDimDiametric::coordinateEvent(Vector * e) { - if (e==NULL) { - return; - } - - switch (getStatus()) { - case SetPos: - pos = e->getCoordinate(); - trigger(); - reset(); - setStatus(SetEntity); - break; - - default: - break; - } + if (e == NULL) + return; + + switch (getStatus()) + { + case SetPos: + pos = *e; + trigger(); + reset(); + setStatus(SetEntity); + break; + + default: + break; + } } - -void RS_ActionDimDiametric::commandEvent(RS_CommandEvent* e) +void RS_ActionDimDiametric::commandEvent(RS_CommandEvent * e) { - QString c = e->getCommand().toLower(); - - if (checkCommand("help", c)) { - RS_DIALOGFACTORY->commandMessage(msgAvailableCommands() - + getAvailableCommands().join(", ")); - return; - } - - // setting new text label: - if (getStatus()==SetText) { - setText(c); - RS_DIALOGFACTORY->requestOptions(this, true, true); - graphicView->enableCoordinateInput(); - setStatus(lastStatus); - return; - } - - // command: text - if (checkCommand("text", c)) { - lastStatus = (Status)getStatus(); - graphicView->disableCoordinateInput(); - setStatus(SetText); - } - - // setting angle - if (getStatus()==SetPos) { - bool ok; - double a = RS_Math::eval(c, &ok); - if (ok==true) { - pos.setPolar(1.0, RS_Math::deg2rad(a)); - pos += data.definitionPoint; - trigger(); - reset(); - setStatus(SetEntity); - } else { - RS_DIALOGFACTORY->commandMessage(tr("Not a valid expression")); - } - return; - } + QString c = e->getCommand().toLower(); + + if (checkCommand("help", c)) + { + RS_DIALOGFACTORY->commandMessage(msgAvailableCommands() + + getAvailableCommands().join(", ")); + return; + } + + // setting new text label: + if (getStatus() == SetText) + { + setText(c); + RS_DIALOGFACTORY->requestOptions(this, true, true); + graphicView->enableCoordinateInput(); + setStatus(lastStatus); + return; + } + + // command: text + if (checkCommand("text", c)) + { + lastStatus = (Status)getStatus(); + graphicView->disableCoordinateInput(); + setStatus(SetText); + } + + // setting angle + if (getStatus() == SetPos) + { + bool ok; + double a = RS_Math::eval(c, &ok); + + if (ok == true) + { + pos.setPolar(1.0, RS_Math::deg2rad(a)); + pos += data.definitionPoint; + trigger(); + reset(); + setStatus(SetEntity); + } + else + RS_DIALOGFACTORY->commandMessage(tr("Not a valid expression")); + return; + } } +QStringList RS_ActionDimDiametric::getAvailableCommands() +{ + QStringList cmd; + switch (getStatus()) + { + case SetEntity: + case SetPos: + cmd += command("text"); + break; -QStringList RS_ActionDimDiametric::getAvailableCommands() { - QStringList cmd; - - switch (getStatus()) { - case SetEntity: - case SetPos: - cmd += command("text"); - break; - - default: - break; - } + default: + break; + } - return cmd; + return cmd; } - -void RS_ActionDimDiametric::updateMouseButtonHints() { - switch (getStatus()) { - case SetEntity: - RS_DIALOGFACTORY->updateMouseWidget(tr("Select arc or circle entity"), - tr("Cancel")); - break; - case SetPos: - RS_DIALOGFACTORY->updateMouseWidget( - tr("Specify dimension line location"), tr("Cancel")); - break; - case SetText: - RS_DIALOGFACTORY->updateMouseWidget(tr("Enter dimension text:"), ""); - break; - default: - RS_DIALOGFACTORY->updateMouseWidget("", ""); - break; - } +void RS_ActionDimDiametric::updateMouseButtonHints() +{ + switch (getStatus()) + { + case SetEntity: + RS_DIALOGFACTORY->updateMouseWidget(tr("Select arc or circle entity"), + tr("Cancel")); + break; + + case SetPos: + RS_DIALOGFACTORY->updateMouseWidget( + tr("Specify dimension line location"), tr("Cancel")); + break; + + case SetText: + RS_DIALOGFACTORY->updateMouseWidget(tr("Enter dimension text:"), ""); + break; + + default: + RS_DIALOGFACTORY->updateMouseWidget("", ""); + break; + } } +void RS_ActionDimDiametric::showOptions() +{ + RS_ActionInterface::showOptions(); - -void RS_ActionDimDiametric::showOptions() { - RS_ActionInterface::showOptions(); - - RS_DIALOGFACTORY->requestOptions(this, true); + RS_DIALOGFACTORY->requestOptions(this, true); } +void RS_ActionDimDiametric::hideOptions() +{ + RS_ActionInterface::hideOptions(); - -void RS_ActionDimDiametric::hideOptions() { - RS_ActionInterface::hideOptions(); - - //RS_DIALOGFACTORY->requestDimDiametricOptions(edata, false); - RS_DIALOGFACTORY->requestOptions(this, false); + //RS_DIALOGFACTORY->requestDimDiametricOptions(edata, false); + RS_DIALOGFACTORY->requestOptions(this, false); } - - // EOF