diff --git a/Common/CommandLine.cpp b/Common/CommandLine.cpp index c25ebcd5df75ade54f2f453d548b109386b6d3ab..0da979c5a6c851f07b2c1672d3119eb66586640d 100644 --- a/Common/CommandLine.cpp +++ b/Common/CommandLine.cpp @@ -125,116 +125,109 @@ std::vector<std::string> GetUsage(const std::string &name) return s; } -std::vector<std::string> GetShortcutsUsage() +std::vector<std::pair<std::string, std::string> > GetShortcutsUsage(const std::string &ctrl) { - // If you make changes in this routine, please also change the texinfo - // documentation (doc/texinfo/gmsh.texi) + std::string cc = ctrl; #if defined(__APPLE__) -# define CC(str) "Cmd+" str " " + if(cc.empty()) cc = "Cmd+"; #else -# define CC(str) "Ctrl+" str + if(cc.empty()) cc = "Ctrl+"; #endif - std::vector<std::string> s; - s.push_back(" Left arrow Go to previous time step"); - s.push_back(" Right arrow Go to next time step"); - s.push_back(" Up arrow Make previous view visible"); - s.push_back(" Down arrow Make next view visible"); - s.push_back(" 0 Reload project file"); - s.push_back(" 1 or F1 Mesh lines"); - s.push_back(" 2 or F2 Mesh surfaces"); - s.push_back(" 3 or F3 Mesh volumes"); - s.push_back(" Escape Cancel lasso zoom/selection, toggle mouse selection ON/OFF"); - s.push_back(" g Go to geometry module"); - s.push_back(" m Go to mesh module"); - s.push_back(" p Go to post-processing module"); - s.push_back(" s Go to solver module"); - s.push_back(" Shift+a Bring all windows to front"); - s.push_back(" Shift+g Show geometry options"); - s.push_back(" Shift+m Show mesh options"); - s.push_back(" Shift+o Show general options"); - s.push_back(" Shift+p Show post-processing options"); - s.push_back(" Shift+s Show solver options"); - s.push_back(" Shift+u Show post-processing view plugins"); - s.push_back(" Shift+w Show post-processing view options"); - s.push_back(" Shift+Escape Enable full mouse selection"); - s.push_back(" " CC("i") " Show statistics window"); - s.push_back(" " CC("d") " Attach/detach menu"); - s.push_back(" " CC("l") " Show message console"); + typedef std::pair<std::string, std::string> mp; + std::vector<mp> s; + s.push_back(mp("Left arrow", "Go to previous time step")); + s.push_back(mp("Right arrow", "Go to next time step")); + s.push_back(mp("Up arrow", "Make previous view visible")); + s.push_back(mp("Down arrow", "Make next view visible")); + s.push_back(mp("0", "Reload project file")); + s.push_back(mp("1 or F1", "Mesh lines")); + s.push_back(mp("2 or F2", "Mesh surfaces")); + s.push_back(mp("3 or F3", "Mesh volumes")); + s.push_back(mp("Escape", "Cancel lasso zoom/selection, toggle mouse selection ON/OFF")); + s.push_back(mp("g", "Go to geometry module")); + s.push_back(mp("m", "Go to mesh module")); + s.push_back(mp("p", "Go to post-processing module")); + s.push_back(mp("s", "Go to solver module")); + s.push_back(mp("Shift+a", "Bring all windows to front")); + s.push_back(mp("Shift+g", "Show geometry options")); + s.push_back(mp("Shift+m", "Show mesh options")); + s.push_back(mp("Shift+o", "Show general options")); + s.push_back(mp("Shift+p", "Show post-processing options")); + s.push_back(mp("Shift+s", "Show solver options")); + s.push_back(mp("Shift+u", "Show post-processing view plugins")); + s.push_back(mp("Shift+w", "Show post-processing view options")); + s.push_back(mp("Shift+Escape", "Enable full mouse selection")); + s.push_back(mp(cc + "i", "Show statistics window")); + s.push_back(mp(cc + "d", "Attach/detach menu")); + s.push_back(mp(cc + "l", "Show message console")); #if defined(__APPLE__) - s.push_back(" " CC("m") " Minimize window"); + s.push_back(mp(cc + "m", "Minimize window")); #endif - s.push_back(" " CC("n") " Create new project file"); - s.push_back(" " CC("o") " Open project file"); - s.push_back(" " CC("q") " Quit"); - s.push_back(" " CC("r") " Rename project file"); - s.push_back(" " CC("s") " Save file as"); - s.push_back(" Shift+" CC("c") " Show clipping plane window"); - s.push_back(" Shift+" CC("m") " Show manipulator window"); - s.push_back(" Shift+" CC("n") " Show option window"); - s.push_back(" Shift+" CC("o") " Merge file(s)"); - s.push_back(" Shift+" CC("s") " Save mesh in default format"); - s.push_back(" Shift+" CC("u") " Show plugin window"); - s.push_back(" Shift+" CC("v") " Show visibility window"); - s.push_back(" Alt+a Loop through axes modes"); - s.push_back(" Alt+b Hide/show bounding boxes"); - s.push_back(" Alt+c Loop through predefined color schemes"); - s.push_back(" Alt+e Hide/Show element outlines for visible post-pro views"); - s.push_back(" Alt+f Change redraw mode (fast/full)"); - s.push_back(" Alt+h Hide/show all post-processing views"); - s.push_back(" Alt+i Hide/show all post-processing view scales"); - s.push_back(" Alt+l Hide/show geometry lines"); - s.push_back(" Alt+m Toggle visibility of all mesh entities"); - s.push_back(" Alt+n Hide/show all post-processing view annotations"); - s.push_back(" Alt+o Change projection mode (orthographic/perspective)"); - s.push_back(" Alt+p Hide/show geometry points"); - s.push_back(" Alt+r Loop through range modes for visible post-pro views"); - s.push_back(" Alt+s Hide/show geometry surfaces"); - s.push_back(" Alt+t Loop through interval modes for visible post-pro views"); - s.push_back(" Alt+v Hide/show geometry volumes"); - s.push_back(" Alt+w Enable/disable all lighting"); - s.push_back(" Alt+x Set X view"); - s.push_back(" Alt+y Set Y view"); - s.push_back(" Alt+z Set Z view"); - s.push_back(" Alt+Shift+a Hide/show small axes"); - s.push_back(" Alt+Shift+b Hide/show mesh volume faces"); - s.push_back(" Alt+Shift+d Hide/show mesh surface faces"); - s.push_back(" Alt+Shift+l Hide/show mesh lines"); - s.push_back(" Alt+Shift+o Adjust projection parameters"); - s.push_back(" Alt+Shift+p Hide/show mesh points"); - s.push_back(" Alt+Shift+s Hide/show mesh surface edges"); - s.push_back(" Alt+Shift+v Hide/show mesh volume edges"); - s.push_back(" Alt+Shift+w Reverse all mesh normals"); - s.push_back(" Alt+Shift+x Set -X view"); - s.push_back(" Alt+Shift+y Set -Y view"); - s.push_back(" Alt+Shift+z Set -Z view"); + s.push_back(mp(cc + "n", "Create new project file")); + s.push_back(mp(cc + "o", "Open project file")); + s.push_back(mp(cc + "q", "Quit")); + s.push_back(mp(cc + "r", "Rename project file")); + s.push_back(mp(cc + "s", "Save file as")); + s.push_back(mp("Shift+" + cc + "c", "Show clipping plane window")); + s.push_back(mp("Shift+" + cc + "m", "Show manipulator window")); + s.push_back(mp("Shift+" + cc + "n", "Show option window")); + s.push_back(mp("Shift+" + cc + "o", "Merge file(s)")); + s.push_back(mp("Shift+" + cc + "s", "Save mesh in default format")); + s.push_back(mp("Shift+" + cc + "u", "Show plugin window")); + s.push_back(mp("Shift+" + cc + "v", "Show visibility window")); + s.push_back(mp("Alt+a", "Loop through axes modes")); + s.push_back(mp("Alt+b", "Hide/show bounding boxes")); + s.push_back(mp("Alt+c", "Loop through predefined color schemes")); + s.push_back(mp("Alt+e", "Hide/Show element outlines for visible post-pro views")); + s.push_back(mp("Alt+f", "Change redraw mode (fast/full)")); + s.push_back(mp("Alt+h", "Hide/show all post-processing views")); + s.push_back(mp("Alt+i", "Hide/show all post-processing view scales")); + s.push_back(mp("Alt+l", "Hide/show geometry lines")); + s.push_back(mp("Alt+m", "Toggle visibility of all mesh entities")); + s.push_back(mp("Alt+n", "Hide/show all post-processing view annotations")); + s.push_back(mp("Alt+o", "Change projection mode (orthographic/perspective)")); + s.push_back(mp("Alt+p", "Hide/show geometry points")); + s.push_back(mp("Alt+r", "Loop through range modes for visible post-pro views")); + s.push_back(mp("Alt+s", "Hide/show geometry surfaces")); + s.push_back(mp("Alt+t", "Loop through interval modes for visible post-pro views")); + s.push_back(mp("Alt+v", "Hide/show geometry volumes")); + s.push_back(mp("Alt+w", "Enable/disable all lighting")); + s.push_back(mp("Alt+x", "Set X view")); + s.push_back(mp("Alt+y", "Set Y view")); + s.push_back(mp("Alt+z", "Set Z view")); + s.push_back(mp("Alt+Shift+a", "Hide/show small axes")); + s.push_back(mp("Alt+Shift+b", "Hide/show mesh volume faces")); + s.push_back(mp("Alt+Shift+d", "Hide/show mesh surface faces")); + s.push_back(mp("Alt+Shift+l", "Hide/show mesh lines")); + s.push_back(mp("Alt+Shift+o", "Adjust projection parameters")); + s.push_back(mp("Alt+Shift+p", "Hide/show mesh points")); + s.push_back(mp("Alt+Shift+s", "Hide/show mesh surface edges")); + s.push_back(mp("Alt+Shift+v", "Hide/show mesh volume edges")); + s.push_back(mp("Alt+Shift+w", "Reverse all mesh normals")); + s.push_back(mp("Alt+Shift+x", "Set -X view")); + s.push_back(mp("Alt+Shift+y", "Set -Y view")); + s.push_back(mp("Alt+Shift+z", "Set -Z view")); return s; -#undef CC } -std::vector<std::string> GetMouseUsage() +std::vector<std::pair<std::string, std::string> > GetMouseUsage() { - // If you make changes in this routine, please also change the texinfo - // documentation (doc/texinfo/gmsh.texi) - std::vector<std::string> s; - s.push_back(" Move - Highlight the entity under the mouse pointer"); - s.push_back(" and display its properties"); - s.push_back(" - Resize a lasso zoom or a lasso (un)selection"); - s.push_back(" Left button - Rotate"); - s.push_back(" - Select an entity"); - s.push_back(" - Accept a lasso zoom or a lasso selection"); - s.push_back(" Ctrl+Left button Start a lasso zoom or a lasso (un)selection"); - s.push_back(" Middle button - Zoom"); - s.push_back(" - Unselect an entity"); - s.push_back(" - Accept a lasso zoom or a lasso unselection"); - s.push_back(" Ctrl+Middle button Orthogonalize display"); - s.push_back(" Right button - Pan"); - s.push_back(" - Cancel a lasso zoom or a lasso (un)selection"); - s.push_back(" - Pop-up menu on post-processing view button"); - s.push_back(" Ctrl+Right button Reset to default viewpoint"); - s.push_back(" "); - s.push_back(" For a 2 button mouse, Middle button = Shift+Left button"); - s.push_back(" For a 1 button mouse, Middle button = Shift+Left button, " - "Right button = Alt+Left button"); + typedef std::pair<std::string, std::string> mp; + std::vector<mp> s; + s.push_back(mp("Move", "- Highlight the entity under the mouse pointer and display its properties")); + s.push_back(mp("", "- Resize a lasso zoom or a lasso (un)selection")); + s.push_back(mp("Left button", "- Rotate")); + s.push_back(mp("", "- Select an entity")); + s.push_back(mp("", "- Accept a lasso zoom or a lasso selection")); + s.push_back(mp("Ctrl+Left button", "Start a lasso zoom or a lasso (un)selection")); + s.push_back(mp("Middle button", "- Zoom")); + s.push_back(mp("", "- Unselect an entity")); + s.push_back(mp("", "- Accept a lasso zoom or a lasso unselection")); + s.push_back(mp("Ctrl+Middle button", "Orthogonalize display")); + s.push_back(mp("Right button", "- Pan")); + s.push_back(mp("", "- Cancel a lasso zoom or a lasso (un)selection")); + s.push_back(mp("", "- Pop-up menu on post-processing view button")); + s.push_back(mp("Ctrl+Right button", "Reset to default viewpoint")); return s; } diff --git a/Common/CommandLine.h b/Common/CommandLine.h index 89fcf3f22ee4c2ae8c38fafa0b62228a8a8feb84..d739e2a92b4299df2dd2bfc9edcb00a2772a57c4 100644 --- a/Common/CommandLine.h +++ b/Common/CommandLine.h @@ -21,8 +21,8 @@ const char *GetGmshShortLicense(); const char *GetGmshBuildOptions(); std::vector<std::string> GetUsage(const std::string &name); -std::vector<std::string> GetShortcutsUsage(); -std::vector<std::string> GetMouseUsage(); +std::vector<std::pair<std::string, std::string> > GetShortcutsUsage(const std::string &ctrl=""); +std::vector<std::pair<std::string, std::string> > GetMouseUsage(); void PrintUsage(const std::string &name); void GetOptions(int argc, char *argv[]); diff --git a/Common/Options.cpp b/Common/Options.cpp index 8b597cb5654c66893b331c1aae83373c5e67f77f..7d1ef4159118f9f74a019db313079a074f33037b 100644 --- a/Common/Options.cpp +++ b/Common/Options.cpp @@ -14,6 +14,7 @@ #include "Context.h" #include "Options.h" #include "Colors.h" +#include "CommandLine.h" #include "DefaultOptions.h" #if defined(HAVE_MESH) @@ -688,185 +689,219 @@ void PrintOptionsDoc() "@c Do not edit by hand!\n" "@c\n\n"; - FILE *file = fopen("opt_general.texi", "w"); - if(!file) { - Msg::Error("Unable to open file 'opt_general.texi'"); - return; - } - fprintf(file, "%s@ftable @code\n", warn); - PrintStringOptionsDoc(GeneralOptions_String, "General.", file); - PrintNumberOptionsDoc(GeneralOptions_Number, "General.", file); - PrintColorOptionsDoc(GeneralOptions_Color, "General.", file); - fprintf(file, "@end ftable\n"); - fclose(file); - - file = fopen("opt_print.texi", "w"); - if(!file) { - Msg::Error("Unable to open file 'opt_print.texi'"); - return; - } - fprintf(file, "%s@ftable @code\n", warn); - PrintStringOptionsDoc(PrintOptions_String, "Print.", file); - PrintNumberOptionsDoc(PrintOptions_Number, "Print.", file); - PrintColorOptionsDoc(PrintOptions_Color, "Print.", file); - fprintf(file, "@end ftable\n"); - fclose(file); - - file = fopen("opt_geometry.texi", "w"); - if(!file) { - Msg::Error("Unable to open file 'opt_geometry.texi'"); - return; - } - fprintf(file, "%s@ftable @code\n", warn); - PrintStringOptionsDoc(GeometryOptions_String, "Geometry.", file); - PrintNumberOptionsDoc(GeometryOptions_Number, "Geometry.", file); - PrintColorOptionsDoc(GeometryOptions_Color, "Geometry.", file); - fprintf(file, "@end ftable\n"); - fclose(file); - - file = fopen("opt_mesh.texi", "w"); - if(!file) { - Msg::Error("Unable to open file 'opt_mesh.texi'"); - return; - } - fprintf(file, "%s@ftable @code\n", warn); - PrintStringOptionsDoc(MeshOptions_String, "Mesh.", file); - PrintNumberOptionsDoc(MeshOptions_Number, "Mesh.", file); - PrintColorOptionsDoc(MeshOptions_Color, "Mesh.", file); - fprintf(file, "@end ftable\n"); - fclose(file); - - file = fopen("opt_solver.texi", "w"); - if(!file) { - Msg::Error("Unable to open file 'opt_solver.texi'"); - return; - } - fprintf(file, "%s@ftable @code\n", warn); - PrintStringOptionsDoc(SolverOptions_String, "Solver.", file); - PrintNumberOptionsDoc(SolverOptions_Number, "Solver.", file); - PrintColorOptionsDoc(SolverOptions_Color, "Solver.", file); - fprintf(file, "@end ftable\n"); - fclose(file); - - file = fopen("opt_post.texi", "w"); - if(!file) { - Msg::Error("Unable to open file 'opt_post.texi'"); - return; + { + FILE *file = fopen("opt_general.texi", "w"); + if(!file) { + Msg::Error("Unable to open file 'opt_general.texi'"); + return; + } + fprintf(file, "%s@ftable @code\n", warn); + PrintStringOptionsDoc(GeneralOptions_String, "General.", file); + PrintNumberOptionsDoc(GeneralOptions_Number, "General.", file); + PrintColorOptionsDoc(GeneralOptions_Color, "General.", file); + fprintf(file, "@end ftable\n"); + fclose(file); + } + { + FILE *file = fopen("opt_print.texi", "w"); + if(!file) { + Msg::Error("Unable to open file 'opt_print.texi'"); + return; + } + fprintf(file, "%s@ftable @code\n", warn); + PrintStringOptionsDoc(PrintOptions_String, "Print.", file); + PrintNumberOptionsDoc(PrintOptions_Number, "Print.", file); + PrintColorOptionsDoc(PrintOptions_Color, "Print.", file); + fprintf(file, "@end ftable\n"); + fclose(file); + } + { + FILE *file = fopen("opt_geometry.texi", "w"); + if(!file) { + Msg::Error("Unable to open file 'opt_geometry.texi'"); + return; + } + fprintf(file, "%s@ftable @code\n", warn); + PrintStringOptionsDoc(GeometryOptions_String, "Geometry.", file); + PrintNumberOptionsDoc(GeometryOptions_Number, "Geometry.", file); + PrintColorOptionsDoc(GeometryOptions_Color, "Geometry.", file); + fprintf(file, "@end ftable\n"); + fclose(file); + } + { + FILE *file = fopen("opt_mesh.texi", "w"); + if(!file) { + Msg::Error("Unable to open file 'opt_mesh.texi'"); + return; + } + fprintf(file, "%s@ftable @code\n", warn); + PrintStringOptionsDoc(MeshOptions_String, "Mesh.", file); + PrintNumberOptionsDoc(MeshOptions_Number, "Mesh.", file); + PrintColorOptionsDoc(MeshOptions_Color, "Mesh.", file); + fprintf(file, "@end ftable\n"); + fclose(file); + } + { + FILE *file = fopen("opt_solver.texi", "w"); + if(!file) { + Msg::Error("Unable to open file 'opt_solver.texi'"); + return; + } + fprintf(file, "%s@ftable @code\n", warn); + PrintStringOptionsDoc(SolverOptions_String, "Solver.", file); + PrintNumberOptionsDoc(SolverOptions_Number, "Solver.", file); + PrintColorOptionsDoc(SolverOptions_Color, "Solver.", file); + fprintf(file, "@end ftable\n"); + fclose(file); + } + { + FILE *file = fopen("opt_post.texi", "w"); + if(!file) { + Msg::Error("Unable to open file 'opt_post.texi'"); + return; + } + fprintf(file, "%s@ftable @code\n", warn); + PrintStringOptionsDoc(PostProcessingOptions_String, "PostProcessing.", file); + PrintNumberOptionsDoc(PostProcessingOptions_Number, "PostProcessing.", file); + PrintColorOptionsDoc(PostProcessingOptions_Color, "PostProcessing.", file); + fprintf(file, "@end ftable\n"); + fclose(file); } - fprintf(file, "%s@ftable @code\n", warn); - PrintStringOptionsDoc(PostProcessingOptions_String, "PostProcessing.", file); - PrintNumberOptionsDoc(PostProcessingOptions_Number, "PostProcessing.", file); - PrintColorOptionsDoc(PostProcessingOptions_Color, "PostProcessing.", file); - fprintf(file, "@end ftable\n"); - fclose(file); - + { #if defined(HAVE_POST) - file = fopen("opt_view.texi", "w"); - if(!file) { - Msg::Error("Unable to open file 'opt_view.texi'"); - return; - } - fprintf(file, "%s@ftable @code\n", warn); - PrintStringOptionsDoc(ViewOptions_String, "View.", file); - PrintNumberOptionsDoc(ViewOptions_Number, "View.", file); - PrintColorOptionsDoc(ViewOptions_Color, "View.", file); - fprintf(file, "@item View.ColorTable\n"); - fprintf(file, "Color table used to draw the view@*\n"); - fprintf(file, "Saved in: @code{%s}\n\n", - GetOptionSaveLevel(GMSH_FULLRC|GMSH_OPTIONSRC)); - fprintf(file, "@end ftable\n"); - fclose(file); -#endif - + FILE *file = fopen("opt_view.texi", "w"); + if(!file) { + Msg::Error("Unable to open file 'opt_view.texi'"); + return; + } + fprintf(file, "%s@ftable @code\n", warn); + PrintStringOptionsDoc(ViewOptions_String, "View.", file); + PrintNumberOptionsDoc(ViewOptions_Number, "View.", file); + PrintColorOptionsDoc(ViewOptions_Color, "View.", file); + fprintf(file, "@item View.ColorTable\n"); + fprintf(file, "Color table used to draw the view@*\n"); + fprintf(file, "Saved in: @code{%s}\n\n", + GetOptionSaveLevel(GMSH_FULLRC|GMSH_OPTIONSRC)); + fprintf(file, "@end ftable\n"); + fclose(file); +#endif + } + { #if defined(HAVE_PLUGINS) - file = fopen("opt_plugin.texi", "w"); - if(!file) { - Msg::Error("Unable to open file 'opt_plugin.texi'"); - return; + FILE *file = fopen("opt_plugin.texi", "w"); + if(!file) { + Msg::Error("Unable to open file 'opt_plugin.texi'"); + return; + } + fprintf(file, "%s@ftable @code\n", warn); + for(std::map<std::string, GMSH_Plugin*>::iterator it = PluginManager:: + instance()->begin(); it != PluginManager::instance()->end(); ++it) { + GMSH_Plugin *p = it->second; + if(p->getType() == GMSH_Plugin::GMSH_POST_PLUGIN) { + fprintf(file, "@item Plugin(%s)\n", p->getName().c_str()); + fprintf(file, "%s\n", p->getHelp().c_str()); + int m = p->getNbOptionsStr(); + if(m){ + fprintf(file, "String options:\n"); + fprintf(file, "@table @code\n"); + for(int i = 0; i < m; i++) { + StringXString *sxs = p->getOptionStr(i); + fprintf(file, "@item %s\n", sxs->str); + fprintf(file, "Default value: @code{\"%s\"}\n", sxs->def.c_str()); + } + fprintf(file, "@end table\n"); + } + int n = p->getNbOptions(); + if(n){ + fprintf(file, "Numeric options:\n"); + fprintf(file, "@table @code\n"); + for(int i = 0; i < n; i++) { + StringXNumber *sxn = p->getOption(i); + fprintf(file, "@item %s\n", sxn->str); + fprintf(file, "Default value: @code{%g}\n", sxn->def); + } + fprintf(file, "@end table\n"); + } + } + fprintf(file, "\n"); + } + fprintf(file, "@end ftable\n"); + fclose(file); +#endif } - fprintf(file, "%s@ftable @code\n", warn); - for(std::map<std::string, GMSH_Plugin*>::iterator it = PluginManager:: - instance()->begin(); it != PluginManager::instance()->end(); ++it) { - GMSH_Plugin *p = it->second; - if(p->getType() == GMSH_Plugin::GMSH_POST_PLUGIN) { - fprintf(file, "@item Plugin(%s)\n", p->getName().c_str()); - fprintf(file, "%s\n", p->getHelp().c_str()); - - int m = p->getNbOptionsStr(); - if(m){ - fprintf(file, "String options:\n"); + +#if defined(HAVE_MESH) + { + FILE *file = fopen("opt_fields.texi", "w"); + if(!file) { + Msg::Error("Unable to open file 'opt_fields.texi'"); + return; + } + fprintf(file, "%s@ftable @code\n", warn); + FieldManager &fields = *GModel::current()->getFields(); + for(std::map<std::string, FieldFactory*>::iterator it = fields.map_type_name.begin(); + it != fields.map_type_name.end(); it++){ + fprintf(file, "@item %s\n", it->first.c_str()); + Field *f = (*it->second)(); + std::string field_description = f->getDescription(); + Sanitize_String_Texi(field_description); + fprintf(file,"%s@*\n", field_description.c_str()); + if (!f->options.empty()) { + fprintf(file, "Options:@*\n"); fprintf(file, "@table @code\n"); - for(int i = 0; i < m; i++) { - StringXString *sxs = p->getOptionStr(i); - fprintf(file, "@item %s\n", sxs->str); - fprintf(file, "Default value: @code{\"%s\"}\n", sxs->def.c_str()); + for(std::map<std::string, FieldOption*>::iterator it2 = f->options.begin(); + it2 != f->options.end(); it2++){ + fprintf(file, "@item %s\n", it2->first.c_str()); + std::string val; + it2->second->getTextRepresentation(val); + Sanitize_String_Texi(val); + fprintf(file, "%s@*\ntype: %s@*\ndefault value: @code{%s}\n", + it2->second->getDescription().c_str(), + it2->second->getTypeName().c_str(), val.c_str()); } - fprintf(file, "@end table\n"); + fprintf(file, "@end table\n\n"); } - - int n = p->getNbOptions(); - if(n){ - fprintf(file, "Numeric options:\n"); + if (!f->callbacks.empty()) { + fprintf(file, "Actions:@*\n"); fprintf(file, "@table @code\n"); - for(int i = 0; i < n; i++) { - StringXNumber *sxn = p->getOption(i); - fprintf(file, "@item %s\n", sxn->str); - fprintf(file, "Default value: @code{%g}\n", sxn->def); + for(std::map<std::string, FieldCallback*>::iterator it2 = f->callbacks.begin(); + it2 != f->callbacks.end(); it2++){ + fprintf(file, "@item %s\n", it2->first.c_str()); + fprintf(file, "%s@*\n", it2->second->getDescription().c_str()); } - fprintf(file, "@end table\n"); + fprintf(file, "@end table\n\n"); } - } - fprintf(file, "\n"); - } - fprintf(file, "@end ftable\n"); - fclose(file); + fprintf(file, "@end ftable\n"); + fclose(file); #endif - -#if defined(HAVE_MESH) - file = fopen("opt_fields.texi", "w"); - if(!file) { - Msg::Error("Unable to open file 'opt_fields.texi'"); - return; } - fprintf(file, "%s@ftable @code\n", warn); - FieldManager &fields = *GModel::current()->getFields(); - for(std::map<std::string, FieldFactory*>::iterator it = fields.map_type_name.begin(); - it != fields.map_type_name.end(); it++){ - fprintf(file, "@item %s\n", it->first.c_str()); - Field *f = (*it->second)(); - std::string field_description = f->getDescription(); - Sanitize_String_Texi(field_description); - fprintf(file,"%s@*\n", field_description.c_str()); - if (!f->options.empty()) { - fprintf(file, "Options:@*\n"); - fprintf(file, "@table @code\n"); - for(std::map<std::string, FieldOption*>::iterator it2 = f->options.begin(); - it2 != f->options.end(); it2++){ - fprintf(file, "@item %s\n", it2->first.c_str()); - std::string val; - it2->second->getTextRepresentation(val); - Sanitize_String_Texi(val); - fprintf(file, "%s@*\ntype: %s@*\ndefault value: @code{%s}\n", - it2->second->getDescription().c_str(), - it2->second->getTypeName().c_str(), val.c_str()); - } - fprintf(file, "@end table\n\n"); + { + FILE *file = fopen("shortcuts.texi", "w"); + if(!file) { + Msg::Error("Unable to open file 'shortcuts.texi'"); + return; } - if (!f->callbacks.empty()) { - fprintf(file, "Actions:@*\n"); - fprintf(file, "@table @code\n"); - for(std::map<std::string, FieldCallback*>::iterator it2 = f->callbacks.begin(); - it2 != f->callbacks.end(); it2++){ - fprintf(file, "@item %s\n", it2->first.c_str()); - fprintf(file, "%s@*\n", it2->second->getDescription().c_str()); - } - fprintf(file, "@end table\n\n"); + std::vector<std::pair<std::string, std::string> > s = GetShortcutsUsage("Ctrl+"); + fprintf(file, "%s@table @kbd\n", warn); + for(unsigned int i = 0; i < s.size(); i++) + fprintf(file, "@item %s\n%s\n", s[i].first.c_str(), s[i].second.c_str()); + fprintf(file, "@end table\n"); + fclose(file); + } + { + FILE *file = fopen("mouse.texi", "w"); + if(!file) { + Msg::Error("Unable to open file 'mouse.texi'"); + return; } + std::vector<std::pair<std::string, std::string> > s = GetMouseUsage(); + fprintf(file, "%s@table @kbd\n", warn); + for(unsigned int i = 0; i < s.size(); i++) + fprintf(file, "@item %s\n%s\n", s[i].first.c_str(), s[i].second.c_str()); + fprintf(file, "@end table\n"); + fclose(file); } - fprintf(file, "@end ftable\n"); - fclose(file); -#endif } #define GET_VIEW(error_val) \ diff --git a/Fltk/aboutWindow.cpp b/Fltk/aboutWindow.cpp index 3d62179d3e48687905d8c4e1c0c93b6c2b284900..0ec4523e37e638293f39ae239ff8d3130c285800 100644 --- a/Fltk/aboutWindow.cpp +++ b/Fltk/aboutWindow.cpp @@ -22,10 +22,10 @@ static const char *help_link(Fl_Widget *w, const char *uri) aboutWindow::aboutWindow() { - int width = 28 * FL_NORMAL_SIZE; - int height = 18 * BH; - { + int width = 28 * FL_NORMAL_SIZE; + int height = 18 * BH; + win = new paletteWindow (width, height, CTX::instance()->nonModalWindows ? true : false, "About Gmsh"); win->box(GMSH_WINDOW_BOX); @@ -62,6 +62,9 @@ aboutWindow::aboutWindow() } { + int width = 40 * FL_NORMAL_SIZE; + int height = 18 * BH; + winhelp = new paletteWindow (width, height, CTX::instance()->nonModalWindows ? true : false, "Keyboard and Mouse Usage"); @@ -74,22 +77,24 @@ aboutWindow::aboutWindow() std::string s; s += "<h3>Keyboard Shortcuts</h3>"; - s += "<pre>"; + s += "<table border=1>"; { - std::vector<std::string> s0 = GetShortcutsUsage(); + std::vector<std::pair<std::string, std::string> > s0 = GetShortcutsUsage(); for(unsigned int i = 0; i < s0.size(); i++) - s += s0[i] + "<br>"; + s += "<tr><td>" + s0[i].first + "</td><td>" + s0[i].second + "</td></tr>"; } - s += "</pre>"; + s += "</table>"; s += "<h3>Mouse Actions</h3>"; - s += "<pre>"; + s += "<table border=1>"; { - std::vector<std::string> s0 = GetMouseUsage(); + std::vector<std::pair<std::string, std::string> > s0 = GetMouseUsage(); for(unsigned int i = 0; i < s0.size(); i++) - s += s0[i] + "<br>"; + s += "<tr><td>" + s0[i].first + "</td><td>" + s0[i].second + "</td></tr>"; } - s += "</pre>"; + s += "</table>"; + s += "For a 2 button mouse, Middle button = Shift+Left button.<p>"; + s += "For a 1 button mouse, Middle button = Shift+Left button, Right button = Alt+Left button."; o->value(s.c_str()); diff --git a/Geo/GFace.cpp b/Geo/GFace.cpp index d90e9b09335054a844011be0c6d2c018929566c3..e9fd12949c7d59915d4eb3b6ce2d512e52f66506 100644 --- a/Geo/GFace.cpp +++ b/Geo/GFace.cpp @@ -291,7 +291,7 @@ std::string GFace::getAdditionalInfoString() else if(l_edges.size()){ sstream << "{"; for(std::list<GEdge*>::iterator it = l_edges.begin(); it != l_edges.end(); ++it){ - if(it != l_edges.begin()) sstream << ","; + if(it != l_edges.begin()) sstream << " "; sstream << (*it)->tag(); } sstream << "}"; diff --git a/Geo/GVertex.cpp b/Geo/GVertex.cpp index 614839ef883d2acfa266f92669cb74ebd03561c7..b7063057d3c5fc97be477cf1320b949b79570e6c 100644 --- a/Geo/GVertex.cpp +++ b/Geo/GVertex.cpp @@ -11,7 +11,7 @@ #include "MPoint.h" #include "GmshMessage.h" -GVertex::GVertex(GModel *m, int tag, double ms) : GEntity(m, tag), meshSize(ms) +GVertex::GVertex(GModel *m, int tag, double ms) : GEntity(m, tag), meshSize(ms) { } @@ -36,12 +36,12 @@ void GVertex::setPosition(GPoint &p) } void GVertex::addEdge(GEdge *e) -{ +{ l_edges.push_back(e); } void GVertex::delEdge(GEdge *e) -{ +{ l_edges.erase(std::find(l_edges.begin(), l_edges.end(), e)); } @@ -55,7 +55,7 @@ std::string GVertex::getAdditionalInfoString() std::ostringstream sstream; sstream << "{" << x() << "," << y() << "," << z() << "}"; double lc = prescribedMeshSizeAtVertex(); - if(lc < MAX_LC) sstream << " (cl: " << lc << ")"; + if(lc < MAX_LC) sstream << " (mesh size: " << lc << ")"; return sstream.str(); } @@ -74,13 +74,13 @@ void GVertex::writeGEO(FILE *fp, const std::string &meshSizeParameter) unsigned int GVertex::getNumMeshElements() { - return points.size(); + return points.size(); } MElement *GVertex::getMeshElement(unsigned int index) -{ +{ if(index < points.size()) - return points[index]; + return points[index]; return 0; } diff --git a/doc/texinfo/gmsh.texi b/doc/texinfo/gmsh.texi index dc755c3b1e17b17a335f8d6a341e9da254b8ab79..1062ddf7f47c2177032f12569ce40cc205a00944 100644 --- a/doc/texinfo/gmsh.texi +++ b/doc/texinfo/gmsh.texi @@ -962,55 +962,11 @@ Show this message @cindex Mouse, actions @cindex Bindings, mouse -In the following, for a 2 button mouse, @kbd{Middle button} = -@kbd{Shift+Left button}. For a 1 button mouse, @kbd{Middle button} = -@kbd{Shift+Left button} and @kbd{Right button} = @kbd{Alt+Left button}. +@include mouse.texi -@kbd{Move the mouse}: -@itemize @bullet -@item -Highlight the entity under the mouse pointer and display its properties -@item -Resize a lasso zoom or a lasso selection/unselection started with -@kbd{Ctrl+Left button} -@end itemize - -@kbd{Left button}: -@itemize @bullet -@item -Rotate -@item -Select an entity -@item -Accept a lasso zoom or a lasso selection started with @kbd{Ctrl+Left -button} -@end itemize - -@kbd{Ctrl+Left button}: Start a lasso zoom or a lasso selection/unselection - -@kbd{Middle button}: -@itemize @bullet -@item -Zoom -@item -Unselect an entity -@item -Accept a lasso zoom or a lasso unselection -@end itemize +For a 2 button mouse, Middle button = Shift+Left button. -@kbd{Ctrl+Middle button}: Orthogonalize display - -@kbd{Right button}: -@itemize @bullet -@item -Pan -@item -Cancel a lasso zoom or a lasso selection/unselection -@item -Pop-up menu on post-processing view button -@end itemize - -@kbd{Ctrl+Right button}: Reset to default viewpoint +For a 1 button mouse, Middle button = Shift+Left button, Right button = Alt+Left button. @c ------------------------------------------------------------------------- @c Keyboard shortcuts @@ -1026,167 +982,7 @@ Pop-up menu on post-processing view button (On Mac Ctrl is replaced by Cmd (the `Apple key') in the shortcuts below.) -@table @kbd - -@item Left arrow -Go to previous time step -@item Right arrow -Go to next time step -@item Up arrow -Make previous view visible -@item Down arrow -Make next view visible - -@sp 1 @c ---------------------------------------------- - -@item 0 -Reload project file -@item 1 or F1 -Mesh lines -@item 2 or F2 -Mesh surfaces -@item 3 or F3 -Mesh volumes -@item Escape -Cancel lasso zoom/selection, toggle mouse selection ON/OFF - -@sp 1 @c ---------------------------------------------- - -@item g -Go to geometry module -@item m -Go to mesh module -@item p -Go to post-processing module -@item s -Go to solver module - -@sp 1 @c ---------------------------------------------- - -@item Shift+a -Bring all windows to front -@item Shift+g -Show geometry options -@item Shift+m -Show mesh options -@item Shift+o -Show general options -@item Shift+p -Show post-processing options -@item Shift+s -Show solver options -@item Shift+u -Show post-processing view plugins -@item Shift+w -Show post-processing view options - -@sp 1 @c ---------------------------------------------- - -@item Ctrl+i -Show statistics window -@item Ctrl+d -Attach/detach menu -@item Ctrl+l -Show message console -@item Ctrl+n -Create new project file -@item Ctrl+o -Open project file -@item Ctrl+q -Quit -@item Ctrl+r -Rename project file -@item Ctrl+s -Save file - -@sp 1 @c ---------------------------------------------- - -@item Shift+Ctrl+c -Show clipping plane window -@item Shift+Ctrl+m -Show manipulator window -@item Shift+Ctrl+n -Show option window -@item Shift+Ctrl+o -Merge file(s) -@item Shift+Ctrl+s -Save mesh in default format -@item Shift+Ctrl+u -Show plugin window -@item Shift+Ctrl+v -Show visibility window - -@sp 1 @c ---------------------------------------------- - -@item Alt+a -Loop through axes modes -@item Alt+b -Hide/show bounding boxes -@item Alt+c -Loop through predefined color schemes -@item Alt+e -Hide/Show element outlines for visible post-processing views -@item Alt+f -Change redraw mode (fast/full) -@item Alt+h -Hide/show all post-processing views -@item Alt+i -Hide/show all post-processing view scales -@item Alt+l -Hide/show geometry lines -@item Alt+m -Toggle visibility of all mesh entities -@item Alt+n -Hide/show all post-processing view annotations -@item Alt+o -Change projection mode (orthographic/perspective) -@item Alt+p -Hide/show geometry points -@item Alt+r -Loop through range modes for visible post-processing views -@item Alt+s -Hide/show geometry surfaces -@item Alt+t -Loop through interval modes for visible post-processing views -@item Alt+v -Hide/show geometry volumes -@item Alt+w -Enable/disable all lighting -@item Alt+x -Set X view -@item Alt+y -Set Y view -@item Alt+z -Set Z view - -@sp 1 @c ---------------------------------------------- - -@item Alt+Shift+a -Hide/show small axes -@item Alt+Shift+b -Hide/show mesh volume faces -@item Alt+Shift+d -Hide/show mesh surface faces -@item Alt+Shift+l -Hide/show mesh lines -@item Alt+Shift+o -Adjust projection parameters -@item Alt+Shift+p -Hide/show mesh points -@item Alt+Shift+s -Hide/show mesh surface edges -@item Alt+Shift+v -Hide/show mesh volume edges -@item Alt+Shift+w -Reverse all mesh normals -@item Alt+Shift+x -Set -X view -@item Alt+Shift+y -Set -Y view -@item Alt+Shift+z -Set -Z view - -@end table +@include shortcuts.texi @c ========================================================================= @c General tools diff --git a/doc/texinfo/mouse.texi b/doc/texinfo/mouse.texi new file mode 100644 index 0000000000000000000000000000000000000000..6bee1149aae0f8cfd8bcad2b62e2f27f9e455a4f --- /dev/null +++ b/doc/texinfo/mouse.texi @@ -0,0 +1,35 @@ +@c +@c This file is generated automatically by running "gmsh -doc". +@c Do not edit by hand! +@c + +@table @kbd +@item Move +- Highlight the entity under the mouse pointer and display its properties +@item +- Resize a lasso zoom or a lasso (un)selection +@item Left button +- Rotate +@item +- Select an entity +@item +- Accept a lasso zoom or a lasso selection +@item Ctrl+Left button +Start a lasso zoom or a lasso (un)selection +@item Middle button +- Zoom +@item +- Unselect an entity +@item +- Accept a lasso zoom or a lasso unselection +@item Ctrl+Middle button +Orthogonalize display +@item Right button +- Pan +@item +- Cancel a lasso zoom or a lasso (un)selection +@item +- Pop-up menu on post-processing view button +@item Ctrl+Right button +Reset to default viewpoint +@end table diff --git a/doc/texinfo/opt_general.texi b/doc/texinfo/opt_general.texi index b3de4c1edf1c88a38c373471f01ca69316a55610..ced9830cba53395abd42a60f6c206469c7963a80 100644 --- a/doc/texinfo/opt_general.texi +++ b/doc/texinfo/opt_general.texi @@ -541,12 +541,12 @@ Saved in: @code{General.OptionsFileName} @item General.GraphicsFontSize Size of the font in the graphic window@* -Default value: @code{17}@* +Default value: @code{15}@* Saved in: @code{General.OptionsFileName} @item General.GraphicsFontSizeTitle Size of the font in the graphic window for titles@* -Default value: @code{19}@* +Default value: @code{18}@* Saved in: @code{General.OptionsFileName} @item General.GraphicsHeight @@ -980,7 +980,7 @@ Default value: @code{150}@* Saved in: @code{General.SessionFileName} @item General.Stereo -Use stereo rendering : use command line gmsh -string ``General.Stereo=1;''@* +Use stereo rendering@* Default value: @code{0}@* Saved in: @code{General.OptionsFileName} diff --git a/doc/texinfo/opt_geometry.texi b/doc/texinfo/opt_geometry.texi index 0bb64ed68dca0c3ab91d22a4b3972a02e3eb32a6..d534c6f1a02eb4817443fb1b6ea0605623f9d5fb 100644 --- a/doc/texinfo/opt_geometry.texi +++ b/doc/texinfo/opt_geometry.texi @@ -179,6 +179,11 @@ Global geometry scaling factor@* Default value: @code{1}@* Saved in: @code{General.OptionsFileName} +@item Geometry.OrientedPhysicals +Use sign of elementary entity in physical definition as orientation indicator@* +Default value: @code{1}@* +Saved in: @code{General.OptionsFileName} + @item Geometry.SnapX Snapping grid spacing along the X-axis@* Default value: @code{0.1}@* diff --git a/doc/texinfo/opt_mesh.texi b/doc/texinfo/opt_mesh.texi index 48a583c12e41cf162961fe1d21cda6dfa134667e..f6b790c44047023c808b13d78ed358ab4897ef9a 100644 --- a/doc/texinfo/opt_mesh.texi +++ b/doc/texinfo/opt_mesh.texi @@ -44,6 +44,11 @@ Apply Bunin optimization on quad meshes (the parameter is the maximal size of a Default value: @code{0}@* Saved in: @code{General.OptionsFileName} +@item Mesh.Lloyd +Apply lloyd optimization on surface meshes@* +Default value: @code{0}@* +Saved in: @code{General.OptionsFileName} + @item Mesh.CgnsImportOrder Enable the creation of high-order mesh from CGNS structured meshes.(1, 2, 4, 8, ...)@* Default value: @code{1}@* @@ -489,6 +494,11 @@ Apply recombination algorithm to all surfaces, ignoring per-surface spec@* Default value: @code{0}@* Saved in: @code{General.OptionsFileName} +@item Mesh.Recombine3DAll +Apply recombination3D algorithm to all volumes, ignoring per-volume spec@* +Default value: @code{0}@* +Saved in: @code{General.OptionsFileName} + @item Mesh.RemeshAlgorithm Remeshing algorithm (0=no split, 1=automatic, 2=automatic only with metis)@* Default value: @code{0}@* diff --git a/doc/texinfo/opt_plugin.texi b/doc/texinfo/opt_plugin.texi index 1589016a4703170f6bdfe01cf2ee2d98fb2aa87f..de4cccdcb1a5e1358e455dfeddeacef459a7e678 100644 --- a/doc/texinfo/opt_plugin.texi +++ b/doc/texinfo/opt_plugin.texi @@ -399,6 +399,8 @@ Default value: @code{0} Default value: @code{0} @item Visible Default value: @code{1} +@item Dimension +Default value: @code{-1} @item View Default value: @code{-1} @end table @@ -564,6 +566,8 @@ Default value: @code{1} Default value: @code{2} @item PostProcessSimplify Default value: @code{1} +@item ReductionHeuristic +Default value: @code{1} @end table @item Plugin(HomologyPostProcessing) @@ -604,11 +608,11 @@ Default value: @code{0} @end table @item Plugin(Integrate) -Plugin(Integrate) integrates scalar fields over all the elements in the view `View', as well as the circulation/flux of vector fields over line/surface elements. +Plugin(Integrate) integrates a scalar field over all the elements of the view `View' (if `Dimension' < 0), or over all elements of the prescribed dimension (if `Dimension' > 0). If the field is a vector field,the circulation/flux of the field over line/surface elements is calculated. If `View' < 0, the plugin is run on the current view. -Plugin(Integrate) creates one new view.If `OverTime' = 1 , the plugin integrates the scalar view over time instead of over space. +If `OverTime' = 1 , the plugin integrates the scalar view over time instead of over space. Plugin(Integrate) creates one new view. Numeric options: @@ -617,6 +621,8 @@ Numeric options: Default value: @code{-1} @item OverTime Default value: @code{-1} +@item Dimension +Default value: @code{-1} @end table @item Plugin(Isosurface) @@ -706,7 +712,7 @@ If `TimeStep' < 0, the plugin extracts data from all the time steps in the view. If `View' < 0, the plugin is run on the current view. -Plugin(MathEval) creates one new view.If `PhysicalRegion' < 0, the plugin is runon all physical regions. +Plugin(MathEval) creates one new view.If `PhysicalRegion' < 0, the plugin is run on all physical regions. Plugin(MathEval) creates one new view. String options: @@ -1024,6 +1030,18 @@ Default value: @code{-1} Default value: @code{-1} @end table +@item Plugin(SimplePartition) +Plugin(SimplePartition) partitions the current mesh into `NumSlices' slices, along the X-, Y- or Z-axis depending on the value of `Direction' (0,1,2). The plugin creates partition boundaries if `CreateBoundaries' is set. +Numeric options: +@table @code +@item NumSlices +Default value: @code{4} +@item Direction +Default value: @code{0} +@item CreateBoundaries +Default value: @code{1} +@end table + @item Plugin(Skin) Plugin(Skin) extracts the boundary (skin) of the view `View'. If `Visible' is set, the plugin only extracts the skin of visible entities. diff --git a/doc/texinfo/opt_solver.texi b/doc/texinfo/opt_solver.texi index 187511b6f2a90805abe42f6621eecf6f4b3e7bfe..7a6aab54e9964c17e339dd759738ba811a68fcdc 100644 --- a/doc/texinfo/opt_solver.texi +++ b/doc/texinfo/opt_solver.texi @@ -101,7 +101,7 @@ Saved in: @code{General.OptionsFileName} @item Solver.AutoSaveDatabase Automatically save database after each computation@* -Default value: @code{1}@* +Default value: @code{0}@* Saved in: @code{General.OptionsFileName} @item Solver.AutoMesh diff --git a/doc/texinfo/opt_view.texi b/doc/texinfo/opt_view.texi index 6eefbbbcfe5214c3b172dc4271e7bcf545a7a885..36f3dd009d99a61a457ed153b3692c47e67520df 100644 --- a/doc/texinfo/opt_view.texi +++ b/doc/texinfo/opt_view.texi @@ -145,7 +145,7 @@ Default value: @code{0}@* Saved in: @code{General.OptionsFileName} @item View.AutoPosition -Position the scale or 2D plot automatically (0: manual, 1: automatic, 2: top left, 3: top right, 4: bottom left, 5: bottom right, 6: top, 7: bottom, 8: left, 9: right, 10: top 1/3)@* +Position the scale or 2D plot automatically (0: manual, 1: automatic, 2: top left, 3: top right, 4: bottom left, 5: bottom right, 6: top, 7: bottom, 8: left, 9: right, 10: full, 11: top third)@* Default value: @code{1}@* Saved in: @code{General.OptionsFileName} diff --git a/doc/texinfo/shortcuts.texi b/doc/texinfo/shortcuts.texi new file mode 100644 index 0000000000000000000000000000000000000000..5f9f4944e4d8a3f85b5c873f04f51107312e5900 --- /dev/null +++ b/doc/texinfo/shortcuts.texi @@ -0,0 +1,147 @@ +@c +@c This file is generated automatically by running "gmsh -doc". +@c Do not edit by hand! +@c + +@table @kbd +@item Left arrow +Go to previous time step +@item Right arrow +Go to next time step +@item Up arrow +Make previous view visible +@item Down arrow +Make next view visible +@item 0 +Reload project file +@item 1 or F1 +Mesh lines +@item 2 or F2 +Mesh surfaces +@item 3 or F3 +Mesh volumes +@item Escape +Cancel lasso zoom/selection, toggle mouse selection ON/OFF +@item g +Go to geometry module +@item m +Go to mesh module +@item p +Go to post-processing module +@item s +Go to solver module +@item Shift+a +Bring all windows to front +@item Shift+g +Show geometry options +@item Shift+m +Show mesh options +@item Shift+o +Show general options +@item Shift+p +Show post-processing options +@item Shift+s +Show solver options +@item Shift+u +Show post-processing view plugins +@item Shift+w +Show post-processing view options +@item Shift+Escape +Enable full mouse selection +@item Ctrl+i +Show statistics window +@item Ctrl+d +Attach/detach menu +@item Ctrl+l +Show message console +@item Ctrl+m +Minimize window +@item Ctrl+n +Create new project file +@item Ctrl+o +Open project file +@item Ctrl+q +Quit +@item Ctrl+r +Rename project file +@item Ctrl+s +Save file as +@item Shift+Ctrl+c +Show clipping plane window +@item Shift+Ctrl+m +Show manipulator window +@item Shift+Ctrl+n +Show option window +@item Shift+Ctrl+o +Merge file(s) +@item Shift+Ctrl+s +Save mesh in default format +@item Shift+Ctrl+u +Show plugin window +@item Shift+Ctrl+v +Show visibility window +@item Alt+a +Loop through axes modes +@item Alt+b +Hide/show bounding boxes +@item Alt+c +Loop through predefined color schemes +@item Alt+e +Hide/Show element outlines for visible post-pro views +@item Alt+f +Change redraw mode (fast/full) +@item Alt+h +Hide/show all post-processing views +@item Alt+i +Hide/show all post-processing view scales +@item Alt+l +Hide/show geometry lines +@item Alt+m +Toggle visibility of all mesh entities +@item Alt+n +Hide/show all post-processing view annotations +@item Alt+o +Change projection mode (orthographic/perspective) +@item Alt+p +Hide/show geometry points +@item Alt+r +Loop through range modes for visible post-pro views +@item Alt+s +Hide/show geometry surfaces +@item Alt+t +Loop through interval modes for visible post-pro views +@item Alt+v +Hide/show geometry volumes +@item Alt+w +Enable/disable all lighting +@item Alt+x +Set X view +@item Alt+y +Set Y view +@item Alt+z +Set Z view +@item Alt+Shift+a +Hide/show small axes +@item Alt+Shift+b +Hide/show mesh volume faces +@item Alt+Shift+d +Hide/show mesh surface faces +@item Alt+Shift+l +Hide/show mesh lines +@item Alt+Shift+o +Adjust projection parameters +@item Alt+Shift+p +Hide/show mesh points +@item Alt+Shift+s +Hide/show mesh surface edges +@item Alt+Shift+v +Hide/show mesh volume edges +@item Alt+Shift+w +Reverse all mesh normals +@item Alt+Shift+x +Set -X view +@item Alt+Shift+y +Set -Y view +@item Alt+Shift+z +Set -Z view +@end table