Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVojtech Bubnik <bubnikv@gmail.com>2021-01-05 14:26:05 +0300
committerVojtech Bubnik <bubnikv@gmail.com>2021-01-05 14:26:11 +0300
commitfb29325b1421f5fcd87c5fb5392e27c0309b0b41 (patch)
treef2889388157c3b65ae60f0440e4306b9e74a159a
parentb93c2aea4494b25d6e138ee2d3f1c764bf80acb0 (diff)
Fix of G-code Viewer not loading .gco files #5536
".gcode", ".gco", ".g" and ".ngc" were considered to be G-code file extensions by the G-code import / export file dialogs, but not by various other functions. Now the G-code extension is tested by a single function is_gcode_file(string).
-rw-r--r--src/PrusaSlicer.cpp12
-rw-r--r--src/libslic3r/Config.cpp2
-rw-r--r--src/libslic3r/PresetBundle.cpp2
-rw-r--r--src/libslic3r/Utils.hpp1
-rw-r--r--src/libslic3r/utils.cpp6
-rw-r--r--src/slic3r/GUI/GUI_App.cpp9
-rw-r--r--src/slic3r/GUI/Plater.cpp4
7 files changed, 17 insertions, 19 deletions
diff --git a/src/PrusaSlicer.cpp b/src/PrusaSlicer.cpp
index f7350dace..60f3a1321 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 b6b496ae9..ea6c78f7c 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 1f1d11866..b31ee6664 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 28976064b..b797c7c19 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 3c1416936..2a1d12c1d 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 ef2565108..5de7af5d0 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<wxString> gcode_files;
std::vector<wxString> 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 cb7066630..7824dcfdf 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;