1 // Gmsh - Copyright (C) 1997-2021 C. Geuzaine, J.-F. Remacle
2 //
3 // See the LICENSE.txt file in the Gmsh root directory for license information.
4 // Please report all issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
5 
6 #ifndef DEFAULT_OPTIONS_H
7 #define DEFAULT_OPTIONS_H
8 
9 #include "GmshConfig.h"
10 #include "GmshDefines.h"
11 #include "Options.h"
12 
13 //          PLEASE RESPECT THE ALPHABETICAL ORDER WHEN
14 //                    INSERTING A NEW OPTION!
15 //
16 // Option Database (General, Geometry, Mesh, Post, View, Print), with
17 // default values. The first number defines the level of saving: O
18 // for the option file, S for the session file and F for the full
19 // listing:
20 
21 #define S GMSH_SESSIONRC
22 #define O GMSH_OPTIONSRC
23 #define F GMSH_FULLRC
24 #define D GMSH_DEPRECATED
25 
26 // STRINGS
27 
28 StringXString GeneralOptions_String[] = {
29   { F|O, "AxesFormatX" , opt_general_axes_format0 , "%.3g" ,
30     "Number format for X-axis (in standard C form)" },
31   { F|O, "AxesFormatY" , opt_general_axes_format1 , "%.3g" ,
32     "Number format for Y-axis (in standard C form)" },
33   { F|O, "AxesFormatZ" , opt_general_axes_format2 , "%.3g" ,
34     "Number format for Z-axis (in standard C form)" },
35   { F|O, "AxesLabelX" , opt_general_axes_label0 , "" ,
36     "X-axis label" },
37   { F|O, "AxesLabelY" , opt_general_axes_label1 , "" ,
38     "Y-axis label" },
39   { F|O, "AxesLabelZ" , opt_general_axes_label2 , "" ,
40     "Z-axis label" },
41 
42   { F|O, "BackgroundImageFileName" , opt_general_background_image_filename , "" ,
43     "Background image file in JPEG, PNG or PDF format" },
44   { F,   "BuildInfo" , opt_general_build_info , "" ,
45     "Gmsh build information (read-only)" },
46   { F,   "BuildOptions" , opt_general_build_options , "" ,
47     "Gmsh build options (read-only)" },
48 
49   { F|O, "DefaultFileName" , opt_general_default_filename , "untitled.geo" ,
50     "Default project file name" },
51   { F,   "Display" , opt_general_display , "" ,
52     "X server to use (only for Unix versions)" },
53 
54   { F|O, "ErrorFileName" , opt_general_error_filename ,
55 #if defined(WIN32)
56     "gmsh-errors" ,
57 #else
58     ".gmsh-errors" ,
59 #endif
60     "File into which the log is saved if a fatal error occurs" },
61   { F|S, "ExecutableFileName", opt_general_executable_filename , "" ,
62     "File name of the Gmsh executable (read-only)"},
63 
64   { F,   "FileName" , opt_general_filename , "" ,
65     "Current project file name (read-only)" },
66   { F|S, "FltkTheme" , opt_general_gui_theme , "" ,
67     "FLTK user interface theme (try e.g. plastic or gtk+)" },
68 
69   { F|O, "GraphicsFont" , opt_general_graphics_font , "Helvetica" ,
70     "Font used in the graphic window" },
71   { F|O, "GraphicsFontEngine" , opt_general_graphics_font_engine , "Native" ,
72     "Set graphics font engine (Native, StringTexture, Cairo)" },
73   { F|O, "GraphicsFontTitle" , opt_general_graphics_font_title , "Helvetica" ,
74     "Font used in the graphic window for titles" },
75 
76   { F|S, "OptionsFileName" , opt_general_options_filename ,
77 #if defined(WIN32)
78     "gmsh-options" ,
79 #else
80     ".gmsh-options" ,
81 #endif
82     "Option file created with `Tools->Options->Save'; automatically read on startup" },
83 
84   { F|S, "RecentFile0", opt_general_recent_file0 , "untitled.geo" ,
85     "Most recent opened file"},
86   { F|S, "RecentFile1", opt_general_recent_file1 , "untitled.geo" ,
87     "2nd most recent opened file"},
88   { F|S, "RecentFile2", opt_general_recent_file2 , "untitled.geo" ,
89     "3rd most recent opened file"},
90   { F|S, "RecentFile3", opt_general_recent_file3 , "untitled.geo" ,
91     "4th most recent opened file"},
92   { F|S, "RecentFile4", opt_general_recent_file4 , "untitled.geo" ,
93     "5th most recent opened file"},
94   { F|S, "RecentFile5", opt_general_recent_file5 , "untitled.geo" ,
95     "6th most recent opened file"},
96   { F|S, "RecentFile6", opt_general_recent_file6 , "untitled.geo" ,
97     "7th most recent opened file"},
98   { F|S, "RecentFile7", opt_general_recent_file7 , "untitled.geo" ,
99     "8th most recent opened file"},
100   { F|S, "RecentFile8", opt_general_recent_file8 , "untitled.geo" ,
101     "9th most recent opened file"},
102   { F|S, "RecentFile9", opt_general_recent_file9 , "untitled.geo" ,
103     "10th most recent opened file"},
104 
105   { 0,   "SessionFileName" , opt_general_session_filename ,
106 #if defined(WIN32)
107     "gmshrc" ,
108 #else
109     ".gmshrc" ,
110 #endif
111     "Option file into which session specific information is saved; automatically "
112     "read on startup" },
113   { F|O, "ScriptingLanguages", opt_general_scripting_languages, "geo" ,
114     "Language(s) in which scripting commands generated by the GUI are written"},
115 
116   { F|O, "TextEditor" , opt_general_editor ,
117 #if defined(WIN32)
118     "notepad.exe '%s'" ,
119 #elif defined(__APPLE__)
120     "open -t '%s'" ,
121 #else
122     "gedit '%s'" ,
123 #endif
124     "System command to launch a text editor" },
125   { F|S, "TmpFileName" , opt_general_tmp_filename ,
126 #if defined(WIN32)
127     "gmsh-tmp" ,
128 #else
129     ".gmsh-tmp" ,
130 #endif
131     "Temporary file used by the geometry module" },
132 
133   { F,   "Version" , opt_general_version , "" ,
134     "Gmsh version (read-only)" },
135 
136   { F, "WatchFilePattern", opt_general_watch_file_pattern , "" ,
137      "Pattern of files to merge as they become available"},
138 
139    { 0, nullptr , nullptr , "" , nullptr }
140 } ;
141 
142 StringXString GeometryOptions_String[] = {
143   { F|O, "DoubleClickedPointCommand" , opt_geometry_double_clicked_point_command,
144     "ONELAB" , "Command parsed when double-clicking on a point, or 'ONELAB' "
145     "to edit associated ONELAB parameters" },
146   { F|O, "DoubleClickedCurveCommand" , opt_geometry_double_clicked_curve_command,
147     "ONELAB" , "Command parsed when double-clicking on a curve, or 'ONELAB' "
148     "to edit associated ONELAB parameters" },
149   { F|O|D, "DoubleClickedLineCommand" , opt_geometry_double_clicked_curve_command,
150     "ONELAB" , "[Deprecated]" },
151   { F|O, "DoubleClickedSurfaceCommand" , opt_geometry_double_clicked_surface_command,
152     "ONELAB" , "Command parsed when double-clicking on a surface, or 'ONELAB' "
153     "to edit associated ONELAB parameters" },
154   { F|O, "DoubleClickedVolumeCommand" , opt_geometry_double_clicked_volume_command,
155     "ONELAB" , "Command parsed when double-clicking on a volume, or 'ONELAB' "
156     "to edit associated ONELAB parameters" },
157 
158   { F|O, "OCCTargetUnit" , opt_geometry_occ_target_unit , "" ,
159     "Length unit to which coordinates from STEP and IGES files are converted to when "
160     "imported by OpenCASCADE, e.g. 'M' for meters (leave empty to use OpenCASCADE "
161     "default behavior)"},
162 
163   { 0, nullptr , nullptr , "" , nullptr }
164 } ;
165 
166 StringXString MeshOptions_String[] = {
167   { 0, nullptr , nullptr , "" , nullptr }
168 } ;
169 
170 StringXString SolverOptions_String[] = {
171   { F|S, "Executable0" , opt_solver_executable0 , "",
172     "System command to launch solver 0" },
173   { F|S, "Executable1" , opt_solver_executable1 , "" ,
174     "System command to launch solver 1" },
175   { F|S, "Executable2" , opt_solver_executable2 , "" ,
176     "System command to launch solver 2" },
177   { F|S, "Executable3" , opt_solver_executable3 , "" ,
178     "System command to launch solver 3" },
179   { F|S, "Executable4" , opt_solver_executable4 , "" ,
180     "System command to launch solver 4" },
181   { F|S, "Executable5" , opt_solver_executable5 , "",
182     "System command to launch solver 5" },
183   { F|S, "Executable6" , opt_solver_executable6 , "" ,
184     "System command to launch solver 6" },
185   { F|S, "Executable7" , opt_solver_executable7 , "" ,
186     "System command to launch solver 7" },
187   { F|S, "Executable8" , opt_solver_executable8 , "" ,
188     "System command to launch solver 8" },
189   { F|S, "Executable9" , opt_solver_executable9 , "" ,
190     "System command to launch solver 9" },
191 
192   { F|S, "Name0" , opt_solver_name0 , "GetDP" ,
193     "Name of solver 0" },
194   { F|S, "Name1" , opt_solver_name1 , "" ,
195     "Name of solver 1" },
196   { F|S, "Name2" , opt_solver_name2 , "" ,
197     "Name of solver 2" },
198   { F|S, "Name3" , opt_solver_name3 , "" ,
199     "Name of solver 3" },
200   { F|S, "Name4" , opt_solver_name4 , "" ,
201     "Name of solver 4" },
202   { F|S, "Name5" , opt_solver_name5 , "" ,
203     "Name of solver 5" },
204   { F|S, "Name6" , opt_solver_name6 , "" ,
205     "Name of solver 6" },
206   { F|S, "Name7" , opt_solver_name7 , "" ,
207     "Name of solver 7" },
208   { F|S, "Name8" , opt_solver_name8 , "" ,
209     "Name of solver 8" },
210   { F|S, "Name9" , opt_solver_name9 , "" ,
211     "Name of solver 9" },
212 
213   { F|S, "Extension0" , opt_solver_extension0 , ".pro" ,
214     "File extension for solver 0" },
215   { F|S, "Extension1" , opt_solver_extension1 , "" ,
216     "File extension for solver 1" },
217   { F|S, "Extension2" , opt_solver_extension2 , "" ,
218     "File extension for solver 2" },
219   { F|S, "Extension3" , opt_solver_extension3 , "" ,
220     "File extension for solver 3" },
221   { F|S, "Extension4" , opt_solver_extension4 , "" ,
222     "File extension for solver 4" },
223   { F|S, "Extension5" , opt_solver_extension5 , "" ,
224     "File extension for solver 5" },
225   { F|S, "Extension6" , opt_solver_extension6 , "" ,
226     "File extension for solver 6" },
227   { F|S, "Extension7" , opt_solver_extension7 , "" ,
228     "File extension for solver 7" },
229   { F|S, "Extension8" , opt_solver_extension8 , "" ,
230     "File extension for solver 8" },
231   { F|S, "Extension9" , opt_solver_extension9 , "" ,
232     "File extension for solver 9" },
233 
234   { F|S, "OctaveInterpreter" , opt_solver_octave_interpreter , "octave" ,
235     "Name of the Octave interpreter (used to run .m files)" },
236   { F|S, "PythonInterpreter" , opt_solver_python_interpreter , "python" ,
237     "Name of the Python interpreter (used to run .py files if they are not executable)" },
238 
239   { F|S, "RemoteLogin0" , opt_solver_remote_login0 , "",
240     "Command to login to a remote host to launch solver 0" },
241   { F|S, "RemoteLogin1" , opt_solver_remote_login1 , "" ,
242     "Command to login to a remote host to launch solver 1" },
243   { F|S, "RemoteLogin2" , opt_solver_remote_login2 , "" ,
244     "Command to login to a remote host to launch solver 2" },
245   { F|S, "RemoteLogin3" , opt_solver_remote_login3 , "" ,
246     "Command to login to a remote host to launch solver 3" },
247   { F|S, "RemoteLogin4" , opt_solver_remote_login4 , "" ,
248     "Command to login to a remote host to launch solver 4" },
249   { F|S, "RemoteLogin5" , opt_solver_remote_login5 , "",
250     "Command to login to a remote host to launch solver 5" },
251   { F|S, "RemoteLogin6" , opt_solver_remote_login6 , "" ,
252     "Command to login to a remote host to launch solver 6" },
253   { F|S, "RemoteLogin7" , opt_solver_remote_login7 , "" ,
254     "Command to login to a remote host to launch solver 7" },
255   { F|S, "RemoteLogin8" , opt_solver_remote_login8 , "" ,
256     "Command to login to a remote host to launch solver 8" },
257   { F|S, "RemoteLogin9" , opt_solver_remote_login9 , "" ,
258     "Command to login to a remote host to launch solver 9" },
259 
260   { F|O, "SocketName" , opt_solver_socket_name ,
261 #if defined(WIN32) && !defined(__CYGWIN__)
262     "127.0.0.1:0" , // use TCP/IP sockets by default on Windows
263 #else
264     ".gmshsock" , // otherwise use Unix sockets by default
265 #endif
266     "Base name of socket (UNIX socket if the name does not contain a colon, TCP/IP "
267     "otherwise, in the form 'host:baseport'; the actual name/port is constructed "
268     "by appending the unique client id. If baseport is 0 or is not provided, the "
269     "port is chosen automatically (recommended))"},
270 
271   { 0, nullptr , nullptr , "" , nullptr }
272 } ;
273 
274 StringXString PostProcessingOptions_String[] = {
275   { F|O, "DoubleClickedGraphPointCommand" , opt_post_double_clicked_graph_point_command, "" ,
276     "Command parsed when double-clicking on a graph data point "
277     "(e.g. Merge Sprintf('file_%g.pos', PostProcessing.GraphPointX);)" },
278 
279   { F|O, "GraphPointCommand" , opt_post_double_clicked_graph_point_command, "" ,
280     "Synonym for `DoubleClickedGraphPointCommand'" },
281 
282   { 0, nullptr , nullptr , "" , nullptr }
283 } ;
284 
285 StringXString ViewOptions_String[] = {
286   { F|O, "Attributes" , opt_view_attributes , "" ,
287     "Optional string attached to the view. If the string contains 'AlwaysVisible', "
288     "the view will not be hidden when new ones are merged."},
289   { F|O, "AxesFormatX" , opt_view_axes_format0 , "%.3g" ,
290     "Number format for X-axis (in standard C form)" },
291   { F|O, "AxesFormatY" , opt_view_axes_format1 , "%.3g" ,
292     "Number format for Y-axis (in standard C form)" },
293   { F|O, "AxesFormatZ" , opt_view_axes_format2 , "%.3g" ,
294     "Number format for Z-axis (in standard C form)" },
295   { F|O, "AxesLabelX" , opt_view_axes_label0 , "" ,
296     "X-axis label" },
297   { F|O, "AxesLabelY" , opt_view_axes_label1 , "" ,
298     "Y-axis label" },
299   { F|O, "AxesLabelZ" , opt_view_axes_label2 , "" ,
300     "Z-axis label" },
301 
302   { F|O, "DoubleClickedCommand" , opt_view_double_clicked_command , "" ,
303     "Command parsed when double-clicking on the view" },
304 
305   { F,   "FileName" , opt_view_filename , "" ,
306     "Default post-processing view file name" },
307   { F|O, "Format" , opt_view_format , "%.3g" ,
308     "Number format (in standard C form)" },
309 
310   { F|O, "GeneralizedRaiseX" , opt_view_gen_raise0 , "v0" ,
311     "Generalized elevation of the view along X-axis (in model coordinates, "
312     "using formula possibly containing x, y, z, s[tep], t[ime], v0, ... v8)" },
313   { F|O, "GeneralizedRaiseY" , opt_view_gen_raise1 , "v1" ,
314     "Generalized elevation of the view along Y-axis (in model coordinates, "
315     "using formula possibly containing x, y, z, s[tep], t[ime], v0, ... v8)" },
316   { F|O, "GeneralizedRaiseZ" , opt_view_gen_raise2 , "v2" ,
317     "Generalized elevation of the view along Z-axis (in model coordinates, "
318     "using formula possibly containing x, y, z, s[tep], t[ime], v0, ... v8)" },
319   { F|O, "Group" , opt_view_group , "" ,
320     "Group to which this view belongs" },
321 
322   { F,   "Name" , opt_view_name , "" ,
323     "Default post-processing view name" },
324 
325   { F|O, "Stipple0" , opt_view_stipple0 , "1*0x1F1F" ,
326     "First stippling pattern" },
327   { F|O, "Stipple1" , opt_view_stipple1 , "1*0x3333" ,
328     "Second stippling pattern" },
329   { F|O, "Stipple2" , opt_view_stipple2 , "1*0x087F" ,
330     "Third stippling pattern" },
331   { F|O, "Stipple3" , opt_view_stipple3 , "1*0xCCCF" ,
332     "Fourth stippling pattern" },
333   { F|O, "Stipple4" , opt_view_stipple4 , "2*0x1111" ,
334     "Fifth stippling pattern" },
335   { F|O, "Stipple5" , opt_view_stipple5 , "2*0x0F0F" ,
336     "Sixth stippling pattern" },
337   { F|O, "Stipple6" , opt_view_stipple6 , "1*0xCFFF" ,
338     "Seventh stippling pattern" },
339   { F|O, "Stipple7" , opt_view_stipple7 , "2*0x0202" ,
340     "Eighth stippling pattern" },
341   { F|O, "Stipple8" , opt_view_stipple8 , "2*0x087F" ,
342     "Ninth stippling pattern" },
343   { F|O, "Stipple9" , opt_view_stipple9 , "1*0xFFFF" ,
344     "Tenth stippling pattern" },
345 
346   { 0, nullptr , nullptr , "" , nullptr }
347 } ;
348 
349 StringXString PrintOptions_String[] = {
350   { F|O, "ParameterCommand" , opt_print_parameter_command ,
351     "Mesh.Clip=1; View.Clip=1; General.ClipWholeElements=1; "
352     "General.Clip0D=Print.Parameter; SetChanged;" ,
353     "Command parsed when the print parameter is changed" },
354 
355   { 0, nullptr , nullptr , "" , nullptr }
356 } ;
357 
358 // NUMBERS
359 
360 StringXNumber GeneralOptions_Number[] = {
361   { F|O, "AbortOnError" , opt_general_abort_on_error , 0. ,
362     "Abort on error? (0: no, 1: abort meshing, 2: throw an exception unless in "
363     "interactive mode, 3: throw an exception always, 4: exit)" },
364   { F|O, "AlphaBlending" , opt_general_alpha_blending , 1. ,
365     "Enable alpha blending (transparency) in post-processing views" },
366   { F|O, "Antialiasing" , opt_general_antialiasing , 0. ,
367     "Use multisample antialiasing (will slow down rendering)" },
368   { F|O, "ArrowHeadRadius" , opt_general_arrow_head_radius , 0.12 ,
369     "Relative radius of arrow head" },
370   { F|O, "ArrowStemLength" , opt_general_arrow_stem_length , 0.56 ,
371     "Relative length of arrow stem" },
372   { F|O, "ArrowStemRadius" , opt_general_arrow_stem_radius , 0.02 ,
373     "Relative radius of arrow stem" },
374   { F|O, "Axes" , opt_general_axes , 0. ,
375     "Axes (0: none, 1: simple axes, 2: box, 3: full grid, 4: open grid, 5: ruler)" },
376   { F|O, "AxesMikado" , opt_general_axes_mikado , 0. ,
377     "Mikado axes style" },
378   { F|O, "AxesAutoPosition" , opt_general_axes_auto_position , 1. ,
379     "Position the axes automatically" },
380   { F|O, "AxesForceValue" , opt_general_axes_force_value , 0. ,
381     "Force values on axes (otherwise use natural coordinates)" },
382   { F|O, "AxesMaxX" , opt_general_axes_xmax , 1. ,
383     "Maximum X-axis coordinate" },
384   { F|O, "AxesMaxY" , opt_general_axes_ymax , 1. ,
385     "Maximum Y-axis coordinate" },
386   { F|O, "AxesMaxZ" , opt_general_axes_zmax , 1. ,
387     "Maximum Z-axis coordinate" },
388   { F|O, "AxesMinX" , opt_general_axes_xmin , 0. ,
389     "Minimum X-axis coordinate" },
390   { F|O, "AxesMinY" , opt_general_axes_ymin , 0. ,
391     "Minimum Y-axis coordinate" },
392   { F|O, "AxesMinZ" , opt_general_axes_zmin , 0. ,
393     "Minimum Z-axis coordinate" },
394   { F|O, "AxesTicsX" , opt_general_axes_tics0 , 5. ,
395     "Number of tics on the X-axis" },
396   { F|O, "AxesTicsY" , opt_general_axes_tics1 , 5. ,
397     "Number of tics on the Y-axis" },
398   { F|O, "AxesTicsZ" , opt_general_axes_tics2 , 5. ,
399     "Number of tics on the Z-axis" },
400   { F|O, "AxesValueMaxX" , opt_general_axes_value_xmax , 1. ,
401     "Maximum X-axis forced value" },
402   { F|O, "AxesValueMaxY" , opt_general_axes_value_ymax , 1. ,
403     "Maximum Y-axis forced value" },
404   { F|O, "AxesValueMaxZ" , opt_general_axes_value_zmax , 1. ,
405     "Maximum Z-axis forced value" },
406   { F|O, "AxesValueMinX" , opt_general_axes_value_xmin , 0. ,
407     "Minimum X-axis forced value" },
408   { F|O, "AxesValueMinY" , opt_general_axes_value_ymin , 0. ,
409     "Minimum Y-axis forced value" },
410   { F|O, "AxesValueMinZ" , opt_general_axes_value_zmin , 0. ,
411     "Minimum Z-axis forced value" },
412 
413   { F|O, "BackgroundGradient" , opt_general_background_gradient , 1. ,
414     "Draw background gradient (0: none, 1: vertical, 2: horizontal, 3: radial)" },
415   { F|O, "BackgroundImage3D" , opt_general_background_image_3d , 0 ,
416     "Create background image in the 3D model (units = model units) or as "
417     "2D background (units = pixels)" },
418   { F|O, "BackgroundImagePage" , opt_general_background_image_page , 0 ,
419     "Page to render in the background image (for multi-page PDFs)" },
420   { F|O, "BackgroundImagePositionX" , opt_general_background_image_position0 , 0 ,
421     "X position of background image (for 2D background: < 0: measure from right window edge; "
422     ">= 1e5: centered)" },
423   { F|O, "BackgroundImagePositionY" , opt_general_background_image_position1 , 0 ,
424     "Y position of background image (for 2D background: < 0: measure from bottom window edge; "
425     ">= 1e5: centered)" },
426   { F|O, "BackgroundImageWidth" , opt_general_background_image_size0 , -1. ,
427     "Width of background image (0: actual width if height = 0, natural scaling if not; "
428     "-1: graphic window width)" },
429   { F|O, "BackgroundImageHeight" , opt_general_background_image_size1 , -1 ,
430     "Height of background image (0: actual height if width = 0, natural scaling if not; "
431     "-1: graphic window height)" },
432   { F|O, "BoundingBoxSize" , opt_general_lc, 1. ,
433     "Overall bounding box size (read-only)" },
434 
435   { F|O, "Camera" , opt_general_camera_mode, 0. ,
436     "Enable camera view mode" },
437   { F|O, "CameraAperture" , opt_general_camera_aperture, 40. ,
438     "Camera aperture in degrees" },
439   { F|O, "CameraEyeSeparationRatio" , opt_general_eye_sep_ratio, 1.5 ,
440     "Eye separation ratio in % for stereo rendering" },
441   { F|O, "CameraFocalLengthRatio" , opt_general_focallength_ratio, 1.0 ,
442     "Camera Focal length ratio" },
443   { F,   "Clip0A" , opt_general_clip0a , 1.0 ,
444     "First coefficient in equation for clipping plane 0 (`A' in `AX+BY+CZ+D=0')" },
445   { F,   "Clip0B" , opt_general_clip0b , 0.0 ,
446     "Second coefficient in equation for clipping plane 0 (`B' in `AX+BY+CZ+D=0')" },
447   { F,   "Clip0C" , opt_general_clip0c , 0.0 ,
448     "Third coefficient in equation for clipping plane 0 (`C' in `AX+BY+CZ+D=0')" },
449   { F,   "Clip0D" , opt_general_clip0d , 0.0 ,
450     "Fourth coefficient in equation for clipping plane 0 (`D' in `AX+BY+CZ+D=0')" },
451   { F,   "Clip1A" , opt_general_clip1a , 0.0 ,
452     "First coefficient in equation for clipping plane 1" },
453   { F,   "Clip1B" , opt_general_clip1b , 1.0 ,
454     "Second coefficient in equation for clipping plane 1" },
455   { F,   "Clip1C" , opt_general_clip1c , 0.0 ,
456     "Third coefficient in equation for clipping plane 1" },
457   { F,   "Clip1D" , opt_general_clip1d , 0.0 ,
458     "Fourth coefficient in equation for clipping plane 1" },
459   { F,   "Clip2A" , opt_general_clip2a , 0.0 ,
460     "First coefficient in equation for clipping plane 2" },
461   { F,   "Clip2B" , opt_general_clip2b , 0.0 ,
462     "Second coefficient in equation for clipping plane 2" },
463   { F,   "Clip2C" , opt_general_clip2c , 1.0 ,
464     "Third coefficient in equation for clipping plane 2" },
465   { F,   "Clip2D" , opt_general_clip2d , 0.0 ,
466     "Fourth coefficient in equation for clipping plane 2" },
467   { F,   "Clip3A" , opt_general_clip3a , -1.0 ,
468     "First coefficient in equation for clipping plane 3" },
469   { F,   "Clip3B" , opt_general_clip3b , 0.0 ,
470     "Second coefficient in equation for clipping plane 3" },
471   { F,   "Clip3C" , opt_general_clip3c , 0.0 ,
472     "Third coefficient in equation for clipping plane 3" },
473   { F,   "Clip3D" , opt_general_clip3d , 1.0 ,
474     "Fourth coefficient in equation for clipping plane 3" },
475   { F,   "Clip4A" , opt_general_clip4a , 0.0 ,
476     "First coefficient in equation for clipping plane 4" },
477   { F,   "Clip4B" , opt_general_clip4b , -1.0 ,
478     "Second coefficient in equation for clipping plane 4" },
479   { F,   "Clip4C" , opt_general_clip4c , 0.0 ,
480     "Third coefficient in equation for clipping plane 4" },
481   { F,   "Clip4D" , opt_general_clip4d , 1.0 ,
482     "Fourth coefficient in equation for clipping plane 4" },
483   { F,   "Clip5A" , opt_general_clip5a , 0.0 ,
484     "First coefficient in equation for clipping plane 5" },
485   { F,   "Clip5B" , opt_general_clip5b , 0.0 ,
486     "Second coefficient in equation for clipping plane 5" },
487   { F,   "Clip5C" , opt_general_clip5c , -1.0 ,
488     "Third coefficient in equation for clipping plane 5" },
489   { F,   "Clip5D" , opt_general_clip5d , 1.0 ,
490     "Fourth coefficient in equation for clipping plane 5" },
491   { F,   "ClipFactor" , opt_general_clip_factor , 5.0 ,
492     "Near and far clipping plane distance factor (decrease value for better "
493     "z-buffer resolution)" },
494   { F|O, "ClipOnlyDrawIntersectingVolume" ,
495     opt_general_clip_only_draw_intersecting_volume , 0. ,
496     "Only draw layer of elements that intersect the clipping plane" },
497   { F|O, "ClipOnlyVolume" , opt_general_clip_only_volume , 0. ,
498     "Only clip volume elements" },
499   { F|S, "ClipPositionX" , opt_general_clip_position0 , 650. ,
500     "Horizontal position (in pixels) of the upper left corner of the clipping "
501     "planes window" },
502   { F|S, "ClipPositionY" , opt_general_clip_position1 , 150. ,
503     "Vertical position (in pixels) of the upper left corner of the clipping "
504     "planes window" },
505   { F|O, "ClipWholeElements" , opt_general_clip_whole_elements , 0. ,
506     "Clip whole elements" },
507   { F|S, "ColorScheme", opt_general_color_scheme , 1. ,
508     "Default color scheme for graphics (0: light, 1: default, 2: grayscale, 3: dark)" },
509   { F|O, "ConfirmOverwrite" , opt_general_confirm_overwrite, 1. ,
510     "Ask confirmation before overwriting files?" },
511   { F|S, "ContextPositionX" , opt_general_context_position0 , 650. ,
512     "Horizontal position (in pixels) of the upper left corner of the contextual "
513     "windows" },
514   { F|S, "ContextPositionY" , opt_general_context_position1 , 150. ,
515     "Vertical position (in pixels) of the upper left corner of the contextual "
516     "windows" },
517 
518   { F|S, "DetachedMenu" , opt_general_detached_menu , 0. ,
519     "Should the menu window be detached from the graphic window?" },
520   { F|O, "DetachedProcess", opt_general_detached_process, 1. ,
521     "On Windows, should processes created by Gmsh be detached?" },
522   { F|O, "DisplayBorderFactor" , opt_general_display_border_factor , 0.2 ,
523     "Border factor for model display (0: model fits window size exactly)" },
524   { F|O, "DoubleBuffer" , opt_general_double_buffer , 1. ,
525     "Use a double buffered graphic window (on Unix, should be set to 0 when "
526     "working on a remote host without GLX)" },
527   { F|O, "DrawBoundingBoxes" , opt_general_draw_bounding_box, 0. ,
528     "Draw bounding boxes" },
529 
530   { F|O, "ExpertMode" , opt_general_expert_mode, 0. ,
531     "Enable expert mode (to disable all the messages meant for inexperienced "
532     "users)" },
533   { F|S, "ExtraPositionX" , opt_general_extra_position0 , 650. ,
534     "Horizontal position (in pixels) of the upper left corner of the generic extra window" },
535   { F|S, "ExtraPositionY" , opt_general_extra_position1 , 350. ,
536     "Vertical position (in pixels) of the upper left corner of the generic extra window" },
537   { F|S, "ExtraHeight" , opt_general_extra_size1 , 100. ,
538     "Height (in pixels) of the generic extra window" },
539   { F|S, "ExtraWidth" , opt_general_extra_size0 , 100. ,
540     "Width (in pixels) of the generic extra window" },
541 
542  { F|O, "FastRedraw" , opt_general_fast_redraw, 0. ,
543     "Draw simplified model while rotating, panning and zooming" },
544   { F|S, "FieldPositionX" , opt_general_field_position0 , 650. ,
545     "Horizontal position (in pixels) of the upper left corner of the field window" },
546   { F|S, "FieldPositionY" , opt_general_field_position1 , 550. ,
547     "Vertical position (in pixels) of the upper left corner of the field window" },
548   { F|S, "FieldHeight" , opt_general_field_size1 , 320. ,
549     "Height (in pixels) of the field window" },
550   { F|S, "FieldWidth" , opt_general_field_size0 , 420. ,
551     "Width (in pixels) of the field window" },
552   { F|S, "FileChooserPositionX" , opt_general_file_chooser_position0 , 200. ,
553     "Horizontal position (in pixels) of the upper left corner of the file chooser "
554     "windows" },
555   { F|S, "FileChooserPositionY" , opt_general_file_chooser_position1 , 200. ,
556     "Vertical position (in pixels) of the upper left corner of the file chooser "
557     "windows" },
558   { F|S, "FltkColorScheme" , opt_general_gui_color_scheme , 0. ,
559     "FLTK user interface color theme (0: standard, 1:dark)" },
560   { F|O, "FltkRefreshRate" , opt_general_gui_refresh_rate , 5. ,
561     "FLTK user interface maximum refresh rate, per second (0: no limit)" },
562   { F|O, "FontSize" , opt_general_fontsize , -1. ,
563     "Size of the font in the user interface, in pixels (-1: automatic)" },
564 
565   { F|O, "GraphicsFontSize" , opt_general_graphics_fontsize , 15. ,
566     "Size of the font in the graphic window, in pixels" },
567   { F|O, "GraphicsFontSizeTitle" , opt_general_graphics_fontsize_title , 18. ,
568     "Size of the font in the graphic window for titles, in pixels" },
569   { F|S, "GraphicsHeight" , opt_general_graphics_size1 , 600. ,
570     "Height (in pixels) of the graphic window" },
571   { F|S, "GraphicsPositionX" , opt_general_graphics_position0 , 50. ,
572     "Horizontal position (in pixels) of the upper left corner of the graphic "
573     "window" },
574   { F|S, "GraphicsPositionY" , opt_general_graphics_position1 , 50. ,
575     "Vertical position (in pixels) of the upper left corner of the graphic "
576     "window" },
577   { F|S, "GraphicsWidth" , opt_general_graphics_size0 , 800. ,
578     "Width (in pixels) of the graphic window" },
579 
580   { F|S, "HighOrderToolsPositionX" , opt_general_hot_position0 , 650. ,
581     "Horizontal position (in pixels) of the upper left corner of the high-order "
582     "tools window" },
583   { F|S, "HighOrderToolsPositionY" , opt_general_hot_position1 , 150. ,
584     "Vertical position (in pixels) of the upper left corner of the high-order "
585     "tools window" },
586   { F|O, "HighResolutionGraphics" , opt_general_high_resolution_graphics , 1. ,
587     "Use high-resolution OpenGL graphics (e.g. for Macs with retina displays)" },
588 
589   { F|O, "InitialModule", opt_general_initial_context, 0. ,
590     "Module launched on startup (0: automatic, 1: geometry, 2: mesh, 3: solver, "
591     "4: post-processing) " },
592   { F|O, "InputScrolling" , opt_general_input_scrolling , 1. ,
593     "Enable numerical input scrolling in user interface (moving the mouse to change "
594     "numbers)" },
595 
596   { F|O, "Light0" , opt_general_light0 , 1. ,
597     "Enable light source 0" },
598   { F|O, "Light0X" , opt_general_light00 , 0.65 ,
599     "X position of light source 0" },
600   { F|O, "Light0Y" , opt_general_light01 , 0.65 ,
601     "Y position of light source 0" },
602   { F|O, "Light0Z" , opt_general_light02 , 1.0 ,
603     "Z position of light source 0" },
604   { F|O, "Light0W" , opt_general_light03 , 0.0 ,
605     "Divisor of the X, Y and Z coordinates of light source 0 (W=0 means "
606     "infinitely far source)" },
607   { F|O, "Light1" , opt_general_light1 , 0.,
608     "Enable light source 1" },
609   { F|O, "Light1X" , opt_general_light10 , 0.5 ,
610     "X position of light source 1" },
611   { F|O, "Light1Y" , opt_general_light11 , 0.3 ,
612     "Y position of light source 1" },
613   { F|O, "Light1Z" , opt_general_light12 , 1.0 ,
614     "Z position of light source 1" },
615   { F|O, "Light1W" , opt_general_light13 , 0.0 ,
616     "Divisor of the X, Y and Z coordinates of light source 1 (W=0 means infinitely "
617     "far source)" },
618   { F|O, "Light2" , opt_general_light2 , 0.,
619     "Enable light source 2" },
620   { F|O, "Light2X" , opt_general_light20 , 0.5 ,
621     "X position of light source 2" },
622   { F|O, "Light2Y" , opt_general_light21 , 0.3 ,
623     "Y position of light source 2" },
624   { F|O, "Light2Z" , opt_general_light22 , 1.0 ,
625     "Z position of light source 2" },
626   { F|O, "Light2W" , opt_general_light23 , 0.0 ,
627     "Divisor of the X, Y and Z coordinates of light source 2 (W=0 means infinitely "
628     "far source)" },
629   { F|O, "Light3" , opt_general_light3 , 0.,
630     "Enable light source 3" },
631   { F|O, "Light3X" , opt_general_light30 , 0.5 ,
632     "X position of light source 3" },
633   { F|O, "Light3Y" , opt_general_light31 , 0.3 ,
634     "Y position of light source 3" },
635   { F|O, "Light3Z" , opt_general_light32 , 1.0 ,
636     "Z position of light source 3" },
637   { F|O, "Light3W" , opt_general_light33 , 0.0 ,
638     "Divisor of the X, Y and Z coordinates of light source 3 (W=0 means infinitely "
639     "far source)" },
640   { F|O, "Light4" , opt_general_light4 , 0.,
641     "Enable light source 4" },
642   { F|O, "Light4X" , opt_general_light40 , 0.5 ,
643     "X position of light source 4" },
644   { F|O, "Light4Y" , opt_general_light41 , 0.3 ,
645     "Y position of light source 4" },
646   { F|O, "Light4Z" , opt_general_light42 , 1.0 ,
647     "Z position of light source 4" },
648   { F|O, "Light4W" , opt_general_light43 , 0.0 ,
649     "Divisor of the X, Y and Z coordinates of light source 4 (W=0 means infinitely "
650     "far source)" },
651   { F|O, "Light5" , opt_general_light5 , 0.,
652     "Enable light source 5" },
653   { F|O, "Light5X" , opt_general_light50 , 0.5 ,
654     "X position of light source 5" },
655   { F|O, "Light5Y" , opt_general_light51 , 0.3 ,
656     "Y position of light source 5" },
657   { F|O, "Light5Z" , opt_general_light52 , 1.0 ,
658     "Z position of light source 5" },
659   { F|O, "Light5W" , opt_general_light53 , 0.0 ,
660     "Divisor of the X, Y and Z coordinates of light source 5 (W=0 means infinitely "
661     "far source)" },
662   { F|O, "LineWidth" , opt_general_line_width , 1.0 ,
663     "Display width of lines (in pixels)" },
664 
665   { F|S, "ManipulatorPositionX" , opt_general_manip_position0 , 650. ,
666     "Horizontal position (in pixels) of the upper left corner of the manipulator "
667     "window" },
668   { F|S, "ManipulatorPositionY" , opt_general_manip_position1 , 150. ,
669     "Vertical position (in pixels) of the upper left corner of the manipulator "
670     "window" },
671   { F,   "MaxX" , opt_general_xmax , 0. ,
672     "Maximum model coordinate along the X-axis (read-only)" },
673   { F,   "MaxY" , opt_general_ymax , 0. ,
674     "Maximum model coordinate along the Y-axis (read-only)" },
675   { F,   "MaxZ" , opt_general_zmax , 0. ,
676     "Maximum model coordinate along the Z-axis (read-only)" },
677   { F|S, "MenuWidth" , opt_general_menu_size0 , 200. ,
678     "Width (in pixels) of the menu tree" },
679   { F|S, "MenuHeight" , opt_general_menu_size1 , 200. ,
680     "Height (in pixels) of the (detached) menu tree" },
681   { F|S, "MenuPositionX" , opt_general_menu_position0 , 400. ,
682     "Horizontal position (in pixels) of the (detached) menu tree" },
683   { F|S, "MenuPositionY" , opt_general_menu_position1 , 400. ,
684     "Vertical position (in pixels) of the (detached) menu tree" },
685   { F|O, "MessageFontSize" , opt_general_message_fontsize , -1. ,
686     "Size of the font in the message window, in pixels (-1: automatic)" },
687   { F|S, "MessageHeight" , opt_general_message_size , 300. ,
688     "Height (in pixels) of the message console when it is visible (should be > 0)" },
689   { F,   "MinX" , opt_general_xmin , 0. ,
690     "Minimum model coordinate along the X-axis (read-only)" },
691   { F,   "MinY" , opt_general_ymin , 0. ,
692     "Minimum model coordinate along the Y-axis (read-only)" },
693   { F,   "MinZ" , opt_general_zmin , 0. ,
694     "Minimum model coordinate along the Z-axis (read-only)" },
695   { F|O, "MouseHoverMeshes" , opt_general_mouse_hover_meshes , 0. ,
696     "Enable mouse hover on meshes" },
697   { F|O, "MouseSelection" , opt_general_mouse_selection , 1. ,
698     "Enable mouse selection" },
699   { F|O, "MouseInvertZoom" , opt_general_mouse_invert_zoom , 0. ,
700     "Invert mouse wheel zoom direction" },
701 
702   { F|S, "NativeFileChooser" , opt_general_native_file_chooser ,
703 #if defined(__APPLE__) || defined(WIN32)
704     1. ,
705 #else
706     0. ,
707 #endif
708     "Use the native file chooser?" },
709   { F|S, "NonModalWindows" , opt_general_non_modal_windows , 1. ,
710     "Force all control windows to be on top of the graphic window "
711     "(\"non-modal\")" },
712   { F|O, "NoPopup" , opt_general_nopopup , 0. ,
713     "Disable interactive dialog windows in scripts (and use default values "
714     "instead)" },
715   { F|O, "NumThreads" , opt_general_num_threads , 1. ,
716     "Set the maximum number of threads when Gmsh is compiled with OpenMP support "
717     "(0: use system default, i.e. OMP_NUM_THREADS)"},
718 
719   { F|S, "OptionsPositionX" , opt_general_option_position0 , 650. ,
720     "Horizontal position (in pixels) of the upper left corner of the option "
721     "window" },
722   { F|S, "OptionsPositionY" , opt_general_option_position1 , 150. ,
723     "Vertical position (in pixels) of the upper left corner of the option window" },
724   { F|O, "Orthographic" , opt_general_orthographic , 1. ,
725     "Orthographic projection mode (0: perspective projection)" },
726 
727   { F|S, "PluginPositionX" , opt_general_plugin_position0 , 650. ,
728     "Horizontal position (in pixels) of the upper left corner of the plugin "
729     "window" },
730   { F|S, "PluginPositionY" , opt_general_plugin_position1 , 550. ,
731     "Vertical position (in pixels) of the upper left corner of the plugin window" },
732   { F|S, "PluginHeight" , opt_general_plugin_size1 , 320. ,
733     "Height (in pixels) of the plugin window" },
734   { F|S, "PluginWidth" , opt_general_plugin_size0 , 420. ,
735     "Width (in pixels) of the plugin window" },
736   { F|O, "PointSize" , opt_general_point_size , 3. ,
737     "Display size of points (in pixels)" },
738   { F|O, "PolygonOffsetAlwaysOn" , opt_general_polygon_offset_always , 0. ,
739     "Always apply polygon offset, instead of trying to detect when it is required" },
740   { F|O, "PolygonOffsetFactor" , opt_general_polygon_offset_factor ,
741 #if defined(__APPLE__)
742     0.5 ,
743 #else
744     1.0 ,
745 #endif
746     "Polygon offset factor (offset = factor * DZ + r * units)" },
747   { F|O, "PolygonOffsetUnits" , opt_general_polygon_offset_units , 1. ,
748     "Polygon offset units (offset = factor * DZ + r * units)" },
749   { F|O, "ProgressMeterStep" , opt_general_progress_meter_step , 10. ,
750     "Increment (in percent) of the progress meter bar" },
751 
752   { F|O, "QuadricSubdivisions" , opt_general_quadric_subdivisions, 6. ,
753     "Number of subdivisions used to draw points or lines as spheres or cylinders" },
754 
755   { F,   "RotationX" , opt_general_rotation0 , 0.0 ,
756     "First Euler angle (used if Trackball=0)" },
757   { F,   "RotationY" , opt_general_rotation1 , 0.0 ,
758     "Second Euler angle (used if Trackball=0)" },
759   { F,   "RotationZ" , opt_general_rotation2 , 0.0 ,
760     "Third Euler angle (used if Trackball=0)" },
761   { F|O, "RotationCenterGravity" , opt_general_rotation_center_cg , 1. ,
762     "Rotate around the (pseudo) center of mass instead of (RotationCenterX, "
763     "RotationCenterY, RotationCenterZ)" },
764   { F,   "RotationCenterX" , opt_general_rotation_center0 , 0.0 ,
765     "X coordinate of the center of rotation" },
766   { F,   "RotationCenterY" , opt_general_rotation_center1 , 0.0 ,
767     "Y coordinate of the center of rotation" },
768   { F,   "RotationCenterZ" , opt_general_rotation_center2 , 0.0 ,
769     "Z coordinate of the center of rotation" },
770 
771   { F|S, "SaveOptions" , opt_general_options_save, 0. ,
772     "Automatically save current options in General.OptionsFileName (1) or per model (2)"
773     "when the graphical user interface is closed?" },
774   { F|S, "SaveSession" , opt_general_session_save, 1. ,
775     "Automatically save session specific information in General.SessionFileName "
776     "when the graphical user interface is closed?" },
777   { F,   "ScaleX" , opt_general_scale0 , 1.0 ,
778     "X-axis scale factor" },
779   { F,   "ScaleY" , opt_general_scale1 , 1.0 ,
780     "Y-axis scale factor" },
781   { F,   "ScaleZ" , opt_general_scale2 , 1.0 ,
782     "Z-axis scale factor" },
783   { F|O, "Shininess" , opt_general_shine , 0.4 ,
784     "Material shininess" },
785   { F|O, "ShininessExponent" , opt_general_shine_exponent , 40. ,
786     "Material shininess exponent (between 0 and 128)" },
787   { F|O, "ShowModuleMenu" , opt_general_show_module_menu , 1. ,
788     "Show the standard Gmsh menu in the tree" },
789   { F|O, "ShowOptionsOnStartup", opt_general_show_options_on_startup, 0. ,
790     "Show option window on startup" },
791   { F|O, "ShowMessagesOnStartup", opt_general_show_messages_on_startup, 0. ,
792     "Show message window on startup" },
793   { F|O, "SmallAxes" , opt_general_small_axes , 1. ,
794     "Display the small axes" },
795   { F|O, "SmallAxesPositionX" , opt_general_small_axes_position0 , -60. ,
796     "X position (in pixels) of small axes (< 0: measure from right window edge; >= 1e5:"
797     " centered)" },
798   { F|O, "SmallAxesPositionY" , opt_general_small_axes_position1 , -40. ,
799     "Y position (in pixels) of small axes (< 0: measure from bottom window edge; >= 1e5:"
800     " centered)" },
801   { F|O, "SmallAxesSize" , opt_general_small_axes_size , 30. ,
802     "Size (in pixels) of small axes" },
803   { F|S, "StatisticsPositionX" , opt_general_statistics_position0 , 650. ,
804     "Horizontal position (in pixels) of the upper left corner of the statistic "
805     "window" },
806   { F|S, "StatisticsPositionY" , opt_general_statistics_position1 , 150. ,
807     "Vertical position (in pixels) of the upper left corner of the statistic"
808     " window" },
809   { F|O, "Stereo" , opt_general_stereo_mode , 0. ,
810     "Use stereo rendering" },
811   { F|S, "SystemMenuBar" , opt_general_system_menu_bar , 1. ,
812     "Use the system menu bar on Mac OS X?" },
813 
814   { F|O, "Terminal" , opt_general_terminal , 0. ,
815     "Should information be printed on the terminal (if available)?" },
816   { F|O, "Tooltips" , opt_general_tooltips , 1. ,
817     "Show tooltips in the user interface" },
818   { F|O, "Trackball" , opt_general_trackball , 1. ,
819     "Use trackball rotation mode" },
820   { F|O, "TrackballHyperbolicSheet" , opt_general_trackball_hyperbolic_sheet , 1. ,
821     "Use hyperbolic sheet away from trackball center for z-rotations" },
822   { F,   "TrackballQuaternion0" , opt_general_quaternion0 , 0.0 ,
823     "First trackball quaternion component (used if General.Trackball=1)" },
824   { F,   "TrackballQuaternion1" , opt_general_quaternion1 , 0.0 ,
825     "Second trackball quaternion component (used if General.Trackball=1)" },
826   { F,   "TrackballQuaternion2" , opt_general_quaternion2 , 0.0 ,
827     "Third trackball quaternion component (used if General.Trackball=1)" },
828   { F,   "TrackballQuaternion3" , opt_general_quaternion3 , 1.0 ,
829     "Fourth trackball quaternion component (used if General.Trackball=1)" },
830   { F,   "TranslationX" , opt_general_translation0 , 0.0 ,
831     "X-axis translation (in model units)" },
832   { F,   "TranslationY" , opt_general_translation1 , 0.0 ,
833     "Y-axis translation (in model units)" },
834   { F,   "TranslationZ" , opt_general_translation2 , 0.0 ,
835     "Z-axis translation (in model units)" },
836 
837   { F|O, "VectorType" , opt_general_vector_type , 4 ,
838     "Default vector display type (for normals, etc.)" },
839   { F|O, "Verbosity" , opt_general_verbosity , 5. ,
840     "Level of information printed on the terminal and the message console "
841     "(0: silent except for fatal errors, 1: +errors, 2: +warnings, 3: +direct, "
842     "4: +information, 5: +status, 99: +debug)" },
843   { F|S, "VisibilityPositionX" , opt_general_visibility_position0 , 650. ,
844     "Horizontal position (in pixels) of the upper left corner of the visibility "
845     "window" },
846   { F|S, "VisibilityPositionY" , opt_general_visibility_position1 , 150. ,
847     "Vertical position (in pixels) of the upper left corner of the visibility "
848     "window" },
849 
850   { F|O, "ZoomFactor" , opt_general_zoom_factor , 4.0 ,
851     "Middle mouse button zoom acceleration factor" },
852 
853   { 0, nullptr , nullptr , 0. , nullptr }
854 } ;
855 
856 StringXNumber GeometryOptions_Number[] = {
857   { F|O, "AutoCoherence" , opt_geometry_auto_coherence , 1. ,
858     "Should all duplicate entities be automatically removed with the built-in "
859     "geometry kernel? If Geometry.AutoCoherence = 2, also remove degenerate "
860     "entities. The option has no effect with the OpenCASCADE kernel"},
861 
862   { F,   "Clip" , opt_geometry_clip , 0.,
863     "Enable clipping planes? (Plane[i]=2^i, i=0,...,5)" },
864   { F|O, "CopyMeshingMethod" , opt_geometry_copy_meshing_method, 0. ,
865     "Copy meshing method (unstructured or transfinite) when duplicating geometrical "
866     "entities with built-in geometry kernel?" },
867   { F|O, "Curves" , opt_geometry_curves , 1. ,
868     "Display geometry curves?" },
869   { F|O, "CurveLabels" , opt_geometry_curve_labels , 0. ,
870     "Display curve labels?" },
871   { F|O|D, "CurveNumbers" , opt_geometry_curve_labels , 0. ,
872     "[Deprecated]" },
873   { F|O, "CurveSelectWidth" , opt_geometry_curve_sel_width , 3. ,
874     "Display width of selected curves (in pixels)" },
875   { F|O, "CurveType" , opt_geometry_curve_type , 0. ,
876     "Display curves as solid color segments (0), 3D cylinders (1) or tapered "
877     "cylinders (2)" },
878   { F|O, "CurveWidth" , opt_geometry_curve_width , 2. ,
879     "Display width of lines (in pixels)" },
880 
881   { F, "DoubleClickedEntityTag" , opt_geometry_double_clicked_entity_tag, 0. ,
882     "Tag of last double-clicked geometrical entity" },
883 
884   { F|O, "ExactExtrusion" , opt_geometry_exact_extrusion, 1. ,
885     "Use exact extrusion formula in interpolations (set to 0 to allow "
886     "geometrical transformations of extruded entities)" },
887   { F|O, "ExtrudeReturnLateralEntities" , opt_geometry_extrude_return_lateral, 1. ,
888     "Add lateral entities in lists returned by extrusion commands?" },
889   { F|O, "ExtrudeSplinePoints" , opt_geometry_extrude_spline_points, 5. ,
890     "Number of control points for splines created during extrusion" },
891 
892   { F|O, "HighlightOrphans" , opt_geometry_highlight_orphans, 0. ,
893     "Highlight orphan and boundary curves and surfaces?" },
894 
895   { F|O, "LabelType" , opt_geometry_label_type , 0. ,
896     "Type of entity label (0: description, 1: elementary entity tag, "
897     "2: physical group tag, 3: elementary name, 4: physical name)" },
898   { F|O, "Light" , opt_geometry_light , 1. ,
899     "Enable lighting for the geometry" },
900   { F|O, "LightTwoSide" , opt_geometry_light_two_side , 1. ,
901     "Light both sides of surfaces (leads to slower rendering)" },
902   { F|O|D, "Lines" , opt_geometry_curves , 1. ,
903     "[Deprecated]" },
904   { F|O|D, "LineNumbers" , opt_geometry_curve_labels , 0. ,
905     "[Deprecated]" },
906   { F|O|D, "LineSelectWidth" , opt_geometry_curve_sel_width , 3. ,
907     "[Deprecated]" },
908   { F|O|D, "LineType" , opt_geometry_curve_type , 0. ,
909     "[Deprecated]" },
910   { F|O|D, "LineWidth" , opt_geometry_curve_width , 2. ,
911     "[Deprecated]" },
912 
913   { F|O, "MatchGeomAndMesh" , opt_geometry_match_geom_and_mesh, 0 ,
914     "Matches geometries and meshes" },
915   { F|O, "MatchMeshScaleFactor" , opt_geometry_match_mesh_scale_factor, 1 ,
916     "Rescaling factor for the mesh to correspond to size of the geometry" },
917   { F|O, "MatchMeshTolerance", opt_geometry_match_mesh_tolerance, 1e-6,
918     "Tolerance for matching mesh and geometry"},
919 
920   { F|O, "Normals" , opt_geometry_normals , 0. ,
921     "Display size of normal vectors (in pixels)" },
922   { F|O, "NumSubEdges" , opt_geometry_num_sub_edges , 40. ,
923     "Number of edge subdivisions between control points when displaying curves" },
924 
925   { F|O, "OCCAutoEmbed" , opt_geometry_occ_auto_embed , 1. ,
926     "Automatically embed points, curves and faces in higher dimensional entities if "
927     "they are marked as 'internal' by OpenCASCADE" },
928   { F|O, "OCCAutoFix" , opt_geometry_occ_auto_fix , 1. ,
929     "Automatically fix orientation of wires, faces, shells and volumes when creating "
930     "new entities with the OpenCASCADE kernel" },
931   { F|O, "OCCBooleanPreserveNumbering" , opt_geometry_occ_boolean_preserve_numbering , 1. ,
932     "Try to preserve the numbering of entities through OpenCASCADE boolean operations" },
933   { F|O, "OCCBoundsUseStl" , opt_geometry_occ_bounds_use_stl , 0. ,
934     "Use STL mesh for computing bounds of OpenCASCADE shapes (more accurate, but slower)" },
935   { F|O, "OCCDisableStl" , opt_geometry_occ_disable_stl , 0. ,
936     "Disable STL creation in OpenCASCADE kernel" },
937   { F|O, "OCCFixDegenerated" , opt_geometry_occ_fix_degenerated , 0. ,
938     "Fix degenerated edges/faces when importing STEP, IGES and BRep models with the "
939     "OpenCASCADE kernel" },
940   { F|O, "OCCFixSmallEdges" , opt_geometry_occ_fix_small_edges , 0. ,
941     "Fix small edges when importing STEP, IGES and BRep models with the "
942     "OpenCASCADE kernel" },
943   { F|O, "OCCFixSmallFaces" , opt_geometry_occ_fix_small_faces , 0. ,
944     "Fix small faces when importing STEP, IGES and BRep models with the "
945     "OpenCASCADE kernel" },
946   { F|O, "OCCImportLabels" , opt_geometry_occ_import_labels , 1. ,
947     "Import labels and colors when importing STEP models with the OpenCASCADE kernel" },
948   { F|O, "OCCMakeSolids" , opt_geometry_occ_make_solids , 0. ,
949     "Fix shells and make solids when importing STEP, IGES and BRep models with the "
950     "OpenCASCADE kernel" },
951   { F|O, "OCCParallel" , opt_geometry_occ_parallel , 0. ,
952     "Use multi-threaded OpenCASCADE boolean operators" },
953   { F|O, "OCCScaling" , opt_geometry_occ_scaling , 1. ,
954     "Scale STEP, IGES and BRep models by the given factor when importing them with the "
955     "OpenCASCADE kernel" },
956   { F|O, "OCCSewFaces" , opt_geometry_occ_sew_faces , 0. ,
957     "Sew faces when importing STEP, IGES and BRep models with the OpenCASCADE kernel" },
958   { F|O, "OCCThruSectionsDegree" , opt_geometry_occ_thrusections_degree , -1. ,
959     "Maximum degree of surfaces generated by thrusections with the OpenCASCADE kernel, "
960     "if not explicitly specified (default OCC value if negative)" },
961   { F|O, "OCCUnionUnify" , opt_geometry_occ_union_unify , 1. ,
962     "Try to unify faces and edges (remove internal seams) which lie on the same geometry "
963     "after performing a boolean union with the OpenCASCADE kernel" },
964   { F|O, "OCCUseGenericClosestPoint" , opt_geometry_occ_use_generic_closest_point , 0. ,
965     "Use generic algrithm to compute point projections in the OpenCASCADE kernel "
966     "(less robust, but significally faster in some configurations)" },
967   { F,   "OffsetX" , opt_geometry_offset0 , 0. ,
968     "Model display offset along X-axis (in model coordinates)" },
969   { F,   "OffsetY" , opt_geometry_offset1 , 0. ,
970     "Model display offset along Y-axis (in model coordinates)" },
971   { F,   "OffsetZ" , opt_geometry_offset2 , 0. ,
972     "Model display offset along Z-axis (in model coordinates)" },
973   { F|O, "OldCircle" , opt_geometry_old_circle , 0. ,
974     "Use old circle description (compatibility option for old Gmsh geometries)" },
975   { F|O, "OldRuledSurface" , opt_geometry_old_ruled_surface , 0. ,
976     "Use old 3-sided ruled surface interpolation (compatibility option for old Gmsh geometries)" },
977   { F|O, "OldNewReg" , opt_geometry_old_newreg , 1. ,
978     "Use old newreg definition for geometrical transformations (compatibility "
979     "option for old Gmsh geometries)" },
980   { F|O, "OrientedPhysicals" , opt_geometry_oriented_physicals, 1. ,
981     "Use sign of elementary entity in physical definition as orientation indicator" },
982 
983   { F|O, "Points" , opt_geometry_points , 1. ,
984     "Display geometry points?" },
985   { F|O, "PointLabels" , opt_geometry_point_labels , 0. ,
986     "Display points labels?" },
987   { F|O|D, "PointNumbers" , opt_geometry_point_labels , 0. ,
988     "[Deprecated]" },
989   { F|O, "PointSelectSize" , opt_geometry_point_sel_size , 6. ,
990     "Display size of selected points (in pixels)" },
991   { F|O, "PointSize" , opt_geometry_point_size , 4. ,
992     "Display size of points (in pixels)" },
993   { F|O, "PointType" , opt_geometry_point_type , 0. ,
994     "Display points as solid color dots (0) or 3D spheres (1)" },
995 
996   { F|O, "ReparamOnFaceRobust" , opt_geometry_reparam_on_face_robust, 0 ,
997     "Use projection for reparametrization of a point classified on GEdge on a GFace" },
998 
999   { F|O, "ScalingFactor" , opt_geometry_scaling_factor , 1.0 ,
1000     "Global geometry scaling factor" },
1001   { F|O, "SnapPoints" , opt_geometry_snap_points , 1. ,
1002     "Snap points on curves if their evaluation using the parametrization is larger "
1003     "than the geometrical tolerance (currently only with the OpenCASCADE kernel)"},
1004   { F|O, "SnapX" , opt_geometry_snap0 , 0.1 ,
1005     "Snapping grid spacing along the X-axis" },
1006   { F|O, "SnapY" , opt_geometry_snap1 , 0.1 ,
1007     "Snapping grid spacing along the Y-axis" },
1008   { F|O, "SnapZ" , opt_geometry_snap2 , 0.1 ,
1009     "Snapping grid spacing along the Z-axis" },
1010   { F|O, "Surfaces" , opt_geometry_surfaces , 0. ,
1011     "Display geometry surfaces?" },
1012   { F|O, "SurfaceLabels" , opt_geometry_surface_labels , 0. ,
1013     "Display surface labels?" },
1014   { F|O|D, "SurfaceNumbers" , opt_geometry_surface_labels , 0. ,
1015     "[Deprecated]" },
1016   { F|O, "SurfaceType" , opt_geometry_surface_type , 0. ,
1017     "Surface display type (0: cross, 1: wireframe, 2: solid). Wireframe and solid "
1018     "are not available with the built-in geometry kernel." },
1019 
1020   { F|O, "Tangents" , opt_geometry_tangents , 0. ,
1021     "Display size of tangent vectors (in pixels)" },
1022   { F|O, "Tolerance" , opt_geometry_tolerance, 1.e-8 ,
1023     "Geometrical tolerance" },
1024   { F|O, "ToleranceBoolean" , opt_geometry_tolerance_boolean, 0. ,
1025     "Geometrical tolerance for boolean operations" },
1026   { F,   "Transform" , opt_geometry_transform , 0. ,
1027     "Transform model display coordinates (0: no, 1: scale)" },
1028   { F,   "TransformXX" , opt_geometry_transform00 , 1. ,
1029     "Element (1,1) of the 3x3 model display transformation matrix" },
1030   { F,   "TransformXY" , opt_geometry_transform01 , 0. ,
1031     "Element (1,2) of the 3x3 model display transformation matrix" },
1032   { F,   "TransformXZ" , opt_geometry_transform02 , 0. ,
1033     "Element (1,3) of the 3x3 model display transformation matrix" },
1034   { F,   "TransformYX" , opt_geometry_transform10 , 0. ,
1035     "Element (2,1) of the 3x3 model display transformation matrix" },
1036   { F,   "TransformYY" , opt_geometry_transform11 , 1. ,
1037     "Element (2,2) of the 3x3 model display transformation matrix" },
1038   { F,   "TransformYZ" , opt_geometry_transform12 , 0. ,
1039     "Element (2,3) of the 3x3 model display transformation matrix" },
1040   { F,   "TransformZX" , opt_geometry_transform20 , 0. ,
1041     "Element (3,1) of the 3x3 model display transformation matrix" },
1042   { F,   "TransformZY" , opt_geometry_transform21 , 0. ,
1043     "Element (3,2) of the 3x3 model display transformation matrix" },
1044   { F,   "TransformZZ" , opt_geometry_transform22 , 1. ,
1045     "Element (3,3) of the 3x3 model display transformation matrix" },
1046 
1047   { F|O, "Volumes" , opt_geometry_volumes , 0. ,
1048     "Display geometry volumes?" },
1049   { F|O, "VolumeLabels" , opt_geometry_volume_labels , 0. ,
1050     "Display volume labels?" },
1051   { F|O|D, "VolumeNumbers" , opt_geometry_volume_labels , 0. ,
1052     "[Deprecated]" },
1053 
1054   { 0, nullptr , nullptr , 0. , nullptr }
1055 } ;
1056 
1057 StringXNumber MeshOptions_Number[] = {
1058   { F|O, "Algorithm" , opt_mesh_algo2d , ALGO_2D_FRONTAL ,
1059     "2D mesh algorithm (1: MeshAdapt, 2: Automatic, 3: Initial mesh only, "
1060     "5: Delaunay, 6: Frontal-Delaunay, 7: BAMG, 8: Frontal-Delaunay for Quads, "
1061     "9: Packing of Parallelograms)" },
1062   { F|O, "Algorithm3D" , opt_mesh_algo3d , ALGO_3D_DELAUNAY ,
1063     "3D mesh algorithm (1: Delaunay, 3: Initial mesh only, 4: Frontal, "
1064     "7: MMG3D, 9: R-tree, 10: HXT)" },
1065   { F|O, "AlgorithmSwitchOnFailure" , opt_mesh_algo_switch_on_failure , 1 ,
1066     "Switch meshing algorithm on failure? (Currently only for 2D Delaunay-based "
1067     "algorithms, switching to MeshAdapt)"},
1068   { F|O, "AngleSmoothNormals" , opt_mesh_angle_smooth_normals , 30.0 ,
1069     "Threshold angle below which normals are not smoothed" },
1070   { F|O, "AngleToleranceFacetOverlap" , opt_mesh_angle_tolerance_facet_overlap , 0.1,
1071     "Consider connected facets as overlapping when the dihedral angle between the facets is "
1072     "smaller than the user's defined tolerance (in degrees)" },
1073   { F|O, "AnisoMax" , opt_mesh_aniso_max, 1.e33,
1074     "Maximum anisotropy of the mesh" },
1075   { F|O, "AllowSwapAngle" , opt_mesh_allow_swap_edge_angle , 10.0 ,
1076     "Threshold angle (in degrees) between faces normals under which we allow "
1077     "an edge swap" },
1078 
1079   { F|O, "BdfFieldFormat" , opt_mesh_bdf_field_format , 1. ,
1080     "Field format for Nastran BDF files (0: free, 1: small, 2: large)" },
1081   { F|O, "Binary" , opt_mesh_binary , 0. ,
1082     "Write mesh files in binary format (if possible)" },
1083   { F|O, "BoundaryLayerFanElements" , opt_mesh_boundary_layer_fan_elements, 5. ,
1084     "Number of elements (per Pi radians) for 2D boundary layer fans" },
1085   { F|O|D, "BoundaryLayerFanPoints" , opt_mesh_boundary_layer_fan_elements, 5. ,
1086     "[Deprecated]" },
1087 
1088   { F|O, "CgnsImportOrder" , opt_mesh_cgns_import_order , 1. ,
1089    "Order of the mesh to be created by coarsening CGNS structured zones (1 to "
1090    "4)" },
1091   { F|O, "CgnsImportIgnoreBC" , opt_mesh_cgns_import_ignore_bc , 0. ,
1092    "Ignore information in ZoneBC structures when reading a CGNS file" },
1093   { F|O, "CgnsImportIgnoreSolution" , opt_mesh_cgns_import_ignore_solution , 0. ,
1094    "Ignore solution when reading a CGNS file" },
1095   { F|O, "CgnsConstructTopology" , opt_mesh_cgns_construct_topology , 0. ,
1096    "Reconstruct the model topology (BREP) after reading a CGNS file" },
1097   { F|O, "CgnsExportCPEX0045" , opt_mesh_cgns_export_cpex0045 , 0. ,
1098    "Use the CPEX0045 convention when exporting a high-order mesh to CGNS" },
1099   { F|O, "CgnsExportStructured" , opt_mesh_cgns_export_structured , 0. ,
1100    "Export transfinite meshes as structured CGNS grids" },
1101   { F|O|D, "CharacteristicLengthExtendFromBoundary" ,
1102     opt_mesh_lc_extend_from_boundary, 1. ,
1103     "[Deprecated]"},
1104   { F|O|D, "CharacteristicLengthFactor" , opt_mesh_lc_factor , 1.0 ,
1105     "[Deprecated]" },
1106   { F|O|D, "CharacteristicLengthMin" , opt_mesh_lc_min, 0.0 ,
1107     "[Deprecated]" },
1108   { F|O|D, "CharacteristicLengthMax" , opt_mesh_lc_max, 1.e22,
1109     "[Deprecated]" },
1110   { F|O|D, "CharacteristicLengthFromCurvature" , opt_mesh_lc_from_curvature , 0. ,
1111     "[Deprecated]" },
1112   { F|O|D, "CharacteristicLengthFromPoints" , opt_mesh_lc_from_points , 1. ,
1113     "[Deprecated]" },
1114   { F|O|D, "CharacteristicLengthFromParametricPoints" , opt_mesh_lc_from_parametric_points , 0. ,
1115     "[Deprecated]"},
1116   { F,   "Clip" , opt_mesh_clip , 0.,
1117     "Enable clipping planes? (Plane[i]=2^i, i=0,...,5)" },
1118   { F|O, "ColorCarousel" , opt_mesh_color_carousel , 1. ,
1119     "Mesh coloring (0: by element type, 1: by elementary entity, 2: by physical "
1120     "group, 3: by mesh partition)" },
1121   { F|O, "CompoundClassify" , opt_mesh_compound_classify , 1. ,
1122     "How are surface mesh elements classified on compounds? (0: on the new discrete "
1123     "surface, 1: on the original geometrical surfaces - incompatible with e.g. high-order "
1124     "meshing)" },
1125   { F|O|D, "CompoundCharacteristicLengthFactor" , opt_mesh_compound_lc_factor , 0.5 ,
1126     "[Deprecated]" },
1127   { F|O, "CompoundMeshSizeFactor" , opt_mesh_compound_lc_factor , 0.5 ,
1128     "Mesh size factor applied to compound parts" },
1129   { F,   "CpuTime" , opt_mesh_cpu_time , 0. ,
1130     "CPU time (in seconds) for the generation of the current mesh (read-only)" },
1131   { F|O, "CreateTopologyMsh2" , opt_mesh_create_topology_msh2, 0. ,
1132     "Attempt to (re)create the model topology when reading MSH2 files" },
1133 
1134   { F|O, "DrawSkinOnly" , opt_mesh_draw_skin_only , 0. ,
1135     "Draw only the skin of 3D meshes?" },
1136   { F|O, "Dual" , opt_mesh_dual , 0. ,
1137     "Display the dual mesh obtained by barycentric subdivision" },
1138 
1139   { F|O, "ElementOrder" , opt_mesh_order , 1. ,
1140     // "Order" is a reserved token in the parser
1141     "Element order (1: first order elements)" },
1142   { F|O, "Explode" , opt_mesh_explode , 1.0 ,
1143     "Element shrinking factor (between 0 and 1)" },
1144 
1145   { F|O, "FirstElementTag" , opt_mesh_first_element_tag , 1. ,
1146     "First tag (>= 1) of mesh elements when generating or renumbering a mesh" },
1147   { F|O, "FirstNodeTag" , opt_mesh_first_node_tag , 1. ,
1148     "First tag (>= 1) of mesh nodes when generating or renumbering a mesh" },
1149   { F|O, "FlexibleTransfinite" , opt_mesh_flexible_transfinite , 0 ,
1150     "Allow transfinite constraints to be modified for recombination (e.g. Blossom) or "
1151     "by global mesh size factor" },
1152   { F|O, "Format" , opt_mesh_file_format , FORMAT_AUTO ,
1153     "Mesh output format (1: msh, 2: unv, 10: auto, 16: vtk, 19: vrml, 21: mail, "
1154     "26: pos stat, 27: stl, 28: p3d, 30: mesh, 31: bdf, 32: cgns, 33: med, 34: diff, "
1155     "38: ir3, 39: inp, 40: ply2, 41: celum, 42: su2, 47: tochnog, 49: neu, 50: matlab)" },
1156   { F|O, "Hexahedra" , opt_mesh_hexahedra , 1. ,
1157     "Display mesh hexahedra?" },
1158 
1159   { F|O, "HighOrderDistCAD", opt_mesh_ho_dist_cad, 0,
1160     "Try to optimize distance to CAD in high-order optimizer?"},
1161   { F|O, "HighOrderIterMax", opt_mesh_ho_iter_max, 100,
1162     "Maximum number of iterations in high-order optimization pass"},
1163   { F|O, "HighOrderNumLayers", opt_mesh_ho_nlayers, 6.,
1164     "Number of layers around a problematic element to consider for high-order "
1165     "optimization, or number of element layers to consider in the boundary "
1166     "layer mesh for high-order fast curving"},
1167   { F|O, "HighOrderOptimize" , opt_mesh_ho_optimize , 0.,
1168     "Optimize high-order meshes? (0: none, 1: optimization, 2: elastic+optimization, "
1169     "3: elastic, 4: fast curving)" },
1170   { F|O, "HighOrderPassMax", opt_mesh_ho_pass_max, 25,
1171     "Maximum number of high-order optimization passes (moving barrier)"},
1172   { F|O, "HighOrderPeriodic" , opt_mesh_ho_periodic , 0.,
1173     "Force location of nodes for periodic meshes using periodicity transform (0: "
1174     "assume identical parametrisations, 1: invert parametrisations, 2: compute "
1175     "closest point" },
1176   { F|O, "HighOrderPoissonRatio", opt_mesh_ho_poisson, 0.33,
1177     "Poisson ratio of the material used in the elastic smoother for high-order meshes "
1178     "(between -1.0 and 0.5, excluded)"},
1179   { F|O, "HighOrderSavePeriodic" , opt_mesh_ho_save_periodic , 0.,
1180     "Save high-order nodes in periodic section of MSH files?" },
1181   { F|O, "HighOrderPrimSurfMesh", opt_mesh_ho_prim_surf_mesh, 0,
1182     "Try to fix flipped surface mesh elements in high-order optimizer?"},
1183   { F|O, "HighOrderThresholdMin", opt_mesh_ho_threshold_min, 0.1,
1184     "Minimum threshold for high-order element optimization"},
1185   { F|O, "HighOrderThresholdMax", opt_mesh_ho_threshold_max, 2.0,
1186     "Maximum threshold for high-order element optimization"},
1187   { F|O, "HighOrderFastCurvingNewAlgo", opt_mesh_ho_fast_new_algo, 0,
1188     "Curve boundary layer with new \"fast curving\" algorithm (experimental)"},
1189   { F|O, "HighOrderCurveOuterBL", opt_mesh_ho_curve_outer_BL, 0,
1190     "Curve also the outer surface of the boundary layer in the fast curving "
1191     "algorithm (0 = do not curve, 1 = curve according to boundary, 2 = curve "
1192     "without breaking outer elements)"},
1193   { F|O, "HighOrderMaxRho", opt_mesh_ho_max_rho, 0.3,
1194     "Maximum min/max ratio of edge/face size for the detection of BL element "
1195     "columns in the fast curving algorithm"},
1196   { F|O, "HighOrderMaxAngle", opt_mesh_ho_max_angle, 3.1415927*10./180.,
1197     "Maximum angle between layers of BL elements for the detection of columns "
1198     "in the fast curving algorithm"},
1199   { F|O, "HighOrderMaxInnerAngle", opt_mesh_ho_max_in_angle, 3.1415927*30./180.,
1200     "Maximum angle between edges/faces within layers of BL triangles/tets "
1201     "for the detection of columns in the fast curving algorithm"},
1202 
1203   { F|O, "IgnoreParametrization" , opt_mesh_ignore_parametrization, 0. ,
1204     "Skip parametrization section when reading meshes in the MSH4 format." },
1205   { F|O, "IgnorePeriodicity" , opt_mesh_ignore_periodicity , 1. ,
1206     "Skip periodic node section and skip periodic boundary alignment step when "
1207     "reading meshes in the MSH2 format." },
1208 
1209   { F|O, "LabelSampling" , opt_mesh_label_sampling , 1. ,
1210     "Label sampling rate (display one label every `LabelSampling' elements)" },
1211   { F|O, "LabelType" , opt_mesh_label_type , 0. ,
1212     "Type of element label (0: node/element tag, 1: elementary entity tag, "
1213     "2: physical entity tag, 3: partition, 4: coordinates)" },
1214   { F|O, "LcIntegrationPrecision" , opt_mesh_lc_integration_precision, 1.e-9 ,
1215     "Accuracy of evaluation of the LC field for 1D mesh generation" },
1216   { F|O, "Light" , opt_mesh_light , 1. ,
1217     "Enable lighting for the mesh" },
1218   { F|O, "LightLines" , opt_mesh_light_lines , 2. ,
1219     "Enable lighting for mesh edges (0: no, 1: surfaces, 2: surfaces+volumes" },
1220   { F|O, "LightTwoSide" , opt_mesh_light_two_side , 1. ,
1221     "Light both sides of surfaces (leads to slower rendering)" },
1222   { F|O, "Lines" , opt_mesh_lines , 0. ,
1223     "Display mesh lines (1D elements)?" },
1224   { F|O, "LineLabels" , opt_mesh_line_labels , 0. ,
1225     "Display mesh line labels?" },
1226   { F|O|D, "LineNumbers" , opt_mesh_line_labels , 0. ,
1227     "[Deprecated]" },
1228   { F|O, "LineWidth" , opt_mesh_line_width , 1.0 ,
1229     "Display width of mesh lines (in pixels)" },
1230 
1231   { F|O, "MaxIterDelaunay3D" , opt_mesh_max_iter_delaunay_3d, 0,
1232     "Maximum number of point insertion iterations in 3D Delaunay mesher "
1233     "(0: unlimited)" },
1234   { F|O, "MaxNumThreads1D" , opt_mesh_max_num_threads_1d , 0. ,
1235     "Maximum number of threads for 1D meshing (0: use default)" },
1236   { F|O, "MaxNumThreads2D" , opt_mesh_max_num_threads_2d , 0. ,
1237     "Maximum number of threads for 2D meshing (0: use default)" },
1238   { F|O, "MaxNumThreads3D" , opt_mesh_max_num_threads_3d , 0. ,
1239     "Maximum number of threads for 3D meshing (0: use default)" },
1240   { F|O, "MaxRetries" , opt_mesh_max_retries , 10 ,
1241     "Maximum number of times meshing is retried on curves and surfaces with a "
1242     "pending mesh"},
1243   { F|O, "MeshOnlyVisible" , opt_mesh_mesh_only_visible, 0. ,
1244     "Mesh only visible entities (experimental)" },
1245   { F|O, "MeshOnlyEmpty" , opt_mesh_mesh_only_empty, 0. ,
1246     "Mesh only entities that have no existing mesh" },
1247   { F|O, "MeshSizeExtendFromBoundary" , opt_mesh_lc_extend_from_boundary, 1. ,
1248     "Extend computation of mesh element sizes from the boundaries into the interior "
1249     "(for 3D Delaunay, use 1: longest or 2: shortest surface edge length)"},
1250   { F|O, "MeshSizeFactor" , opt_mesh_lc_factor , 1.0 ,
1251     "Factor applied to all mesh element sizes" },
1252   { F|O, "MeshSizeMin" , opt_mesh_lc_min, 0.0 ,
1253     "Minimum mesh element size" },
1254   { F|O, "MeshSizeMax" , opt_mesh_lc_max, 1.e22,
1255     "Maximum mesh element size" },
1256   { F|O, "MeshSizeFromCurvature" , opt_mesh_lc_from_curvature , 0. ,
1257     "Automatically compute mesh element sizes from curvature, using the value "
1258     "as the target number of elements per 2 * Pi radians" },
1259   { F|O, "MeshSizeFromCurvatureIsotropic" , opt_mesh_lc_from_curvature_iso , 0. ,
1260     "Force isotropic curvature estimation when the mesh size is computed from "
1261     "curvature" },
1262   { F|O, "MeshSizeFromPoints" , opt_mesh_lc_from_points , 1. ,
1263     "Compute mesh element sizes from values given at geometry points" },
1264   { F|O, "MeshSizeFromParametricPoints" , opt_mesh_lc_from_parametric_points , 0. ,
1265     "Compute mesh element sizes from values given at geometry points defining "
1266     "parametric curves"},
1267   { F|O, "MetisAlgorithm" , opt_mesh_partition_metis_algorithm, 1. ,
1268     "METIS partitioning algorithm 'ptype' (1: Recursive, 2: K-way)" },
1269   { F|O, "MetisEdgeMatching" , opt_mesh_partition_metis_edge_matching, 2. ,
1270     "METIS edge matching type 'ctype' (1: Random, 2: Sorted Heavy-Edge)" },
1271   { F|O, "MetisMaxLoadImbalance" , opt_mesh_partition_metis_max_load_imbalance, -1. ,
1272     "METIS maximum load imbalance 'ufactor' (-1: default, i.e. 30 for K-way and 1 "
1273     "for Recursive)" },
1274   { F|O, "MetisObjective" , opt_mesh_partition_metis_objective, 1. ,
1275     "METIS objective type 'objtype' (1: min. edge-cut, 2: min. communication volume)" },
1276   { F|O, "MetisMinConn" , opt_mesh_partition_metis_min_conn, -1. ,
1277     "METIS minimize maximum connectivity of partitions 'minconn' (-1: default)" },
1278   { F|O, "MetisRefinementAlgorithm" , opt_mesh_partition_metis_refinement_algorithm, 2. ,
1279     "METIS algorithm for k-way refinement 'rtype' (1: FM-based cut, 2: Greedy, "
1280     "3: Two-sided node FM, 4: One-sided node FM)" },
1281   { F|O, "MinimumCircleNodes" , opt_mesh_min_circle_nodes, 7. ,
1282     "Minimum number of nodes used to mesh circles and ellipses" },
1283   { F|O|D, "MinimumCirclePoints" , opt_mesh_min_circle_nodes, 7. ,
1284     "[Deprecated]" },
1285   { F|O, "MinimumCurveNodes" , opt_mesh_min_curve_nodes, 3. ,
1286     "Minimum number of nodes used to mesh curves other than lines, circles and "
1287     "ellipses"},
1288   { F|O|D, "MinimumCurvePoints" , opt_mesh_min_curve_nodes, 3. ,
1289     "[Deprecated]"},
1290   { F|O, "MinimumElementsPerTwoPi" , opt_mesh_lc_from_curvature, 0. ,
1291     "[Deprecated]" },
1292   { F|O, "MshFileVersion" , opt_mesh_msh_file_version , 4.1 ,
1293     "Version of the MSH file format to use" },
1294   { F|O, "MedFileMinorVersion" , opt_mesh_med_file_minor_version , -1. ,
1295     "Minor version of the MED file format to use (-1: use minor version of the MED library)" },
1296   { F|O, "MedImportGroupsOfNodes" , opt_mesh_med_import_groups_of_nodes , 0. ,
1297     "Import groups of nodes (0: no; 1: create geometrical point for each node)?" },
1298   { F|O, "MedSingleModel" , opt_mesh_med_single_model , 0. ,
1299     "Import MED meshes in the current model, even if several MED mesh names exist" },
1300 
1301   { F, "NbHexahedra" , opt_mesh_nb_hexahedra , 0. ,
1302     "Number of hexahedra in the current mesh (read-only)" },
1303   { F, "NbNodes" , opt_mesh_nb_nodes , 0. ,
1304     "Number of nodes in the current mesh (read-only)" },
1305   { F|O, "NbPartitions" , opt_mesh_partition_num, 0. ,
1306     "Number of partitions" },
1307   { F, "NbPrisms" , opt_mesh_nb_prisms , 0. ,
1308     "Number of prisms in the current mesh (read-only)" },
1309   { F, "NbPyramids" , opt_mesh_nb_pyramids , 0. ,
1310     "Number of pyramids in the current mesh (read-only)" },
1311   { F, "NbTrihedra" , opt_mesh_nb_trihedra , 0. ,
1312     "Number of trihedra in the current mesh (read-only)" },
1313   { F, "NbQuadrangles" , opt_mesh_nb_quadrangles , 0. ,
1314     "Number of quadrangles in the current mesh (read-only)" },
1315   { F, "NbTetrahedra" , opt_mesh_nb_tetrahedra , 0. ,
1316     "Number of tetrahedra in the current mesh (read-only)" },
1317   { F, "NbTriangles" , opt_mesh_nb_triangles , 0. ,
1318     "Number of triangles in the current mesh (read-only)" },
1319   { F|O, "NewtonConvergenceTestXYZ" , opt_mesh_newton_convergence_test_xyz , 0. ,
1320     "Force inverse surface mapping algorithm (Newton-Raphson) to converge in real "
1321     "coordinates (experimental)" },
1322   { F|O, "Nodes" , opt_mesh_nodes , 0. ,
1323     "Display mesh nodes?" },
1324   { F|O, "NodeLabels" , opt_mesh_node_labels , 0. ,
1325     "Display mesh node labels?" },
1326   { F|O, "NodeSize" , opt_mesh_node_size , 4. ,
1327     "Display size of mesh nodes (in pixels)" },
1328   { F|O, "NodeType" , opt_mesh_node_type , 0. ,
1329     "Display mesh nodes as solid color dots (0) or 3D spheres (1)" },
1330   { F|O, "Normals" , opt_mesh_normals , 0.0 ,
1331     "Display size of normal vectors (in pixels)" },
1332   { F|O, "NumSubEdges" , opt_mesh_num_sub_edges , 2. ,
1333     "Number of edge subdivisions when displaying high-order elements" },
1334 
1335   { F|O, "OldInitialDelaunay2D" , opt_mesh_old_initial_delaunay_2d , 0. ,
1336     "Use old initial 2D Delaunay code" },
1337   { F|O, "Optimize" , opt_mesh_optimize , 1. ,
1338     "Optimize the mesh to improve the quality of tetrahedral elements" },
1339   { F|O, "OptimizeThreshold" , opt_mesh_optimize_threshold , 0.3 ,
1340     "Optimize tetrahedra that have a quality below ... " },
1341   { F|O, "OptimizeNetgen" , opt_mesh_optimize_netgen , 0 ,
1342     "Optimize the mesh using Netgen to improve the quality of tetrahedral "
1343     "elements" },
1344 
1345   { F|O, "PartitionHexWeight" , opt_mesh_partition_hex_weight , -1 ,
1346     "Weight of hexahedral element for METIS load balancing (-1: automatic)" },
1347   { F|O, "PartitionLineWeight" , opt_mesh_partition_line_weight , -1 ,
1348     "Weight of line element for METIS load balancing (-1: automatic)" },
1349   { F|O, "PartitionPrismWeight" , opt_mesh_partition_pri_weight , -1 ,
1350     "Weight of prismatic element (wedge) for METIS load balancing (-1: automatic)" },
1351   { F|O, "PartitionPyramidWeight" , opt_mesh_partition_pyr_weight , -1 ,
1352     "Weight of pyramidal element for METIS load balancing (-1: automatic)" },
1353   { F|O, "PartitionQuadWeight" , opt_mesh_partition_qua_weight , -1 ,
1354     "Weight of quadrangle for METIS load balancing (-1: automatic)" },
1355   { F|O, "PartitionTrihedronWeight" , opt_mesh_partition_trih_weight , 0 ,
1356     "Weight of trihedron element for METIS load balancing (-1: automatic)" },
1357   { F|O, "PartitionTetWeight" , opt_mesh_partition_tet_weight , -1 ,
1358     "Weight of tetrahedral element for METIS load balancing (-1: automatic)" },
1359   { F|O, "PartitionTriWeight" , opt_mesh_partition_tri_weight , -1 ,
1360     "Weight of triangle element for METIS load balancing (-1: automatic)" },
1361   { F|O, "PartitionCreateTopology" , opt_mesh_partition_create_topology , 1 ,
1362     "Create boundary representation of partitions" },
1363   { F|O, "PartitionCreatePhysicals" , opt_mesh_partition_create_physicals , 1 ,
1364     "Create physical groups for partitions, based on existing physical groups" },
1365   { F|O, "PartitionCreateGhostCells" , opt_mesh_partition_create_ghost_cells , 0 ,
1366     "Create ghost cells, i.e. create for each partition a ghost entity containing "
1367     "elements connected to neighboring partitions by at least one node." },
1368   { F|O, "PartitionSplitMeshFiles" , opt_mesh_partition_split_mesh_files , 0 ,
1369     "Write one file for each mesh partition" },
1370   { F|O, "PartitionTopologyFile" , opt_mesh_partition_save_topology_file , 0 ,
1371     "Write a .pro file with the partition topology" },
1372   { F|O, "PartitionOldStyleMsh2" , opt_mesh_partition_old_style_msh2 , 1 ,
1373     "Write partitioned meshes in MSH2 format using old style (i.e. by not "
1374     "referencing new partitioned entities, except on partition boundaries), "
1375     "for backward compatibility" },
1376   { F|O, "PartitionConvertMsh2" , opt_mesh_partition_convert_msh2 , 1 ,
1377     "When reading partitioned meshes in MSH2 format, create new partition "
1378     "entities"},
1379   { F|O|D, "Points" , opt_mesh_nodes , 0. ,
1380     "[Deprecated]" },
1381   { F|O|D, "PointNumbers" , opt_mesh_node_labels , 0. ,
1382     "[Deprecated]" },
1383   { F|O|D, "PointSize" , opt_mesh_node_size , 4. ,
1384     "[Deprecated]" },
1385   { F|O|D, "PointType" , opt_mesh_node_type , 0. ,
1386     "[Deprecated]" },
1387   { F|O, "PreserveNumberingMsh2" , opt_mesh_preserve_numbering_msh2 , 0. ,
1388     "Preserve element numbering in MSH2 format (will break meshes with multiple "
1389     "physical groups for a single elementary entity)"},
1390   { F|O, "Prisms" , opt_mesh_prisms , 1. ,
1391     "Display mesh prisms?" },
1392   { F|O, "Pyramids" , opt_mesh_pyramids , 1. ,
1393     "Display mesh pyramids?" },
1394 
1395   { F|O, "QuadqsSizemapMethod" , opt_mesh_quadqs_sizemap_method, 3 ,
1396     "Size map method in QuadQuasiStructured. 0: default, 1: cross-field,"
1397       "2: cross-field + CAD small features adaptation,"
1398       "3: from background mesh (e.g. sizes in current triangulation),"
1399       "4: cross-field + CAD small features adaptation (clamped by background mesh)"
1400   },
1401   { F|O, "QuadqsTopologyOptimizationMethods" , opt_mesh_quadqs_topo_optim_methods, 0. ,
1402     "Topology optimization methods in QuadQuasiStructured. 0: default (all),"
1403       "100: pattern-based CAD faces,"
1404       "010: disk quadrangulation remeshing,"
1405       "001: cavity remeshing,"
1406       "xxx: combination of multiple methods (e.g. 111 for all)"
1407   },
1408   { F|O, "QuadqsRemeshingBoldness" , opt_mesh_quadqs_remeshing_boldness, 0.66 ,
1409     "Controls how much cavity remeshing is allowed to distort"
1410       " the quad mesh. From 0 (no quality decrease during remeshing) to 1"
1411       " (quality can tend to 0 during remeshing)."
1412   },
1413   { F|O, "QuadqsScalingOnTriangulation" , opt_mesh_quadqs_scaling_on_triangulation, 0.75,
1414     "Ratio on the edge length between the triangulation and the quadrangulation."
1415       " Use a small ratio (e.g. 0.5) to get a background triangulation finer"
1416       " than the quad mesh. Useful to get a more accurate cross-field."
1417   },
1418   { F|O, "Quadrangles" , opt_mesh_quadrangles , 1. ,
1419     "Display mesh quadrangles?" },
1420   { F|O, "QualityInf" , opt_mesh_quality_inf , 0.0 ,
1421     "Only display elements whose quality measure is greater than QualityInf" },
1422   { F|O, "QualitySup" , opt_mesh_quality_sup , 0.0 ,
1423     "Only display elements whose quality measure is smaller than QualitySup" },
1424   { F|O, "QualityType" , opt_mesh_quality_type , 2. ,
1425     "Type of quality measure (0: SICN~signed inverse condition number, "
1426     "1: SIGE~signed inverse gradient error, 2: gamma~vol/sum_face/max_edge, "
1427     "3: Disto~minJ/maxJ"},
1428 
1429   { F|O, "RadiusInf" , opt_mesh_radius_inf , 0.0 ,
1430     "Only display elements whose longest edge is greater than RadiusInf" },
1431   { F|O, "RadiusSup" , opt_mesh_radius_sup , 0.0 ,
1432     "Only display elements whose longest edge is smaller than RadiusSup" },
1433   { F|O, "RandomFactor" , opt_mesh_rand_factor , 1.e-9 ,
1434     "Random factor used in the 2D meshing algorithm (should be increased if "
1435     "RandomFactor * size(triangle)/size(model) approaches machine accuracy)" },
1436   { F|O, "RandomFactor3D" , opt_mesh_rand_factor3d , 1.e-12 ,
1437     "Random factor used in the 3D meshing algorithm" },
1438   { F|O, "RandomSeed" , opt_mesh_random_seed , 1. ,
1439     "Seed of pseudo-random number generator" },
1440 
1441   { F|O, "ReadGroupsOfElements" , opt_mesh_read_groups_of_elements , 1. ,
1442     "Read groups of elements in UNV meshes (this will discard the elementary "
1443     "entity tags inferred from the element section)"},
1444 #if defined(HAVE_BLOSSOM)
1445   { F|O, "RecombinationAlgorithm" , opt_mesh_algo_recombine , 1 ,
1446 #else
1447   { F|O, "RecombinationAlgorithm" , opt_mesh_algo_recombine , 0 ,
1448 #endif
1449     "Mesh recombination algorithm (0: simple, 1: blossom, 2: simple full-quad, "
1450     "3: blossom full-quad)" },
1451   { F|O, "RecombineAll" , opt_mesh_recombine_all , 0 ,
1452     "Apply recombination algorithm to all surfaces, ignoring per-surface spec" },
1453   { F|O, "RecombineOptimizeTopology" , opt_mesh_recombine_optimize_topology , 5 ,
1454     "Number of topological optimization passes (removal of diamonds, ...) of "
1455     "recombined surface meshes" },
1456   { F|O, "Recombine3DAll" , opt_mesh_recombine3d_all , 0 ,
1457     "Apply recombination3D algorithm to all volumes, ignoring per-volume spec "
1458     "(experimental)" },
1459   { F|O, "Recombine3DLevel" , opt_mesh_recombine3d_level , 0 ,
1460     "3d recombination level (0: hex, 1: hex+prisms, 2: hex+prism+pyramids) "
1461     "(experimental)" },
1462   { F|O, "Recombine3DConformity" , opt_mesh_recombine3d_conformity , 0 ,
1463     "3d recombination conformity type (0: nonconforming, 1: trihedra, "
1464     "2: pyramids+trihedra, 3:pyramids+hexSplit+trihedra, 4:hexSplit+trihedra)"
1465     "(experimental)" },
1466   { F|O, "RefineSteps" , opt_mesh_refine_steps , 10 ,
1467     "Number of refinement steps in the MeshAdapt-based 2D algorithms" },
1468   { F|O, "Renumber" , opt_mesh_renumber , 1 ,
1469     "Renumber nodes and elements in a continuous sequence after mesh generation" },
1470   { F|O, "ReparamMaxTriangles" , opt_mesh_reparam_max_triangles , 250000 ,
1471     "Maximum number of triangles in a single parametrization patch" },
1472 
1473   { F,   "SaveAll" , opt_mesh_save_all , 0. ,
1474     "Save all elements, even if they don't belong to physical groups (for some "
1475     "mesh formats, this removes physical groups altogether)" },
1476   { F|O, "SaveElementTagType" , opt_mesh_save_element_tag_type , 1. ,
1477     "Type of the element tag saved in mesh formats that don't support saving "
1478     "physical or partition ids (1: elementary, 2: physical, 3: partition)" },
1479   { F|O, "SaveTopology" , opt_mesh_save_topology, 0. ,
1480     "Save model topology in MSH2 output files (this is always saved in MSH3 and above)" },
1481   { F|O, "SaveParametric" , opt_mesh_save_parametric , 0. ,
1482     "Save parametric coordinates of nodes" },
1483   { F|O, "SaveGroupsOfElements" , opt_mesh_save_groups_of_elements , 1. ,
1484     "Save groups of elements for each physical group (for UNV and INP mesh format) "
1485     "if value is positive; if negative, save groups of elements for physical "
1486     "groups of dimension dim if the (dim+1)^th least significant digit of "
1487     "-Mesh.SaveGroupsOfElements is 1 (for example: -100 will only save"
1488     "surfaces, while -1010 will save volumes and curves)"},
1489   { F|O, "SaveGroupsOfNodes" , opt_mesh_save_groups_of_nodes , 0. ,
1490     "Save groups of nodes for each physical group (for UNV, INP and Tochnog "
1491     "mesh formats) if value is positive; if negative, save groups of nodes "
1492     "for physical groups of dimension dim if the (dim+1)^th least significant "
1493     "digit of -Mesh.SaveGroupsOfNodes is 1 (for example: -100 will only "
1494     "save surfaces, while -1010 will save volumes and curves); for INP, save "
1495     "groups of nodes for all entities of dimension dim if the (dim+1)^th least "
1496     "significant digit of -Mesh.SaveGroupsOfNodes is 2"},
1497   { F|O, "ScalingFactor" , opt_mesh_scaling_factor , 1.0 ,
1498     "Global scaling factor applied to the saved mesh" },
1499   { F|O, "SecondOrderIncomplete" , opt_mesh_second_order_incomplete , 0. ,
1500     "Create incomplete second order elements? (8-node quads, 20-node hexas, etc.)" },
1501   { F|O, "SecondOrderLinear" , opt_mesh_second_order_linear , 0. ,
1502     "Should second order nodes (as well as nodes generated with subdivision algorithms) "
1503     "simply be created by linear interpolation?" },
1504   { F|O, "Smoothing" , opt_mesh_nb_smoothing , 1. ,
1505     "Number of smoothing steps applied to the final mesh" },
1506   { F|O, "SmoothCrossField" , opt_mesh_smooth_cross_field , 0. ,
1507     "Apply n barycentric smoothing passes to the 3D cross field" },
1508   { F|O, "CrossFieldClosestPoint" , opt_mesh_cross_field_closest_point , 1. ,
1509     "Use closest point to compute 2D crossfield" },
1510   { F|O, "SmoothNormals" , opt_mesh_smooth_normals , 0. ,
1511     "Smooth the mesh normals?" },
1512   { F|O, "SmoothRatio" , opt_mesh_smooth_ratio , 1.8 ,
1513     "Ratio between mesh sizes at nodes of a same edge (used in BAMG)" },
1514   { F|O, "StlAngularDeflection" , opt_mesh_stl_angular_deflection , 0.3 ,
1515     "Maximum angular deflection when creating STL representation of surfaces "
1516     "(currently only used with the OpenCASCADE kernel)"},
1517   { F|O, "StlLinearDeflection" , opt_mesh_stl_linear_deflection , 0.001 ,
1518     "Maximum relative linear deflection when creating STL representation of surfaces "
1519     "(currently only used with the OpenCASCADE kernel)"},
1520   { F|O, "StlOneSolidPerSurface" , opt_mesh_stl_one_solid_per_surface, 0. ,
1521     "Create one solid per surface when exporting STL files? (0: single solid, "
1522     "1: one solid per face, 2: one solid per physical surface)" },
1523   { F|O, "StlRemoveDuplicateTriangles" , opt_mesh_stl_remove_duplicate_triangles, 0. ,
1524     "Remove duplicate triangles when importing STL files?" },
1525   { F|O, "SubdivisionAlgorithm" , opt_mesh_algo_subdivide , 0 ,
1526     "Mesh subdivision algorithm (0: none, 1: all quadrangles, 2: all hexahedra, "
1527     "3: barycentric)" },
1528   { F|O, "SurfaceEdges" , opt_mesh_surface_edges , 1. ,
1529     "Display edges of surface mesh?" },
1530   { F|O, "SurfaceFaces" , opt_mesh_surface_faces , 0. ,
1531     "Display faces of surface mesh?" },
1532   { F|O, "SurfaceLabels" , opt_mesh_surface_labels , 0. ,
1533     "Display surface mesh element labels?" },
1534   { F|O|D, "SurfaceNumbers" , opt_mesh_surface_labels , 0. ,
1535     "[Deprecated]" },
1536   { F|O, "SwitchElementTags", opt_mesh_switch_elem_tags, 0. ,
1537     "Invert elementary and physical tags when reading the mesh"},
1538 
1539   { F|O, "Tangents" , opt_mesh_tangents , 0.0 ,
1540     "Display size of tangent vectors (in pixels)" },
1541   { F|O, "Tetrahedra" , opt_mesh_tetrahedra , 1. ,
1542     "Display mesh tetrahedra?" },
1543   { F|O, "ToleranceEdgeLength" , opt_mesh_tolerance_edge_length, 0.0,
1544     "Skip a model edge in mesh generation if its length is less than user's "
1545     "defined tolerance" },
1546   { F|O, "ToleranceInitialDelaunay" , opt_mesh_tolerance_initial_delaunay, 1.e-12,
1547     "Tolerance for initial 3D Delaunay mesher" },
1548   { F|O, "ToleranceReferenceElement" , opt_mesh_tolerance_reference_element , 1e-6,
1549     "Tolerance for classifying a point inside a reference element (of size 1)" },
1550   { F|O, "Triangles" , opt_mesh_triangles , 1. ,
1551     "Display mesh triangles?" },
1552   { F|O, "Trihedra" , opt_mesh_trihedra , 1. ,
1553     "Display mesh trihedra?" },
1554 
1555   { F|O, "UnvStrictFormat" , opt_mesh_unv_strict_format , 1 ,
1556     "Use strict format specification for UNV files, with 'D' for exponents (instead of "
1557     "'E' as used by some tools)" },
1558 
1559   { F|O, "VolumeEdges" , opt_mesh_volume_edges , 1. ,
1560     "Display edges of volume mesh?" },
1561   { F|O, "VolumeFaces" , opt_mesh_volume_faces , 0. ,
1562     "Display faces of volume mesh?" },
1563   { F|O, "VolumeLabels" , opt_mesh_volume_labels , 0. ,
1564     "Display volume mesh element labels?" },
1565   { F|O|D, "VolumeNumbers" , opt_mesh_volume_labels , 0. ,
1566     "[Deprecated]" },
1567   { F|O, "Voronoi" , opt_mesh_voronoi , 0. ,
1568     "Display the voronoi diagram" },
1569 
1570   { F|O, "ZoneDefinition" , opt_mesh_zone_definition , 0. ,
1571     "Method for defining a zone (0: single zone, 1: by partition, 2: by physical)" },
1572 
1573   { 0, nullptr , nullptr , 0. , nullptr }
1574 } ;
1575 
1576 StringXNumber SolverOptions_Number[] = {
1577   { F|O, "AlwaysListen" , opt_solver_listen , 0. ,
1578     "Always listen to incoming connection requests?" },
1579   { F|O, "AutoArchiveOutputFiles" , opt_solver_auto_archive_output_files , 0. ,
1580     "Automatically archive output files after each computation" },
1581   { F|O, "AutoCheck" , opt_solver_auto_check , 1. ,
1582     "Automatically check model every time a parameter is changed" },
1583   { F|O, "AutoLoadDatabase" , opt_solver_auto_load_database , 0. ,
1584     "Automatically load the ONELAB database when launching a solver" },
1585   { F|O, "AutoSaveDatabase" , opt_solver_auto_save_database , 1. ,
1586     "Automatically save the ONELAB database after each computation" },
1587   { F|O, "AutoMesh" , opt_solver_auto_mesh , 2. ,
1588     "Automatically mesh (0: never; 1: if geometry changed, but use existing "
1589     "mesh on disk if available; 2: if geometry changed; -1: the geometry script "
1590     "creates the mesh)" },
1591   { F|O, "AutoMergeFile" , opt_solver_auto_merge_file , 1. ,
1592     "Automatically merge result files" },
1593   { F|O, "AutoShowViews" , opt_solver_auto_show_views , 2. ,
1594     "Automcatically show newly merged results (0: none; 1: all; 2: last one)" },
1595   { F|O, "AutoShowLastStep" , opt_solver_auto_show_last_step , 1. ,
1596     "Automatically show the last step in newly merged results, if there are "
1597     "more than 2 steps" },
1598 
1599   { F|O, "Plugins" , opt_solver_plugins , 0. ,
1600     "Enable default solver plugins?" },
1601 
1602   { F|O, "ShowInvisibleParameters" , opt_solver_show_invisible_parameters , 0. ,
1603     "Show all parameters, even those marked invisible" },
1604 
1605   { F|O, "Timeout" , opt_solver_timeout , 5. ,
1606     "Time (in seconds) before closing the socket if no connection is happening" },
1607 
1608   { 0, nullptr , nullptr , 0. , nullptr }
1609 } ;
1610 
1611 StringXNumber PostProcessingOptions_Number[] = {
1612   { F|O, "AnimationDelay" , opt_post_anim_delay , 0.1 ,
1613     "Delay (in seconds) between frames in automatic animation mode" },
1614   { F|O, "AnimationCycle" , opt_post_anim_cycle , 0. ,
1615     "Cycle through time steps (0) or views (1) for animations" },
1616   { F|O, "AnimationStep" , opt_post_anim_step , 1. ,
1617     "Step increment for animations" },
1618 
1619   { F|O, "Binary" , opt_post_binary , 0. ,
1620     "Write post-processing files in binary format (if possible)" },
1621 
1622   { F|O, "CombineRemoveOriginal" , opt_post_combine_remove_orig , 1. ,
1623     "Remove original views after a Combine operation" },
1624   { F|O, "CombineCopyOptions" , opt_post_combine_copy_options , 1. ,
1625     "Copy options during Combine operation" },
1626 
1627   { F, "DoubleClickedGraphPointX" , opt_post_double_clicked_graph_point_x , 0. ,
1628     "Abscissa of last double-clicked graph point" },
1629   { F, "DoubleClickedGraphPointY" , opt_post_double_clicked_graph_point_y , 0. ,
1630     "Ordinate of last double-clicked graph point" },
1631   { F, "DoubleClickedView" , opt_post_double_clicked_view, 0. ,
1632     "Index of last double-clicked view" },
1633 
1634   { F|O, "ForceElementData" , opt_post_force_element_data , 0. ,
1635     "Try to force saving datasets as ElementData" },
1636   { F|O, "ForceNodeData" , opt_post_force_node_data , 0. ,
1637     "Try to force saving datasets as NodeData" },
1638   { F|O, "Format" , opt_post_file_format , 10. ,
1639     "Default file format for post-processing views (0: ASCII view, 1: binary "
1640     "view, 2: parsed view, 3: STL triangulation, 4: raw text, 5: Gmsh mesh, 6: MED file, "
1641     "10: automatic)" },
1642 
1643   { F, "GraphPointX" , opt_post_double_clicked_graph_point_x , 0. ,
1644     "Synonym for `DoubleClickedGraphPointX'" },
1645   { F, "GraphPointY" , opt_post_double_clicked_graph_point_y , 0. ,
1646     "Synonym for `DoubleClickedGraphPointY'" },
1647 
1648   { F|O, "HorizontalScales" , opt_post_horizontal_scales , 1. ,
1649     "Display value scales horizontally" },
1650 
1651   { F|O, "Link" , opt_post_link , 0. ,
1652     "Post-processing view links (0: apply next option changes to selected views, "
1653     "1: force same options for all selected views)" },
1654 
1655   { F,   "NbViews" , opt_post_nb_views , 0. ,
1656     "Current number of views merged (read-only)" },
1657 
1658   { F|O, "Plugins" , opt_post_plugins , 1. ,
1659     "Enable default post-processing plugins?" },
1660 
1661   { F|O, "SaveInterpolationMatrices" , opt_post_save_interpolation_matrices , 1. ,
1662     "Save the interpolation matrices when exporting model-based data" },
1663   { F|O, "SaveMesh" , opt_post_save_mesh , 1. ,
1664     "Save the mesh when exporting model-based data" },
1665   { F|O, "Smoothing" , opt_post_smooth , 0. ,
1666     "Apply (non-reversible) smoothing to post-processing view when merged" },
1667 
1668   { 0, nullptr , nullptr , 0. }
1669 } ;
1670 
1671 StringXNumber ViewOptions_Number[] = {
1672   { F|O, "AbscissaRangeType" , opt_view_abscissa_range_type , 1 ,
1673     "Ascissa scale range type (1: default, 2: custom)" },
1674   { F|O, "AdaptVisualizationGrid" , opt_view_adapt_visualization_grid , 0. ,
1675     "Use adaptive visualization grid (for high-order elements)?" },
1676   { F|O, "AngleSmoothNormals" , opt_view_angle_smooth_normals , 30.0 ,
1677     "Threshold angle below which normals are not smoothed" },
1678   { F|O, "ArrowSizeMax" , opt_view_arrow_size_max , 60. ,
1679     "Maximum display size of arrows (in pixels)" },
1680   { F|O, "ArrowSizeMin" , opt_view_arrow_size_min , 0. ,
1681     "Minimum display size of arrows (in pixels)" },
1682   { F|O, "AutoPosition" , opt_view_auto_position , 1. ,
1683     "Position the scale or 2D plot automatically (0: manual, 1: automatic, 2: top left, "
1684     "3: top right, 4: bottom left, 5: bottom right, 6: top, 7: bottom, 8: left, 9: right, "
1685     "10: full, 11: top third, 12: in model coordinates)" },
1686   { F|O, "Axes" , opt_view_axes , 0 ,
1687     "Axes (0: none, 1: simple axes, 2: box, 3: full grid, 4: open grid, 5: ruler)" },
1688   { F|O, "AxesMikado" , opt_view_axes_mikado , 0. ,
1689     "Mikado axes style" },
1690   { F|O, "AxesAutoPosition" , opt_view_axes_auto_position , 1. ,
1691     "Position the axes automatically" },
1692   { F|O, "AxesMaxX" , opt_view_axes_xmax , 1. ,
1693     "Maximum X-axis coordinate" },
1694   { F|O, "AxesMaxY" , opt_view_axes_ymax , 1. ,
1695     "Maximum Y-axis coordinate" },
1696   { F|O, "AxesMaxZ" , opt_view_axes_zmax , 1. ,
1697     "Maximum Z-axis coordinate" },
1698   { F|O, "AxesMinX" , opt_view_axes_xmin , 0. ,
1699     "Minimum X-axis coordinate" },
1700   { F|O, "AxesMinY" , opt_view_axes_ymin , 0. ,
1701     "Minimum Y-axis coordinate" },
1702   { F|O, "AxesMinZ" , opt_view_axes_zmin , 0. ,
1703     "Minimum Z-axis coordinate" },
1704   { F|O, "AxesTicsX" , opt_view_axes_tics0 , 5. ,
1705     "Number of tics on the X-axis" },
1706   { F|O, "AxesTicsY" , opt_view_axes_tics1 , 5. ,
1707     "Number of tics on the Y-axis" },
1708   { F|O, "AxesTicsZ" , opt_view_axes_tics2 , 5. ,
1709     "Number of tics on the Z-axis" },
1710 
1711   { F|O, "Boundary" , opt_view_boundary , 0. ,
1712     "Draw the `N minus b'-dimensional boundary of the element (N: element "
1713     "dimension, b: option value)" },
1714 
1715   { F|O, "CenterGlyphs" , opt_view_center_glyphs , 0,
1716     "Center glyphs (arrows, numbers, etc.)? (0: left, 1: centered, 2: right)" },
1717   { F,   "Clip" , opt_view_clip , 0.,
1718     "Enable clipping planes? (Plane[i]=2^i, i=0,...,5)" },
1719   { F|O, "Closed" , opt_view_closed , 0,
1720     "Close the subtree containing this view" },
1721   { F|O, "ColormapAlpha" , opt_view_colormap_alpha , 1.0 ,
1722     "Colormap alpha channel value (used only if != 1)" },
1723   { F|O, "ColormapAlphaPower" , opt_view_colormap_alpha_power , 0.0 ,
1724     "Colormap alpha channel power" },
1725   { F|O, "ColormapBeta" , opt_view_colormap_beta , 0.0 ,
1726     "Colormap beta parameter (gamma = 1-beta)" },
1727   { F|O, "ColormapBias" , opt_view_colormap_bias , 0.0 ,
1728     "Colormap bias" },
1729   { F|O, "ColormapCurvature" , opt_view_colormap_curvature , 0.0 ,
1730     "Colormap curvature or slope coefficient" },
1731   { F|O, "ColormapInvert" , opt_view_colormap_invert , 0. ,
1732     "Invert the color values, i.e., replace x with (255-x) in the colormap?" },
1733   { F|O, "ColormapNumber" , opt_view_colormap_number , 2. ,
1734     "Default colormap number (0: black, 1: vis5d, 2: jet, 3: lucie, 4: rainbow, "
1735     "5: emc2000, 6: incadescent, 7: hot, 8: pink, 9: grayscale, 10: french, "
1736     "11: hsv, 12: spectrum, 13: bone, 14: spring, 15: summer, 16: autumm, "
1737     "17: winter, 18: cool, 19: copper, 20: magma, 21: inferno, 22: plasma, "
1738     "23: viridis, 24: turbo)"},
1739   { F|O, "ColormapRotation" , opt_view_colormap_rotation , 0. ,
1740     "Incremental colormap rotation" },
1741   { F|O, "ColormapSwap" , opt_view_colormap_swap , 0. ,
1742     "Swap the min/max values in the colormap?" },
1743   { F|O, "ComponentMap0" , opt_view_component_map0 , 0,
1744     "Forced component 0 (if View.ForceComponents > 0)" },
1745   { F|O, "ComponentMap1" , opt_view_component_map1 , 1,
1746     "Forced component 1 (if View.ForceComponents > 0)" },
1747   { F|O, "ComponentMap2" , opt_view_component_map2 , 2,
1748     "Forced component 2 (if View.ForceComponents > 0)" },
1749   { F|O, "ComponentMap3" , opt_view_component_map3 , 3,
1750     "Forced component 3 (if View.ForceComponents > 0)" },
1751   { F|O, "ComponentMap4" , opt_view_component_map4 , 4,
1752     "Forced component 4 (if View.ForceComponents > 0)" },
1753   { F|O, "ComponentMap5" , opt_view_component_map5 , 5,
1754     "Forced component 5 (if View.ForceComponents > 0)" },
1755   { F|O, "ComponentMap6" , opt_view_component_map6 , 6,
1756     "Forced component 6 (if View.ForceComponents > 0)" },
1757   { F|O, "ComponentMap7" , opt_view_component_map7 , 7,
1758     "Forced component 7 (if View.ForceComponents > 0)" },
1759   { F|O, "ComponentMap8" , opt_view_component_map8 , 8,
1760     "Forced component 8 (if View.ForceComponents > 0)" },
1761   { F,   "CustomAbscissaMax" , opt_view_custom_abscissa_max , 0. ,
1762     "User-defined maximum abscissa value" },
1763   { F,   "CustomAbscissaMin" , opt_view_custom_abscissa_min , 0. ,
1764     "User-defined minimum abscissa value" },
1765   { F,   "CustomMax" , opt_view_custom_max , 0. ,
1766     "User-defined maximum value to be displayed" },
1767   { F,   "CustomMin" , opt_view_custom_min , 0. ,
1768     "User-defined minimum value to be displayed" },
1769 
1770   { F|O, "DisplacementFactor" , opt_view_displacement_factor , 1. ,
1771     "Displacement amplification" },
1772   { F|O, "DrawHexahedra" , opt_view_draw_hexahedra , 1. ,
1773     "Display post-processing hexahedra?" },
1774   { F|O, "DrawLines" , opt_view_draw_lines , 1. ,
1775     "Display post-processing lines?" },
1776   { F|O, "DrawPoints" , opt_view_draw_points , 1. ,
1777     "Display post-processing points?" },
1778   { F|O, "DrawPrisms" , opt_view_draw_prisms , 1. ,
1779     "Display post-processing prisms?" },
1780   { F|O, "DrawPyramids" , opt_view_draw_pyramids , 1. ,
1781     "Display post-processing pyramids?" },
1782   { F|O, "DrawTrihedra" , opt_view_draw_trihedra , 1. ,
1783     "Display post-processing trihedra?" },
1784   { F|O, "DrawQuadrangles" , opt_view_draw_quadrangles , 1. ,
1785     "Display post-processing quadrangles?" },
1786   { F|O, "DrawScalars" , opt_view_draw_scalars , 1. ,
1787     "Display scalar values?" },
1788   { F|O, "DrawSkinOnly" , opt_view_draw_skin_only , 0. ,
1789     "Draw only the skin of 3D scalar views?" },
1790   { F|O, "DrawStrings" , opt_view_draw_strings , 1. ,
1791     "Display post-processing annotation strings?" },
1792   { F|O, "DrawTensors" , opt_view_draw_tensors , 1. ,
1793     "Display tensor values?" },
1794   { F|O, "DrawTetrahedra" , opt_view_draw_tetrahedra , 1. ,
1795     "Display post-processing tetrahedra?" },
1796   { F|O, "DrawTriangles" , opt_view_draw_triangles , 1. ,
1797     "Display post-processing triangles?" },
1798   { F|O, "DrawVectors" , opt_view_draw_vectors , 1. ,
1799     "Display vector values?" },
1800 
1801   { F|O, "Explode" , opt_view_explode , 1. ,
1802     "Element shrinking factor (between 0 and 1)" },
1803   { F|O, "ExternalView" , opt_view_external_view , -1. ,
1804     "Index of the view used to color vector fields (-1: self)" },
1805 
1806   { F|O, "FakeTransparency" , opt_view_fake_transparency , 0. ,
1807     "Use fake transparency (cheaper than the real thing, but incorrect)" },
1808   { F|O, "ForceNumComponents" , opt_view_force_num_components , 0. ,
1809     "Force number of components to display (see View.ComponentMapN for mapping)" },
1810 
1811   { F|O, "GeneralizedRaiseFactor" , opt_view_gen_raise_factor , 1. ,
1812     "Generalized raise amplification factor" },
1813   { F|O, "GeneralizedRaiseView" , opt_view_gen_raise_view , -1. ,
1814     "Index of the view used for generalized raise (-1: self)" },
1815   { F|O, "GlyphLocation" , opt_view_glyph_location , 1,
1816     "Glyph (arrow, number, etc.) location (1: center of gravity, 2: node)" },
1817 
1818   { F|O, "Height" , opt_view_size1 , 200. ,
1819     "Height (in pixels) of the scale or 2D plot" },
1820 
1821   { F|O, "IntervalsType" , opt_view_intervals_type , 2 ,
1822     "Type of interval display (1: iso, 2: continuous, 3: discrete, 4: numeric)" },
1823 
1824   { F|O, "Light" , opt_view_light , 1. ,
1825     "Enable lighting for the view" },
1826   { F|O, "LightLines" , opt_view_light_lines , 1. ,
1827     "Light element edges" },
1828   { F|O, "LightTwoSide" , opt_view_light_two_side , 1. ,
1829     "Light both sides of surfaces (leads to slower rendering)" },
1830   { F|O, "LineType" , opt_view_line_type , 0. ,
1831     "Display lines as solid color segments (0) or 3D cylinders (1)" },
1832   { F|O, "LineWidth" , opt_view_line_width , 1.0 ,
1833     "Display width of lines (in pixels)" },
1834 
1835   { F|O,   "MaxRecursionLevel" , opt_view_max_recursion_level , 0. ,
1836     "Maximum recursion level for adaptive views" },
1837   { F,   "Max" , opt_view_max , 0. ,
1838     "Maximum value in the view (read-only)" },
1839   { F,   "MaxVisible" , opt_view_max_visible , 0. ,
1840     "Maximum value in the visible parts of the view, taking current time step "
1841     "and tensor display type into account (read-only)" },
1842   { F,   "MaxX" , opt_view_xmax , 0. ,
1843     "Maximum view coordinate along the X-axis (read-only)" },
1844   { F,   "MaxY" , opt_view_ymax , 0. ,
1845     "Maximum view coordinate along the Y-axis (read-only)" },
1846   { F,   "MaxZ" , opt_view_zmax , 0. ,
1847     "Maximum view coordinate along the Z-axis (read-only)" },
1848   { F,   "Min" , opt_view_min , 0. ,
1849     "Minimum value in the view (read-only)" },
1850   { F,   "MinVisible" , opt_view_min_visible , 0. ,
1851     "Minimum value in the visible parts of the view, taking current time step "
1852     "and tensor display type into account (read-only)" },
1853   { F,   "MinX" , opt_view_xmin , 0. ,
1854     "Minimum view coordinate along the X-axis (read-only)" },
1855   { F,   "MinY" , opt_view_ymin , 0. ,
1856     "Minimum view coordinate along the Y-axis (read-only)" },
1857   { F,   "MinZ" , opt_view_zmin , 0. ,
1858     "Minimum view coordinate along the Z-axis (read-only)" },
1859 
1860   { F|O, "NbIso" , opt_view_nb_iso , 10. ,
1861     "Number of intervals" },
1862   { F,   "NbTimeStep" , opt_view_nb_timestep , 1. ,
1863     "Number of time steps in the view (do not change this!)" },
1864   { F,   "NormalRaise" , opt_view_normal_raise , 0. ,
1865     "Elevation of the view along the normal (in model coordinates)" },
1866   { F|O, "Normals" , opt_view_normals , 0. ,
1867     "Display size of normal vectors (in pixels)" },
1868 
1869   { F,   "OffsetX" , opt_view_offset0 , 0. ,
1870     "Translation of the view along X-axis (in model coordinates)" },
1871   { F,   "OffsetY" , opt_view_offset1 , 0. ,
1872     "Translation of the view along Y-axis (in model coordinates)" },
1873   { F,   "OffsetZ" , opt_view_offset2 , 0. ,
1874     "Translation of the view along Z-axis (in model coordinates)" },
1875 
1876   { F|O, "PointSize" , opt_view_point_size , 3. ,
1877     "Display size of points (in pixels)" },
1878   { F|O, "PointType" , opt_view_point_type , 0. ,
1879     "Display points as solid color dots (0), 3D spheres (1), scaled dots "
1880     "(2) or scaled spheres (3)" },
1881   { F|O, "PositionX" , opt_view_position0 , 100. ,
1882     "X position (in pixels) of the scale or 2D plot (< 0: measure from right "
1883     "edge; >= 1e5: centered)" },
1884   { F|O, "PositionY" , opt_view_position1 , 50. ,
1885     "Y position (in pixels) of the scale or 2D plot (< 0: measure from bottom "
1886     "edge; >= 1e5: centered)" },
1887 
1888   { F,   "RaiseX" , opt_view_raise0 , 0. ,
1889     "Elevation of the view along X-axis (in model coordinates)" },
1890   { F,   "RaiseY" , opt_view_raise1 , 0. ,
1891     "Elevation of the view along Y-axis (in model coordinates)" },
1892   { F,   "RaiseZ" , opt_view_raise2 , 0. ,
1893     "Elevation of the view along Z-axis (in model coordinates)" },
1894   { F|O, "RangeType" , opt_view_range_type , 1 ,
1895     "Value scale range type (1: default, 2: custom, 3: per time step)" },
1896 
1897   { F|O, "Sampling" , opt_view_sampling , 1. ,
1898     "Element sampling rate (draw one out every `Sampling' elements)" },
1899   { F|O, "SaturateValues" , opt_view_saturate_values , 0. ,
1900     "Saturate the view values to custom min and max (1: true, 0: false)" },
1901   { F|O, "ScaleType" , opt_view_scale_type , 1 ,
1902     "Value scale type (1: linear, 2: logarithmic, 3: double logarithmic)" },
1903   { F|O, "ShowElement" , opt_view_show_element , 0. ,
1904     "Show element boundaries?" },
1905   { F|O, "ShowScale" , opt_view_show_scale , 1. ,
1906     "Show value scale?" },
1907   { F|O, "ShowTime" , opt_view_show_time , 3. ,
1908     "Time display mode (0: none, 1: time series, 2: harmonic data, 3: automatic, "
1909     "4: step data, 5: multi-step data, 6: real eigenvalues, 7: complex eigenvalues)" },
1910   { F|O, "SmoothNormals" , opt_view_smooth_normals , 0. ,
1911     "Smooth the normals?" },
1912   { F|O, "Stipple" , opt_view_use_stipple , 0. ,
1913     "Stipple curves in 2D and line plots?" },
1914 
1915   { F|O, "Tangents" , opt_view_tangents , 0. ,
1916     "Display size of tangent vectors (in pixels)" },
1917   { F|O, "TargetError" , opt_view_target_error , 1e-4 ,
1918     "Target representation error for adaptive views" },
1919   { F|O, "TensorType" , opt_view_tensor_type , 1. ,
1920     "Tensor display type (1: Von-Mises, 2: maximum eigenvalue, 3: minimum eigenvalue, "
1921     "4: eigenvectors, 5: ellipse, 6: ellipsoid, 7: frame)"},
1922   { F,   "TimeStep" , opt_view_timestep , 0. ,
1923     "Current time step displayed" },
1924   { F,   "Time" , opt_view_time , -1. ,
1925     "Current time displayed (if positive, sets the time step corresponding "
1926     "the given time value)" },
1927   { F,   "TransformXX" , opt_view_transform00 , 1. ,
1928     "Element (1,1) of the 3x3 coordinate transformation matrix" },
1929   { F,   "TransformXY" , opt_view_transform01 , 0. ,
1930     "Element (1,2) of the 3x3 coordinate transformation matrix" },
1931   { F,   "TransformXZ" , opt_view_transform02 , 0. ,
1932     "Element (1,3) of the 3x3 coordinate transformation matrix" },
1933   { F,   "TransformYX" , opt_view_transform10 , 0. ,
1934     "Element (2,1) of the 3x3 coordinate transformation matrix" },
1935   { F,   "TransformYY" , opt_view_transform11 , 1. ,
1936     "Element (2,2) of the 3x3 coordinate transformation matrix" },
1937   { F,   "TransformYZ" , opt_view_transform12 , 0. ,
1938     "Element (2,3) of the 3x3 coordinate transformation matrix" },
1939   { F,   "TransformZX" , opt_view_transform20 , 0. ,
1940     "Element (3,1) of the 3x3 coordinate transformation matrix" },
1941   { F,   "TransformZY" , opt_view_transform21 , 0. ,
1942     "Element (3,2) of the 3x3 coordinate transformation matrix" },
1943   { F,   "TransformZZ" , opt_view_transform22 , 1. ,
1944     "Element (3,3) of the 3x3 coordinate transformation matrix" },
1945   { F,   "Type" , opt_view_type , 1 ,
1946     "Type of plot (1: 3D, 2: 2D space, 3: 2D time, 4: 2D)" },
1947 
1948   { F|O, "UseGeneralizedRaise" , opt_view_use_gen_raise , 0 ,
1949     "Use generalized raise?" },
1950 
1951   { F|O, "VectorType" , opt_view_vector_type , 4 ,
1952     "Vector display type (1: segment, 2: arrow, 3: pyramid, 4: 3D arrow, "
1953     "5: displacement, 6: comet)" },
1954   { F,   "Visible" , opt_view_visible , 1. ,
1955     "Is the view visible?" },
1956 
1957   { F|O, "Width" , opt_view_size0 , 300. ,
1958     "Width (in pixels) of the scale or 2D plot" },
1959 
1960   { 0, nullptr , nullptr , 0. , nullptr }
1961 } ;
1962 
1963 StringXNumber PrintOptions_Number[] = {
1964   { F|O, "Parameter" , opt_print_parameter , 0. ,
1965     "Current value of the print parameter" },
1966   { F|O, "ParameterFirst" , opt_print_parameter_first , -1. ,
1967     "First value of print parameter in loop" },
1968   { F|O, "ParameterLast" , opt_print_parameter_last , 1. ,
1969     "Last value of print parameter in loop" },
1970   { F|O, "ParameterSteps" , opt_print_parameter_steps , 10. ,
1971     "Number of steps in loop over print parameter" },
1972 
1973   { F|O, "Background" , opt_print_background , 0. ,
1974     "Print background (gradient and image)?" },
1975 
1976   { F|O, "CompositeWindows" , opt_print_composite_windows , 0. ,
1977     "Composite all window tiles in the same output image (for bitmap output only)" },
1978 
1979   { F|O, "DeleteTemporaryFiles" , opt_print_delete_tmp_files , 1. ,
1980     "Delete temporary files used during printing" },
1981 
1982   { F|O, "EpsBestRoot" , opt_print_eps_best_root , 1. ,
1983     "Try to minimize primitive splitting in BSP tree sorted PostScript/PDF output" },
1984   { F|O, "EpsCompress" , opt_print_eps_compress , 0. ,
1985     "Compress PostScript/PDF output using zlib" },
1986   { F|O, "EpsLineWidthFactor" , opt_print_eps_line_width_factor , 1.0 ,
1987     "Width factor for lines in PostScript/PDF output" },
1988   { F|O, "EpsOcclusionCulling" , opt_print_eps_occlusion_culling , 1. ,
1989     "Cull occluded primitives (to reduce PostScript/PDF file size)" },
1990   { F|O, "EpsPointSizeFactor" , opt_print_eps_point_size_factor , 1.0 ,
1991     "Size factor for points in PostScript/PDF output" },
1992   { F|O, "EpsPS3Shading" , opt_print_eps_ps3shading , 0. ,
1993     "Enable PostScript Level 3 shading" },
1994   { F|O, "EpsQuality" , opt_print_eps_quality , 1. ,
1995     "PostScript/PDF quality (0: bitmap, 1: vector (simple sort), 2: vector "
1996     "(accurate sort), 3: vector (unsorted)" },
1997 
1998   { F|O, "Format" , opt_print_file_format , FORMAT_AUTO ,
1999     "File format (10: automatic)" },
2000 
2001   { F|O, "GeoLabels" , opt_print_geo_labels , 1. ,
2002     "Save labels in unrolled Gmsh geometries" },
2003   { F|O, "GeoOnlyPhysicals" , opt_print_geo_only_physicals , 0. ,
2004     "Only save entities that belong to physical groups" },
2005   { F|O, "GifDither" , opt_print_gif_dither , 0. ,
2006     "Apply dithering to GIF output" },
2007   { F|O, "GifInterlace" , opt_print_gif_interlace , 0. ,
2008     "Interlace GIF output" },
2009   { F|O, "GifSort" , opt_print_gif_sort , 1. ,
2010     "Sort the colormap in GIF output" },
2011   { F|O, "GifTransparent" , opt_print_gif_transparent , 0. ,
2012     "Output transparent GIF image" },
2013 
2014   { F|O, "Height" , opt_print_height , -1. ,
2015     "Height of printed image; use (possibly scaled) current height if < 0" },
2016 
2017   { F|O, "JpegQuality" , opt_print_jpeg_quality , 100. ,
2018     "JPEG quality (between 1 and 100)" },
2019   { F|O, "JpegSmoothing" , opt_print_jpeg_smoothing , 0. ,
2020     "JPEG smoothing (between 0 and 100)" },
2021 
2022   { F|O, "PgfTwoDim" , opt_print_pgf_two_dim , 1. ,
2023     "Output PGF format for two dimensions. Mostly irrelevant if `PgfExportAxis=0`. "
2024     "Default `1` (yes)." },
2025   { F|O, "PgfExportAxis" , opt_print_pgf_export_axis , 0. ,
2026     "Include axis in export pgf code (not in the png). Default `0` (no)." },
2027   { F|O, "PgfHorizontalBar" , opt_print_pgf_horiz_bar , 0. ,
2028     "Use a horizontal color bar in the pgf output. Default `0` (no)." },
2029   { F|O, "PostElementary" , opt_print_pos_elementary , 1. ,
2030     "Save elementary region tags in mesh statistics exported as "
2031     "post-processing views" },
2032   { F|O, "PostElement" , opt_print_pos_element , 0. ,
2033     "Save element tags in mesh statistics exported as post-processing views" },
2034   { F|O, "PostGamma" , opt_print_pos_gamma , 0. ,
2035     "Save Gamma quality measure in mesh statistics exported as "
2036     "post-processing views" },
2037   { F|O, "PostEta" , opt_print_pos_eta , 0. ,
2038     "Save Eta quality measure in mesh statistics exported as "
2039     "post-processing views" },
2040   { F|O, "PostSICN" , opt_print_pos_SICN , 0. ,
2041     "Save SICN (signed inverse condition number) quality measure in mesh "
2042     "statistics exported as post-processing views" },
2043   { F|O, "PostSIGE" , opt_print_pos_SIGE , 0. ,
2044     "Save SIGE (signed inverse gradient error) quality measure in mesh "
2045     "statistics exported as post-processing views" },
2046   { F|O, "PostDisto" , opt_print_pos_disto , 0. ,
2047     "Save Disto quality measure in mesh statistics exported as "
2048     "post-processing views" },
2049 
2050   { F|O, "TexAsEquation" , opt_print_tex_as_equation , 0. ,
2051     "Print all TeX strings as equations" },
2052   { F|O, "TexForceFontSize" , opt_print_tex_force_fontsize , 0. ,
2053     "Force font size of TeX strings to fontsize in the graphic window" },
2054   { F|O, "TexWidthInMm" , opt_print_tex_width_in_mm , 150. ,
2055     "Width of tex graphics in mm (use 0 for the natural width inferred from the "
2056     "image width in pixels)" },
2057   { F|O, "Text" , opt_print_text , 1. ,
2058     "Print text strings?" },
2059 
2060   { F|O, "X3dCompatibility" , opt_print_x3d_compatibility, 0. ,
2061     "Produce highly compatible X3D output (no scale bar)" },
2062   { F|O, "X3dPrecision" , opt_print_x3d_precision , 1.e-9 ,
2063     "Precision of X3D output" },
2064   { F|O, "X3dRemoveInnerBorders" , opt_print_x3d_remove_inner_borders , 0. ,
2065     "Remove inner borders in X3D output" },
2066   { F|O, "X3dTransparency" , opt_print_x3d_transparency , 0. ,
2067     "Transparency for X3D output" },
2068   { F|O, "X3dSurfaces" , opt_print_x3d_surfaces, 1. ,
2069     "Save surfaces in CAD X3D output (0: no, 1: yes in a single X3D object,"
2070     "2: one X3D object per geometrical surface, 3: one X3D object per"
2071     "physical surface)"},
2072   { F|O, "X3dEdges" , opt_print_x3d_edges, 0. ,
2073     "Save edges in CAD X3D output (0: no, 1: yes in a single X3D object,"
2074     "2: one X3D object per geometrical edge, 3: one X3D object per"
2075     "physical edge)"},
2076   { F|O, "X3dVertices" , opt_print_x3d_vertices, 0. ,
2077     "Save vertices in CAD X3D output (0: no, 1: yes)"},
2078 
2079   { F|O, "Width" , opt_print_width , -1. ,
2080     "Width of printed image; use (possibly scaled) current width if < 0)" },
2081 
2082   { 0, nullptr , nullptr , 0. }
2083 } ;
2084 
2085 // COLORS
2086 
2087 // CONTRARY TO THE PRECEDING OPTIONS, THE ORDERING OF COLOR OPTIONS MATTERS !
2088 
2089 // Solid Works (light blue to light gray): 94,198,255 -> 232,232,232
2090 // Catia (dark grey-blue to light gray-blue): 63,62,119 -> 181,182,202
2091 
2092 StringXColor GeneralOptions_Color[] = {
2093   { F|O, "Background" , opt_general_color_background ,
2094     {255, 255, 255, 255}, {255, 255, 255, 255}, {245, 245, 245, 255}, {0, 0, 0, 255},
2095     "Background color" },
2096   { F|O, "BackgroundGradient" , opt_general_color_background_gradient ,
2097     {255, 255, 255, 255}, {208, 215, 255, 255}, {185, 185, 185, 255}, {0, 0, 0, 255},
2098     "Background gradient color" },
2099   { F|O, "Foreground" , opt_general_color_foreground ,
2100     {85, 85, 85, 255}, {85, 85, 85, 255}, {85, 85, 85, 255}, {170, 170, 170, 255},
2101     "Foreground color" },
2102   { F|O, "Text" , opt_general_color_text ,
2103     {0, 0, 0, 255}, {0, 0, 0, 255}, {0, 0, 0, 255}, {245, 245, 245, 255},
2104     "Text color" },
2105   { F|O, "Axes" , opt_general_color_axes ,
2106     {0, 0, 0, 255}, {0, 0, 0, 255}, {0, 0, 0, 255}, {245, 245, 245, 255},
2107     "Axes color" },
2108   { F|O, "SmallAxes" , opt_general_color_small_axes ,
2109     {0, 0, 0, 255}, {0, 0, 0, 255}, {0, 0, 0, 255}, {245, 245, 245, 255},
2110     "Small axes color" },
2111   { F|O, "AmbientLight" , opt_general_color_ambient_light,
2112     {25, 25, 25, 255}, {25, 25, 25, 255}, {25, 25, 25, 255}, {25, 25, 25, 255},
2113     "Ambient light color" },
2114   { F|O, "DiffuseLight" , opt_general_color_diffuse_light,
2115     {255, 255, 255, 255}, {255, 255, 255, 255}, {255, 255, 255, 255}, {255, 255, 255, 255},
2116     "Diffuse light color" },
2117   { F|O, "SpecularLight" , opt_general_color_specular_light,
2118     {255, 255, 255, 255}, {255, 255, 255, 255}, {255, 255, 255, 255}, {255, 255, 255, 255},
2119     "Specular light color" },
2120   { 0, nullptr , nullptr ,  {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0} , {0, 0, 0, 0} , nullptr }
2121 } ;
2122 
2123 StringXColor GeometryOptions_Color[] = {
2124   { F|O, "Points" , opt_geometry_color_points ,
2125     {90, 90, 90, 255}, {90, 90, 90, 255}, {0, 0, 0, 255}, {178, 178, 178, 255},
2126     "Normal geometry point color" },
2127   { F|O, "Curves" , opt_geometry_color_curves ,
2128     {0, 0, 255, 255}, {0, 0, 255, 255}, {0, 0, 0, 255}, {0, 0, 255, 255},
2129     "Normal geometry curve color" },
2130   { F|O|D, "Lines" , opt_geometry_color_curves ,
2131     {0, 0, 255, 255}, {0, 0, 255, 255}, {0, 0, 0, 255}, {0, 0, 255, 255},
2132     "[Deprecated]" },
2133   { F|O, "Surfaces" , opt_geometry_color_surfaces ,
2134     {128, 128, 128, 255}, {128, 128, 128, 255}, {0, 0, 0, 255}, {128, 128, 128, 255},
2135     "Normal geometry surface color" },
2136   { F|O, "Volumes" , opt_geometry_color_volumes ,
2137     {255, 255, 0, 255}, {255, 255, 0, 255}, {0, 0, 0, 255}, {255, 255, 0, 255},
2138     "Normal geometry volume color" },
2139   { F|O, "Selection" , opt_geometry_color_selection ,
2140     {255, 0, 0, 255}, {255, 0, 0, 255}, {255, 0, 0, 255}, {255, 0, 0, 255},
2141     "Selected geometry color" },
2142   { F|O, "HighlightZero" , opt_geometry_color_highlight0 ,
2143     {255, 0, 0, 255}, {255, 0, 0, 255}, {255, 0, 0, 255}, {255, 0, 0, 255},
2144     "Highlight 0 color" },
2145   { F|O, "HighlightOne" , opt_geometry_color_highlight1 ,
2146     {255, 150, 0, 255}, {255, 150, 0, 255}, {255, 150, 0, 255}, {255, 150, 0, 255},
2147     "Highlight 1 color" },
2148   { F|O, "HighlightTwo" , opt_geometry_color_highlight2 ,
2149     {255, 255, 0, 255}, {255, 255, 0, 255}, {255, 255, 0, 255}, {255, 255, 0, 255},
2150     "Highlight 2 color" },
2151   { F|O, "Tangents" , opt_geometry_color_tangents ,
2152     {255, 255, 0, 255}, {255, 255, 0, 255}, {0, 0, 0, 255}, {255, 255, 0, 255},
2153     "Tangent geometry vectors color" },
2154   { F|O, "Normals" , opt_geometry_color_normals ,
2155     {255, 0, 0, 255}, {255, 0, 0, 255}, {0, 0, 0, 255}, {255, 0, 0, 255},
2156     "Normal geometry vectors color" },
2157   { F|O, "Projection" , opt_geometry_color_projection ,
2158     {0, 255, 0, 255}, {0, 255, 0, 255}, {0, 0, 0, 255}, {0, 255, 0, 255},
2159     "Projection surface color" },
2160   { 0, nullptr , nullptr , {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0} , nullptr }
2161 } ;
2162 
2163 #define COLW  {210, 210, 210, 255}
2164 #define COLT  {160, 150, 255, 255}
2165 #define COLQ  {130, 120, 225, 255}
2166 #define COLP  {232, 210, 23, 255}
2167 #define COLY  {217, 113, 38, 255}
2168 #define COLR  {20, 255, 0, 255}
2169 
2170 #define COL0  {255, 120, 0, 255}
2171 #define COL2  {255, 160, 0, 255}
2172 #define COL4  {255, 200, 0, 255}
2173 #define COL6  {255, 240, 0, 255}
2174 #define COL8  {228, 255, 0, 255}
2175 #define COL10  {188, 255, 0, 255}
2176 #define COL12  {148, 255, 0, 255}
2177 #define COL14  {108, 255, 0, 255}
2178 #define COL16  {68, 255, 0, 255}
2179 #define COL18  {0, 255, 52, 255}
2180 #define COL1 {0, 255, 132, 255}
2181 #define COL3 {0, 255, 192, 255}
2182 #define COL5 {0, 216, 255, 255}
2183 #define COL7 {0, 176, 255, 255}
2184 #define COL9 {0, 116, 255, 255}
2185 #define COL11 {0, 76, 255, 255}
2186 #define COL13 {24, 0, 255, 255}
2187 #define COL15 {84, 0, 255, 255}
2188 #define COL17 {104, 0, 255, 255}
2189 #define COL19 {184, 0, 255, 255}
2190 
2191 StringXColor MeshOptions_Color[] = {
2192   { F|O, "Nodes" , opt_mesh_color_nodes ,
2193     {0, 0, 255, 255}, {0, 0, 255, 255}, {0, 0, 0, 255}, {0, 0, 255, 255},
2194     "Mesh node color" },
2195   { F|O|D, "Points" , opt_mesh_color_nodes ,
2196     {0, 0, 255, 255}, {0, 0, 255, 255}, {0, 0, 0, 255}, {0, 0, 255, 255},
2197     "[Deprecated]" },
2198   { F|O, "NodesSup" , opt_mesh_color_nodes_sup ,
2199     {255, 0, 255, 255}, {255, 0, 255, 255}, {0, 0, 0, 255}, {255, 0, 255, 255},
2200     "Second order mesh node color" },
2201   { F|O|D, "PointsSup" , opt_mesh_color_nodes_sup ,
2202     {255, 0, 255, 255}, {255, 0, 255, 255}, {0, 0, 0, 255}, {255, 0, 255, 255},
2203     "[Deprecated]" },
2204   { F|O, "Lines" , opt_mesh_color_lines ,
2205     {0, 0, 0, 255}, {0, 0, 0, 255}, {0, 0, 0, 255}, {0, 0, 0, 255},
2206     "Mesh line color" },
2207   { F|O, "Triangles" , opt_mesh_color_triangles ,
2208     COLT, COLT, COLW, COLT,
2209     "Mesh triangle color (if Mesh.ColorCarousel=0)" },
2210   { F|O, "Quadrangles" , opt_mesh_color_quadrangles ,
2211     COLQ, COLQ, COLW, COLQ,
2212     "Mesh quadrangle color (if Mesh.ColorCarousel=0)" },
2213   { F|O, "Tetrahedra" , opt_mesh_color_tetrahedra ,
2214     COLT, COLT, COLW, COLT,
2215      "Mesh tetrahedron color (if Mesh.ColorCarousel=0)" },
2216   { F|O, "Hexahedra" , opt_mesh_color_hexahedra ,
2217     COLQ, COLQ, COLW, COLQ,
2218     "Mesh hexahedron color (if Mesh.ColorCarousel=0)" },
2219   { F|O, "Prisms" , opt_mesh_color_prisms ,
2220     COLP, COLP, COLW, COLP,
2221      "Mesh prism color (if Mesh.ColorCarousel=0)" },
2222   { F|O, "Pyramids" , opt_mesh_color_pyramid ,
2223     COLY, COLY, COLW, COLY,
2224      "Mesh pyramid color (if Mesh.ColorCarousel=0)" },
2225   { F|O, "Trihedra" , opt_mesh_color_trihedron ,
2226     COLR, COLR, COLW, COLR,
2227      "Mesh trihedron color (if Mesh.ColorCarousel=0)" },
2228   { F|O, "Tangents" , opt_mesh_color_tangents ,
2229     {255, 255, 0, 255}, {255, 255, 0, 255}, {0, 0, 0, 255}, {255, 255, 0, 255},
2230     "Tangent mesh vector color" },
2231   { F|O, "Normals" , opt_mesh_color_normals ,
2232     {255, 0, 0, 255}, {255, 0, 0, 255}, {0, 0, 0, 255}, {255, 0, 0, 255},
2233     "Normal mesh vector color" },
2234   { F|O, "Zero"     , opt_mesh_color_0 , COL0, COL0, COLW, COL0,
2235     "Color 0 in color carousel" },
2236   { F|O, "One"      , opt_mesh_color_1 , COL1, COL1, COLW, COL1,
2237     "Color 1 in color carousel" },
2238   { F|O, "Two"      , opt_mesh_color_2 , COL2, COL2, COLW, COL2,
2239     "Color 2 in color carousel" },
2240   { F|O, "Three"    , opt_mesh_color_3 , COL3, COL3, COLW, COL3,
2241     "Color 3 in color carousel" },
2242   { F|O, "Four"     , opt_mesh_color_4 , COL4, COL4, COLW, COL4,
2243     "Color 4 in color carousel" },
2244   { F|O, "Five"     , opt_mesh_color_5 , COL5, COL5, COLW, COL5,
2245     "Color 5 in color carousel" },
2246   { F|O, "Six"      , opt_mesh_color_6 , COL6, COL6, COLW, COL6,
2247     "Color 6 in color carousel" },
2248   { F|O, "Seven"    , opt_mesh_color_7 , COL7, COL7, COLW, COL7,
2249     "Color 7 in color carousel" },
2250   { F|O, "Eight"    , opt_mesh_color_8 , COL8, COL8, COLW, COL8,
2251     "Color 8 in color carousel" },
2252   { F|O, "Nine"     , opt_mesh_color_9 , COL9, COL9, COLW, COL9,
2253     "Color 9 in color carousel" },
2254   { F|O, "Ten"      , opt_mesh_color_10, COL10, COL10, COLW, COL10,
2255     "Color 10 in color carousel" },
2256   { F|O, "Eleven"   , opt_mesh_color_11, COL11, COL11, COLW, COL11,
2257     "Color 11 in color carousel" },
2258   { F|O, "Twelve"   , opt_mesh_color_12, COL12, COL12, COLW, COL12,
2259     "Color 12 in color carousel" },
2260   { F|O, "Thirteen" , opt_mesh_color_13, COL13, COL13, COLW, COL13,
2261     "Color 13 in color carousel" },
2262   { F|O, "Fourteen" , opt_mesh_color_14, COL14, COL14, COLW, COL14,
2263     "Color 14 in color carousel" },
2264   { F|O, "Fifteen"  , opt_mesh_color_15, COL15, COL15, COLW, COL15,
2265     "Color 15 in color carousel" },
2266   { F|O, "Sixteen"  , opt_mesh_color_16, COL16, COL16, COLW, COL16,
2267     "Color 16 in color carousel" },
2268   { F|O, "Seventeen", opt_mesh_color_17, COL17, COL17, COLW, COL17,
2269     "Color 17 in color carousel" },
2270   { F|O, "Eighteen" , opt_mesh_color_18, COL18, COL18, COLW, COL18,
2271     "Color 18 in color carousel" },
2272   { F|O, "Nineteen" , opt_mesh_color_19, COL19, COL19, COLW, COL19,
2273     "Color 19 in color carousel" },
2274   { 0, nullptr , nullptr , {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0} , {0, 0, 0, 0} , nullptr }
2275 } ;
2276 
2277 StringXColor SolverOptions_Color[] = {
2278   { 0, nullptr , nullptr , {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0} , nullptr }
2279 } ;
2280 
2281 StringXColor PostProcessingOptions_Color[] = {
2282   { 0, nullptr , nullptr , {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0} , nullptr }
2283 } ;
2284 
2285 #define ELECOL  {0, 0, 0, 255}, {0, 0, 0, 255}, {0, 0, 0, 255}, {245, 245, 245, 255}
2286 
2287 StringXColor ViewOptions_Color[] = {
2288   { F|O, "Points" , opt_view_color_points , ELECOL, "Point color" },
2289   { F|O, "Lines" , opt_view_color_lines , ELECOL, "Line color" },
2290   { F|O, "Triangles" , opt_view_color_triangles , ELECOL, "Triangle color" },
2291   { F|O, "Quadrangles" , opt_view_color_quadrangles , ELECOL, "Quadrangle color" },
2292   { F|O, "Tetrahedra" , opt_view_color_tetrahedra , ELECOL, "Tetrahedron color" },
2293   { F|O, "Hexahedra" , opt_view_color_hexahedra , ELECOL, "Hexahedron color" },
2294   { F|O, "Prisms" , opt_view_color_prisms , ELECOL, "Prism color" },
2295   { F|O, "Pyramids" , opt_view_color_pyramids , ELECOL, "Pyramid color" },
2296   { F|O, "Trihedra" , opt_view_color_trihedra , ELECOL, "Trihedron color" },
2297   { F|O, "Tangents" , opt_view_color_tangents ,
2298     {255, 255, 0, 255}, {255, 255, 0, 255}, {0, 0, 0, 255}, {255, 255, 0, 255},
2299     "Tangent vector color" },
2300   { F|O, "Normals" , opt_view_color_normals ,
2301     {255, 0, 0, 255}, {255, 0, 0, 255}, {0, 0, 0, 255}, {255, 0, 0, 255},
2302     "Normal vector color" },
2303   { F|O, "Text2D" , opt_view_color_text2d , ELECOL, "2D text color" },
2304   { F|O, "Text3D" , opt_view_color_text3d , ELECOL, "3D text color" },
2305   { F|O, "Axes" , opt_view_color_axes , ELECOL, "Axes color" },
2306   { F|O, "Background2D" , opt_view_color_background2d ,
2307     {255, 255, 255, 200}, {255, 255, 255, 200}, {255, 255, 255, 200}, {245, 245, 245, 200},
2308     "Bacground color for 2D plots" },
2309   { 0, nullptr , nullptr , {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0} , nullptr }
2310 } ;
2311 
2312 StringXColor PrintOptions_Color[] = {
2313   { 0, nullptr , nullptr , {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0, 0} , nullptr }
2314 } ;
2315 
2316 #undef S
2317 #undef O
2318 #undef F
2319 #undef D
2320 
2321 #endif
2322