diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp index dae7aae2cf476d5260ceb28394f811fca31efba4..6a9a6c81152974f89432dc0e38dbbaf306a76d82 100644 --- a/Fltk/Callbacks.cpp +++ b/Fltk/Callbacks.cpp @@ -1,4 +1,4 @@ -// $Id: Callbacks.cpp,v 1.99 2001-12-04 16:42:42 geuzaine Exp $ +// $Id: Callbacks.cpp,v 1.100 2001-12-06 08:10:59 geuzaine Exp $ #include <sys/types.h> #include <signal.h> @@ -643,29 +643,8 @@ void opt_visibility_sort_cb(CALLBACK_ARGS){ } } -static int vnod, velm, vcur, vsur, vvol; -static void vis_nod(void *a, void *b){ (*(Vertex**)a)->Visible = vnod; } -static void vis_sim(void *a, void *b){ (*(Simplex**)a)->Visible = velm; } -static void vis_hex(void *a, void *b){ (*(Hexahedron**)a)->Visible = velm; } -static void vis_pri(void *a, void *b){ (*(Prism**)a)->Visible = velm; } -static void vis_pyr(void *a, void *b){ (*(Pyramid**)a)->Visible = velm; } -static void vis_cur(void *a, void *b){ (*(Curve**)a)->Visible = vcur; } -static void vis_sur(void *a, void *b){ (*(Surface**)a)->Visible = vsur; } -static void vis_vol(void *a, void *b){ (*(Volume**)a)->Visible = vvol; } - void opt_visibility_number_cb(CALLBACK_ARGS){ - static int allnod=1, allelm=1, allpnt=1, allcur=1, allsur=1, allvol=1; - int i, found, num, mode; - int type = WID->vis_input_mode->value(); - List_T *tmp; - Vertex vv,*v,**pv; - Curve *c; - Surface *s; - Volume *V; - Simplex SS, *S, **pS; - Hexahedron HH, *H, **pH; - Prism PP, *P, **pP; - Pyramid QQ, *Q, **pQ; + int pos, mode, type = WID->vis_input_mode->value(); char *str = (char*)((Fl_Input*)w)->value(); switch(WID->vis_browser_mode->value()){ @@ -674,139 +653,11 @@ void opt_visibility_number_cb(CALLBACK_ARGS){ default: mode = VIS_MESH; break; } - if (!strcmp(str,"all") || !strcmp(str,"*")){ - switch(type){ - case 0: //node - allnod = !allnod; - vnod = allnod ? VIS_MESH : 0; - Tree_Action(THEM->Vertices, vis_nod); - break; - case 1: //element - allelm = !allelm; - velm = allelm ? VIS_MESH : 0; - tmp = Tree2List(THEM->Curves); - for(i=0; i<List_Nbr(tmp); i++){ - List_Read(tmp, i, &c); - Tree_Action(c->Simplexes, vis_sim); - } - List_Delete(tmp); - tmp = Tree2List(THEM->Surfaces); - for(i=0; i<List_Nbr(tmp); i++){ - List_Read(tmp, i, &s); - Tree_Action(s->Simplexes, vis_sim); - } - List_Delete(tmp); - Tree_Action(THEM->Simplexes, vis_sim); - tmp = Tree2List(THEM->Volumes); - for(i=0; i<List_Nbr(tmp); i++){ - List_Read(tmp, i, &V); - Tree_Action(V->Hexahedra, vis_hex); - Tree_Action(V->Prisms, vis_pri); - Tree_Action(V->Pyramids, vis_pyr); - } - List_Delete(tmp); - break; - case 2: //point - allpnt = !allpnt; - vnod = allpnt ? VIS_MESH|VIS_GEOM : 0; - Tree_Action(THEM->Points, vis_nod); - break; - case 3: //curve - allcur = !allcur; - vcur = allcur ? VIS_MESH|VIS_GEOM : 0; - Tree_Action(THEM->Curves, vis_cur); - break; - case 4: //surface - allsur = !allsur; - vsur = allsur ? VIS_MESH|VIS_GEOM : 0; - Tree_Action(THEM->Surfaces, vis_sur); - break; - case 5: //volume - allvol= !allvol; - vvol = allvol ? VIS_MESH|VIS_GEOM : 0; - Tree_Action(THEM->Volumes, vis_vol); - break; - } - } - else{ - num = atoi(str); - - switch(type){ - case 0: //node - vv.Num = num; v = &vv; - if((pv = (Vertex**)Tree_PQuery(THEM->Vertices, &v))) - (*pv)->Visible = (*pv)->Visible ? 0 : VIS_MESH; - else - Msg(WARNING, "Unknown node %d (use '*' to hide/show all nodes)", num); - break; - case 1: //element - SS.Num = num; S = &SS; - HH.Num = num; H = &HH; - PP.Num = num; P = &PP; - QQ.Num = num; Q = &QQ; - found = 0; - tmp = Tree2List(THEM->Curves); - for(i=0; i<List_Nbr(tmp); i++){ - List_Read(tmp, i, &c); - if((pS = (Simplex**)Tree_PQuery(c->Simplexes, &S))){ - (*pS)->Visible = (*pS)->Visible ? 0 : VIS_MESH; found = 1; break; - } - } - List_Delete(tmp); - if(!found){ - tmp = Tree2List(THEM->Surfaces); - for(i=0; i<List_Nbr(tmp); i++){ - List_Read(tmp, i, &s); - if((pS = (Simplex**)Tree_PQuery(s->Simplexes, &S))){ - (*pS)->Visible = (*pS)->Visible ? 0 : VIS_MESH; found = 1; break; - } - } - List_Delete(tmp); - if(!found){ - if((pS = (Simplex**)Tree_PQuery(THEM->Simplexes, &S))){ - (*pS)->Visible = (*pS)->Visible ? 0 : VIS_MESH; - } - else{ - tmp = Tree2List(THEM->Volumes); - for(i=0; i<List_Nbr(tmp); i++){ - List_Read(tmp, i, &V); - if((pH = (Hexahedron**)Tree_PQuery(V->Hexahedra, &H))){ - (*pH)->Visible = (*pH)->Visible ? 0 : VIS_MESH; found = 1; break; - } - if((pP = (Prism**)Tree_PQuery(V->Prisms, &P))){ - (*pP)->Visible = (*pP)->Visible ? 0 : VIS_MESH; found = 1; break; - } - if((pQ = (Pyramid**)Tree_PQuery(V->Pyramids, &Q))){ - (*pQ)->Visible = (*pQ)->Visible ? 0 : VIS_MESH; found = 1; break; - } - } - List_Delete(tmp); - if(!found) - Msg(WARNING, "Unknown element %d (use '*' to hide/show all elements)", num); - } - } - } - break; - case 2: //point - if((v=FindPoint(num,THEM))) v->Visible = v->Visible ? 0 : VIS_GEOM|VIS_MESH ; - else Msg(WARNING, "Unknown point %d (use '*' to hide/show all points)", num); - break; - case 3: //curve - if((c=FindCurve(num,THEM))) c->Visible = c->Visible ? 0 : VIS_GEOM|VIS_MESH ; - else Msg(WARNING, "Unknown curve %d (use '*' to hide/show all curves)", num); - break; - case 4: //surface - if((s=FindSurface(num,THEM))) s->Visible = s->Visible ? 0 : VIS_GEOM|VIS_MESH ; - else Msg(WARNING, "Unknown surface %d (use '*' to hide/show all surfaces)", num); - break; - case 5: //volume - if((V=FindVolume(num,THEM))) V->Visible = V->Visible ? 0 : VIS_GEOM|VIS_MESH ; - else Msg(WARNING, "Unknown volume %d (use '*' to hide/show all volumes)", num); - break; - } - } - + SetVisibilityByNumber(str, type, mode); + pos = WID->vis_browser->position(); opt_visibility_cb(NULL,NULL); + WID->vis_browser->position(pos); + Draw(); } diff --git a/Fltk/GUI.cpp b/Fltk/GUI.cpp index cac7bdfef1f2db8833f675baac528e0c095c5ebb..f64080efacca18fd6d225a136a1d2d15cd171d92 100644 --- a/Fltk/GUI.cpp +++ b/Fltk/GUI.cpp @@ -1,4 +1,4 @@ -// $Id: GUI.cpp,v 1.140 2001-12-04 12:06:49 geuzaine Exp $ +// $Id: GUI.cpp,v 1.141 2001-12-06 08:10:59 geuzaine Exp $ // To make the interface as visually consistent as possible, please: // - use the IW, BB, BH, BW and WB values @@ -1956,7 +1956,7 @@ void GUI::create_visibility_window(){ return; } - static int cols[5] = {15,100,100,200,0}; + static int cols[5] = {15,95,95,180,0}; static Fl_Menu_Item type_table[] = { {"Elementary", 0, (Fl_Callback *)opt_visibility_cb}, {"Physical", 0, (Fl_Callback *)opt_visibility_cb}, @@ -2029,7 +2029,8 @@ void GUI::create_visibility_window(){ vis_browser->type(FL_MULTI_BROWSER); vis_browser->column_widths(cols); - vis_window->resizable(new Fl_Box(width-3*WB-2*BB-10,height-5*WB-2*BH-10, 10,10)); + vis_window->resizable(new Fl_Box(width-3*WB-2*BB-10,3*WB+2*BH+10, 10,10)); + vis_window->size_range(width, 5*BH+5*WB); vis_input = new Fl_Input(1*WB, height-2*WB-2*BH, brw/3, BH); vis_input->labelsize(CTX.fontsize); diff --git a/Graphics/Visibility.cpp b/Graphics/Visibility.cpp index 7b30a18b0879339c330f6c9d70824c747d2cd1df..f6cd64f9ebd273e56bae0ba410c03ba414ca0bf2 100644 --- a/Graphics/Visibility.cpp +++ b/Graphics/Visibility.cpp @@ -1,4 +1,4 @@ -// $Id: Visibility.cpp,v 1.1 2001-12-03 10:01:06 geuzaine Exp $ +// $Id: Visibility.cpp,v 1.2 2001-12-06 08:10:59 geuzaine Exp $ #include "Gmsh.h" #include "Geo.h" #include "CAD.h" @@ -387,3 +387,159 @@ void InitVisibilityThroughPhysical(){ VisibleThroughPhysical[i] = Tree_Create(sizeof(int),fcmp_absint); } } + +static int vnod, velm, vcur, vsur, vvol; +static void vis_nod(void *a, void *b){ (*(Vertex**)a)->Visible = vnod; } +static void vis_sim(void *a, void *b){ (*(Simplex**)a)->Visible = velm; } +static void vis_hex(void *a, void *b){ (*(Hexahedron**)a)->Visible = velm; } +static void vis_pri(void *a, void *b){ (*(Prism**)a)->Visible = velm; } +static void vis_pyr(void *a, void *b){ (*(Pyramid**)a)->Visible = velm; } +static void vis_cur(void *a, void *b){ (*(Curve**)a)->Visible = vcur; } +static void vis_sur(void *a, void *b){ (*(Surface**)a)->Visible = vsur; } +static void vis_vol(void *a, void *b){ (*(Volume**)a)->Visible = vvol; } + +void SetVisibilityByNumber(char *str, int type, int mode){ + static int allnod=1, allelm=1, allpnt=1, allcur=1, allsur=1, allvol=1; + int i, found, num; + List_T *tmp; + Vertex vv,*v,**pv; + Curve *c; + Surface *s; + Volume *V; + Simplex SS, *S, **pS; + Hexahedron HH, *H, **pH; + Prism PP, *P, **pP; + Pyramid QQ, *Q, **pQ; + + if (!strcmp(str,"all") || !strcmp(str,"*")){ + switch(type){ + case 0: //node + allnod = !allnod; + vnod = allnod ? VIS_MESH : 0; + Tree_Action(THEM->Vertices, vis_nod); + break; + case 1: //element + allelm = !allelm; + velm = allelm ? VIS_MESH : 0; + tmp = Tree2List(THEM->Curves); + for(i=0; i<List_Nbr(tmp); i++){ + List_Read(tmp, i, &c); + Tree_Action(c->Simplexes, vis_sim); + } + List_Delete(tmp); + tmp = Tree2List(THEM->Surfaces); + for(i=0; i<List_Nbr(tmp); i++){ + List_Read(tmp, i, &s); + Tree_Action(s->Simplexes, vis_sim); + } + List_Delete(tmp); + Tree_Action(THEM->Simplexes, vis_sim); + tmp = Tree2List(THEM->Volumes); + for(i=0; i<List_Nbr(tmp); i++){ + List_Read(tmp, i, &V); + Tree_Action(V->Hexahedra, vis_hex); + Tree_Action(V->Prisms, vis_pri); + Tree_Action(V->Pyramids, vis_pyr); + } + List_Delete(tmp); + break; + case 2: //point + allpnt = !allpnt; + vnod = allpnt ? VIS_MESH|VIS_GEOM : 0; + Tree_Action(THEM->Points, vis_nod); + break; + case 3: //curve + allcur = !allcur; + vcur = allcur ? VIS_MESH|VIS_GEOM : 0; + Tree_Action(THEM->Curves, vis_cur); + break; + case 4: //surface + allsur = !allsur; + vsur = allsur ? VIS_MESH|VIS_GEOM : 0; + Tree_Action(THEM->Surfaces, vis_sur); + break; + case 5: //volume + allvol= !allvol; + vvol = allvol ? VIS_MESH|VIS_GEOM : 0; + Tree_Action(THEM->Volumes, vis_vol); + break; + } + } + else{ + num = atoi(str); + + switch(type){ + case 0: //node + vv.Num = num; v = &vv; + if((pv = (Vertex**)Tree_PQuery(THEM->Vertices, &v))) + (*pv)->Visible = (*pv)->Visible ? 0 : VIS_MESH; + else + Msg(WARNING, "Unknown node %d (use '*' to hide/show all nodes)", num); + break; + case 1: //element + SS.Num = num; S = &SS; + HH.Num = num; H = &HH; + PP.Num = num; P = &PP; + QQ.Num = num; Q = &QQ; + found = 0; + tmp = Tree2List(THEM->Curves); + for(i=0; i<List_Nbr(tmp); i++){ + List_Read(tmp, i, &c); + if((pS = (Simplex**)Tree_PQuery(c->Simplexes, &S))){ + (*pS)->Visible = (*pS)->Visible ? 0 : VIS_MESH; found = 1; break; + } + } + List_Delete(tmp); + if(!found){ + tmp = Tree2List(THEM->Surfaces); + for(i=0; i<List_Nbr(tmp); i++){ + List_Read(tmp, i, &s); + if((pS = (Simplex**)Tree_PQuery(s->Simplexes, &S))){ + (*pS)->Visible = (*pS)->Visible ? 0 : VIS_MESH; found = 1; break; + } + } + List_Delete(tmp); + if(!found){ + if((pS = (Simplex**)Tree_PQuery(THEM->Simplexes, &S))){ + (*pS)->Visible = (*pS)->Visible ? 0 : VIS_MESH; + } + else{ + tmp = Tree2List(THEM->Volumes); + for(i=0; i<List_Nbr(tmp); i++){ + List_Read(tmp, i, &V); + if((pH = (Hexahedron**)Tree_PQuery(V->Hexahedra, &H))){ + (*pH)->Visible = (*pH)->Visible ? 0 : VIS_MESH; found = 1; break; + } + if((pP = (Prism**)Tree_PQuery(V->Prisms, &P))){ + (*pP)->Visible = (*pP)->Visible ? 0 : VIS_MESH; found = 1; break; + } + if((pQ = (Pyramid**)Tree_PQuery(V->Pyramids, &Q))){ + (*pQ)->Visible = (*pQ)->Visible ? 0 : VIS_MESH; found = 1; break; + } + } + List_Delete(tmp); + if(!found) + Msg(WARNING, "Unknown element %d (use '*' to hide/show all elements)", num); + } + } + } + break; + case 2: //point + if((v=FindPoint(num,THEM))) v->Visible = v->Visible ? 0 : VIS_GEOM|VIS_MESH ; + else Msg(WARNING, "Unknown point %d (use '*' to hide/show all points)", num); + break; + case 3: //curve + if((c=FindCurve(num,THEM))) c->Visible = c->Visible ? 0 : VIS_GEOM|VIS_MESH ; + else Msg(WARNING, "Unknown curve %d (use '*' to hide/show all curves)", num); + break; + case 4: //surface + if((s=FindSurface(num,THEM))) s->Visible = s->Visible ? 0 : VIS_GEOM|VIS_MESH ; + else Msg(WARNING, "Unknown surface %d (use '*' to hide/show all surfaces)", num); + break; + case 5: //volume + if((V=FindVolume(num,THEM))) V->Visible = V->Visible ? 0 : VIS_GEOM|VIS_MESH ; + else Msg(WARNING, "Unknown volume %d (use '*' to hide/show all volumes)", num); + break; + } + } +} diff --git a/Graphics/Visibility.h b/Graphics/Visibility.h index ad9b793b258eb58f0a403beb1a64a40edbd3f310..13be0205ba0d832cba5f907293de51920e4fbc20 100644 --- a/Graphics/Visibility.h +++ b/Graphics/Visibility.h @@ -31,5 +31,6 @@ void SetVisibilitySort(int sort); List_T* GetVisibilityList(int type); void ClearVisibilityList(int type); void InitVisibilityThroughPhysical(); +void SetVisibilityByNumber(char *str, int type, int mode); #endif diff --git a/Makefile b/Makefile index 75a0f76d988a6fea76493a1d973f9a7f4aa38d09..8e6e8aa3cb967251c8cde4673840bac1621b0968 100644 --- a/Makefile +++ b/Makefile @@ -1,8 +1,8 @@ -# $Id: Makefile,v 1.176 2001-12-05 09:54:25 geuzaine Exp $ +# $Id: Makefile,v 1.177 2001-12-06 08:10:59 geuzaine Exp $ GMSH_MAJOR_VERSION = 1 GMSH_MINOR_VERSION = 32 -GMSH_PATCH_VERSION = 0 +GMSH_PATCH_VERSION = 1 MAKE = make CXX = c++