mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-05-20 03:43:52 +00:00
ENH: update filament color file; the color name may be empty; using set instead of unordered_set
jira: [STUDIO-12346] Change-Id: If83835fea7108babd2b19c26394ad0429493f394 (cherry picked from commit 85b07c170cd0e30f75dfab8ef68b02b0468c9f92)
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -141,10 +141,7 @@ wxString FilamentColorCode::GetFilaColorName() const
|
|||||||
const wxString& strLanguage = Slic3r::GUI::wxGetApp().app_config->get("language");
|
const wxString& strLanguage = Slic3r::GUI::wxGetApp().app_config->get("language");
|
||||||
const wxString& lang_code = strLanguage.BeforeFirst('_');
|
const wxString& lang_code = strLanguage.BeforeFirst('_');
|
||||||
auto it = m_fila_color_names.find(lang_code);
|
auto it = m_fila_color_names.find(lang_code);
|
||||||
if (it != m_fila_color_names.end())
|
if (it != m_fila_color_names.end() && !it->second.empty()) { return it->second; }
|
||||||
{
|
|
||||||
return it->second;
|
|
||||||
}
|
|
||||||
|
|
||||||
it = m_fila_color_names.find("en");// retry with English as fallback
|
it = m_fila_color_names.find("en");// retry with English as fallback
|
||||||
return (it != m_fila_color_names.end()) ? it->second : "Unknown";
|
return (it != m_fila_color_names.end()) ? it->second : "Unknown";
|
||||||
@@ -156,18 +153,6 @@ FilamentColorCode::FilamentColorCode(const wxString& color_code, FilamentColorCo
|
|||||||
m_fila_color(std::move(color)),
|
m_fila_color(std::move(color)),
|
||||||
m_fila_color_names(std::move(name_map))
|
m_fila_color_names(std::move(name_map))
|
||||||
{
|
{
|
||||||
if (m_owner)
|
|
||||||
{
|
|
||||||
m_owner->AddColorCode(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
FilamentColorCode::~FilamentColorCode()
|
|
||||||
{
|
|
||||||
if (m_owner)
|
|
||||||
{
|
|
||||||
m_owner->RemoveColorCode(this);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void FilamentColorCode::Debug(const char* prefix)
|
void FilamentColorCode::Debug(const char* prefix)
|
||||||
@@ -187,11 +172,9 @@ FilamentColorCodes::FilamentColorCodes(const wxString& fila_id, const wxString&
|
|||||||
|
|
||||||
FilamentColorCodes::~FilamentColorCodes()
|
FilamentColorCodes::~FilamentColorCodes()
|
||||||
{
|
{
|
||||||
while (!m_fila_colors_map->empty()) // Ensure all color codes are removed before deleting the map
|
for (auto iter : *m_fila_colors_map) { delete iter.second; }
|
||||||
{
|
|
||||||
delete m_fila_colors_map->begin()->second; // Delete the first color code
|
|
||||||
}
|
|
||||||
|
|
||||||
|
m_fila_colors_map->clear();
|
||||||
delete m_fila_colors_map;
|
delete m_fila_colors_map;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -206,11 +189,6 @@ void FilamentColorCodes::AddColorCode(FilamentColorCode* code)
|
|||||||
m_fila_colors_map->emplace(code->GetFilaColor(), code);
|
m_fila_colors_map->emplace(code->GetFilaColor(), code);
|
||||||
}
|
}
|
||||||
|
|
||||||
void FilamentColorCodes::RemoveColorCode(FilamentColorCode* code)
|
|
||||||
{
|
|
||||||
m_fila_colors_map->erase(code->GetFilaColor());
|
|
||||||
}
|
|
||||||
|
|
||||||
void FilamentColorCodes::Debug(const char* prefix)
|
void FilamentColorCodes::Debug(const char* prefix)
|
||||||
{
|
{
|
||||||
BOOST_LOG_TRIVIAL(debug) << prefix << "Fila ID: " << m_fila_id << ", Type: " << m_fila_type;
|
BOOST_LOG_TRIVIAL(debug) << prefix << "Fila ID: " << m_fila_id << ", Type: " << m_fila_type;
|
||||||
|
|||||||
@@ -20,17 +20,6 @@ class FilamentColorCode;
|
|||||||
class FilamentColorCodes;
|
class FilamentColorCodes;
|
||||||
class FilamentColorCodeQuery;
|
class FilamentColorCodeQuery;
|
||||||
|
|
||||||
// Hasher
|
|
||||||
struct FilamentColorHasher
|
|
||||||
{
|
|
||||||
std::size_t operator()(const wxColour& c) const noexcept {
|
|
||||||
return (static_cast<std::size_t>(c.Red()) << 24) ^
|
|
||||||
(static_cast<std::size_t>(c.Green()) << 16) ^
|
|
||||||
(static_cast<std::size_t>(c.Blue()) << 8) ^
|
|
||||||
(static_cast<std::size_t>(c.Alpha()));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Represents a color in HSV format
|
// Represents a color in HSV format
|
||||||
struct ColourHSV
|
struct ColourHSV
|
||||||
{
|
{
|
||||||
@@ -66,6 +55,19 @@ inline ColourHSV wxColourToHSV(const wxColour& c)
|
|||||||
return { h, s, v };
|
return { h, s, v };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FilamentColorSorter
|
||||||
|
struct wxColorSorter
|
||||||
|
{
|
||||||
|
std::size_t operator()(const wxColour& lhs_it, const wxColour& rhs_it) const noexcept {
|
||||||
|
ColourHSV ha = wxColourToHSV(lhs_it);
|
||||||
|
ColourHSV hb = wxColourToHSV(rhs_it);
|
||||||
|
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;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
struct FilamentColor
|
struct FilamentColor
|
||||||
{
|
{
|
||||||
enum class ColorType : char
|
enum class ColorType : char
|
||||||
@@ -76,7 +78,7 @@ struct FilamentColor
|
|||||||
};
|
};
|
||||||
|
|
||||||
ColorType m_color_type = ColorType::SINGLE_CLR; // default to single color
|
ColorType m_color_type = ColorType::SINGLE_CLR; // default to single color
|
||||||
std::unordered_set<wxColour, FilamentColorHasher> m_colors;
|
std::set<wxColour, wxColorSorter> m_colors;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
size_t ColorCount() const noexcept { return m_colors.size(); }
|
size_t ColorCount() const noexcept { return m_colors.size(); }
|
||||||
@@ -182,7 +184,6 @@ public:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
void AddColorCode(FilamentColorCode* code);
|
void AddColorCode(FilamentColorCode* code);
|
||||||
void RemoveColorCode(FilamentColorCode* code);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
wxString m_fila_id;//eg. 54600
|
wxString m_fila_id;//eg. 54600
|
||||||
@@ -196,7 +197,7 @@ class FilamentColorCode
|
|||||||
public:
|
public:
|
||||||
FilamentColorCode() = delete;
|
FilamentColorCode() = delete;
|
||||||
FilamentColorCode(const wxString& color_code, FilamentColorCodes* owner, FilamentColor&& color, std::unordered_map<wxString, wxString>&& name_map);
|
FilamentColorCode(const wxString& color_code, FilamentColorCodes* owner, FilamentColor&& color, std::unordered_map<wxString, wxString>&& name_map);
|
||||||
~FilamentColorCode();
|
~FilamentColorCode() {};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
wxString GetFilaCode() const { return m_owner->GetFilaCode(); }
|
wxString GetFilaCode() const { return m_owner->GetFilaCode(); }
|
||||||
|
|||||||
Reference in New Issue
Block a user