diff --git a/Common/Visibility.cpp b/Common/Visibility.cpp index 0763fc20d176af399691aebdba48e27e8cdcd68e..14792f62f2d0fc488ce8f55d991cfeb36e5fe45c 100644 --- a/Common/Visibility.cpp +++ b/Common/Visibility.cpp @@ -1,4 +1,4 @@ -// $Id: Visibility.cpp,v 1.22 2006-11-29 03:11:18 geuzaine Exp $ +// $Id: Visibility.cpp,v 1.23 2006-11-29 16:11:26 geuzaine Exp $ // // Copyright (C) 1997-2007 C. Geuzaine, J.-F. Remacle // @@ -189,7 +189,8 @@ std::string VisibilityManager::getStringForGEO() return str; } -void VisibilityManager::setVisibilityByNumber(int type, int num, int all, bool val) +void VisibilityManager::setVisibilityByNumber(int type, int num, int all, char val, + bool recursive) { switch(type){ case 0: // nodes @@ -241,19 +242,19 @@ void VisibilityManager::setVisibilityByNumber(int type, int num, int all, bool v break; case 2: // point for(GModel::viter it = GMODEL->firstVertex(); it != GMODEL->lastVertex(); it++) - if(all || (*it)->tag() == num) (*it)->setVisibility(val); + if(all || (*it)->tag() == num) (*it)->setVisibility(val, recursive); break; case 3: // line for(GModel::eiter it = GMODEL->firstEdge(); it != GMODEL->lastEdge(); it++) - if(all || (*it)->tag() == num) (*it)->setVisibility(val); + if(all || (*it)->tag() == num) (*it)->setVisibility(val, recursive); break; case 4: // surface for(GModel::fiter it = GMODEL->firstFace(); it != GMODEL->lastFace(); it++) - if(all || (*it)->tag() == num) (*it)->setVisibility(val); + if(all || (*it)->tag() == num) (*it)->setVisibility(val, recursive); break; case 5: // volume for(GModel::riter it = GMODEL->firstRegion(); it != GMODEL->lastRegion(); it++) - if(all || (*it)->tag() == num) (*it)->setVisibility(val); + if(all || (*it)->tag() == num) (*it)->setVisibility(val, recursive); break; } } diff --git a/Common/Visibility.h b/Common/Visibility.h index 96bc0c958e7ee90a8ae4ccaf14d1e3335c53a759..9541b46c2f3406884f41c8d2c8c6e03ec964de52 100644 --- a/Common/Visibility.h +++ b/Common/Visibility.h @@ -136,7 +136,7 @@ class VisibilityManager { // set the visibility of one or all entites of a given type (0=node, // 1=element, 2=point, 3=line, 4=surface, 5=volume) - void setVisibilityByNumber(int type, int num, int all, bool val); + void setVisibilityByNumber(int type, int num, int all, char val, bool recursive=false); // get the tag of the nth entity in the manager int getTag(int n){ return _entities[n]->getTag(); } diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp index b0edde13d8d63ba31b1389f0b6cc44232a4fd52a..3b6b2f3916b90cd463d24988e41aed408797dba3 100644 --- a/Fltk/Callbacks.cpp +++ b/Fltk/Callbacks.cpp @@ -1,4 +1,4 @@ -// $Id: Callbacks.cpp,v 1.486 2006-11-29 04:50:42 geuzaine Exp $ +// $Id: Callbacks.cpp,v 1.487 2006-11-29 16:11:26 geuzaine Exp $ // // Copyright (C) 1997-2007 C. Geuzaine, J.-F. Remacle // @@ -2139,8 +2139,9 @@ void visibility_number_cb(CALLBACK_ARGS) char *str = (char *)WID->vis_input[type]->value(); int all = !strcmp(str, "all") || !strcmp(str, "*"); - int num = all ? 0 : atoi(str); - VisibilityManager::instance()->setVisibilityByNumber(type, num, all, val); + int num = all ? 0 : atoi(str); + int recursive = WID->vis_butt[0]->value(); + VisibilityManager::instance()->setVisibilityByNumber(type, num, all, val, recursive); int pos = WID->vis_browser->position(); visibility_cb(NULL, NULL); WID->vis_browser->position(pos); @@ -2159,18 +2160,22 @@ void visibility_hide_cb(CALLBACK_ARGS) else if(!strcmp(str, "points")){ CTX.pick_elements = 0; what = ENT_POINT; + opt_geometry_points(0, GMSH_SET | GMSH_GUI, 1); } else if(!strcmp(str, "lines")){ CTX.pick_elements = 0; what = ENT_LINE; + opt_geometry_lines(0, GMSH_SET | GMSH_GUI, 1); } else if(!strcmp(str, "surfaces")){ CTX.pick_elements = 0; what = ENT_SURFACE; + opt_geometry_surfaces(0, GMSH_SET | GMSH_GUI, 1); } else if(!strcmp(str, "volumes")){ CTX.pick_elements = 0; what = ENT_VOLUME; + opt_geometry_volumes(0, GMSH_SET | GMSH_GUI, 1); } else return; @@ -2181,6 +2186,8 @@ void visibility_hide_cb(CALLBACK_ARGS) std::vector<GRegion*> regions; std::vector<MElement*> elements; + int recursive = WID->vis_butt[0]->value(); + while(1) { CTX.mesh.changed = ENT_ALL; Draw(); @@ -2195,11 +2202,11 @@ void visibility_hide_cb(CALLBACK_ARGS) for(unsigned int i = 0; i < vertices.size(); i++) vertices[i]->setVisibility(0); for(unsigned int i = 0; i < edges.size(); i++) - edges[i]->setVisibility(0); + edges[i]->setVisibility(0, recursive); for(unsigned int i = 0; i < faces.size(); i++) - faces[i]->setVisibility(0); + faces[i]->setVisibility(0, recursive); for(unsigned int i = 0; i < regions.size(); i++) - regions[i]->setVisibility(0); + regions[i]->setVisibility(0, recursive); } int pos = WID->vis_browser->position(); visibility_cb(NULL, NULL);