diff --git a/Common/Visibility.cpp b/Common/Visibility.cpp index e6bad0349546f1de570e1a76281c3470125b5c51..548421192700a1db81820ea63c0f6c6bce6ed161 100644 --- a/Common/Visibility.cpp +++ b/Common/Visibility.cpp @@ -1,4 +1,4 @@ -// $Id: Visibility.cpp,v 1.24 2006-11-29 20:40:46 geuzaine Exp $ +// $Id: Visibility.cpp,v 1.25 2006-11-30 01:06:07 geuzaine Exp $ // // Copyright (C) 1997-2007 C. Geuzaine, J.-F. Remacle // @@ -258,10 +258,19 @@ void VisibilityManager::setVisibilityByNumber(int type, int num, char val, bool if(all || (*it)->tag() == num) (*it)->setVisibility(val, recursive); break; case 6: // physical point + for(GModel::viter it = GMODEL->firstVertex(); it != GMODEL->lastVertex(); it++) + for(unsigned int i = 0; i < (*it)->physicals.size(); i++) + if (all || (*it)->physicals[i] == num) (*it)->setVisibility(val, recursive); break; case 7: // physical line + for(GModel::eiter it = GMODEL->firstEdge(); it != GMODEL->lastEdge(); it++) + for(unsigned int i = 0; i < (*it)->physicals.size(); i++) + if (all || (*it)->physicals[i] == num) (*it)->setVisibility(val, recursive); break; case 8: // physical surface + for(GModel::fiter it = GMODEL->firstFace(); it != GMODEL->lastFace(); it++) + for(unsigned int i = 0; i < (*it)->physicals.size(); i++) + if (all || (*it)->physicals[i] == num) (*it)->setVisibility(val, recursive); break; case 9: // physical volume for(GModel::riter it = GMODEL->firstRegion(); it != GMODEL->lastRegion(); it++) diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp index 14903e10a773e3d5c8c96717e1a6912ba0ad615c..f1719c11b8673a958ebbed1f54bcc77e42261d1e 100644 --- a/Fltk/Callbacks.cpp +++ b/Fltk/Callbacks.cpp @@ -1,4 +1,4 @@ -// $Id: Callbacks.cpp,v 1.488 2006-11-29 20:40:46 geuzaine Exp $ +// $Id: Callbacks.cpp,v 1.489 2006-11-30 01:06:07 geuzaine Exp $ // // Copyright (C) 1997-2007 C. Geuzaine, J.-F. Remacle // @@ -2163,7 +2163,7 @@ void visibility_number_cb(CALLBACK_ARGS) Draw(); } -void visibility_hide_cb(CALLBACK_ARGS) +void visibility_interactive_cb(CALLBACK_ARGS) { char *str = (char*)data; int what; @@ -2201,27 +2201,53 @@ 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(); Msg(ONSCREEN, "Select %s\n[Press 'q' to abort]", str); char ib = SelectEntity(what, vertices, edges, faces, regions, elements); if(ib == 'l') { + // type = 0 for elementary, 1 for physical and 2 for partitions + int type = WID->vis_type->value(); + if(type != 0 && type != 1) break; + int recursive = WID->vis_butt[0]->value(); if(CTX.pick_elements){ for(unsigned int i = 0; i < elements.size(); i++) elements[i]->setVisibility(0); } else{ - 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, recursive); - for(unsigned int i = 0; i < faces.size(); i++) - faces[i]->setVisibility(0, recursive); - for(unsigned int i = 0; i < regions.size(); i++) - regions[i]->setVisibility(0, recursive); + for(unsigned int i = 0; i < vertices.size(); i++){ + if(type == 0) // hide elementary entity + vertices[i]->setVisibility(0, recursive); + else // hide physical entity + for(unsigned int j = 0; j < vertices[i]->physicals.size(); j++) + VisibilityManager::instance()->setVisibilityByNumber + (6, vertices[i]->physicals[j], 0, recursive); + } + for(unsigned int i = 0; i < edges.size(); i++){ + if(type == 0) + edges[i]->setVisibility(0, recursive); + else + for(unsigned int j = 0; j < edges[i]->physicals.size(); j++) + VisibilityManager::instance()->setVisibilityByNumber + (7, edges[i]->physicals[j], 0, recursive); + } + for(unsigned int i = 0; i < faces.size(); i++){ + if(type == 0) + faces[i]->setVisibility(0, recursive); + else + for(unsigned int j = 0; j < faces[i]->physicals.size(); j++) + VisibilityManager::instance()->setVisibilityByNumber + (8, faces[i]->physicals[j], 0, recursive); + } + for(unsigned int i = 0; i < regions.size(); i++){ + if(type == 0) + regions[i]->setVisibility(0, recursive); + else + for(unsigned int j = 0; j < regions[i]->physicals.size(); j++) + VisibilityManager::instance()->setVisibilityByNumber + (9, regions[i]->physicals[j], 0, recursive); + } } int pos = WID->vis_browser->position(); visibility_cb(NULL, NULL); diff --git a/Fltk/Callbacks.h b/Fltk/Callbacks.h index 0b9a01233232a27edb1d4dad00eb02f0ec2aad0a..5abd6bbcc4d92cea2414c04ea93fd0b32ef88ecb 100644 --- a/Fltk/Callbacks.h +++ b/Fltk/Callbacks.h @@ -153,7 +153,7 @@ void message_save_cb(CALLBACK_ARGS); void visibility_cb(CALLBACK_ARGS); void visibility_sort_cb(CALLBACK_ARGS); void visibility_number_cb(CALLBACK_ARGS); -void visibility_hide_cb(CALLBACK_ARGS); +void visibility_interactive_cb(CALLBACK_ARGS); void visibility_ok_cb(CALLBACK_ARGS); void visibility_save_cb(CALLBACK_ARGS); void visibility_delete_cb(CALLBACK_ARGS); diff --git a/Fltk/GUI.cpp b/Fltk/GUI.cpp index e7768cca03cc2946917dd78a3056e90285a32faa..34da9e609d1275b03a5a8cfb89dca43f43bd6623 100644 --- a/Fltk/GUI.cpp +++ b/Fltk/GUI.cpp @@ -1,4 +1,4 @@ -// $Id: GUI.cpp,v 1.571 2006-11-29 20:40:46 geuzaine Exp $ +// $Id: GUI.cpp,v 1.572 2006-11-30 01:06:07 geuzaine Exp $ // // Copyright (C) 1997-2007 C. Geuzaine, J.-F. Remacle // @@ -4015,15 +4015,15 @@ void GUI::create_visibility_window() b2->align(FL_ALIGN_INSIDE|FL_ALIGN_LEFT); Fl_Button *butt1 = new Fl_Button(2*WB, 3 * WB + 3 * BH, IW, BH, "Elements"); - butt1->callback(visibility_hide_cb, (void *)"elements"); + butt1->callback(visibility_interactive_cb, (void *)"elements"); Fl_Button *butt2 = new Fl_Button(2*WB, 3 * WB + 4 * BH, IW, BH, "Points"); - butt2->callback(visibility_hide_cb, (void *)"points"); + butt2->callback(visibility_interactive_cb, (void *)"points"); Fl_Button *butt3 = new Fl_Button(2*WB, 3 * WB + 5 * BH, IW, BH, "Lines"); - butt3->callback(visibility_hide_cb, (void *)"lines"); + butt3->callback(visibility_interactive_cb, (void *)"lines"); Fl_Button *butt4 = new Fl_Button(2*WB, 3 * WB + 6 * BH, IW, BH, "Surfaces"); - butt4->callback(visibility_hide_cb, (void *)"surfaces"); + butt4->callback(visibility_interactive_cb, (void *)"surfaces"); Fl_Button *butt5 = new Fl_Button(2*WB, 3 * WB + 7 * BH, IW, BH, "Volumes"); - butt5->callback(visibility_hide_cb, (void *)"volumes"); + butt5->callback(visibility_interactive_cb, (void *)"volumes"); vis_group[2]->end(); }