diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index d2e4c919d..1f5f3e25e 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -779,6 +779,7 @@ static const FileWildcards file_wildcards_by_type[FT_SIZE] = { /* FT_OBJ */ { "OBJ files"sv, { ".obj"sv } }, /* FT_AMF */ { "AMF files"sv, { ".amf"sv, ".zip.amf"sv, ".xml"sv } }, /* FT_3MF */ { "3MF files"sv, { ".3mf"sv } }, + /* FT_GCODE_3MF */ {"Gcode 3MF files"sv, {".gcode.3mf"sv}}, /* FT_GCODE */ { "G-code files"sv, { ".gcode"sv } }, #ifdef __APPLE__ /* FT_MODEL */ diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp index 0c4178578..9b4394793 100644 --- a/src/slic3r/GUI/GUI_App.hpp +++ b/src/slic3r/GUI/GUI_App.hpp @@ -90,6 +90,7 @@ enum FileType FT_OBJ, FT_AMF, FT_3MF, + FT_GCODE_3MF, FT_GCODE, FT_MODEL, FT_PROJECT, diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 3b07b8bd0..082fc9a52 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -11114,11 +11114,11 @@ void Plater::export_gcode_3mf(bool export_all) fs::path default_output_file; AppConfig& appconfig = *wxGetApp().app_config; std::string start_dir; - default_output_file = into_path(get_export_gcode_filename(".3mf", false, export_all)); + default_output_file = into_path(get_export_gcode_filename(".gcode.3mf", false, export_all)); if (default_output_file.empty()) { try { start_dir = appconfig.get_last_output_dir("", false); - wxString filename = get_export_gcode_filename(".3mf", true, export_all); + wxString filename = get_export_gcode_filename(".gcode.3mf", true, export_all); std::string full_filename = start_dir + "/" + filename.utf8_string(); default_output_file = boost::filesystem::path(full_filename); } catch(...) { @@ -11126,9 +11126,6 @@ void Plater::export_gcode_3mf(bool export_all) } } - //BBS replace gcode extension to .gcode.3mf - default_output_file = default_output_file.replace_extension(".gcode.3mf"); - //Get a last save path start_dir = appconfig.get_last_output_dir(default_output_file.parent_path().string(), false); @@ -11136,25 +11133,18 @@ void Plater::export_gcode_3mf(bool export_all) { std::string ext = default_output_file.extension().string(); wxFileDialog dlg(this, _L("Save Sliced file as:"), - start_dir, - from_path(default_output_file.filename()), - GUI::file_wildcards(FT_3MF, ext), + start_dir, from_path(default_output_file.filename()), GUI::file_wildcards(FT_GCODE_3MF, ""), wxFD_SAVE | wxFD_OVERWRITE_PROMPT ); if (dlg.ShowModal() == wxID_OK) { output_path = into_path(dlg.GetPath()); - ext = output_path.extension().string(); - if (ext != ".3mf") - output_path = output_path.string() + ".gcode.3mf"; - else { + if (boost::iends_with(output_path.string(), ".gcode")) { std::string path = output_path.string(); - path = path.substr(0, path.size() - 4); - if (path.size() < 6) - output_path = output_path.replace_extension(".gcode.3mf"); - else { - std::string extension = path.substr(path.size() - 6); - if (extension != ".gcode") output_path = output_path.replace_extension(".gcode.3mf"); - } + path = path.substr(0, path.size() - 6); + output_path = path + ".gcode.3mf"; + } + else if (!boost::iends_with(output_path.string(), ".gcode.3mf")) { + output_path = output_path.replace_extension(".gcode.3mf"); } } }