diff --git a/src/Mod/TechDraw/Gui/CommandAnnotate.cpp b/src/Mod/TechDraw/Gui/CommandAnnotate.cpp index 8f109c9b10..c0e3c0043e 100644 --- a/src/Mod/TechDraw/Gui/CommandAnnotate.cpp +++ b/src/Mod/TechDraw/Gui/CommandAnnotate.cpp @@ -594,8 +594,8 @@ CmdTechDrawCenterLine::CmdTechDrawCenterLine() { sAppModule = "TechDraw"; sGroup = QT_TR_NOOP("TechDraw"); - sMenuText = QT_TR_NOOP("Add a centerline to a Face"); - sToolTipText = QT_TR_NOOP("Add a centerline to a Face"); + sMenuText = QT_TR_NOOP("Add a centerline to a Face(s)"); + sToolTipText = QT_TR_NOOP("Add a centerline to a Face(s)"); sWhatsThis = "TechDraw_CenterLine"; sStatusTip = sToolTipText; sPixmap = "actions/techdraw-centerline"; @@ -643,7 +643,7 @@ void CmdTechDrawCenterLine::activated(int iMsg) } if (SubNames.empty()) { QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Selection Error"), - QObject::tr("You must select a Face for the center line.")); + QObject::tr("You must select a Face(s) for the center line.")); return; } diff --git a/src/Mod/TechDraw/Gui/TaskCenterLine.cpp b/src/Mod/TechDraw/Gui/TaskCenterLine.cpp index fedbb2afdc..d010b43ca8 100644 --- a/src/Mod/TechDraw/Gui/TaskCenterLine.cpp +++ b/src/Mod/TechDraw/Gui/TaskCenterLine.cpp @@ -228,8 +228,7 @@ void TaskCenterLine::createCenterLine(void) vertical = true; } m_extendBy = ui->qsbExtend->rawValue(); - //TODO: (if m_partFeat->getGeomTypeFromName(m_subNames.at(0)) == "Face") { - TechDraw::CosmeticEdge* ce = makeMidLine(m_subNames.at(0),vertical,m_extendBy); + TechDraw::CosmeticEdge* ce = calcEndPoints(m_subNames,vertical,m_extendBy); m_partFeat->addRandomEdge(ce); m_partFeat->requestPaint(); Gui::Command::updateActive(); @@ -288,22 +287,29 @@ void TaskCenterLine::enableTaskButtons(bool b) m_btnCancel->setEnabled(b); } -TechDraw::CosmeticEdge* TaskCenterLine::makeMidLine(std::string faceName, bool vert, double ext) +TechDraw::CosmeticEdge* TaskCenterLine::calcEndPoints(std::vector faceNames, bool vert, double ext) { -// Base::Console().Message("TCL::makeMidLine(%s, %d) \n",faceName.c_str(), vert); +// Base::Console().Message("TCL::calcEndPoints(%d, %d) \n",faceNames.size(), vert); TechDraw::CosmeticEdge* result = nullptr; - double scale = m_partFeat->getScale(); - Base::Vector3d p1, p2; - int idx = TechDraw::DrawUtil::getIndexFromName(faceName); - std::vector faceEdges = - m_partFeat->getFaceEdgesByIndex(idx); + Bnd_Box faceBox; faceBox.SetGap(0.0); - for (auto& fe: faceEdges) { - if (!fe->cosmetic) { - BRepBndLib::Add(fe->occEdge, faceBox); + + for (auto& fn: faceNames) { + if (TechDraw::DrawUtil::getGeomTypeFromName(fn) != "Face") { + continue; + } + int idx = TechDraw::DrawUtil::getIndexFromName(fn); + std::vector faceEdges = + m_partFeat->getFaceEdgesByIndex(idx); + for (auto& fe: faceEdges) { + if (!fe->cosmetic) { + BRepBndLib::Add(fe->occEdge, faceBox); + } } } + + double scale = m_partFeat->getScale(); double Xmin,Ymin,Zmin,Xmax,Ymax,Zmax; faceBox.Get(Xmin,Ymin,Zmin,Xmax,Ymax,Zmax); @@ -317,6 +323,7 @@ TechDraw::CosmeticEdge* TaskCenterLine::makeMidLine(std::string faceName, bool v Base::Vector3d bbxCenter(Xmid, Ymid, 0.0); + Base::Vector3d p1, p2; if (vert) { Base::Vector3d top(Xmid, Ymid - Yspan, 0.0); Base::Vector3d bottom(Xmid, Ymid + Yspan, 0.0); diff --git a/src/Mod/TechDraw/Gui/TaskCenterLine.h b/src/Mod/TechDraw/Gui/TaskCenterLine.h index ddd3a7ecd8..16abcbd174 100644 --- a/src/Mod/TechDraw/Gui/TaskCenterLine.h +++ b/src/Mod/TechDraw/Gui/TaskCenterLine.h @@ -108,7 +108,9 @@ protected: QGIView* findParentQGIV(); void updateCenterLine(void); void removeCenterLine(void); - TechDraw::CosmeticEdge* makeMidLine(std::string subName, bool vert, double ext); + TechDraw::CosmeticEdge* calcEndPoints(std::vector faceNames, + bool vert, + double ext); void saveState(void); void restoreState(void);