diff --git a/Fltk/graphicWindow.cpp b/Fltk/graphicWindow.cpp index 48e9a0f7c7f64b21b5ab909f280a62d2d2d9488f..aa5b3d4a5e28f84838bee2733cf37f51a262ad6e 100644 --- a/Fltk/graphicWindow.cpp +++ b/Fltk/graphicWindow.cpp @@ -1313,30 +1313,42 @@ static void action_point_line_surface_volume(int action, const std::string &what drawContext::global()->draw(); } if(ib == 'r') { - // FIXME: TODO + std::vector<std::pair<int, int> >::iterator it; for(unsigned int i = 0; i < FlGui::instance()->selectedVertices.size(); i++){ - //tag = FlGui::instance()->selectedVertices[i]->tag(); - //index = List_ISearchSeq(List1, &tag, fcmp_int); - //if(index >= 0) List_PSuppress(List1, index); - //FlGui::instance()->selectedVertices[i]->setSelection(0); + std::pair<int, int> t(0, FlGui::instance()->selectedVertices[i]->tag()); + it = std::find(dimTags.begin(), dimTags.end(), t); + if(it != dimTags.end()){ + dimTags.erase(it); + GEntity *ge = GModel::current()->getEntityByTag(t.first, t.second); + if(ge) ge->setSelection(0); + } } for(unsigned int i = 0; i < FlGui::instance()->selectedEdges.size(); i++){ - //tag = FlGui::instance()->selectedEdges[i]->tag(); - //index = List_ISearchSeq(List1, &tag, fcmp_int); - //if(index >= 0) List_PSuppress(List1, index); - //FlGui::instance()->selectedEdges[i]->setSelection(0); + std::pair<int, int> t(1, FlGui::instance()->selectedEdges[i]->tag()); + it = std::find(dimTags.begin(), dimTags.end(), t); + if(it != dimTags.end()){ + dimTags.erase(it); + GEntity *ge = GModel::current()->getEntityByTag(t.first, t.second); + if(ge) ge->setSelection(0); + } } for(unsigned int i = 0; i < FlGui::instance()->selectedFaces.size(); i++){ - //tag = FlGui::instance()->selectedFaces[i]->tag(); - //index = List_ISearchSeq(List1, &tag, fcmp_int); - //if(index >= 0) List_PSuppress(List1, index); - //FlGui::instance()->selectedFaces[i]->setSelection(0); + std::pair<int, int> t(2, FlGui::instance()->selectedFaces[i]->tag()); + it = std::find(dimTags.begin(), dimTags.end(), t); + if(it != dimTags.end()){ + dimTags.erase(it); + GEntity *ge = GModel::current()->getEntityByTag(t.first, t.second); + if(ge) ge->setSelection(0); + } } for(unsigned int i = 0; i < FlGui::instance()->selectedRegions.size(); i++){ - //tag = FlGui::instance()->selectedRegions[i]->tag(); - //index = List_ISearchSeq(List1, &tag, fcmp_int); - //if(index >= 0) List_PSuppress(List1, index); - //FlGui::instance()->selectedRegions[i]->setSelection(0); + std::pair<int, int> t(3, FlGui::instance()->selectedRegions[i]->tag()); + it = std::find(dimTags.begin(), dimTags.end(), t); + if(it != dimTags.end()){ + dimTags.erase(it); + GEntity *ge = GModel::current()->getEntityByTag(t.first, t.second); + if(ge) ge->setSelection(0); + } } drawContext::global()->draw(); } @@ -1406,7 +1418,8 @@ static void action_point_line_surface_volume(int action, const std::string &what FlGui::instance()->transformContext->input[9]->value()); break; case 6: - delete_entities(GModel::current()->getFileName(), dimTags); + delete_entities(GModel::current()->getFileName(), dimTags, + FlGui::instance()->transformContext->butt[6]->value()); break; case 7: case 11: @@ -1586,7 +1599,7 @@ static void geometry_elementary_boolean_cb(Fl_Widget *w, void *data) } } if(ib == 'r') { - Msg::Warning("Entity de-selection not implemented yet in boolean operations"); + Msg::Warning("Entity de-selection not supported yet during boolean operation"); } if(ib == 'u') { if(selectObject && object.size()){ diff --git a/Geo/GeoStringInterface.cpp b/Geo/GeoStringInterface.cpp index 71ef6c8e87df9828facf4f765295b724c2e5409d..1323e1aab52f5821b72e26741ead253d1dac5794 100644 --- a/Geo/GeoStringInterface.cpp +++ b/Geo/GeoStringInterface.cpp @@ -675,9 +675,10 @@ void coherence(const std::string &fileName) } void delete_entities(const std::string &fileName, - const std::vector<std::pair<int, int> > &l) + const std::vector<std::pair<int, int> > &l, bool recursive) { std::ostringstream sstream; + if(recursive) sstream << "Recursive "; sstream << "Delete {\n " << dimTags2String(l) << "\n}"; add_infile(sstream.str(), fileName); } diff --git a/Geo/GeoStringInterface.h b/Geo/GeoStringInterface.h index c28573e9bd380d1c067d737757c141066b754bdd..9e41ceda06d2dbf9a6ccabbfd3060ce0b557e4d7 100644 --- a/Geo/GeoStringInterface.h +++ b/Geo/GeoStringInterface.h @@ -103,6 +103,7 @@ void apply_boolean(const std::string &fileName, const std::string &op, int deleteObject, int deleteTool); void coherence(const std::string &fileName); void delete_entities(const std::string &fileName, - const std::vector<std::pair<int, int> > &l); + const std::vector<std::pair<int, int> > &l, + bool recursive); #endif