From 025294894acc948f30c2b5e3fa7d539faefc2ab4 Mon Sep 17 00:00:00 2001 From: "xin.zhang" Date: Mon, 30 Jun 2025 20:11:04 +0800 Subject: [PATCH] FIX: skip the color codes with undefined color syntax jira: [STUDIO-13037] Change-Id: Ic733a2b67df49556c16f4392ecf61d95471e9aa8 (cherry picked from commit 6658f522166e432b383669903a0b30ee15cf6cdc) --- src/slic3r/GUI/EncodedFilament.cpp | 11 ++++++++++- src/slic3r/GUI/EncodedFilament.hpp | 5 +++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/EncodedFilament.cpp b/src/slic3r/GUI/EncodedFilament.cpp index 354b3e10bc..7a42653c63 100644 --- a/src/slic3r/GUI/EncodedFilament.cpp +++ b/src/slic3r/GUI/EncodedFilament.cpp @@ -81,8 +81,17 @@ void FilamentColorCodeQuery::LoadFromLocal() if (json_data_item.contains("fila_color")) { const auto& fila_color_strs = json_data_item["fila_color"].get>(); - for (const auto& color_str : fila_color_strs) { fila_color.m_colors.emplace(wxColour(color_str)); } + for (const auto& color_str : fila_color_strs) { + if (color_str.size() > 3) /* Skip the value like "#0"*/{ + fila_color.m_colors.emplace(wxColour(color_str)); + } + } } + + if (fila_color.m_colors.empty()) { + BOOST_LOG_TRIVIAL(warning) << "FilamentColorCodeQuery::LoadFromLocal: No colors found for fila_color_code: " << fila_color_code; + continue; // Skip if no colors are defined + }; const wxString& fila_color_type = json_data_item.contains("fila_color_type") ? wxString::FromUTF8(json_data_item["fila_color_type"].get()) : wxString(); if (fila_color_type == wxString::FromUTF8("单色")) { diff --git a/src/slic3r/GUI/EncodedFilament.hpp b/src/slic3r/GUI/EncodedFilament.hpp index b4058d8e70..9423f6bfe1 100644 --- a/src/slic3r/GUI/EncodedFilament.hpp +++ b/src/slic3r/GUI/EncodedFilament.hpp @@ -64,6 +64,7 @@ struct wxColorSorter if (ha.h != hb.h) return ha.h < hb.h; if (ha.s != hb.s) return ha.s < hb.s; if (ha.v != hb.v) return ha.v < hb.v; + if (lhs_it.Alpha() != rhs_it.Alpha()) return lhs_it.Alpha() < rhs_it.Alpha(); return false; } }; @@ -119,6 +120,10 @@ public: if (ha.s != hb.s) return ha.s < hb.s; if (ha.v != hb.v) return ha.v < hb.v; + int lhs_alpha = lhs_it->Alpha(); + int rhs_alpha = rhs_it->Alpha(); + if (lhs_alpha != rhs_alpha) return lhs_alpha < rhs_alpha; + lhs_it++; rhs_it++; }