[TD]CL removal

This commit is contained in:
wandererfan
2019-11-06 14:52:16 -05:00
committed by WandererFan
parent 5957b72573
commit 3921a22e8b
3 changed files with 37 additions and 11 deletions

View File

@@ -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<CenterLine*> cLines = CenterLines.getValues();
std::vector<CenterLine*> newLines;
for (auto& cl: cLines) {
if (cl->getTagAsString() != delTag) {
newLines.push_back(cl);
}
}
CenterLines.setValues(newLines);
}
void DrawViewPart::removeCenterLine(std::vector<std::string> delTags)
{
std::vector<CenterLine*> cLines = CenterLines.getValues();
std::vector<CenterLine*> 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<CenterLine*> lines = CenterLines.getValues();

View File

@@ -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<std::string> delTags);
TechDraw::CenterLine* getCenterLineByIndex(int idx) const;
TechDraw::CenterLine* getCenterLineByGeom(int idx) const;
void replaceCenterLine(int idx, TechDraw::CenterLine* cl);

View File

@@ -1020,24 +1020,20 @@ void CmdTechDrawCosmeticEraser::activated(int iMsg)
}
std::vector<std::string> cv2Delete;
std::vector<std::string> ce2Delete;
std::vector<int> cl2Delete;
std::vector<std::string> 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();
}