diff --git a/src/PrusaSlicer.cpp b/src/PrusaSlicer.cpp index f7350dace4..60f3a13218 100644 --- a/src/PrusaSlicer.cpp +++ b/src/PrusaSlicer.cpp @@ -150,15 +150,11 @@ int CLI::run(int argc, char **argv) } // Read input file(s) if any. - for (const std::string& file : m_input_files) { - std::string ext = boost::filesystem::path(file).extension().string(); - if (ext == ".gcode" || ext == ".g") { - if (boost::filesystem::exists(file)) { - start_as_gcodeviewer = true; - break; - } + for (const std::string& file : m_input_files) + if (is_gcode_file(file) && boost::filesystem::exists(file)) { + start_as_gcodeviewer = true; + break; } - } if (!start_as_gcodeviewer) { for (const std::string& file : m_input_files) { if (!boost::filesystem::exists(file)) { diff --git a/src/libslic3r/Config.cpp b/src/libslic3r/Config.cpp index b6b496ae91..ea6c78f7ce 100644 --- a/src/libslic3r/Config.cpp +++ b/src/libslic3r/Config.cpp @@ -589,7 +589,7 @@ void ConfigBase::setenv_() const void ConfigBase::load(const std::string &file) { - if (boost::iends_with(file, ".gcode") || boost::iends_with(file, ".g")) + if (is_gcode_file(file)) this->load_from_gcode_file(file); else this->load_from_ini(file); diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index 1f1d118662..b31ee66644 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -667,7 +667,7 @@ DynamicPrintConfig PresetBundle::full_sla_config() const // If the file is loaded successfully, its print / filament / printer profiles will be activated. void PresetBundle::load_config_file(const std::string &path) { - if (boost::iends_with(path, ".gcode") || boost::iends_with(path, ".g")) { + if (is_gcode_file(path)) { DynamicPrintConfig config; config.apply(FullPrintConfig::defaults()); config.load_from_gcode_file(path); diff --git a/src/libslic3r/Utils.hpp b/src/libslic3r/Utils.hpp index 28976064be..b797c7c19f 100644 --- a/src/libslic3r/Utils.hpp +++ b/src/libslic3r/Utils.hpp @@ -90,6 +90,7 @@ extern CopyFileResult check_copy(const std::string& origin, const std::string& c extern bool is_plain_file(const boost::filesystem::directory_entry &path); extern bool is_ini_file(const boost::filesystem::directory_entry &path); extern bool is_idx_file(const boost::filesystem::directory_entry &path); +extern bool is_gcode_file(const std::string &path); // File path / name / extension splitting utilities, working with UTF-8, // to be published to Perl. diff --git a/src/libslic3r/utils.cpp b/src/libslic3r/utils.cpp index 3c14169360..2a1d12c1da 100644 --- a/src/libslic3r/utils.cpp +++ b/src/libslic3r/utils.cpp @@ -522,6 +522,12 @@ bool is_idx_file(const boost::filesystem::directory_entry &dir_entry) return is_plain_file(dir_entry) && strcasecmp(dir_entry.path().extension().string().c_str(), ".idx") == 0; } +bool is_gcode_file(const std::string &path) +{ + return boost::iends_with(path, ".gcode") || boost::iends_with(path, ".gco") || + boost::iends_with(path, ".g") || boost::iends_with(path, ".ngc"); +} + } // namespace Slic3r #ifdef WIN32 diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index ef25651088..5de7af5d01 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -1866,11 +1866,9 @@ bool GUI_App::OnExceptionInMainLoop() void GUI_App::OSXStoreOpenFiles(const wxArrayString &fileNames) { size_t num_gcodes = 0; - for (const wxString &filename : fileNames) { - wxString fn = filename.Upper(); - if (fn.EndsWith(".G") || fn.EndsWith(".GCODE")) + for (const wxString &filename : fileNames) + if (is_gcode_file(into_u8(filename))) ++ num_gcodes; - } if (fileNames.size() == num_gcodes) { // Opening PrusaSlicer by drag & dropping a G-Code onto PrusaSlicer icon in Finder, // just G-codes were passed. Switch to G-code viewer mode. @@ -1890,8 +1888,7 @@ void GUI_App::MacOpenFiles(const wxArrayString &fileNames) std::vector gcode_files; std::vector non_gcode_files; for (const auto& filename : fileNames) { - wxString fn = filename.Upper(); - if (fn.EndsWith(".G") || fn.EndsWith(".GCODE")) + if (is_gcode_file(into_u8(filename))) gcode_files.emplace_back(filename); else { files.emplace_back(into_u8(filename)); diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index cb70666307..7824dcfdff 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -4847,9 +4847,7 @@ void Plater::load_gcode() void Plater::load_gcode(const wxString& filename) { - if (filename.empty() || - (!filename.Lower().EndsWith(".gcode") && !filename.Lower().EndsWith(".g")) || - m_last_loaded_gcode == filename) + if (! is_gcode_file(into_u8(filename)) || m_last_loaded_gcode == filename) return; m_last_loaded_gcode = filename;