[TD]Fix CosmeticEraser multiple item delete

This commit is contained in:
wandererfan
2019-07-22 20:57:45 -04:00
committed by WandererFan
parent b5464ccf4d
commit f046a0e657

View File

@@ -1073,6 +1073,9 @@ void CmdTechDrawCosmeticEraser::activated(int iMsg)
objFeat = static_cast<TechDraw::DrawViewPart*> ((*itSel).getObject());
SubNames = (*itSel).getSubNames();
}
std::vector<int> cv2Delete;
std::vector<int> ce2Delete;
std::vector<int> cl2Delete;
for (auto& s: SubNames) {
int idx = TechDraw::DrawUtil::getIndexFromName(s);
std::string geomType = TechDraw::DrawUtil::getGeomTypeFromName(s);
@@ -1083,24 +1086,54 @@ void CmdTechDrawCosmeticEraser::activated(int iMsg)
int source = bg->source();
int sourceIndex = bg->sourceIndex();
if (source == 1) { //this is a "CosmeticEdge"
objFeat->removeCosmeticEdge(sourceIndex);
ce2Delete.push_back(sourceIndex);
} else if (source == 2) { //this is a "CenterLine"
objFeat->removeCenterLine(sourceIndex);
cl2Delete.push_back(sourceIndex);
} else {
Base::Console().Message(
"CMD::CosmeticEraserP - edge: %d is confused - source: %d\n",idx,source);
}
}
} else if (geomType == "Vertex") {
TechDraw::CosmeticVertex* cv = objFeat->getCosmeticVertexByGeom(idx);
if (cv != nullptr) {
objFeat->removeCosmeticVertex(cv);
TechDraw::Vertex* tdv = objFeat->getProjVertexByIndex(idx);
if (tdv != nullptr) {
int delIndex = tdv->cosmeticLink;
if (!(delIndex < 0)) {
cv2Delete.push_back(delIndex);
} else {
Base::Console().Message("CMD::eraser - geom: %d has no cv\n", idx);
}
} else {
Base::Console().Message("CMD::eraser - geom: %d not found!\n", idx);
}
} else {
QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Wrong selection"),
QObject::tr("Unknown object type in selection"));
return;
}
}
// delete items in reverse order so as not to invalidate indices
if (!cv2Delete.empty()) {
std::sort(cv2Delete.begin(), cv2Delete.end());
auto it = cv2Delete.rbegin();
for ( ; it != cv2Delete.rend(); it++) {
objFeat->removeCosmeticVertex((*it));
}
}
if (!ce2Delete.empty()) {
std::sort(ce2Delete.begin(), ce2Delete.end());
auto itce = ce2Delete.rbegin();
for ( ; itce != ce2Delete.rend(); itce++) {
objFeat->removeCosmeticEdge((*itce));
}
}
if (!cl2Delete.empty()) {
std::sort(cl2Delete.begin(), cl2Delete.end());
auto itcl = cl2Delete.rbegin();
for ( ; itcl != cl2Delete.rend(); itcl++) {
objFeat->removeCenterLine((*itcl));
}
}
}
}