OrcaSlicer latest
OrcaSlicer
Loading...
Searching...
No Matches
Slic3r::FilamentColorCodeQuery Class Reference

#include </home/runner/work/OrcaSlicer/OrcaSlicer/src/slic3r/GUI/EncodedFilament.hpp>

Collaboration diagram for Slic3r::FilamentColorCodeQuery:

Public Member Functions

 FilamentColorCodeQuery ()
virtual ~FilamentColorCodeQuery ()
FilamentColorCodes * GetFilaInfoMap (const wxString &fila_id) const
wxString GetFilaColorName (const wxString &fila_id, const FilamentColor &colors) const
void CreateFilaCode (const wxString &fila_id, const wxString &fila_type, const wxString &fila_color_code, FilamentColor &&fila_color, std::unordered_map< wxString, wxString > &&fila_color_names)

Protected Member Functions

void LoadFromLocal ()

Private Member Functions

FilamentColorCode * GetFilaInfo (const wxString &fila_id, const FilamentColor &colors) const

Private Attributes

std::string m_fila_path
std::unordered_map< wxString, FilamentColorCodes * > * m_fila_id2colors_map

Detailed Description

Constructor & Destructor Documentation

◆ FilamentColorCodeQuery()

Slic3r::FilamentColorCodeQuery::FilamentColorCodeQuery ( )
40{
41 m_fila_id2colors_map = new std::unordered_map<wxString, FilamentColorCodes*>;
44}
std::unordered_map< wxString, FilamentColorCodes * > * m_fila_id2colors_map
Definition EncodedFilament.hpp:186
void LoadFromLocal()
Definition EncodedFilament.cpp:93
std::string m_fila_path
Definition EncodedFilament.hpp:184
static std::string filament_color_codes_path()
Definition EncodedFilament.cpp:32

References Slic3r::filament_color_codes_path(), LoadFromLocal(), m_fila_id2colors_map, and m_fila_path.

Here is the call graph for this function:

◆ ~FilamentColorCodeQuery()

Slic3r::FilamentColorCodeQuery::~FilamentColorCodeQuery ( )
virtual
48{
49 for (auto& pair : *m_fila_id2colors_map) { delete pair.second; }
50
52 m_fila_id2colors_map = nullptr;
53}

References m_fila_id2colors_map.

Member Function Documentation

◆ CreateFilaCode()

void Slic3r::FilamentColorCodeQuery::CreateFilaCode ( const wxString & fila_id,
const wxString & fila_type,
const wxString & fila_color_code,
FilamentColor && fila_color,
std::unordered_map< wxString, wxString > && fila_color_names )
164{
165 FilamentColorCodes* color_codes = GetFilaInfoMap(fila_id);
166 if (!color_codes)
167 {
168 color_codes = new FilamentColorCodes(fila_id, fila_type);
169 (*m_fila_id2colors_map)[fila_id] = color_codes;
170 }
171
172 FilamentColorCode* color_code = new FilamentColorCode(fila_color_code, color_codes, std::move(fila_color), std::move(fila_color_names));
173 color_codes->AddColorCode(color_code);
174}
FilamentColorCodes * GetFilaInfoMap(const wxString &fila_id) const
Definition EncodedFilament.cpp:55

References Slic3r::FilamentColorCodes::AddColorCode(), and GetFilaInfoMap().

Referenced by LoadFromLocal().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetFilaColorName()

wxString Slic3r::FilamentColorCodeQuery::GetFilaColorName ( const wxString & fila_id,
const FilamentColor & colors ) const
88{
89 FilamentColorCode* color_info = GetFilaInfo(fila_id, colors);
90 return (color_info) ? color_info->GetFilaColorName() : wxString();
91}
FilamentColorCode * GetFilaInfo(const wxString &fila_id, const FilamentColor &colors) const
Definition EncodedFilament.cpp:65

References Slic3r::FilamentColorCode::GetFilaColorName(), and GetFilaInfo().

Here is the call graph for this function:

◆ GetFilaInfo()

Slic3r::FilamentColorCode * Slic3r::FilamentColorCodeQuery::GetFilaInfo ( const wxString & fila_id,
const FilamentColor & colors ) const
private
66{
67 FilamentColorCodes* color_info_map = GetFilaInfoMap(fila_id);
68
69#if 0
70 if (color_info_map && !color_info_map->GetColorCode(colors))
71 {
72 wxString clr_strs;
73 for (const auto& clr : colors.m_colors)
74 {
75 clr_strs += " ";
76 clr_strs += _ColourToString(clr);
77 }
78
79 BOOST_LOG_TRIVIAL(warning) << "FilamentColorCodeQuery::GetFilaInfo: No color code found for " << fila_id << " with color type " << (int)colors.m_color_type << "colors" << clr_strs;
80 color_info_map->Debug(" ");
81 }
82#endif
83
84 return color_info_map ? color_info_map->GetColorCode(colors) : nullptr;
85}
static wxString _ColourToString(const wxColour &color)
Definition EncodedFilament.cpp:25

References Slic3r::_ColourToString(), Slic3r::FilamentColorCodes::Debug(), Slic3r::FilamentColorCodes::GetColorCode(), GetFilaInfoMap(), Slic3r::FilamentColor::m_color_type, and Slic3r::FilamentColor::m_colors.

Referenced by GetFilaColorName().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetFilaInfoMap()

