Skip to content
Snippets Groups Projects
Commit 630a3cce authored by Christophe Geuzaine's avatar Christophe Geuzaine
Browse files

*** empty log message ***

parent 217a319b
No related branches found
No related tags found
No related merge requests found
// $Id: GetOptions.cpp,v 1.50 2002-05-20 18:28:24 geuzaine Exp $
//
// Copyright (C) 1997 - 2002 C. Geuzaine, J.-F. Remacle
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems to "gmsh@geuz.org".
#include <unistd.h>
#include "Gmsh.h"
#include "GmshUI.h"
#include "GmshVersion.h"
#include "Numeric.h"
#include "Context.h"
#include "Options.h"
#include "Geo.h"
#include "Mesh.h"
#include "Views.h"
#include "OpenFile.h"
#include "Parser.h"
#ifndef GMSH_MAJOR_VERSION
#error
#error Common/GmshVersion.h is not up-to-date.
#error Please run 'make tag'.
#error
#endif
extern Context_T CTX;
char *TheFileNameTab[MAX_OPEN_FILES];
char *TheBgmFileName=NULL, *TheOptString=NULL;
char gmsh_progname[] = "This is Gmsh" ;
char gmsh_copyright[] = "Copyright (C) 1997-2002 Jean-Francois Remacle and Christophe Geuzaine";
char gmsh_version[] = "Version : " ;
char gmsh_os[] = "Build OS : " GMSH_OS ;
char gmsh_gui[] = "GUI toolkit : " ;
char gmsh_date[] = "Build date : " GMSH_DATE ;
char gmsh_host[] = "Build host : " GMSH_HOST ;
char gmsh_packager[] = "Packager : " GMSH_PACKAGER ;
char gmsh_url[] = "Web site : http://www.geuz.org/gmsh/" ;
char gmsh_email[] = "Mailing list : gmsh@geuz.org" ;
void Print_Usage(char *name){
Msg(DIRECT, "Usage: %s [options] [files]", name);
Msg(DIRECT, "Geometry options:");
Msg(DIRECT, " -0 parse input files, output unrolled geometry, and exit");
Msg(DIRECT, "Mesh options:");
Msg(DIRECT, " -1, -2, -3 perform batch 1D, 2D and 3D mesh generation");
Msg(DIRECT, " -saveall save all elements (discard physical group definitions)");
Msg(DIRECT, " -o file specify mesh output file name");
Msg(DIRECT, " -format msh|unv|gref set output mesh format (default: msh)");
Msg(DIRECT, " -algo iso|tri|aniso select 2D mesh algorithm (default: iso)");
Msg(DIRECT, " -smooth int set mesh smoothing (default: 0)");
// Msg(DIRECT, " -degree int set mesh degree (default: 1)");
Msg(DIRECT, " -scale float set global scaling factor (default: 1.0)");
Msg(DIRECT, " -meshscale float set mesh scaling factor (default: 1.0)");
Msg(DIRECT, " -clscale float set characteristic length scaling factor (default: 1.0)");
Msg(DIRECT, " -rand float set random perturbation factor (default: 1.e-4)");
Msg(DIRECT, " -bgm file load backround mesh from file");
Msg(DIRECT, " -constrain constrain background mesh with characteristic lengths");
Msg(DIRECT, " -histogram print mesh quality histogram");
Msg(DIRECT, " -extrude use old extrusion mesh generator");
Msg(DIRECT, " -recombine recombine meshes from old extrusion mesh generator");
#ifndef _BLACKBOX
Msg(DIRECT, " -interactive display 2D mesh construction interactively");
Msg(DIRECT, "Post-processing options:");
Msg(DIRECT, " -dl enable display lists");
Msg(DIRECT, " -noview hide all views on startup");
Msg(DIRECT, " -link int select link mode between views (default: 0)");
Msg(DIRECT, " -smoothview smooth views");
Msg(DIRECT, " -convert file file convert an ascii view into a binary one");
Msg(DIRECT, "Display options:");
Msg(DIRECT, " -nodb disable double buffering");
Msg(DIRECT, " -fontsize int specify the font size for the GUI (default: 12)");
Msg(DIRECT, " -theme string specify GUI theme");
Msg(DIRECT, " -alpha enable alpha blending");
Msg(DIRECT, " -notrack don't use trackball mode for rotations");
Msg(DIRECT, " -display string specify display");
Msg(DIRECT, " -perspective set projection mode to perspective");
#endif
Msg(DIRECT, "Other options:");
#ifndef _BLACKBOX
Msg(DIRECT, " -a, -g, -m, -s, -p start in automatic, geometry, mesh, solver or");
Msg(DIRECT, " post-processing mode (default: automatic)");
#endif
Msg(DIRECT, " -v int set verbosity level (default: 2)");
Msg(DIRECT, " -string \"string\" parse string before project file");
Msg(DIRECT, " -option file parse option file before GUI creation");
Msg(DIRECT, " -version show version number");
Msg(DIRECT, " -info show detailed version information");
Msg(DIRECT, " -help show this message");
}
void Get_Options (int argc, char *argv[], int *nbfiles) {
int i=1;
// Parse session and option files
InitSymbols(); //this symbol context is local to option parsing (the
//symbols will not interfere with subsequent OpenFiles)
ParseFile(CTX.sessionrc_filename,1);
ParseFile(CTX.optionsrc_filename,1);
// Get command line options
TheFileNameTab[0] = CTX.default_filename ;
*nbfiles = 0;
while (i < argc) {
if (argv[i][0] == '-') {
if(!strcmp(argv[i]+1, "string")){
i++;
if(argv[i]!=NULL) TheOptString = argv[i++];
else{
fprintf(stderr, ERROR_STR "Missing string\n");
exit(1);
}
}
else if(!strcmp(argv[i]+1, "a")){
CTX.initial_context = 0; i++;
}
else if(!strcmp(argv[i]+1, "g")){
CTX.initial_context = 1; i++;
}
else if(!strcmp(argv[i]+1, "m")){
CTX.initial_context = 2; i++;
}
else if(!strcmp(argv[i]+1, "s")){
CTX.initial_context = 3; i++;
}
else if(!strcmp(argv[i]+1, "p")){
CTX.initial_context = 4; i++;
}
else if(!strcmp(argv[i]+1, "0")){
CTX.batch = -1; i++;
}
else if(!strcmp(argv[i]+1, "1")){
CTX.batch = 1; i++;
}
else if(!strcmp(argv[i]+1, "2")){
CTX.batch = 2; i++;
}
else if(!strcmp(argv[i]+1, "3")){
CTX.batch = 3; i++;
}
else if(!strcmp(argv[i]+1, "saveall")){
CTX.mesh.save_all = 1; i++;
}
else if(!strcmp(argv[i]+1, "extrude")){ //old extrusion mesh generator
CTX.mesh.oldxtrude = 1; i++;
}
else if(!strcmp(argv[i]+1, "recombine")){ //old extrusion mesh generator
CTX.mesh.oldxtrude_recombine = 1; i++;
}
else if(!strcmp(argv[i]+1, "dupli")){
CTX.mesh.check_duplicates = 1; i++;
}
else if(!strcmp(argv[i]+1, "histogram")){
CTX.mesh.histogram = 1; i++;
}
else if(!strcmp(argv[i]+1, "option")){
i++;
if(argv[i] != NULL) ParseFile(argv[i++],1);
else {
fprintf(stderr, ERROR_STR "Missing file name\n");
exit(1);
}
}
else if(!strcmp(argv[i]+1, "o")){
i++;
if(argv[i] != NULL) CTX.output_filename = argv[i++];
else {
fprintf(stderr, ERROR_STR "Missing file name\n");
exit(1);
}
}
else if(!strcmp(argv[i]+1, "bgm")){
i++;
if(argv[i] != NULL) TheBgmFileName = argv[i++];
else {
fprintf(stderr, ERROR_STR "Missing file name\n");
exit(1);
}
}
else if(!strcmp(argv[i]+1, "constrain")){
CTX.mesh.constrained_bgmesh = 1; i++;
}
else if(!strcmp(argv[i]+1, "convert")){
i++;
CTX.terminal = 1;
if(argv[i] && argv[i+1]){
ParseFile(argv[i],0);
if(List_Nbr(CTX.post.list))
Write_View(1,(Post_View*)List_Pointer(CTX.post.list, 0),argv[i+1]);
else
fprintf(stderr, ERROR_STR "No view to convert\n");
}
else
fprintf(stderr, "Usage: %s -convert view.ascii view.binary\n", argv[0]);
exit(1);
}
else if(!strcmp(argv[i]+1, "old")){
CTX.geom.old_circle = 1; i++;
}
else if(!strcmp(argv[i]+1, "initial")){
i++;
if(argv[i]!=NULL) CTX.mesh.initial_only = atoi(argv[i++]);
else {
fprintf(stderr, ERROR_STR "Missing number\n");
exit(1);
}
}
else if(!strcmp(argv[i]+1, "quality")){
i++;
if(argv[i]!=NULL) CTX.mesh.quality = atof(argv[i++]);
else {
fprintf(stderr, ERROR_STR "Missing number\n");
exit(1);
}
}
else if(!strcmp(argv[i]+1, "scale")){
i++;
if(argv[i]!=NULL) CTX.geom.scaling_factor = atof(argv[i++]);
else {
fprintf(stderr, ERROR_STR "Missing number\n");
exit(1);
}
}
else if(!strcmp(argv[i]+1, "meshscale")){
i++;
if(argv[i]!=NULL) CTX.mesh.scaling_factor = atof(argv[i++]);
else {
fprintf(stderr, ERROR_STR "Missing number\n");
exit(1);
}
}
else if(!strcmp(argv[i]+1, "rand")){
i++;
if(argv[i]!=NULL) CTX.mesh.rand_factor = atof(argv[i++]);
else {
fprintf(stderr, ERROR_STR "Missing number\n");
exit(1);
}
}
else if(!strcmp(argv[i]+1, "clscale")){
i++;
if(argv[i]!=NULL){
CTX.mesh.lc_factor = atof(argv[i++]);
if(CTX.mesh.lc_factor <= 0.0){
fprintf(stderr, ERROR_STR
"Characteristic length factor must be > 0\n");
exit(1);
}
}
else {
fprintf(stderr, ERROR_STR "Missing number\n");
exit(1);
}
}
else if(!strcmp(argv[i]+1, "smooth")){
i++;
if(argv[i]!=NULL) CTX.mesh.nb_smoothing = atoi(argv[i++]);
else{
fprintf(stderr, ERROR_STR "Missing number\n");
exit(1);
}
}
else if(!strcmp(argv[i]+1, "degree")){
i++;
if(argv[i]!=NULL)
opt_mesh_degree(0, GMSH_SET, atof(argv[i++]));
else {
fprintf(stderr, ERROR_STR "Missing number\n");
exit(1);
}
}
else if(!strcmp(argv[i]+1, "format") ||
!strcmp(argv[i]+1, "f")){
i++;
if(argv[i]!=NULL){
if(!strcmp(argv[i],"msh") ||
!strcmp(argv[i],"MSH") ||
!strcmp(argv[i],"gmsh")){
CTX.mesh.format = FORMAT_MSH ;
}
else if(!strcmp(argv[i],"unv") ||
!strcmp(argv[i],"UNV") ||
!strcmp(argv[i],"ideas")){
CTX.mesh.format = FORMAT_UNV ;
}
else if(!strcmp(argv[i],"gref") ||
!strcmp(argv[i],"GREF") ||
!strcmp(argv[i],"Gref")){
CTX.mesh.format = FORMAT_GREF ;
}
else{
fprintf(stderr, ERROR_STR "Unknown mesh format\n");
exit(1);
}
i++;
}
else {
fprintf(stderr, ERROR_STR "Missing format\n");
exit(1);
}
}
else if(!strcmp(argv[i]+1, "algo")){
i++;
if(argv[i]!=NULL){
if(!strncmp(argv[i],"iso",3))
CTX.mesh.algo = DELAUNAY_ISO ;
else if(!strncmp(argv[i],"tri",3))
CTX.mesh.algo = DELAUNAY_SHEWCHUK ;
else if(!strncmp(argv[i],"aniso",5))
CTX.mesh.algo = DELAUNAY_ANISO ;
else{
fprintf(stderr, ERROR_STR "Unknown mesh algorithm\n");
exit(1);
}
i++;
}
else {
fprintf(stderr, ERROR_STR "Missing algorithm\n");
exit(1);
}
}
else if(!strcmp(argv[i]+1, "version") ||
!strcmp(argv[i]+1, "-version")){
fprintf(stderr, "%d.%d.%d\n", GMSH_MAJOR_VERSION, GMSH_MINOR_VERSION,
GMSH_PATCH_VERSION);
exit(1);
}
else if(!strcmp(argv[i]+1, "info") ||
!strcmp(argv[i]+1, "-info")){
fprintf(stderr, "%s%d.%d.%d\n", gmsh_version, GMSH_MAJOR_VERSION,
GMSH_MINOR_VERSION, GMSH_PATCH_VERSION);
fprintf(stderr, "%s\n", gmsh_os);
#if _FLTK
fprintf(stderr, "%sFLTK %d.%d.%d\n", gmsh_gui, FL_MAJOR_VERSION,
FL_MINOR_VERSION, FL_PATCH_VERSION);
#else
fprintf(stderr, "%snone\n", gmsh_gui);
#endif
fprintf(stderr, "%s\n", gmsh_date);
fprintf(stderr, "%s\n", gmsh_host);
fprintf(stderr, "%s\n", gmsh_packager);
fprintf(stderr, "%s\n", gmsh_url);
fprintf(stderr, "%s\n", gmsh_email);
exit(1) ;
}
else if(!strcmp(argv[i]+1, "help") ||
!strcmp(argv[i]+1, "-help")){
fprintf(stderr, "%s\n", gmsh_progname);
fprintf(stderr, "%s\n", gmsh_copyright);
CTX.terminal = 1 ;
Print_Usage(argv[0]);
exit(1);
}
else if(!strcmp(argv[i]+1, "v")){
i++;
if(argv[i]!=NULL) CTX.verbosity = atoi(argv[i++]);
else {
fprintf(stderr, ERROR_STR "Missing number\n");
exit(1);
}
}
#ifndef _BLACKBOX
else if(!strcmp(argv[i]+1, "noterm")){
CTX.terminal = 0; i++;
}
else if(!strcmp(argv[i]+1, "term")){
CTX.terminal = 1; i++;
}
else if(!strcmp(argv[i]+1, "alpha")){
CTX.alpha = 1; i++;
}
else if(!strcmp(argv[i]+1, "notrack")){
CTX.useTrackball = 0; i++;
}
else if(!strcmp(argv[i]+1, "dual")){
CTX.mesh.dual = 1; i++;
}
else if(!strcmp(argv[i]+1, "interactive")){
CTX.mesh.interactive = 1; i++;
}
else if(!strcmp(argv[i]+1, "noview")){
opt_view_visible(0, GMSH_SET, 0); i++;
}
else if(!strcmp(argv[i]+1, "plugin")){
opt_general_default_plugins(0, GMSH_SET, 1); i++;
}
else if(!strcmp(argv[i]+1, "noplugin")){
opt_general_default_plugins(0, GMSH_SET, 0); i++;
}
else if(!strcmp(argv[i]+1, "link")){
i++ ;
if(argv[i]!=NULL)
CTX.post.link = atoi(argv[i++]);
else{
fprintf(stderr, ERROR_STR "Missing number\n");
exit(1);
}
}
else if(!strcmp(argv[i]+1, "fill")){
opt_view_intervals_type(0, GMSH_SET, DRAW_POST_CONTINUOUS) ; i++;
}
else if(!strcmp(argv[i]+1, "smoothview")){
CTX.post.smooth=1; i++;
}
else if(!strcmp(argv[i]+1, "nbiso")){
i++ ;
if(argv[i]!=NULL)
opt_view_nb_iso(0, GMSH_SET, atoi(argv[i++]));
else{
fprintf(stderr, ERROR_STR "Missing number\n");
exit(1);
}
}
else if(!strcmp(argv[i]+1, "command") ||
!strcmp(argv[i]+1, "c")){
CTX.command_win = 1; i++;
}
else if(!strcmp(argv[i]+1, "nocommand") ||
!strcmp(argv[i]+1, "noc")){
CTX.command_win = 0; i++;
}
else if(!strcmp(argv[i]+1, "overlay") ||
!strcmp(argv[i]+1, "ov")){
CTX.overlay = 1; i++;
}
else if(!strcmp(argv[i]+1, "nooverlay") ||
!strcmp(argv[i]+1, "noov")){
CTX.overlay = CTX.geom.highlight = 0; i++;
}
else if(!strcmp(argv[i]+1, "hh")){
CTX.overlay = 0 ; CTX.geom.highlight = 1; i++;
}
else if(!strcmp(argv[i]+1, "perspective") ||
!strcmp(argv[i]+1, "p")){
CTX.ortho = 0; i++;
}
else if(!strcmp(argv[i]+1, "ortho") ||
!strcmp(argv[i]+1, "o")){
CTX.ortho = 0; i++;
}
else if(!strcmp(argv[i]+1, "threads")){
CTX.threads = 1; i++;
}
else if(!strcmp(argv[i]+1, "nothreads")){
CTX.threads = 0; i++;
}
else if(!strcmp(argv[i]+1, "db")){
CTX.db = 1; i++;
}
else if(!strcmp(argv[i]+1, "nodb")){
CTX.db = 0; CTX.geom.highlight = 0; i++;
}
else if(!strcmp(argv[i]+1, "dl")){
CTX.display_lists = 1; i++;
}
else if(!strcmp(argv[i]+1, "nodl")){
CTX.display_lists = 0; i++;
}
else if(!strcmp(argv[i]+1, "fontsize")){
i++;
if(argv[i]!=NULL){
CTX.fontsize = atoi(argv[i]);
i++;
}
else {
fprintf(stderr, ERROR_STR "Missing number\n");
exit(1);
}
}
else if(!strcmp(argv[i]+1, "theme")){
i++;
if(argv[i]!=NULL){
CTX.theme = argv[i];
i++;
}
else {
fprintf(stderr, ERROR_STR "Missing argument\n");
exit(1);
}
}
else if(!strcmp(argv[i]+1, "display")){
i++;
if(argv[i]!=NULL){
CTX.display = argv[i];
i++;
}
else {
fprintf(stderr, ERROR_STR "Missing argument\n");
exit(1);
}
}
#endif // !_BLACKBOX
else{
fprintf(stderr, "Unknown option '%s'\n", argv[i]);
CTX.terminal = 1 ;
Print_Usage(argv[0]);
exit(1);
}
}
else {
if(*nbfiles < MAX_OPEN_FILES)
TheFileNameTab[(*nbfiles)++] = argv[i++];
else{
fprintf(stderr, ERROR_STR "Too many input files\n");
exit(1);
}
}
}
strncpy(CTX.filename, TheFileNameTab[0], 255);
}
#ifndef _GET_OPTIONS_H_
#define _GET_OPTIONS_H_
// Copyright (C) 1997 - 2002 C. Geuzaine, J.-F. Remacle
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA.
//
// Please report all bugs and problems to "gmsh@geuz.org".
extern char gmsh_progname[], gmsh_copyright[], gmsh_version[], gmsh_os[];
extern char gmsh_date[], gmsh_host[], gmsh_packager[], gmsh_url[];
extern char gmsh_email[], gmsh_gui[];
extern char *TheFileNameTab[MAX_OPEN_FILES], *TheBgmFileName, *TheOptString;
void Get_Options(int argc, char *argv[], int *nbfiles);
void Print_Usage(char *name);
#endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment