From fcb423992b94ea87133c2b58fb597dd3260626e2 Mon Sep 17 00:00:00 2001 From: edi271 Date: Sat, 29 Jan 2022 16:14:29 +0100 Subject: [PATCH] New tool circle through 3 points --- src/Mod/TechDraw/Gui/CommandExtensionPack.cpp | 80 +++++++++++++++++ src/Mod/TechDraw/Gui/Resources/TechDraw.qrc | 1 + ...echDraw_ExtensionDrawCosmCircle3Points.svg | 90 +++++++++++++++++++ src/Mod/TechDraw/Gui/Workbench.cpp | 3 + 4 files changed, 174 insertions(+) create mode 100644 src/Mod/TechDraw/Gui/Resources/icons/TechDraw_ExtensionDrawCosmCircle3Points.svg diff --git a/src/Mod/TechDraw/Gui/CommandExtensionPack.cpp b/src/Mod/TechDraw/Gui/CommandExtensionPack.cpp index f09c9dfe29..1c3e22b81a 100644 --- a/src/Mod/TechDraw/Gui/CommandExtensionPack.cpp +++ b/src/Mod/TechDraw/Gui/CommandExtensionPack.cpp @@ -972,6 +972,70 @@ bool CmdTechDrawExtensionDrawCosmCircle::isActive(void) return (havePage && haveView); } +//=========================================================================== +// TechDraw_ExtensionDrawCosmCircle3Points +//=========================================================================== + +void execDrawCosmCircle3Points(Gui::Command* cmd) { + //draw a cosmetic circle through 3 points + std::vector selection; + TechDraw::DrawViewPart* objFeat; + if (!_checkSel(cmd, selection, objFeat, "TechDraw Cosmetic Circle 3 Points")) + return; + Gui::Command::openCommand(QT_TRANSLATE_NOOP("Command", "Cosmetic Circle 3 Points")); + const std::vector SubNames = selection[0].getSubNames(); + std::vector vertexPoints; + vertexPoints = _getVertexPoints(SubNames, objFeat); + if (vertexPoints.size() >= 3) + { + double scale = objFeat->getScale(); + Base::Vector3d circleCenter = _circleCenter(vertexPoints[0], + vertexPoints[1], + vertexPoints[2]); + float circleRadius = (vertexPoints[0] - circleCenter).Length(); + TechDraw::BaseGeomPtr theCircle = + std::make_shared(circleCenter / scale, circleRadius / scale); + std::string cicleTag = objFeat->addCosmeticEdge(theCircle); + TechDraw::CosmeticEdge* circleEdge = objFeat->getCosmeticEdge(cicleTag); + _setLineAttributes(circleEdge); + objFeat->refreshCEGeoms(); + objFeat->requestPaint(); + cmd->getSelection().clearSelection(); + Gui::Command::commitCommand(); + } +} + +DEF_STD_CMD_A(CmdTechDrawExtensionDrawCosmCircle3Points) + +CmdTechDrawExtensionDrawCosmCircle3Points::CmdTechDrawExtensionDrawCosmCircle3Points() + : Command("TechDraw_ExtensionDrawCosmCircle3Points") +{ + sAppModule = "TechDraw"; + sGroup = QT_TR_NOOP("TechDraw"); + sMenuText = QT_TR_NOOP("Add Cosmetic Circle 3 Points"); + sToolTipText = QT_TR_NOOP("Add a cosmetic circle based on three vertexes:
\ +- Specify the line attributes (optional)
\ +- Select 3 vertexes
\ +- Click this tool"); + sWhatsThis = "TechDraw_ExtensionDrawCosmCircle3Points"; + sStatusTip = sMenuText; + sPixmap = "TechDraw_ExtensionDrawCosmCircle3Points"; +} + +void CmdTechDrawExtensionDrawCosmCircle3Points::activated(int iMsg) +{ + Q_UNUSED(iMsg); + //Base::Console().Message("Cosmetic Circle 3 Points started\n"); + execDrawCosmCircle3Points(this); +} + +bool CmdTechDrawExtensionDrawCosmCircle3Points::isActive(void) +{ + bool havePage = DrawGuiUtil::needPage(this); + bool haveView = DrawGuiUtil::needView(this); + return (havePage && haveView); +} + //=========================================================================== // TechDraw_ExtensionDrawCirclesGroup //=========================================================================== @@ -1012,6 +1076,9 @@ void CmdTechDrawExtensionDrawCirclesGroup::activated(int iMsg) case 1: //draw cosmetic arc execDrawCosmArc(this); break; + case 2: //draw cosmetic circle 3 points + execDrawCosmCircle3Points(this); + break; default: Base::Console().Message("CMD::CVGrp - invalid iMsg: %d\n", iMsg); }; @@ -1031,6 +1098,10 @@ Gui::Action* CmdTechDrawExtensionDrawCirclesGroup::createAction(void) p2->setIcon(Gui::BitmapFactory().iconFromTheme("TechDraw_ExtensionDrawCosmArc")); p2->setObjectName(QString::fromLatin1("TechDraw_ExtensionDrawCosmArc")); p2->setWhatsThis(QString::fromLatin1("TechDraw_ExtensionDrawCosmArc")); + QAction* p3 = pcAction->addAction(QString()); + p3->setIcon(Gui::BitmapFactory().iconFromTheme("TechDraw_ExtensionDrawCosmCircle3Points")); + p3->setObjectName(QString::fromLatin1("TechDraw_ExtensionDrawCosmCircle3Points")); + p3->setWhatsThis(QString::fromLatin1("TechDraw_ExtensionDrawCosmCircle3Points")); _pcAction = pcAction; languageChange(); @@ -1070,6 +1141,14 @@ void CmdTechDrawExtensionDrawCirclesGroup::languageChange() - Select vertex 3 (end angle)
\ - Click this tool")); arc2->setStatusTip(arc2->text()); + QAction* arc3 = a[2]; + arc3->setText(QApplication::translate("CmdTechDrawExtensionDrawCosmCircle3Points", "Add Cosmetic Circle 3 Points")); + arc3->setToolTip(QApplication::translate("CmdTechDrawExtensionDrawCosmCircle3Points", +"Add a cosmetic circle based on three vertexes:
\ +- Specify the line attributes (optional)
\ +- Select three vertexes
\ +- Click this tool")); + arc3->setStatusTip(arc3->text()); } bool CmdTechDrawExtensionDrawCirclesGroup::isActive(void) @@ -1963,6 +2042,7 @@ void CreateTechDrawCommandsExtensions(void) rcCmdMgr.addCommand(new CmdTechDrawExtensionDrawCirclesGroup()); rcCmdMgr.addCommand(new CmdTechDrawExtensionDrawCosmCircle()); rcCmdMgr.addCommand(new CmdTechDrawExtensionDrawCosmArc()); + rcCmdMgr.addCommand(new CmdTechDrawExtensionDrawCosmCircle3Points()); rcCmdMgr.addCommand(new CmdTechDrawExtensionLinePPGroup()); rcCmdMgr.addCommand(new CmdTechDrawExtensionLineParallel()); rcCmdMgr.addCommand(new CmdTechDrawExtensionLinePerpendicular()); diff --git a/src/Mod/TechDraw/Gui/Resources/TechDraw.qrc b/src/Mod/TechDraw/Gui/Resources/TechDraw.qrc index b4726f09cf..a8cb1849e4 100644 --- a/src/Mod/TechDraw/Gui/Resources/TechDraw.qrc +++ b/src/Mod/TechDraw/Gui/Resources/TechDraw.qrc @@ -44,6 +44,7 @@ icons/TechDraw_ExtensionVertexAtIntersection.svg icons/TechDraw_ExtensionDrawCosmCircle.svg icons/TechDraw_ExtensionDrawCosmArc.svg + icons/TechDraw_ExtensionDrawCosmCircle3Points.svg icons/TechDraw_ExtensionLineParallel.svg icons/TechDraw_ExtensionLinePerpendicular.svg icons/TechDraw_ExtensionThreadHoleSide.svg diff --git a/src/Mod/TechDraw/Gui/Resources/icons/TechDraw_ExtensionDrawCosmCircle3Points.svg b/src/Mod/TechDraw/Gui/Resources/icons/TechDraw_ExtensionDrawCosmCircle3Points.svg new file mode 100644 index 0000000000..9f3bfe9ff9 --- /dev/null +++ b/src/Mod/TechDraw/Gui/Resources/icons/TechDraw_ExtensionDrawCosmCircle3Points.svg @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Mod/TechDraw/Gui/Workbench.cpp b/src/Mod/TechDraw/Gui/Workbench.cpp index bc1ae11ff6..4e8845d395 100644 --- a/src/Mod/TechDraw/Gui/Workbench.cpp +++ b/src/Mod/TechDraw/Gui/Workbench.cpp @@ -121,6 +121,7 @@ Gui::MenuItem* Workbench::setupMenuBar() const *toolcenter << "TechDraw_ExtensionVertexAtIntersection"; *toolcenter << "TechDraw_ExtensionDrawCosmCircle"; *toolcenter << "TechDraw_ExtensionDrawCosmArc"; + *toolcenter << "TechDraw_ExtensionDrawCosmCircle3Points"; *toolcenter << "TechDraw_ExtensionLineParallel"; *toolcenter << "TechDraw_ExtensionLinePerpendicular"; @@ -293,6 +294,7 @@ Gui::ToolBarItem* Workbench::setupToolBars() const *extcenter << "TechDraw_ExtensionDrawCirclesGroup"; // *extcenter << "TechDraw_ExtensionDrawCosmCircle"; // *extcenter << "TechDraw_ExtensionDrawCosmArc"; +// *extcenter << "TechDraw_ExtensionDrawCosmCircle3Points"; *extcenter << "TechDraw_ExtensionLinePPGroup"; // *extcenter << "TechDraw_ExtensionLineParallel"; // *extcenter << "TechDraw_ExtensionLinePerpendicular"; @@ -429,6 +431,7 @@ Gui::ToolBarItem* Workbench::setupCommandBars() const *extcenter << "TechDraw_ExtensionDrawCirclesGroup"; // *extcenter << "TechDraw_ExtensionDrawCosmCircle"; // *extcenter << "TechDraw_ExtensionDrawCosmArc"; +// *extcenter << "TechDraw_ExtensionDrawCosmCircle3Points"; *extcenter << "TechDraw_ExtensionLinePPGroup"; // *extcenter << "TechDraw_ExtensionLineParallel"; // *extcenter << "TechDraw_ExtensionLinePerpendicular";