diff --git a/Fltk/Callbacks.cpp b/Fltk/Callbacks.cpp index 1ba0aa8b7e72411f37de380e186e6a01c60032bb..89477690d7b759a38174d6f394fd2b13f170f1fd 100644 --- a/Fltk/Callbacks.cpp +++ b/Fltk/Callbacks.cpp @@ -1,4 +1,4 @@ -// $Id: Callbacks.cpp,v 1.405 2006-01-28 07:07:11 geuzaine Exp $ +// $Id: Callbacks.cpp,v 1.406 2006-02-04 03:43:30 geuzaine Exp $ // // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle // @@ -2850,15 +2850,19 @@ void geometry_physical_add_volume_cb(CALLBACK_ARGS) void mesh_save_cb(CALLBACK_ARGS) { - Print_Mesh(THEM, CTX.output_filename, CTX.mesh.format); -} - -void mesh_save_all_cb(CALLBACK_ARGS) -{ - int all = CTX.mesh.save_all; - CTX.mesh.save_all = 1; - Print_Mesh(THEM, CTX.output_filename, CTX.mesh.format); - CTX.mesh.save_all = all; + char name[256]; + if(CTX.output_filename) + strcpy(name, CTX.output_filename); + else + GetDefaultMeshFileName(THEM, CTX.mesh.format, name); + if(CTX.confirm_overwrite) { + struct stat buf; + if(!stat(name, &buf)) + if(!fl_choice("File '%s' already exists.\n\nDo you want to replace it?", + "Cancel", "Replace", NULL, name)) + return; + } + Print_Mesh(THEM, name, CTX.mesh.format); } void mesh_define_cb(CALLBACK_ARGS) diff --git a/Fltk/Callbacks.h b/Fltk/Callbacks.h index d0a1092ae8a578c6e4f93fe74f478a15aaf248dc..2862b4f2a7d71cfb30e4f0c8a3f90cefb6b11c05 100644 --- a/Fltk/Callbacks.h +++ b/Fltk/Callbacks.h @@ -268,7 +268,6 @@ void con_geometry_snap_cb(CALLBACK_ARGS); // Dynamic Mesh Menus void mesh_save_cb(CALLBACK_ARGS); -void mesh_save_all_cb(CALLBACK_ARGS); void mesh_define_cb(CALLBACK_ARGS); void mesh_1d_cb(CALLBACK_ARGS); void mesh_2d_cb(CALLBACK_ARGS); diff --git a/Mesh/Mesh.h b/Mesh/Mesh.h index 183fff3ecf9d52c7037cc1c499830c8d4190bfda..5b8a07c6476c21df42d31b59d9f628a517f58039 100644 --- a/Mesh/Mesh.h +++ b/Mesh/Mesh.h @@ -420,6 +420,7 @@ void Print_Geo(Mesh *M, char *c); void Print_Mesh(Mesh *M, char *c, int Type); void Read_Mesh(Mesh *M, FILE *fp, char *filename, int Type); void GetStatistics(double s[50]); +void GetDefaultMeshFileName(Mesh *M, int Type, char *name); void Maillage_Dimension_1(Mesh *M); void Maillage_Dimension_2(Mesh *M); diff --git a/Mesh/Print_Mesh.cpp b/Mesh/Print_Mesh.cpp index 72ed29a3f295c71c5f1f5e7c005a02ce8d81e9b8..8e53f7952ee9e98819f1c96bd1fa2c91868c4e06 100644 --- a/Mesh/Print_Mesh.cpp +++ b/Mesh/Print_Mesh.cpp @@ -1,4 +1,4 @@ -// $Id: Print_Mesh.cpp,v 1.69 2006-01-29 21:53:31 geuzaine Exp $ +// $Id: Print_Mesh.cpp,v 1.70 2006-02-04 03:43:30 geuzaine Exp $ // // Copyright (C) 1997-2006 C. Geuzaine, J.-F. Remacle // @@ -1843,19 +1843,10 @@ void Print_Mesh_P3D(Mesh *M, FILE *fp) // Public Print_Mesh routine -void Print_Mesh(Mesh *M, char *c, int Type) +void GetDefaultMeshFileName(Mesh *M, int Type, char *name) { - char name[256], ext[10]=""; - - if(CTX.threads_lock) { - Msg(INFO, "I'm busy! Ask me that later..."); - return; - } - - CTX.threads_lock = 1; - + char ext[10] = ""; strcpy(name, M->name); - switch(Type){ case FORMAT_MSH: strcpy(ext, ".msh"); break; case FORMAT_VRML: strcpy(ext, ".wrl"); break; @@ -1864,12 +1855,26 @@ void Print_Mesh(Mesh *M, char *c, int Type) case FORMAT_DMG: strcpy(ext, ".dmg"); break; case FORMAT_STL: strcpy(ext, ".stl"); break; case FORMAT_P3D: strcpy(ext, ".p3d"); break; - default: - Msg(GERROR, "Unknown mesh file format %d", Type); + default: Msg(GERROR, "Unknown mesh file format %d", Type); break; + } + strcat(name, ext); +} + +void Print_Mesh(Mesh *M, char *filename, int Type) +{ + char name[256]; + + if(CTX.threads_lock) { + Msg(INFO, "I'm busy! Ask me that later..."); return; } - - c ? strcpy(name, c) : strcat(name, ext); + + CTX.threads_lock = 1; + + if(!filename) + GetDefaultMeshFileName(M, Type, name); + else + strcpy(name, filename); Msg(INFO, "Writing mesh file '%s'", name);