diff --git a/Common/CommandLine.cpp b/Common/CommandLine.cpp index 2d703baba6ac27e598c145834440eaf55588e90a..d133482cf4ba2b496180dd3cde4a5aa3e8d9f73c 100644 --- a/Common/CommandLine.cpp +++ b/Common/CommandLine.cpp @@ -482,6 +482,49 @@ void GetOptions(int argc, char *argv[]) else Msg::Fatal("Missing algorithm"); } + else if(!strcmp(argv[i] + 1, "format") || !strcmp(argv[i] + 1, "f")) { + i++; + if(argv[i]) { + if(!strcmp(argv[i], "auto")){ + CTX::instance()->mesh.fileFormat = FORMAT_AUTO; + } + else if(!strcmp(argv[i], "msh1")){ + CTX::instance()->mesh.fileFormat = FORMAT_MSH; + CTX::instance()->mesh.mshFileVersion = 1.0; + } + else if(!strcmp(argv[i], "msh2")){ + CTX::instance()->mesh.fileFormat = FORMAT_MSH; + CTX::instance()->mesh.mshFileVersion = 2.0; + } + else if(!strcmp(argv[i], "msh")) + CTX::instance()->mesh.fileFormat = FORMAT_MSH; + else if(!strcmp(argv[i], "unv")) + CTX::instance()->mesh.fileFormat = FORMAT_UNV; + else if(!strcmp(argv[i], "vrml")) + CTX::instance()->mesh.fileFormat = FORMAT_VRML; + else if(!strcmp(argv[i], "stl")) + CTX::instance()->mesh.fileFormat = FORMAT_STL; + else if(!strcmp(argv[i], "mesh")) + CTX::instance()->mesh.fileFormat = FORMAT_MESH; + else if(!strcmp(argv[i], "bdf")) + CTX::instance()->mesh.fileFormat = FORMAT_BDF; + else if(!strcmp(argv[i], "p3d")) + CTX::instance()->mesh.fileFormat = FORMAT_P3D; + else if(!strcmp(argv[i], "cgns")) + CTX::instance()->mesh.fileFormat = FORMAT_CGNS; + else if(!strcmp(argv[i], "diff")) + CTX::instance()->mesh.fileFormat = FORMAT_DIFF; + else if(!strcmp(argv[i], "med")) + CTX::instance()->mesh.fileFormat = FORMAT_MED; + else if(!strcmp(argv[i], "ir3")) + CTX::instance()->mesh.fileFormat = FORMAT_IR3; + else + Msg::Fatal("Unknown mesh format"); + i++; + } + else + Msg::Fatal("Missing format"); + } else if(!strcmp(argv[i] + 1, "listen")) { CTX::instance()->solver.listen = 1; i++; diff --git a/Common/Context.h b/Common/Context.h index b4791950978545a31f00502d3cec168b5efb5e28..d120f727b1c6d8e620831665bff1f031e5d3a0bf 100644 --- a/Common/Context.h +++ b/Common/Context.h @@ -28,7 +28,7 @@ struct contextMeshOptions { double lcMin, lcMax, toleranceEdgeLength; int lcFromPoints, lcFromCurvature, lcExtendFromBoundary; int dual, voronoi, drawSkinOnly, colorCarousel; - int format, nbSmoothing, algo2d, algo3d, algoSubdivide; + int fileFormat, nbSmoothing, algo2d, algo3d, algoSubdivide; int order, secondOrderLinear, secondOrderIncomplete; int secondOrderExperimental, meshOnlyVisible; int smoothInternalEdges, minCircPoints, minCurvPoints; @@ -210,7 +210,7 @@ class CTX { }solver; // print options struct{ - int format, epsQuality, epsBackground, epsCompress, epsPS3Shading; + int fileFormat, epsQuality, epsBackground, epsCompress, epsPS3Shading; int epsOcclusionCulling, epsBestRoot; double epsLineWidthFactor, epsPointSizeFactor; int jpegQuality, jpegSmoothing, geoLabels, text, texAsEquation; diff --git a/Common/CreateFile.cpp b/Common/CreateFile.cpp index dc15fcfca58f34e63b290a9fa8b7e460e6b1b2b6..72d5f56e319db324820e252da2db158d69aaa894 100644 --- a/Common/CreateFile.cpp +++ b/Common/CreateFile.cpp @@ -156,8 +156,8 @@ void CreateOutputFile(std::string fileName, int format) if(fileName.empty()) fileName = GetDefaultFileName(format); - int oldFormat = CTX::instance()->print.format; - CTX::instance()->print.format = format; + int oldFormat = CTX::instance()->print.fileFormat; + CTX::instance()->print.fileFormat = format; CTX::instance()->printing = 1; if(format != FORMAT_AUTO) @@ -509,7 +509,7 @@ void CreateOutputFile(std::string fileName, int format) if(printEndMessage) Msg::StatusBar(2, true, "Done writing '%s'", fileName.c_str()); - CTX::instance()->print.format = oldFormat; + CTX::instance()->print.fileFormat = oldFormat; CTX::instance()->printing = 0; #if defined(HAVE_OPENGL) diff --git a/Common/DefaultOptions.h b/Common/DefaultOptions.h index b4eb48b55d2d4d9bd932fb9e8c2488b15bccf4aa..d3beb5e9e0597ce1c925e20b85b230e4fadb01d9 100644 --- a/Common/DefaultOptions.h +++ b/Common/DefaultOptions.h @@ -1091,7 +1091,7 @@ StringXNumber MeshOptions_Number[] = { { F|O, "Explode" , opt_mesh_explode , 1.0 , "Element shrinking factor (between 0 and 1)" }, - { F|O, "Format" , opt_mesh_format , FORMAT_AUTO , + { F|O, "Format" , opt_mesh_file_format , FORMAT_AUTO , "Mesh output format (1=msh, 2=unv, 10=automatic, 19=vrml, 27=stl, 30=mesh, 31=bdf, " "32=cgns, 33=med)" }, @@ -1628,7 +1628,7 @@ StringXNumber PrintOptions_Number[] = { "PostScript/PDF quality (0=bitmap, 1=vector (simple sort), 2=vector " "(accurate sort), 3=vector (unsorted)" }, - { F|O, "Format" , opt_print_format , FORMAT_AUTO , + { F|O, "Format" , opt_print_file_format , FORMAT_AUTO , "File format (10=automatic)" }, { F|O, "GeoLabels" , opt_print_geo_labels , 1. , diff --git a/Common/Gmsh.cpp b/Common/Gmsh.cpp index 9574243e27cfeb23cf62d29512ec7ce1ff45bb86..9ec3c4faf4d08d5dbc8aca9a3c2d3f0ecf6ee073 100644 --- a/Common/Gmsh.cpp +++ b/Common/Gmsh.cpp @@ -188,9 +188,14 @@ int GmshBatch() } #endif #endif - CreateOutputFile(CTX::instance()->outputFileName, - CTX::instance()->outputFileName.empty() ? FORMAT_MSH : - FORMAT_AUTO); + std::string name = CTX::instance()->outputFileName; + if(name.empty()){ + if(CTX::instance()->mesh.fileFormat == FORMAT_AUTO) + name = GetDefaultFileName(FORMAT_MSH); + else + name = GetDefaultFileName(CTX::instance()->mesh.fileFormat); + } + CreateOutputFile(name, CTX::instance()->mesh.fileFormat); } time_t now; diff --git a/Common/Options.cpp b/Common/Options.cpp index 829da1163075aab356f666be59e35f29e46738bd..7fae483863172956a9ec1b24146d8baf86118c78 100644 --- a/Common/Options.cpp +++ b/Common/Options.cpp @@ -5470,11 +5470,11 @@ double opt_mesh_light_two_side(OPT_ARGS_NUM) return CTX::instance()->mesh.lightTwoSide; } -double opt_mesh_format(OPT_ARGS_NUM) +double opt_mesh_file_format(OPT_ARGS_NUM) { if(action & GMSH_SET) - CTX::instance()->mesh.format = (int)val; - return CTX::instance()->mesh.format; + CTX::instance()->mesh.fileFormat = (int)val; + return CTX::instance()->mesh.fileFormat; } double opt_mesh_msh_file_version(OPT_ARGS_NUM) @@ -8347,11 +8347,11 @@ double opt_view_component_map6(OPT_ARGS_NUM){ return ovcm(num, action, val, 6); double opt_view_component_map7(OPT_ARGS_NUM){ return ovcm(num, action, val, 7); } double opt_view_component_map8(OPT_ARGS_NUM){ return ovcm(num, action, val, 8); } -double opt_print_format(OPT_ARGS_NUM) +double opt_print_file_format(OPT_ARGS_NUM) { if(action & GMSH_SET) - CTX::instance()->print.format = (int)val; - return CTX::instance()->print.format; + CTX::instance()->print.fileFormat = (int)val; + return CTX::instance()->print.fileFormat; } double opt_print_eps_compress(OPT_ARGS_NUM) diff --git a/Common/Options.h b/Common/Options.h index 157f3de6e456969793a6327c0a8f758577f356b0..1e117dea0372c2e2c98232a1821b85abb28bc02d 100644 --- a/Common/Options.h +++ b/Common/Options.h @@ -508,7 +508,7 @@ double opt_mesh_angle_smooth_normals(OPT_ARGS_NUM); double opt_mesh_light(OPT_ARGS_NUM); double opt_mesh_light_lines(OPT_ARGS_NUM); double opt_mesh_light_two_side(OPT_ARGS_NUM); -double opt_mesh_format(OPT_ARGS_NUM); +double opt_mesh_file_format(OPT_ARGS_NUM); double opt_mesh_msh_file_version(OPT_ARGS_NUM); double opt_mesh_msh_file_partitioned(OPT_ARGS_NUM); double opt_mesh_binary(OPT_ARGS_NUM); @@ -712,7 +712,7 @@ double opt_view_component_map5(OPT_ARGS_NUM); double opt_view_component_map6(OPT_ARGS_NUM); double opt_view_component_map7(OPT_ARGS_NUM); double opt_view_component_map8(OPT_ARGS_NUM); -double opt_print_format(OPT_ARGS_NUM); +double opt_print_file_format(OPT_ARGS_NUM); double opt_print_eps_compress(OPT_ARGS_NUM); double opt_print_eps_ps3shading(OPT_ARGS_NUM); double opt_print_eps_quality(OPT_ARGS_NUM); diff --git a/Fltk/menuWindow.cpp b/Fltk/menuWindow.cpp index 39df2e036756a8c4facdec49d084e299a00ac3f2..f7e818f31a1ccff4d846547dc81184855acc0f62 100644 --- a/Fltk/menuWindow.cpp +++ b/Fltk/menuWindow.cpp @@ -336,8 +336,8 @@ static void file_save_as_cb(Fl_Widget *w, void *data) {"Gmsh Options" TT "*.opt", _save_options}, {"Gmsh Unrolled Geometry" TT "*.geo", _save_geo}, SEPARATOR_OUT -#if defined(HAVE_LIBCGNS) {"Abaqus INP Mesh" TT "*.inp", _save_inp}, +#if defined(HAVE_LIBCGNS) {"CGNS (Experimental)" TT "*.cgns", _save_cgns}, #endif {"Diffpack 3D Mesh" TT "*.diff", _save_diff}, @@ -1587,14 +1587,19 @@ static void geometry_physical_add_cb(Fl_Widget *w, void *data) static void mesh_save_cb(Fl_Widget *w, void *data) { std::string name = CTX::instance()->outputFileName; - if(name.empty()) name = GetDefaultFileName(CTX::instance()->mesh.format); + if(name.empty()){ + if(CTX::instance()->mesh.fileFormat == FORMAT_AUTO) + name = GetDefaultFileName(FORMAT_MSH); + else + name = GetDefaultFileName(CTX::instance()->mesh.fileFormat); + } if(CTX::instance()->confirmOverwrite) { if(!StatFile(name)) if(!fl_choice("File '%s' already exists.\n\nDo you want to replace it?", "Cancel", "Replace", 0, name.c_str())) return; } - CreateOutputFile(name, name.empty() ? FORMAT_MSH : CTX::instance()->mesh.format); + CreateOutputFile(name, CTX::instance()->mesh.fileFormat); } static void mesh_define_cb(Fl_Widget *w, void *data) diff --git a/Geo/GFaceCompound.cpp b/Geo/GFaceCompound.cpp index 58bbf3e9f5d757c88d339178eb62fcac9b1c9d6f..67a8158b8a7d285a265595bc01f9a130befeb404 100644 --- a/Geo/GFaceCompound.cpp +++ b/Geo/GFaceCompound.cpp @@ -1727,7 +1727,7 @@ void GFaceCompound::partitionFaceCM() model()->recomputeMeshPartitions(); - CreateOutputFile("toto.msh", CTX::instance()->mesh.format); + CreateOutputFile("toto.msh", CTX::instance()->mesh.fileFormat); Msg::Exit(1); return; diff --git a/Graphics/drawGlyph.cpp b/Graphics/drawGlyph.cpp index e4a7437968709e4017253ebb608394bd69cc1592..119bb7c7e8937f5017d24c36f2a96206f7158b7d 100644 --- a/Graphics/drawGlyph.cpp +++ b/Graphics/drawGlyph.cpp @@ -19,7 +19,7 @@ void drawContext::drawString(const std::string &s, const std::string &font_name, // change the raster position only if not creating TeX files if(align > 0 && (!CTX::instance()->printing || - CTX::instance()->print.format != FORMAT_TEX)){ + CTX::instance()->print.fileFormat != FORMAT_TEX)){ GLboolean valid; glGetBooleanv(GL_CURRENT_RASTER_POSITION_VALID, &valid); if(valid == GL_TRUE){ @@ -50,7 +50,7 @@ void drawContext::drawString(const std::string &s, const std::string &font_name, drawContext::global()->drawString(s.c_str()); } else{ - if(CTX::instance()->print.format == FORMAT_TEX){ + if(CTX::instance()->print.fileFormat == FORMAT_TEX){ std::string tmp = SanitizeTeXString (s.c_str(), CTX::instance()->print.texAsEquation); int opt; @@ -68,10 +68,10 @@ void drawContext::drawString(const std::string &s, const std::string &font_name, gl2psTextOpt(tmp.c_str(), font_name.c_str(), font_size, opt, 0.); } else if(CTX::instance()->print.epsQuality && - (CTX::instance()->print.format == FORMAT_PS || - CTX::instance()->print.format == FORMAT_EPS || - CTX::instance()->print.format == FORMAT_PDF || - CTX::instance()->print.format == FORMAT_SVG)){ + (CTX::instance()->print.fileFormat == FORMAT_PS || + CTX::instance()->print.fileFormat == FORMAT_EPS || + CTX::instance()->print.fileFormat == FORMAT_PDF || + CTX::instance()->print.fileFormat == FORMAT_SVG)){ gl2psText(s.c_str(), font_name.c_str(), font_size); } else{ diff --git a/Mesh/meshGFace.cpp b/Mesh/meshGFace.cpp index 9534642e83a9e9e00f1cebf83f5245e8685518b6..cda67e04a5fd17cd7e98b217fdf491469722843f 100644 --- a/Mesh/meshGFace.cpp +++ b/Mesh/meshGFace.cpp @@ -1712,7 +1712,7 @@ void partitionAndRemesh(GFaceCompound *gf) gf->coherenceNormals(); gf->meshStatistics.status = GFace::DONE; - //CreateOutputFile("toto.msh", CTX::instance()->mesh.format); + //CreateOutputFile("toto.msh", CTX::instance()->mesh.fileFormat); //Msg::Exit(1); #endif } diff --git a/Parser/Gmsh.tab.cpp b/Parser/Gmsh.tab.cpp index 63447c0329da37c864449d9321749b806b02e6ad..aa36829bdf964c1da9bf976262d299e1ea22939d 100644 --- a/Parser/Gmsh.tab.cpp +++ b/Parser/Gmsh.tab.cpp @@ -6341,12 +6341,12 @@ yyreduce: // the print command is in the same file as the geometry) GModel::current()->importGEOInternals(); std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(2) - (3)].c)); - CreateOutputFile(tmp, CTX::instance()->print.format); + CreateOutputFile(tmp, CTX::instance()->print.fileFormat); } else if(!strcmp((yyvsp[(1) - (3)].c), "Save")){ GModel::current()->importGEOInternals(); std::string tmp = FixRelativePath(gmsh_yyname, (yyvsp[(2) - (3)].c)); - CreateOutputFile(tmp, CTX::instance()->mesh.format); + CreateOutputFile(tmp, CTX::instance()->mesh.fileFormat); } else if(!strcmp((yyvsp[(1) - (3)].c), "Merge") || !strcmp((yyvsp[(1) - (3)].c), "MergeWithBoundingBox")){ // MergeWithBoundingBox is deprecated diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y index 27c76059da473d513418cb94f5adc0fba77c75e9..f959bb5a600e6f85e515e43c9f42f36f31d468bf 100644 --- a/Parser/Gmsh.y +++ b/Parser/Gmsh.y @@ -2274,12 +2274,12 @@ Command : // the print command is in the same file as the geometry) GModel::current()->importGEOInternals(); std::string tmp = FixRelativePath(gmsh_yyname, $2); - CreateOutputFile(tmp, CTX::instance()->print.format); + CreateOutputFile(tmp, CTX::instance()->print.fileFormat); } else if(!strcmp($1, "Save")){ GModel::current()->importGEOInternals(); std::string tmp = FixRelativePath(gmsh_yyname, $2); - CreateOutputFile(tmp, CTX::instance()->mesh.format); + CreateOutputFile(tmp, CTX::instance()->mesh.fileFormat); } else if(!strcmp($1, "Merge") || !strcmp($1, "MergeWithBoundingBox")){ // MergeWithBoundingBox is deprecated