From 3921a22e8b3003fb7519b4b57a7a0d99e299e75f Mon Sep 17 00:00:00 2001 From: wandererfan Date: Wed, 6 Nov 2019 14:52:16 -0500 Subject: [PATCH] [TD]CL removal --- src/Mod/TechDraw/App/DrawViewPart.cpp | 32 ++++++++++++++++++++++++ src/Mod/TechDraw/App/DrawViewPart.h | 2 ++ src/Mod/TechDraw/Gui/CommandAnnotate.cpp | 14 +++-------- 3 files changed, 37 insertions(+), 11 deletions(-) diff --git a/src/Mod/TechDraw/App/DrawViewPart.cpp b/src/Mod/TechDraw/App/DrawViewPart.cpp index bd9b287ec6..ca946d7791 100644 --- a/src/Mod/TechDraw/App/DrawViewPart.cpp +++ b/src/Mod/TechDraw/App/DrawViewPart.cpp @@ -1328,6 +1328,38 @@ void DrawViewPart::removeCenterLine(int idx) } } +void DrawViewPart::removeCenterLine(std::string delTag) +{ +// Base::Console().Message("DVP::removeCL(%s)\n", delTag.c_str()); + std::vector cLines = CenterLines.getValues(); + std::vector newLines; + for (auto& cl: cLines) { + if (cl->getTagAsString() != delTag) { + newLines.push_back(cl); + } + } + CenterLines.setValues(newLines); +} + +void DrawViewPart::removeCenterLine(std::vector delTags) +{ + std::vector cLines = CenterLines.getValues(); + std::vector newLines; + for (auto& cl: cLines) { + bool found = false; + for (auto& dt: delTags) { + if (cl->getTagAsString() == dt) { + found = true; //this cl is in delete list + break; + } + } + if (!found) { + newLines.push_back(cl); + } + } + CenterLines.setValues(newLines); +} + void DrawViewPart::replaceCenterLine(int idx, TechDraw::CenterLine* cl) { std::vector lines = CenterLines.getValues(); diff --git a/src/Mod/TechDraw/App/DrawViewPart.h b/src/Mod/TechDraw/App/DrawViewPart.h index c8ba11398e..fd5a15f614 100644 --- a/src/Mod/TechDraw/App/DrawViewPart.h +++ b/src/Mod/TechDraw/App/DrawViewPart.h @@ -205,6 +205,8 @@ public: virtual int addCenterLine(TechDraw::CenterLine*); virtual void removeCenterLine(TechDraw::CenterLine* cl); virtual void removeCenterLine(int idx); + void removeCenterLine(std::string delTag); + void removeCenterLine(std::vector delTags); TechDraw::CenterLine* getCenterLineByIndex(int idx) const; TechDraw::CenterLine* getCenterLineByGeom(int idx) const; void replaceCenterLine(int idx, TechDraw::CenterLine* cl); diff --git a/src/Mod/TechDraw/Gui/CommandAnnotate.cpp b/src/Mod/TechDraw/Gui/CommandAnnotate.cpp index dae71372a9..9a2f7ec513 100644 --- a/src/Mod/TechDraw/Gui/CommandAnnotate.cpp +++ b/src/Mod/TechDraw/Gui/CommandAnnotate.cpp @@ -1020,24 +1020,20 @@ void CmdTechDrawCosmeticEraser::activated(int iMsg) } std::vector cv2Delete; std::vector ce2Delete; - std::vector cl2Delete; + std::vector cl2Delete; for (auto& s: subNames) { int idx = TechDraw::DrawUtil::getIndexFromName(s); std::string geomType = TechDraw::DrawUtil::getGeomTypeFromName(s); if (geomType == "Edge") { TechDraw::BaseGeom* bg = objFeat->getGeomByIndex(idx); - Base::Console().Message("CMD::Eraser - have an edge: %s - bg: %X\n", s.c_str(), bg); if ((bg != nullptr) && (bg->cosmetic) ) { - Base::Console().Message("CMD::Eraser - cos: %d source: %d tag: %s\n", - bg->cosmetic, bg->sourceIndex(), bg->getCosmeticTag().c_str()); int source = bg->source(); - int sourceIndex = bg->sourceIndex(); std::string tag = bg->getCosmeticTag(); if (source == 1) { //this is a "CosmeticEdge" ce2Delete.push_back(tag); } else if (source == 2) { //this is a "CenterLine" - cl2Delete.push_back(sourceIndex); + cl2Delete.push_back(tag); } else { Base::Console().Message( "CMD::CosmeticEraserP - edge: %d is confused - source: %d\n",idx,source); @@ -1070,11 +1066,7 @@ void CmdTechDrawCosmeticEraser::activated(int iMsg) objFeat->removeCosmeticEdge(ce2Delete); } if (!cl2Delete.empty()) { - std::sort(cl2Delete.begin(), cl2Delete.end()); - auto itcl = cl2Delete.rbegin(); - for ( ; itcl != cl2Delete.rend(); itcl++) { - objFeat->removeCenterLine((*itcl)); - } + objFeat->removeCenterLine(cl2Delete); } objFeat->recomputeFeature(); }