From b8b36a9655accbaea77a8ce14f53857d83da4488 Mon Sep 17 00:00:00 2001 From: Christophe Geuzaine <cgeuzaine@ulg.ac.be> Date: Tue, 14 Aug 2012 08:05:36 +0000 Subject: [PATCH] make sure -format recognizes all the same formats as CreateFile --- Common/CommandLine.cpp | 34 ++++------------- Common/CreateFile.cpp | 83 ++++++++++++++++++++++-------------------- Common/CreateFile.h | 5 ++- 3 files changed, 55 insertions(+), 67 deletions(-) diff --git a/Common/CommandLine.cpp b/Common/CommandLine.cpp index fabb515d45..f27a718474 100644 --- a/Common/CommandLine.cpp +++ b/Common/CommandLine.cpp @@ -631,32 +631,14 @@ void GetOptions(int argc, char *argv[]) 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], "ply2")) - CTX::instance()->mesh.fileFormat = FORMAT_PLY2; - 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"); + else{ + int format = GetFileFormatFromExtension(std::string(".") + argv[i]); + if(format < 0){ + Msg::Error("Unknown mesh format `%s', using `msh' instead", argv[i]); + format = FORMAT_MSH; + } + CTX::instance()->mesh.fileFormat = format; + } i++; } else diff --git a/Common/CreateFile.cpp b/Common/CreateFile.cpp index 72a203a99f..2a04beffb9 100644 --- a/Common/CreateFile.cpp +++ b/Common/CreateFile.cpp @@ -27,9 +27,8 @@ #include "gl2yuv.h" #endif -int GuessFileFormatFromFileName(std::string fileName) +int GetFileFormatFromExtension(const std::string &ext) { - std::string ext = SplitFileName(fileName)[2]; if (ext == ".geo") return FORMAT_GEO; else if(ext == ".msh") return FORMAT_MSH; else if(ext == ".pos") return FORMAT_POS; @@ -73,6 +72,12 @@ int GuessFileFormatFromFileName(std::string fileName) else return -1; } +int GuessFileFormatFromFileName(const std::string &fileName) +{ + std::string ext = SplitFileName(fileName)[2]; + return GetFileFormatFromExtension(ext); +} + std::string GetDefaultFileName(int format) { std::vector<std::string> split = SplitFileName(GModel::current()->getFileName()); @@ -158,10 +163,10 @@ static PixelBuffer *GetCompositePixelBuffer(GLenum format, GLenum type) } #endif -void CreateOutputFile(std::string fileName, int format, bool redraw) +void CreateOutputFile(const std::string &fileName, int format, bool redraw) { - if(fileName.empty()) - fileName = GetDefaultFileName(format); + std::string name = fileName; + if(name.empty()) name = GetDefaultFileName(format); int oldFormat = CTX::instance()->print.fileFormat; CTX::instance()->print.fileFormat = format; @@ -169,120 +174,120 @@ void CreateOutputFile(std::string fileName, int format, bool redraw) bool error = false; if(redraw) - Msg::StatusBar(2, true, "Writing '%s'...", fileName.c_str()); + Msg::StatusBar(2, true, "Writing '%s'...", name.c_str()); switch (format) { case FORMAT_AUTO: - CreateOutputFile(fileName, GuessFileFormatFromFileName(fileName), false); + CreateOutputFile(name, GuessFileFormatFromFileName(name), false); break; case FORMAT_OPT: - PrintOptions(0, GMSH_FULLRC, 1, 1, fileName.c_str()); + PrintOptions(0, GMSH_FULLRC, 1, 1, name.c_str()); break; case FORMAT_MSH: if(GModel::current()->getMeshPartitions().size() && CTX::instance()->mesh.mshFilePartitioned == 1) GModel::current()->writePartitionedMSH - (fileName, CTX::instance()->mesh.binary, CTX::instance()->mesh.saveAll, + (name, CTX::instance()->mesh.binary, CTX::instance()->mesh.saveAll, CTX::instance()->mesh.saveParametric, CTX::instance()->mesh.scalingFactor); else if(GModel::current()->getMeshPartitions().size() && CTX::instance()->mesh.mshFilePartitioned == 2) GModel::current()->writeMSH - (fileName, CTX::instance()->mesh.mshFileVersion, + (name, CTX::instance()->mesh.mshFileVersion, CTX::instance()->mesh.binary, CTX::instance()->mesh.saveAll, CTX::instance()->mesh.saveParametric, CTX::instance()->mesh.scalingFactor, 0, -1000); else GModel::current()->writeMSH - (fileName, CTX::instance()->mesh.mshFileVersion, + (name, CTX::instance()->mesh.mshFileVersion, CTX::instance()->mesh.binary, CTX::instance()->mesh.saveAll, CTX::instance()->mesh.saveParametric, CTX::instance()->mesh.scalingFactor); break; case FORMAT_STL: GModel::current()->writeSTL - (fileName, CTX::instance()->mesh.binary, CTX::instance()->mesh.saveAll, + (name, CTX::instance()->mesh.binary, CTX::instance()->mesh.saveAll, CTX::instance()->mesh.scalingFactor); break; case FORMAT_VRML: GModel::current()->writeVRML - (fileName, CTX::instance()->mesh.saveAll, CTX::instance()->mesh.scalingFactor); + (name, CTX::instance()->mesh.saveAll, CTX::instance()->mesh.scalingFactor); break; case FORMAT_PLY2: - GModel::current()->writePLY2(fileName); + GModel::current()->writePLY2(name); break; case FORMAT_UNV: GModel::current()->writeUNV - (fileName, CTX::instance()->mesh.saveAll, CTX::instance()->mesh.saveGroupsOfNodes, + (name, CTX::instance()->mesh.saveAll, CTX::instance()->mesh.saveGroupsOfNodes, CTX::instance()->mesh.scalingFactor); break; case FORMAT_VTK: GModel::current()->writeVTK - (fileName, CTX::instance()->mesh.binary, CTX::instance()->mesh.saveAll, + (name, CTX::instance()->mesh.binary, CTX::instance()->mesh.saveAll, CTX::instance()->mesh.scalingFactor, CTX::instance()->bigEndian); break; case FORMAT_MESH: GModel::current()->writeMESH - (fileName, CTX::instance()->mesh.saveElementTagType, + (name, CTX::instance()->mesh.saveElementTagType, CTX::instance()->mesh.saveAll, CTX::instance()->mesh.scalingFactor); break; case FORMAT_MAIL: GModel::current()->writeMAIL - (fileName, CTX::instance()->mesh.saveAll, CTX::instance()->mesh.scalingFactor); + (name, CTX::instance()->mesh.saveAll, CTX::instance()->mesh.scalingFactor); break; case FORMAT_IR3: GModel::current()->writeIR3 - (fileName, CTX::instance()->mesh.saveElementTagType, + (name, CTX::instance()->mesh.saveElementTagType, CTX::instance()->mesh.saveAll, CTX::instance()->mesh.scalingFactor); break; case FORMAT_BDF: GModel::current()->writeBDF - (fileName, CTX::instance()->mesh.bdfFieldFormat, + (name, CTX::instance()->mesh.bdfFieldFormat, CTX::instance()->mesh.saveElementTagType, CTX::instance()->mesh.saveAll, CTX::instance()->mesh.scalingFactor); break; case FORMAT_DIFF: GModel::current()->writeDIFF - (fileName, CTX::instance()->mesh.binary, CTX::instance()->mesh.saveAll, + (name, CTX::instance()->mesh.binary, CTX::instance()->mesh.saveAll, CTX::instance()->mesh.scalingFactor); break; case FORMAT_INP: GModel::current()->writeINP - (fileName, CTX::instance()->mesh.saveAll, CTX::instance()->mesh.scalingFactor); + (name, CTX::instance()->mesh.saveAll, CTX::instance()->mesh.scalingFactor); break; case FORMAT_P3D: GModel::current()->writeP3D - (fileName, CTX::instance()->mesh.saveAll, CTX::instance()->mesh.scalingFactor); + (name, CTX::instance()->mesh.saveAll, CTX::instance()->mesh.scalingFactor); break; case FORMAT_CGNS: GModel::current()->writeCGNS - (fileName, CTX::instance()->mesh.zoneDefinition, CTX::instance()->cgnsOptions, + (name, CTX::instance()->mesh.zoneDefinition, CTX::instance()->cgnsOptions, CTX::instance()->mesh.scalingFactor); break; case FORMAT_MED: GModel::current()->writeMED - (fileName, CTX::instance()->mesh.saveAll, CTX::instance()->mesh.scalingFactor); + (name, CTX::instance()->mesh.saveAll, CTX::instance()->mesh.scalingFactor); break; case FORMAT_POS: GModel::current()->writePOS - (fileName, CTX::instance()->print.posElementary, + (name, CTX::instance()->print.posElementary, CTX::instance()->print.posElement, CTX::instance()->print.posGamma, CTX::instance()->print.posEta, CTX::instance()->print.posRho, CTX::instance()->print.posDisto, CTX::instance()->mesh.saveAll, @@ -290,16 +295,16 @@ void CreateOutputFile(std::string fileName, int format, bool redraw) break; case FORMAT_GEO: - GModel::current()->writeGEO(fileName, CTX::instance()->print.geoLabels, + GModel::current()->writeGEO(name, CTX::instance()->print.geoLabels, CTX::instance()->print.geoOnlyPhysicals); break; case FORMAT_BREP: - GModel::current()->writeOCCBREP(fileName); + GModel::current()->writeOCCBREP(name); break; case FORMAT_STEP: - GModel::current()->writeOCCSTEP(fileName); + GModel::current()->writeOCCSTEP(name); break; #if defined(HAVE_FLTK) @@ -311,9 +316,9 @@ void CreateOutputFile(std::string fileName, int format, bool redraw) { if(!FlGui::available()) break; - FILE *fp = fopen(fileName.c_str(), "wb"); + FILE *fp = fopen(name.c_str(), "wb"); if(!fp){ - Msg::Error("Unable to open file '%s'", fileName.c_str()); + Msg::Error("Unable to open file '%s'", name.c_str()); error = true; break; } @@ -348,13 +353,13 @@ void CreateOutputFile(std::string fileName, int format, bool redraw) { if(!FlGui::available()) break; - FILE *fp = fopen(fileName.c_str(), "wb"); + FILE *fp = fopen(name.c_str(), "wb"); if(!fp){ - Msg::Error("Unable to open file '%s'", fileName.c_str()); + Msg::Error("Unable to open file '%s'", name.c_str()); error = true; break; } - std::string base = SplitFileName(fileName)[1]; + std::string base = SplitFileName(name)[1]; GLint width = FlGui::instance()->getCurrentOpenglWindow()->w(); GLint height = FlGui::instance()->getCurrentOpenglWindow()->h(); GLint viewport[4] = {0, 0, width, height}; @@ -419,13 +424,13 @@ void CreateOutputFile(std::string fileName, int format, bool redraw) { if(!FlGui::available()) break; - FILE *fp = fopen(fileName.c_str(), "w"); + FILE *fp = fopen(name.c_str(), "w"); if(!fp){ - Msg::Error("Unable to open file '%s'", fileName.c_str()); + Msg::Error("Unable to open file '%s'", name.c_str()); error = true; break; } - std::string base = SplitFileName(fileName)[1]; + std::string base = SplitFileName(name)[1]; GLint width = FlGui::instance()->getCurrentOpenglWindow()->w(); GLint height = FlGui::instance()->getCurrentOpenglWindow()->h(); GLint viewport[4] = {0, 0, width, height}; @@ -487,7 +492,7 @@ void CreateOutputFile(std::string fileName, int format, bool redraw) "PSEARCH_ALG EXHAUSTIVE\nBSEARCH_ALG CROSS2\n" "IQSCALE 1\nPQSCALE 1\nBQSCALE 25\nREFERENCE_FRAME DECODED\n" "OUTPUT %s\nINPUT_CONVERT *\nINPUT_DIR %s\nINPUT\n", - pattern.c_str(), repeat, fileName.c_str(), + pattern.c_str(), repeat, name.c_str(), CTX::instance()->homeDir.c_str()); for(unsigned int i = 0; i < frames.size(); i++){ fprintf(fp, "%s", frames[i].c_str()); @@ -526,7 +531,7 @@ void CreateOutputFile(std::string fileName, int format, bool redraw) CTX::instance()->printing = 0; if(redraw && !error) - Msg::StatusBar(2, true, "Done writing '%s'", fileName.c_str()); + Msg::StatusBar(2, true, "Done writing '%s'", name.c_str()); #if defined(HAVE_OPENGL) if(redraw) drawContext::global()->draw(); diff --git a/Common/CreateFile.h b/Common/CreateFile.h index 65b130c0f1..420f48010b 100644 --- a/Common/CreateFile.h +++ b/Common/CreateFile.h @@ -8,8 +8,9 @@ #include <string> -int GuessFileFormatFromFileName(std::string fileName); +int GetFileFormatFromExtension(const std::string &fileName); +int GuessFileFormatFromFileName(const std::string &fileName); std::string GetDefaultFileName(int format); -void CreateOutputFile(std::string fileName, int format, bool redraw=true); +void CreateOutputFile(const std::string &fileName, int format, bool redraw=true); #endif -- GitLab