FilamentColorCodes * Slic3r::FilamentColorCodeQuery::GetFilaInfoMap ( const wxString & fila_id) const
56{
57 // The color codes are keyed by Bambu's filament ids. Callers holding Orca's id only get it
58 // translated when the Bambu agent is live, so translate here for every other agent.
59 auto iter = m_fila_id2colors_map->find(fila_id);
60 if (iter == m_fila_id2colors_map->end())
61 iter = m_fila_id2colors_map->find(wxString::FromUTF8(BBLPrinterAgent::bambu_filament_id(fila_id.ToStdString(wxConvUTF8))));
62 return (iter != m_fila_id2colors_map->end()) ? iter->second : nullptr;
63}
static std::string bambu_filament_id(const std::string &orca_filament_id)
Definition BBLPrinterAgent.cpp:140

References Slic3r::BBLPrinterAgent::bambu_filament_id(), and m_fila_id2colors_map.

Referenced by CreateFilaCode(), and GetFilaInfo().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ LoadFromLocal()

void Slic3r::FilamentColorCodeQuery::LoadFromLocal ( )
protected
94{
95 std::ifstream json_file(encode_path(m_fila_path.c_str()));
96 try
97 {
98 if (json_file.is_open())
99 {
100 const json& json_content = json::parse(json_file);
101 if (!json_content.contains("data")) { return; }
102
103 const json& json_data = json_content["data"];
104 for (const auto& json_data_item : json_data)
105 {
106 const wxString& fila_id = json_data_item.contains("fila_id") ? json_data_item["fila_id"].get<wxString>() : wxString();
107 const wxString& fila_type = json_data_item.contains("fila_type") ? json_data_item["fila_type"].get<wxString>() : wxString();
108 const wxString& fila_color_code = json_data_item.contains("fila_color_code") ? json_data_item["fila_color_code"].get<wxString>() : wxString();
109
110 FilamentColor fila_color;
111 if (json_data_item.contains("fila_color"))
112 {
113 const auto& fila_color_strs = json_data_item["fila_color"].get<std::vector<wxString>>();
114 for (const auto& color_str : fila_color_strs) {
115 if (color_str.size() > 3) /* Skip the value like "#0"*/{
116 fila_color.AddColor(wxColour(color_str));
117 }
118 }
119 }
120
121 if (fila_color.m_colors.empty()) {
122 BOOST_LOG_TRIVIAL(warning) << "FilamentColorCodeQuery::LoadFromLocal: No colors found for fila_color_code: " << fila_color_code;
123 continue; // Skip if no colors are defined
124 };
125
126 const wxString& fila_color_type = json_data_item.contains("fila_color_type") ? wxString::FromUTF8(json_data_item["fila_color_type"].get<std::string>()) : wxString();
127 if (fila_color_type == wxString::FromUTF8("单色")) {
128 fila_color.m_color_type = FilamentColor::ColorType::SINGLE_CLR;
129 } else if (fila_color_type == wxString::FromUTF8("多拼色")) {
130 fila_color.m_color_type = FilamentColor::ColorType::MULTI_CLR;
131 } else if (fila_color_type == wxString::FromUTF8("渐变色"))
132 {
133 fila_color.m_color_type = FilamentColor::ColorType::GRADIENT_CLR;
134 };
135
136 std::unordered_map<wxString, wxString> fila_color_names;
137 if (json_data_item.contains("fila_color_name"))
138 {
139 const json& color_names_json = json_data_item["fila_color_name"];
140 for (const auto& color_name_item : color_names_json.items())
141 {
142 const wxString& lang_code = wxString::FromUTF8(color_name_item.key());
143 const wxString& color_name = wxString::FromUTF8(color_name_item.value().get<std::string>());
144 fila_color_names[lang_code] = color_name;
145 }
146 }
147
148 CreateFilaCode(fila_id, fila_type, fila_color_code, std::move(fila_color), std::move(fila_color_names));
149 }
150 }
151 }
152 catch (...)
153 {
154 assert(0 && "FilamentColorCodeQuery::LoadFromLocal failed");
155 BOOST_LOG_TRIVIAL(error) << "FilamentColorCodeQuery::LoadFromLocal failed";
156 }
157}
void CreateFilaCode(const wxString &fila_id, const wxString &fila_type, const wxString &fila_color_code, FilamentColor &&fila_color, std::unordered_map< wxString, wxString > &&fila_color_names)
Definition EncodedFilament.cpp:159
std::string encode_path(const char *src)
Definition utils.cpp:1382
nlohmann::json json
Definition AssembleList.cpp:42
@ MULTI_CLR
Definition EncodedFilament.hpp:81
@ GRADIENT_CLR
Definition EncodedFilament.hpp:82
@ SINGLE_CLR
Definition EncodedFilament.hpp:80

References Slic3r::FilamentColor::AddColor(), CreateFilaCode(), Slic3r::encode_path(), Slic3r::FilamentColor::GRADIENT_CLR, Slic3r::FilamentColor::m_color_type, Slic3r::FilamentColor::m_colors, m_fila_path, Slic3r::FilamentColor::MULTI_CLR, and Slic3r::FilamentColor::SINGLE_CLR.

Referenced by FilamentColorCodeQuery().

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ m_fila_id2colors_map

std::unordered_map<wxString, FilamentColorCodes*>* Slic3r::FilamentColorCodeQuery::m_fila_id2colors_map
private

◆ m_fila_path

std::string Slic3r::FilamentColorCodeQuery::m_fila_path
private

The documentation for this class was generated from the following files: