diff --git a/Common/Context.h b/Common/Context.h index 3fca35bb10248d00e09ebf257b178563fdb4fc65..94425d4096b341b8f5677cb6039c17ed502e11ad 100644 --- a/Common/Context.h +++ b/Common/Context.h @@ -156,7 +156,8 @@ public : struct { double msh_file_version; int changed, draw; - int points, lines, surfaces_edges, surfaces_faces, volumes_edges, volumes_faces; + int points, lines, triangles, quadrangles, tetrahedra, hexahedra, prisms, pyramids; + int surfaces_edges, surfaces_faces, volumes_edges, volumes_faces; int points_num, lines_num, surfaces_num, volumes_num; double label_frequency; int point_type, line_type; // flat or 3D diff --git a/Common/DefaultOptions.h b/Common/DefaultOptions.h index 8de4cfeb6b73c3c4edf4e0286a57970384fbac5a..7043245c2a9bebe086cddead8429b7007203d88c 100644 --- a/Common/DefaultOptions.h +++ b/Common/DefaultOptions.h @@ -888,6 +888,9 @@ StringXNumber MeshOptions_Number[] = { { F|O, "Format" , opt_mesh_format , FORMAT_MSH , "Mesh output format (1=msh, 2=unv, 3=gref, 19=vrml)" }, + { F|O, "Hexahedra" , opt_mesh_hexahedra , 1. , + "Display mesh hexahedra?" }, + { F|O, "InitialOnly" , opt_mesh_initial_only , 0. , "Only contruct the n-dimensional initial mesh (no refinement)" }, { F|O, "Interactive" , opt_mesh_interactive , 0. , @@ -949,7 +952,13 @@ StringXNumber MeshOptions_Number[] = { "Display size of mesh vertices (in pixels)" }, { F|O, "PointType" , opt_mesh_point_type , 0. , "Display mesh vertices as solid color dots (0) or 3D spheres (1)" }, + { F|O, "Prisms" , opt_mesh_prisms , 1. , + "Display mesh prisms?" }, + { F|O, "Pyramids" , opt_mesh_pyramids , 1. , + "Display mesh pyramids?" }, + { F|O, "Quadrangles" , opt_mesh_quadrangles , 1. , + "Display mesh quadrangles?" }, { F|O, "Quality" , opt_mesh_quality , 1.0 , "Target quality for tetrahedral elements (currently only used by Tetgen)" }, { F|O, "QualityInf" , opt_mesh_quality_inf , 0.0 , @@ -993,6 +1002,10 @@ StringXNumber MeshOptions_Number[] = { "Display size of tangent vectors (in pixels)" }, { F|O, "TargetElmentSizeFact" , opt_mesh_target_elem_size_fact, 20. , "Target element size factor in the Remesher" }, + { F|O, "Tetrahedra" , opt_mesh_tetrahedra , 1. , + "Display mesh tetrahedra?" }, + { F|O, "Triangles" , opt_mesh_triangles , 1. , + "Display mesh triangles?" }, { F|O, "VolumeEdges" , opt_mesh_volumes_edges , 1. , "Display edges of volume mesh?" }, @@ -1278,7 +1291,7 @@ StringXNumber ViewOptions_Number[] = { { F|O, "ShowScale" , opt_view_show_scale , 1. , "Show value scale?" }, { F|O, "ShowTime" , opt_view_show_time , 3. , - "Time display mode (0=hidden, 1=value if multiple, 2=value always, 3=step if multiple, 4=step always)" }, + "Time display mode (0=hidden, 1=value if multi-step, 2=value always, 3=step if multi-step, 4=step always)" }, { F|O, "SmoothNormals" , opt_view_smooth_normals , 0. , "Smooth the normals?" }, { F|O, "Stipple" , opt_view_use_stipple , 0. , diff --git a/Common/Options.cpp b/Common/Options.cpp index 0e01efe94fe7dd8a2b395e8968882b85b70106ab..762b6417d3aad0a6ba4bb06f20ae256a52c0af35 100644 --- a/Common/Options.cpp +++ b/Common/Options.cpp @@ -1,4 +1,4 @@ -// $Id: Options.cpp,v 1.295 2006-08-17 06:28:30 geuzaine Exp $ +// $Id: Options.cpp,v 1.296 2006-08-17 17:08:50 geuzaine Exp $ // // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle // @@ -4197,6 +4197,108 @@ double opt_mesh_lines(OPT_ARGS_NUM) return CTX.mesh.lines; } +double opt_mesh_triangles(OPT_ARGS_NUM) +{ + if(action & GMSH_SET) { + if(CTX.mesh.triangles != val) CTX.mesh.changed = 1; + CTX.mesh.triangles = (int)val; + } +#if defined(HAVE_FLTK) + if(WID && (action & GMSH_GUI)){ + if(CTX.mesh.triangles) + ((Fl_Menu_Item*)WID->mesh_menu_butt->menu())[0].set(); + else + ((Fl_Menu_Item*)WID->mesh_menu_butt->menu())[0].clear(); + } +#endif + return CTX.mesh.triangles; +} + +double opt_mesh_quadrangles(OPT_ARGS_NUM) +{ + if(action & GMSH_SET) { + if(CTX.mesh.quadrangles != val) CTX.mesh.changed = 1; + CTX.mesh.quadrangles = (int)val; + } +#if defined(HAVE_FLTK) + if(WID && (action & GMSH_GUI)){ + if(CTX.mesh.quadrangles) + ((Fl_Menu_Item*)WID->mesh_menu_butt->menu())[1].set(); + else + ((Fl_Menu_Item*)WID->mesh_menu_butt->menu())[1].clear(); + } +#endif + return CTX.mesh.quadrangles; +} + +double opt_mesh_tetrahedra(OPT_ARGS_NUM) +{ + if(action & GMSH_SET) { + if(CTX.mesh.tetrahedra != val) CTX.mesh.changed = 1; + CTX.mesh.tetrahedra = (int)val; + } +#if defined(HAVE_FLTK) + if(WID && (action & GMSH_GUI)){ + if(CTX.mesh.tetrahedra) + ((Fl_Menu_Item*)WID->mesh_menu_butt->menu())[2].set(); + else + ((Fl_Menu_Item*)WID->mesh_menu_butt->menu())[2].clear(); + } +#endif + return CTX.mesh.tetrahedra; +} + +double opt_mesh_hexahedra(OPT_ARGS_NUM) +{ + if(action & GMSH_SET) { + if(CTX.mesh.hexahedra != val) CTX.mesh.changed = 1; + CTX.mesh.hexahedra = (int)val; + } +#if defined(HAVE_FLTK) + if(WID && (action & GMSH_GUI)){ + if(CTX.mesh.hexahedra) + ((Fl_Menu_Item*)WID->mesh_menu_butt->menu())[3].set(); + else + ((Fl_Menu_Item*)WID->mesh_menu_butt->menu())[3].clear(); + } +#endif + return CTX.mesh.hexahedra; +} + +double opt_mesh_prisms(OPT_ARGS_NUM) +{ + if(action & GMSH_SET) { + if(CTX.mesh.prisms != val) CTX.mesh.changed = 1; + CTX.mesh.prisms = (int)val; + } +#if defined(HAVE_FLTK) + if(WID && (action & GMSH_GUI)){ + if(CTX.mesh.prisms) + ((Fl_Menu_Item*)WID->mesh_menu_butt->menu())[4].set(); + else + ((Fl_Menu_Item*)WID->mesh_menu_butt->menu())[4].clear(); + } +#endif + return CTX.mesh.prisms; +} + +double opt_mesh_pyramids(OPT_ARGS_NUM) +{ + if(action & GMSH_SET) { + if(CTX.mesh.pyramids != val) CTX.mesh.changed = 1; + CTX.mesh.pyramids = (int)val; + } +#if defined(HAVE_FLTK) + if(WID && (action & GMSH_GUI)){ + if(CTX.mesh.pyramids) + ((Fl_Menu_Item*)WID->mesh_menu_butt->menu())[5].set(); + else + ((Fl_Menu_Item*)WID->mesh_menu_butt->menu())[5].clear(); + } +#endif + return CTX.mesh.pyramids; +} + double opt_mesh_surfaces_edges(OPT_ARGS_NUM) { if(action & GMSH_SET) { @@ -6087,8 +6189,12 @@ double opt_view_draw_points(OPT_ARGS_NUM) v->DrawPoints = (int)val; } #if defined(HAVE_FLTK) - if(_gui_action_valid(action, num)) - WID->view_butt[13]->value(v->DrawPoints); + if(_gui_action_valid(action, num)){ + if(v->DrawPoints) + ((Fl_Menu_Item*)WID->view_menu_butt[1]->menu())[0].set(); + else + ((Fl_Menu_Item*)WID->view_menu_butt[1]->menu())[0].clear(); + } #endif return v->DrawPoints; } @@ -6100,8 +6206,12 @@ double opt_view_draw_lines(OPT_ARGS_NUM) v->DrawLines = (int)val; } #if defined(HAVE_FLTK) - if(_gui_action_valid(action, num)) - WID->view_butt[14]->value(v->DrawLines); + if(_gui_action_valid(action, num)){ + if(v->DrawLines) + ((Fl_Menu_Item*)WID->view_menu_butt[1]->menu())[1].set(); + else + ((Fl_Menu_Item*)WID->view_menu_butt[1]->menu())[1].clear(); + } #endif return v->DrawLines; } @@ -6114,8 +6224,12 @@ double opt_view_draw_triangles(OPT_ARGS_NUM) v->Changed = 1; } #if defined(HAVE_FLTK) - if(_gui_action_valid(action, num)) - WID->view_butt[15]->value(v->DrawTriangles); + if(_gui_action_valid(action, num)){ + if(v->DrawTriangles) + ((Fl_Menu_Item*)WID->view_menu_butt[1]->menu())[2].set(); + else + ((Fl_Menu_Item*)WID->view_menu_butt[1]->menu())[2].clear(); + } #endif return v->DrawTriangles; } @@ -6128,8 +6242,12 @@ double opt_view_draw_quadrangles(OPT_ARGS_NUM) v->Changed = 1; } #if defined(HAVE_FLTK) - if(_gui_action_valid(action, num)) - WID->view_butt[16]->value(v->DrawQuadrangles); + if(_gui_action_valid(action, num)){ + if(v->DrawQuadrangles) + ((Fl_Menu_Item*)WID->view_menu_butt[1]->menu())[3].set(); + else + ((Fl_Menu_Item*)WID->view_menu_butt[1]->menu())[3].clear(); + } #endif return v->DrawQuadrangles; } @@ -6142,8 +6260,12 @@ double opt_view_draw_tetrahedra(OPT_ARGS_NUM) v->Changed = 1; } #if defined(HAVE_FLTK) - if(_gui_action_valid(action, num)) - WID->view_butt[17]->value(v->DrawTetrahedra); + if(_gui_action_valid(action, num)){ + if(v->DrawTetrahedra) + ((Fl_Menu_Item*)WID->view_menu_butt[1]->menu())[4].set(); + else + ((Fl_Menu_Item*)WID->view_menu_butt[1]->menu())[4].clear(); + } #endif return v->DrawTetrahedra; } @@ -6156,8 +6278,12 @@ double opt_view_draw_hexahedra(OPT_ARGS_NUM) v->Changed = 1; } #if defined(HAVE_FLTK) - if(_gui_action_valid(action, num)) - WID->view_butt[18]->value(v->DrawHexahedra); + if(_gui_action_valid(action, num)){ + if(v->DrawHexahedra) + ((Fl_Menu_Item*)WID->view_menu_butt[1]->menu())[5].set(); + else + ((Fl_Menu_Item*)WID->view_menu_butt[1]->menu())[5].clear(); + } #endif return v->DrawHexahedra; } @@ -6170,8 +6296,12 @@ double opt_view_draw_prisms(OPT_ARGS_NUM) v->Changed = 1; } #if defined(HAVE_FLTK) - if(_gui_action_valid(action, num)) - WID->view_butt[19]->value(v->DrawPrisms); + if(_gui_action_valid(action, num)){ + if(v->DrawPrisms) + ((Fl_Menu_Item*)WID->view_menu_butt[1]->menu())[6].set(); + else + ((Fl_Menu_Item*)WID->view_menu_butt[1]->menu())[6].clear(); + } #endif return v->DrawPrisms; } @@ -6184,8 +6314,12 @@ double opt_view_draw_pyramids(OPT_ARGS_NUM) v->Changed = 1; } #if defined(HAVE_FLTK) - if(_gui_action_valid(action, num)) - WID->view_butt[20]->value(v->DrawPyramids); + if(_gui_action_valid(action, num)){ + if(v->DrawPyramids) + ((Fl_Menu_Item*)WID->view_menu_butt[1]->menu())[7].set(); + else + ((Fl_Menu_Item*)WID->view_menu_butt[1]->menu())[7].clear(); + } #endif return v->DrawPyramids; } @@ -6198,8 +6332,12 @@ double opt_view_draw_scalars(OPT_ARGS_NUM) v->Changed = 1; } #if defined(HAVE_FLTK) - if(_gui_action_valid(action, num)) - WID->view_butt[21]->value(v->DrawScalars); + if(_gui_action_valid(action, num)){ + if(v->DrawScalars) + ((Fl_Menu_Item*)WID->view_menu_butt[0]->menu())[0].set(); + else + ((Fl_Menu_Item*)WID->view_menu_butt[0]->menu())[0].clear(); + } #endif return v->DrawScalars; } @@ -6212,8 +6350,12 @@ double opt_view_draw_vectors(OPT_ARGS_NUM) v->Changed = 1; } #if defined(HAVE_FLTK) - if(_gui_action_valid(action, num)) - WID->view_butt[22]->value(v->DrawVectors); + if(_gui_action_valid(action, num)){ + if(v->DrawVectors) + ((Fl_Menu_Item*)WID->view_menu_butt[0]->menu())[1].set(); + else + ((Fl_Menu_Item*)WID->view_menu_butt[0]->menu())[1].clear(); + } #endif return v->DrawVectors; } @@ -6226,8 +6368,12 @@ double opt_view_draw_tensors(OPT_ARGS_NUM) v->Changed = 1; } #if defined(HAVE_FLTK) - if(_gui_action_valid(action, num)) - WID->view_butt[23]->value(v->DrawTensors); + if(_gui_action_valid(action, num)){ + if(v->DrawTensors) + ((Fl_Menu_Item*)WID->view_menu_butt[0]->menu())[2].set(); + else + ((Fl_Menu_Item*)WID->view_menu_butt[0]->menu())[2].clear(); + } #endif return v->DrawTensors; } diff --git a/Common/Options.h b/Common/Options.h index 97d782bae550f812e963d70bc6b273c0b3b34b01..556d38fdf80463ebfc566ee2c56db72bfea9fb7d 100644 --- a/Common/Options.h +++ b/Common/Options.h @@ -420,6 +420,12 @@ double opt_mesh_radius_sup(OPT_ARGS_NUM); double opt_mesh_label_type(OPT_ARGS_NUM); double opt_mesh_points(OPT_ARGS_NUM); double opt_mesh_lines(OPT_ARGS_NUM); +double opt_mesh_triangles(OPT_ARGS_NUM); +double opt_mesh_quadrangles(OPT_ARGS_NUM); +double opt_mesh_tetrahedra(OPT_ARGS_NUM); +double opt_mesh_hexahedra(OPT_ARGS_NUM); +double opt_mesh_prisms(OPT_ARGS_NUM); +double opt_mesh_pyramids(OPT_ARGS_NUM); double opt_mesh_surfaces_edges(OPT_ARGS_NUM); double opt_mesh_surfaces_faces(OPT_ARGS_NUM); double opt_mesh_volumes_edges(OPT_ARGS_NUM); diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp index 5900d4637ab708c5a6abb4cf60231449d7abadb7..6bba4ba3b7b2c19d35404b709b953da3b565faf3 100644 --- a/Fltk/Callbacks.cpp +++ b/Fltk/Callbacks.cpp @@ -1,4 +1,4 @@ -// $Id: Callbacks.cpp,v 1.435 2006-08-17 05:18:50 geuzaine Exp $ +// $Id: Callbacks.cpp,v 1.436 2006-08-17 17:08:50 geuzaine Exp $ // // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle // @@ -1113,6 +1113,12 @@ void mesh_options_ok_cb(CALLBACK_ARGS) opt_mesh_constrained_bgmesh(0, GMSH_SET, WID->mesh_butt[5]->value()); opt_mesh_points(0, GMSH_SET, WID->mesh_butt[6]->value()); opt_mesh_lines(0, GMSH_SET, WID->mesh_butt[7]->value()); + opt_mesh_triangles(0, GMSH_SET, WID->mesh_menu_butt->menu()[0].value()); + opt_mesh_quadrangles(0, GMSH_SET, WID->mesh_menu_butt->menu()[1].value()); + opt_mesh_tetrahedra(0, GMSH_SET, WID->mesh_menu_butt->menu()[2].value()); + opt_mesh_hexahedra(0, GMSH_SET, WID->mesh_menu_butt->menu()[3].value()); + opt_mesh_prisms(0, GMSH_SET, WID->mesh_menu_butt->menu()[4].value()); + opt_mesh_pyramids(0, GMSH_SET, WID->mesh_menu_butt->menu()[5].value()); opt_mesh_surfaces_edges(0, GMSH_SET, WID->mesh_butt[8]->value()); opt_mesh_surfaces_faces(0, GMSH_SET, WID->mesh_butt[9]->value()); opt_mesh_volumes_edges(0, GMSH_SET, WID->mesh_butt[10]->value()); @@ -3928,50 +3934,50 @@ void view_options_ok_cb(CALLBACK_ARGS) if(force || (val != smooth_normals)) opt_view_smooth_normals(i, GMSH_SET, val); - val = WID->view_butt[13]->value(); + val = WID->view_menu_butt[0]->menu()[0].value() ? 1 : 0; + if(force || (val != draw_scalars)) + opt_view_draw_scalars(i, GMSH_SET, val); + + val = WID->view_menu_butt[0]->menu()[1].value() ? 1 : 0; + if(force || (val != draw_vectors)) + opt_view_draw_vectors(i, GMSH_SET, val); + + val = WID->view_menu_butt[0]->menu()[2].value() ? 1 : 0; + if(force || (val != draw_tensors)) + opt_view_draw_tensors(i, GMSH_SET, val); + + val = WID->view_menu_butt[1]->menu()[0].value() ? 1 : 0; if(force || (val != draw_points)) opt_view_draw_points(i, GMSH_SET, val); - val = WID->view_butt[14]->value(); + val = WID->view_menu_butt[1]->menu()[1].value() ? 1 : 0; if(force || (val != draw_lines)) opt_view_draw_lines(i, GMSH_SET, val); - val = WID->view_butt[15]->value(); + val = WID->view_menu_butt[1]->menu()[2].value() ? 1 : 0; if(force || (val != draw_triangles)) opt_view_draw_triangles(i, GMSH_SET, val); - val = WID->view_butt[16]->value(); + val = WID->view_menu_butt[1]->menu()[3].value() ? 1 : 0; if(force || (val != draw_quadrangles)) opt_view_draw_quadrangles(i, GMSH_SET, val); - val = WID->view_butt[17]->value(); + val = WID->view_menu_butt[1]->menu()[4].value() ? 1 : 0; if(force || (val != draw_tetrahedra)) opt_view_draw_tetrahedra(i, GMSH_SET, val); - val = WID->view_butt[18]->value(); + val = WID->view_menu_butt[1]->menu()[5].value() ? 1 : 0; if(force || (val != draw_hexahedra)) opt_view_draw_hexahedra(i, GMSH_SET, val); - val = WID->view_butt[19]->value(); + val = WID->view_menu_butt[1]->menu()[6].value() ? 1 : 0; if(force || (val != draw_prisms)) opt_view_draw_prisms(i, GMSH_SET, val); - val = WID->view_butt[20]->value(); + val = WID->view_menu_butt[1]->menu()[7].value() ? 1 : 0; if(force || (val != draw_pyramids)) opt_view_draw_pyramids(i, GMSH_SET, val); - val = WID->view_butt[21]->value(); - if(force || (val != draw_scalars)) - opt_view_draw_scalars(i, GMSH_SET, val); - - val = WID->view_butt[22]->value(); - if(force || (val != draw_vectors)) - opt_view_draw_vectors(i, GMSH_SET, val); - - val = WID->view_butt[23]->value(); - if(force || (val != draw_tensors)) - opt_view_draw_tensors(i, GMSH_SET, val); - val = WID->view_butt[6]->value(); if(force || (val != use_gen_raise)) opt_view_use_gen_raise(i, GMSH_SET, val); diff --git a/Fltk/GUI.cpp b/Fltk/GUI.cpp index d283908262293b4395c646618fc6198c79b2bd8e..22014cd87e83f711c6f9c99619a21e9cc693c580 100644 --- a/Fltk/GUI.cpp +++ b/Fltk/GUI.cpp @@ -1,4 +1,4 @@ -// $Id: GUI.cpp,v 1.522 2006-08-17 00:25:01 geuzaine Exp $ +// $Id: GUI.cpp,v 1.523 2006-08-17 17:08:51 geuzaine Exp $ // // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle // @@ -411,6 +411,7 @@ static Fl_Menu_Item menu_axes_mode[] = { {0} }; + #define NUM_FONTS 14 Fl_Menu_Item menu_font_names[] = { @@ -2418,16 +2419,29 @@ void GUI::create_option_window() mesh_value[12]->step(0.1); mesh_value[12]->align(FL_ALIGN_RIGHT); - mesh_value[4] = new Fl_Value_Input(L + 2 * WB, 2 * WB + 7 * BH, IW / 2, BH); + static Fl_Menu_Item menu_mesh_element_types[] = { + {"Triangles", 0, 0, 0, FL_MENU_TOGGLE}, + {"Quadrangles", 0, 0, 0, FL_MENU_TOGGLE}, + {"Tetrahedra", 0, 0, 0, FL_MENU_TOGGLE}, + {"Hexahedra", 0, 0, 0, FL_MENU_TOGGLE}, + {"Prisms", 0, 0, 0, FL_MENU_TOGGLE}, + {"Pyramids", 0, 0, 0, FL_MENU_TOGGLE}, + {0} + }; + + mesh_menu_butt = new Fl_Menu_Button(L + 2 * WB, 2 * WB + 7 * BH, IW, BH, "Elements"); + mesh_menu_butt->menu(menu_mesh_element_types); + + mesh_value[4] = new Fl_Value_Input(L + 2 * WB, 2 * WB + 8 * BH, IW / 4, BH); mesh_value[4]->minimum(0); mesh_value[4]->maximum(1); - mesh_value[4]->step(0.001); + mesh_value[4]->step(0.01); mesh_value[4]->align(FL_ALIGN_RIGHT); - mesh_value[5] = new Fl_Value_Input(L + 2 * WB + IW / 2, 2 * WB + 7 * BH, IW / 2, BH, "Element quality range"); + mesh_value[5] = new Fl_Value_Input(L + 2 * WB + IW / 4, 2 * WB + 8 * BH, IW / 4, BH); mesh_value[5]->minimum(0); mesh_value[5]->maximum(1); - mesh_value[5]->step(0.001); + mesh_value[5]->step(0.01); mesh_value[5]->align(FL_ALIGN_RIGHT); static Fl_Menu_Item menu_quality_type[] = { @@ -2436,14 +2450,14 @@ void GUI::create_option_window() {"Rho", 0, 0, 0}, {0} }; - mesh_choice[6] = new Fl_Choice(L + 2 * WB, 2 * WB + 8 * BH, IW, BH, "Element quality measure"); + mesh_choice[6] = new Fl_Choice(L + 2 * WB + IW / 2, 2 * WB + 8 * BH, IW/2, BH, "Quality range"); mesh_choice[6]->menu(menu_quality_type); mesh_choice[6]->align(FL_ALIGN_RIGHT); mesh_value[6] = new Fl_Value_Input(L + 2 * WB, 2 * WB + 9 * BH, IW / 2, BH); mesh_value[6]->align(FL_ALIGN_RIGHT); - mesh_value[7] = new Fl_Value_Input(L + 2 * WB + IW / 2, 2 * WB + 9 * BH, IW / 2, BH, "Element size range"); + mesh_value[7] = new Fl_Value_Input(L + 2 * WB + IW / 2, 2 * WB + 9 * BH, IW / 2, BH, "Size range"); mesh_value[7]->align(FL_ALIGN_RIGHT); mesh_value[8] = new Fl_Value_Input(L + 2 * WB, 2 * WB + 10 * BH, IW, BH, "Normals"); @@ -2817,87 +2831,50 @@ void GUI::create_option_window() Fl_Group *o = new Fl_Group(L + WB, WB + BH, width - 2 * WB, height - 2 * WB - BH, "Visibility"); o->hide(); - view_butt[13] = new Fl_Check_Button(L + 2 * WB, 2 * WB + 1 * BH, BW / 2 - WB, BH, "Points"); - view_butt[13]->type(FL_TOGGLE_BUTTON); - view_butt[13]->down_box(GMSH_TOGGLE_BOX); - view_butt[13]->selection_color(GMSH_TOGGLE_COLOR); - - view_butt[14] = new Fl_Check_Button(L + 2 * WB, 2 * WB + 2 * BH, BW / 2 - WB, BH, "Lines"); - view_butt[14]->type(FL_TOGGLE_BUTTON); - view_butt[14]->down_box(GMSH_TOGGLE_BOX); - view_butt[14]->selection_color(GMSH_TOGGLE_COLOR); - - view_butt[15] = new Fl_Check_Button(L + 2 * WB, 2 * WB + 3 * BH, BW / 2 - WB, BH, "Triangles"); - view_butt[15]->type(FL_TOGGLE_BUTTON); - view_butt[15]->down_box(GMSH_TOGGLE_BOX); - view_butt[15]->selection_color(GMSH_TOGGLE_COLOR); - - view_butt[16] = new Fl_Check_Button(L + 2 * WB, 2 * WB + 4 * BH, BW / 2 - WB, BH, "Quadrangles"); - view_butt[16]->type(FL_TOGGLE_BUTTON); - view_butt[16]->down_box(GMSH_TOGGLE_BOX); - view_butt[16]->selection_color(GMSH_TOGGLE_COLOR); - - view_butt[17] = new Fl_Check_Button(L + 2 * WB, 2 * WB + 5 * BH, BW / 2 - WB, BH, "Tetrahedra"); - view_butt[17]->type(FL_TOGGLE_BUTTON); - view_butt[17]->down_box(GMSH_TOGGLE_BOX); - view_butt[17]->selection_color(GMSH_TOGGLE_COLOR); - - view_butt[18] = new Fl_Check_Button(L + 2 * WB, 2 * WB + 6 * BH, BW / 2 - WB, BH, "Hexahedra"); - view_butt[18]->type(FL_TOGGLE_BUTTON); - view_butt[18]->down_box(GMSH_TOGGLE_BOX); - view_butt[18]->selection_color(GMSH_TOGGLE_COLOR); - - view_butt[19] = new Fl_Check_Button(L + 2 * WB, 2 * WB + 7 * BH, BW / 2 - WB, BH, "Prisms"); - view_butt[19]->type(FL_TOGGLE_BUTTON); - view_butt[19]->down_box(GMSH_TOGGLE_BOX); - view_butt[19]->selection_color(GMSH_TOGGLE_COLOR); - - view_butt[20] = new Fl_Check_Button(L + 2 * WB, 2 * WB + 8 * BH, BW / 2 - WB, BH, "Pyramids"); - view_butt[20]->type(FL_TOGGLE_BUTTON); - view_butt[20]->down_box(GMSH_TOGGLE_BOX); - view_butt[20]->selection_color(GMSH_TOGGLE_COLOR); - - view_value[0] = new Fl_Value_Input(L + 2 * WB, 2 * WB + 9 * BH, IW, BH, "Normals"); - view_value[0]->minimum(0); - view_value[0]->maximum(500); - view_value[0]->step(1); - view_value[0]->align(FL_ALIGN_RIGHT); - - view_value[1] = new Fl_Value_Input(L + 2 * WB, 2 * WB + 10 * BH, IW, BH, "Tangents"); - view_value[1]->minimum(0); - view_value[1]->maximum(500); - view_value[1]->step(1); - view_value[1]->align(FL_ALIGN_RIGHT); - - view_butt[4] = new Fl_Check_Button(L + width / 2, 2 * WB + 1 * BH, BW / 2 - WB, BH, "Scale"); + view_butt[4] = new Fl_Check_Button(L + 2 * WB, 2 * WB + 1 * BH, BW / 2 - WB, BH, "Show value scale"); view_butt[4]->tooltip("(Alt+i)"); view_butt[4]->type(FL_TOGGLE_BUTTON); view_butt[4]->down_box(GMSH_TOGGLE_BOX); view_butt[4]->selection_color(GMSH_TOGGLE_COLOR); static Fl_Menu_Item time_display[] = { - {"Hidden", 0, 0, 0}, - {"Value if multiple", 0, 0, 0}, - {"Value always", 0, 0, 0}, - {"Step if multiple", 0, 0, 0}, - {"Step always", 0, 0, 0}, + {"None", 0, 0, 0}, + {"Value if multi-step", 0, 0, 0}, + {"Value", 0, 0, 0}, + {"Step if multi-step", 0, 0, 0}, + {"Step", 0, 0, 0}, {0} }; - view_choice[12] = new Fl_Choice(L + width / 2, 2 * WB + 2 * BH, IW, BH, "Time"); + view_choice[12] = new Fl_Choice(L + 2 * WB, 2 * WB + 2 * BH, IW, BH, "Time display mode"); view_choice[12]->menu(time_display); view_choice[12]->align(FL_ALIGN_RIGHT); - view_butt[5] = new Fl_Check_Button(L + width / 2, 2 * WB + 3 * BH, BW / 2 - WB, BH, "Annotations"); + view_butt[5] = new Fl_Check_Button(L + 2 * WB, 2 * WB + 3 * BH, BW / 2 - WB, BH, "Show annotations"); view_butt[5]->tooltip("(Alt+n)"); view_butt[5]->type(FL_TOGGLE_BUTTON); view_butt[5]->down_box(GMSH_TOGGLE_BOX); view_butt[5]->selection_color(GMSH_TOGGLE_COLOR); - view_butt[10] = new Fl_Check_Button(L + width / 2, 2 * WB + 4 * BH, BW / 2 - WB, BH, "Element edges"); + view_butt[10] = new Fl_Check_Button(L + 2 * WB, 2 * WB + 4 * BH, BW / 2 - WB, BH, "Draw element outlines"); view_butt[10]->type(FL_TOGGLE_BUTTON); view_butt[10]->down_box(GMSH_TOGGLE_BOX); view_butt[10]->selection_color(GMSH_TOGGLE_COLOR); + static Fl_Menu_Item menu_view_element_types[] = { + {"Points", 0, 0, 0, FL_MENU_TOGGLE}, + {"Lines", 0, 0, 0, FL_MENU_TOGGLE}, + {"Triangles", 0, 0, 0, FL_MENU_TOGGLE}, + {"Quadrangles", 0, 0, 0, FL_MENU_TOGGLE}, + {"Tetrahedra", 0, 0, 0, FL_MENU_TOGGLE}, + {"Hexahedra", 0, 0, 0, FL_MENU_TOGGLE}, + {"Prisms", 0, 0, 0, FL_MENU_TOGGLE}, + {"Pyramids", 0, 0, 0, FL_MENU_TOGGLE}, + {0} + }; + + view_menu_butt[1] = new Fl_Menu_Button(L + 2 * WB, 2 * WB + 5 * BH, IW, BH, "Elements"); + view_menu_butt[1]->menu(menu_view_element_types); + static Fl_Menu_Item menu_boundary[] = { {"None", 0, 0, 0}, {"Dimension - 1", 0, 0, 0}, @@ -2905,25 +2882,33 @@ void GUI::create_option_window() {"Dimension - 3", 0, 0, 0}, {0} }; - view_choice[9] = new Fl_Choice(L + width / 2, 2 * WB + 5 * BH, IW, BH, "Boundary"); + view_choice[9] = new Fl_Choice(L + 2 * WB, 2 * WB + 6 * BH, IW, BH, "Element boundary mode"); view_choice[9]->menu(menu_boundary); view_choice[9]->align(FL_ALIGN_RIGHT); - view_butt[21] = new Fl_Check_Button(L + width / 2, 2 * WB + 6 * BH, BW / 2 - WB, BH, "Scalar values"); - view_butt[21]->type(FL_TOGGLE_BUTTON); - view_butt[21]->down_box(GMSH_TOGGLE_BOX); - view_butt[21]->selection_color(GMSH_TOGGLE_COLOR); + view_value[0] = new Fl_Value_Input(L + 2 * WB, 2 * WB + 7 * BH, IW, BH, "Normals"); + view_value[0]->minimum(0); + view_value[0]->maximum(500); + view_value[0]->step(1); + view_value[0]->align(FL_ALIGN_RIGHT); + + view_value[1] = new Fl_Value_Input(L + 2 * WB, 2 * WB + 8 * BH, IW, BH, "Tangents"); + view_value[1]->minimum(0); + view_value[1]->maximum(500); + view_value[1]->step(1); + view_value[1]->align(FL_ALIGN_RIGHT); + + static Fl_Menu_Item menu_view_field_types[] = { + {"Scalar", 0, 0, 0, FL_MENU_TOGGLE}, + {"Vector", 0, 0, 0, FL_MENU_TOGGLE}, + {"Tensor", 0, 0, 0, FL_MENU_TOGGLE}, + {0} + }; + + view_menu_butt[0] = new Fl_Menu_Button(L + 2 * WB, 2 * WB + 9 * BH, IW, BH, "Fields"); + view_menu_butt[0]->menu(menu_view_field_types); - view_butt[22] = new Fl_Check_Button(L + width / 2, 2 * WB + 7 * BH, BW / 2 - WB, BH, "Vector values"); - view_butt[22]->type(FL_TOGGLE_BUTTON); - view_butt[22]->down_box(GMSH_TOGGLE_BOX); - view_butt[22]->selection_color(GMSH_TOGGLE_COLOR); - view_butt[23] = new Fl_Check_Button(L + width / 2, 2 * WB + 8 * BH, BW / 2 - WB, BH, "Tensor values"); - view_butt[23]->type(FL_TOGGLE_BUTTON); - view_butt[23]->down_box(GMSH_TOGGLE_BOX); - view_butt[23]->selection_color(GMSH_TOGGLE_COLOR); - o->end(); } { diff --git a/Fltk/GUI.h b/Fltk/GUI.h index 017c7235c20e46751720ebc51e1f94ae07600ff9..d348860208c68d08964ba5a0fe11f7ea4305d440 100644 --- a/Fltk/GUI.h +++ b/Fltk/GUI.h @@ -24,6 +24,7 @@ #include <FL/Fl_Double_Window.H> #include <FL/Fl_Box.H> #include <FL/Fl_Menu_Bar.H> +#include <FL/Fl_Menu_Button.H> #include <FL/fl_draw.H> #include <FL/gl.h> #include <FL/Fl_Choice.H> @@ -185,6 +186,7 @@ public: Fl_Value_Input *mesh_value[50] ; Fl_Button *mesh_col[50] ; Fl_Choice *mesh_choice[20] ; + Fl_Menu_Button *mesh_menu_butt; // solver options Fl_Group *solver_group ; @@ -211,6 +213,7 @@ public: Fl_Button *view_col[50] ; Colorbar_Window *view_colorbar_window ; Fl_Return_Button *view_ok ; + Fl_Menu_Button *view_menu_butt[2]; // statistics window Fl_Window *stat_window ; diff --git a/Graphics/Mesh.cpp b/Graphics/Mesh.cpp index 2ade192c4f9fa9a4d57277c9b672e2569110e352..f3f036c77df130f1e167205d09dfbad001f6d18c 100644 --- a/Graphics/Mesh.cpp +++ b/Graphics/Mesh.cpp @@ -1,4 +1,4 @@ -// $Id: Mesh.cpp,v 1.175 2006-08-17 14:09:38 geuzaine Exp $ +// $Id: Mesh.cpp,v 1.176 2006-08-17 17:08:51 geuzaine Exp $ // // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle // @@ -581,8 +581,8 @@ class initMeshGFace { MRep *m = f->meshRep; m->resetArrays(); m->allElementsVisible = - areAllElementsVisible(f->triangles) && - areAllElementsVisible(f->quadrangles); + CTX.mesh.triangles && areAllElementsVisible(f->triangles) && + CTX.mesh.quadrangles && areAllElementsVisible(f->quadrangles); bool useEdges = CTX.mesh.surfaces_edges ? true : false; if(CTX.mesh.surfaces_faces /*this will change!*/ || @@ -604,8 +604,8 @@ class initMeshGFace { else if(CTX.mesh.surfaces_edges || CTX.mesh.surfaces_faces){ m->va_triangles = new VertexArray(3, f->triangles.size()); m->va_quads = new VertexArray(4, f->quadrangles.size()); - addElementsInArrays(f, f->triangles); - addElementsInArrays(f, f->quadrangles); + if(CTX.mesh.triangles) addElementsInArrays(f, f->triangles); + if(CTX.mesh.quadrangles) addElementsInArrays(f, f->quadrangles); } } }; @@ -642,27 +642,29 @@ class drawMeshGFace { } if(CTX.mesh.surfaces_num) { - drawElementLabels(f, f->triangles, CTX.mesh.surfaces_faces, CTX.color.mesh.line); - drawElementLabels(f, f->quadrangles, CTX.mesh.surfaces_faces, CTX.color.mesh.line); + if(CTX.mesh.triangles) + drawElementLabels(f, f->triangles, CTX.mesh.surfaces_faces, CTX.color.mesh.line); + if(CTX.mesh.quadrangles) + drawElementLabels(f, f->quadrangles, CTX.mesh.surfaces_faces, CTX.color.mesh.line); } if(CTX.mesh.points || CTX.mesh.points_num){ if(m->allElementsVisible) drawVerticesPerEntity(f); else{ - drawVerticesPerElement(f, f->triangles); - drawVerticesPerElement(f, f->quadrangles); + if(CTX.mesh.triangles) drawVerticesPerElement(f, f->triangles); + if(CTX.mesh.quadrangles) drawVerticesPerElement(f, f->quadrangles); } } if(CTX.mesh.normals) { - drawNormals(f->triangles); - drawNormals(f->quadrangles); + if(CTX.mesh.triangles) drawNormals(f->triangles); + if(CTX.mesh.quadrangles) drawNormals(f->quadrangles); } if(CTX.mesh.dual) { - drawBarycentricDual(f->triangles); - drawBarycentricDual(f->quadrangles); + if(CTX.mesh.triangles) drawBarycentricDual(f->triangles); + if(CTX.mesh.quadrangles) drawBarycentricDual(f->quadrangles); } if(CTX.render_mode == GMSH_SELECT) { @@ -685,10 +687,10 @@ class initMeshGRegion { MRep *m = r->meshRep; m->resetArrays(); m->allElementsVisible = - areAllElementsVisible(r->tetrahedra) && - areAllElementsVisible(r->hexahedra) && - areAllElementsVisible(r->prisms) && - areAllElementsVisible(r->pyramids); + CTX.mesh.tetrahedra && areAllElementsVisible(r->tetrahedra) && + CTX.mesh.hexahedra && areAllElementsVisible(r->hexahedra) && + CTX.mesh.prisms && areAllElementsVisible(r->prisms) && + CTX.mesh.pyramids && areAllElementsVisible(r->pyramids); bool useEdges = CTX.mesh.volumes_edges ? true : false; if(CTX.mesh.volumes_faces /*this will change!*/ || @@ -708,10 +710,10 @@ class initMeshGRegion { m->va_quads = new VertexArray(4, 6 * r->hexahedra.size() + 3 * r->prisms.size() + r->pyramids.size()); - addElementsInArrays(r, r->tetrahedra); - addElementsInArrays(r, r->hexahedra); - addElementsInArrays(r, r->prisms); - addElementsInArrays(r, r->pyramids); + if(CTX.mesh.tetrahedra) addElementsInArrays(r, r->tetrahedra); + if(CTX.mesh.hexahedra) addElementsInArrays(r, r->hexahedra); + if(CTX.mesh.prisms) addElementsInArrays(r, r->prisms); + if(CTX.mesh.pyramids) addElementsInArrays(r, r->pyramids); } } }; @@ -748,32 +750,36 @@ class drawMeshGRegion { } if(CTX.mesh.volumes_num) { - drawElementLabels(r, r->tetrahedra, CTX.mesh.volumes_faces || - CTX.mesh.surfaces_faces, CTX.color.mesh.line); - drawElementLabels(r, r->hexahedra, CTX.mesh.volumes_faces || - CTX.mesh.surfaces_faces, CTX.color.mesh.line); - drawElementLabels(r, r->prisms, CTX.mesh.volumes_faces || - CTX.mesh.surfaces_faces, CTX.color.mesh.line); - drawElementLabels(r, r->pyramids, CTX.mesh.volumes_faces || - CTX.mesh.surfaces_faces, CTX.color.mesh.line); + if(CTX.mesh.tetrahedra) + drawElementLabels(r, r->tetrahedra, CTX.mesh.volumes_faces || + CTX.mesh.surfaces_faces, CTX.color.mesh.line); + if(CTX.mesh.hexahedra) + drawElementLabels(r, r->hexahedra, CTX.mesh.volumes_faces || + CTX.mesh.surfaces_faces, CTX.color.mesh.line); + if(CTX.mesh.prisms) + drawElementLabels(r, r->prisms, CTX.mesh.volumes_faces || + CTX.mesh.surfaces_faces, CTX.color.mesh.line); + if(CTX.mesh.pyramids) + drawElementLabels(r, r->pyramids, CTX.mesh.volumes_faces || + CTX.mesh.surfaces_faces, CTX.color.mesh.line); } if(CTX.mesh.points || CTX.mesh.points_num){ if(m->allElementsVisible) drawVerticesPerEntity(r); else{ - drawVerticesPerElement(r, r->tetrahedra); - drawVerticesPerElement(r, r->hexahedra); - drawVerticesPerElement(r, r->prisms); - drawVerticesPerElement(r, r->pyramids); + if(CTX.mesh.tetrahedra) drawVerticesPerElement(r, r->tetrahedra); + if(CTX.mesh.hexahedra) drawVerticesPerElement(r, r->hexahedra); + if(CTX.mesh.prisms) drawVerticesPerElement(r, r->prisms); + if(CTX.mesh.pyramids) drawVerticesPerElement(r, r->pyramids); } } if(CTX.mesh.dual) { - drawBarycentricDual(r->tetrahedra); - drawBarycentricDual(r->hexahedra); - drawBarycentricDual(r->prisms); - drawBarycentricDual(r->pyramids); + if(CTX.mesh.tetrahedra) drawBarycentricDual(r->tetrahedra); + if(CTX.mesh.hexahedra) drawBarycentricDual(r->hexahedra); + if(CTX.mesh.prisms) drawBarycentricDual(r->prisms); + if(CTX.mesh.pyramids) drawBarycentricDual(r->pyramids); } if(CTX.render_mode == GMSH_SELECT) {