ENH:Optimize interface of "obj import"
jira: none Change-Id: I7c80fa21895081150a48eb75293a3f3429f9916c
This commit is contained in:
parent
119610121c
commit
40d9c20b0d
|
@ -24,13 +24,13 @@ int OBJCOLOR_ITEM_WIDTH() { return objcolor_scale(30); }
|
||||||
static const wxColour g_text_color = wxColour(107, 107, 107, 255);
|
static const wxColour g_text_color = wxColour(107, 107, 107, 255);
|
||||||
const int HEADER_BORDER = 5;
|
const int HEADER_BORDER = 5;
|
||||||
const int CONTENT_BORDER = 3;
|
const int CONTENT_BORDER = 3;
|
||||||
const int PANEL_WIDTH = 370;
|
const int PANEL_WIDTH = 400;
|
||||||
const int COLOR_LABEL_WIDTH = 180;
|
const int COLOR_LABEL_WIDTH = 180;
|
||||||
const int IMAGE_SIZE_WIDTH = 300;
|
const int IMAGE_SIZE_WIDTH = 300;
|
||||||
#define MIN_OBJCOLOR_DIALOG_WIDTH FromDIP(400)
|
#define MIN_OBJCOLOR_DIALOG_WIDTH FromDIP(400)
|
||||||
#define FIX_SCROLL_HEIGTH FromDIP(400)
|
#define FIX_SCROLL_HEIGTH FromDIP(400)
|
||||||
#define BTN_SIZE wxSize(FromDIP(58), FromDIP(24))
|
#define BTN_SIZE wxSize(FromDIP(58), FromDIP(24))
|
||||||
#define BTN_GAP FromDIP(20)
|
#define BTN_GAP FromDIP(15)
|
||||||
#define FIX_SCROLL_IMAGE_WIDTH FromDIP(270)
|
#define FIX_SCROLL_IMAGE_WIDTH FromDIP(270)
|
||||||
static void update_ui(wxWindow* window)
|
static void update_ui(wxWindow* window)
|
||||||
{
|
{
|
||||||
|
@ -49,6 +49,26 @@ const StateColor ok_btn_disable_bg(std::pair<wxColour, int>(wxColour(205, 201,
|
||||||
wxBoxSizer* ObjColorDialog::create_btn_sizer(long flags)
|
wxBoxSizer* ObjColorDialog::create_btn_sizer(long flags)
|
||||||
{
|
{
|
||||||
auto btn_sizer = new wxBoxSizer(wxHORIZONTAL);
|
auto btn_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||||
|
btn_sizer->AddSpacer(FromDIP(25));
|
||||||
|
wxStaticText *tips = new wxStaticText(this, wxID_ANY, _L("Open Wiki for more information >"));
|
||||||
|
/* wxFont font(10, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false);
|
||||||
|
font.SetUnderlined(true);
|
||||||
|
tips->SetFont(font);*/
|
||||||
|
auto font = tips->GetFont();
|
||||||
|
font.SetUnderlined(true);
|
||||||
|
tips->SetFont(font);
|
||||||
|
tips->SetForegroundColour(wxColour(0,174,100));
|
||||||
|
tips->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &e) {
|
||||||
|
bool is_zh = wxGetApp().app_config->get("language") == "zh_CN";
|
||||||
|
if (is_zh) {
|
||||||
|
wxLaunchDefaultBrowser("https://wiki.bambulab.com/zh/software/bambu-studio/import_obj");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
wxLaunchDefaultBrowser("https://wiki.bambulab.com/en/software/bambu-studio/import_obj");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
btn_sizer->Add(tips, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
|
||||||
|
|
||||||
btn_sizer->AddStretchSpacer();
|
btn_sizer->AddStretchSpacer();
|
||||||
|
|
||||||
StateColor ok_btn_bd(
|
StateColor ok_btn_bd(
|
||||||
|
@ -126,6 +146,10 @@ void ObjColorDialog::on_dpi_changed(const wxRect &suggested_rect)
|
||||||
}
|
}
|
||||||
m_panel_ObjColor->msw_rescale();
|
m_panel_ObjColor->msw_rescale();
|
||||||
this->Refresh();
|
this->Refresh();
|
||||||
|
}
|
||||||
|
void ObjColorDialog::update_layout() {
|
||||||
|
m_main_sizer->Layout();
|
||||||
|
SetSizerAndFit(m_main_sizer);
|
||||||
};
|
};
|
||||||
|
|
||||||
ObjColorDialog::ObjColorDialog(wxWindow *parent, Slic3r::ObjDialogInOut &in_out, const std::vector<std::string> &extruder_colours)
|
ObjColorDialog::ObjColorDialog(wxWindow *parent, Slic3r::ObjDialogInOut &in_out, const std::vector<std::string> &extruder_colours)
|
||||||
|
@ -147,17 +171,18 @@ ObjColorDialog::ObjColorDialog(wxWindow *parent, Slic3r::ObjDialogInOut &in_out,
|
||||||
this->SetBackgroundColour(*wxWHITE);
|
this->SetBackgroundColour(*wxWHITE);
|
||||||
this->SetMinSize(wxSize(MIN_OBJCOLOR_DIALOG_WIDTH, -1));
|
this->SetMinSize(wxSize(MIN_OBJCOLOR_DIALOG_WIDTH, -1));
|
||||||
|
|
||||||
m_panel_ObjColor = new ObjColorPanel(this, in_out, extruder_colours);
|
m_panel_ObjColor = new ObjColorPanel(this, in_out, extruder_colours);
|
||||||
|
m_panel_ObjColor->set_layout_callback([this]() { update_layout();
|
||||||
auto main_sizer = new wxBoxSizer(wxVERTICAL);
|
});
|
||||||
main_sizer->Add(m_line_top, 0, wxEXPAND, 0);
|
m_main_sizer = new wxBoxSizer(wxVERTICAL);
|
||||||
|
m_main_sizer->Add(m_line_top, 0, wxEXPAND, 0);
|
||||||
// set min sizer width according to extruders count
|
// set min sizer width according to extruders count
|
||||||
auto sizer_width = (int) (2.8 * OBJCOLOR_ITEM_WIDTH());
|
auto sizer_width = (int) (2.8 * OBJCOLOR_ITEM_WIDTH());
|
||||||
sizer_width = sizer_width > MIN_OBJCOLOR_DIALOG_WIDTH ? sizer_width : MIN_OBJCOLOR_DIALOG_WIDTH;
|
sizer_width = sizer_width > MIN_OBJCOLOR_DIALOG_WIDTH ? sizer_width : MIN_OBJCOLOR_DIALOG_WIDTH;
|
||||||
main_sizer->SetMinSize(wxSize(sizer_width, -1));
|
m_main_sizer->SetMinSize(wxSize(sizer_width, -1));
|
||||||
main_sizer->Add(m_panel_ObjColor, 1, wxEXPAND | wxALL, 0);
|
m_main_sizer->Add(m_panel_ObjColor, 1, wxEXPAND | wxALL, 0);
|
||||||
|
|
||||||
auto btn_sizer = create_btn_sizer(wxOK | wxCANCEL);
|
m_buttons_sizer = create_btn_sizer(wxOK | wxCANCEL);
|
||||||
{
|
{
|
||||||
m_button_list[wxOK]->Bind(wxEVT_UPDATE_UI, ([this](wxUpdateUIEvent &e) {
|
m_button_list[wxOK]->Bind(wxEVT_UPDATE_UI, ([this](wxUpdateUIEvent &e) {
|
||||||
if (m_panel_ObjColor->is_ok() == m_button_list[wxOK]->IsEnabled()) { return; }
|
if (m_panel_ObjColor->is_ok() == m_button_list[wxOK]->IsEnabled()) { return; }
|
||||||
|
@ -165,9 +190,9 @@ ObjColorDialog::ObjColorDialog(wxWindow *parent, Slic3r::ObjDialogInOut &in_out,
|
||||||
m_button_list[wxOK]->SetBackgroundColor(m_panel_ObjColor->is_ok() ? ok_btn_bg : ok_btn_disable_bg);
|
m_button_list[wxOK]->SetBackgroundColor(m_panel_ObjColor->is_ok() ? ok_btn_bg : ok_btn_disable_bg);
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
main_sizer->Add(btn_sizer, 0, wxBOTTOM | wxRIGHT | wxEXPAND, BTN_GAP);
|
m_main_sizer->Add(m_buttons_sizer, 0, wxBOTTOM | wxTOP | wxRIGHT | wxEXPAND, BTN_GAP);
|
||||||
SetSizer(main_sizer);
|
SetSizer(m_main_sizer);
|
||||||
main_sizer->SetSizeHints(this);
|
m_main_sizer->SetSizeHints(this);
|
||||||
|
|
||||||
if (this->FindWindowById(wxID_OK, this)) {
|
if (this->FindWindowById(wxID_OK, this)) {
|
||||||
this->FindWindowById(wxID_OK, this)->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) {// if OK button is clicked..
|
this->FindWindowById(wxID_OK, this)->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) {// if OK button is clicked..
|
||||||
|
@ -287,7 +312,22 @@ ObjColorPanel::ObjColorPanel(wxWindow *parent, Slic3r::ObjDialogInOut &in_out, c
|
||||||
specify_cluster_sizer->Add(recommend_color_cluster_title, 0, wxALIGN_CENTER | wxALL, 0);
|
specify_cluster_sizer->Add(recommend_color_cluster_title, 0, wxALIGN_CENTER | wxALL, 0);
|
||||||
|
|
||||||
m_sizer_simple->Add(specify_cluster_sizer, 0, wxEXPAND | wxLEFT, FromDIP(20));
|
m_sizer_simple->Add(specify_cluster_sizer, 0, wxEXPAND | wxLEFT, FromDIP(20));
|
||||||
{//add image
|
{//add combox
|
||||||
|
wxStaticText *combox_title = new wxStaticText(m_page_simple, wxID_ANY, _L("view"), wxPoint(FromDIP(216), FromDIP(312)));
|
||||||
|
//combox_title->SetTransparent(true);
|
||||||
|
combox_title->SetBackgroundColour(wxColour(240,240,240,0));
|
||||||
|
combox_title->SetForegroundColour(wxColour(107, 107, 107, 100));
|
||||||
|
auto cur_combox = new ComboBox(m_page_simple, wxID_ANY, wxEmptyString, wxPoint(FromDIP(250), FromDIP(310)), wxSize(FromDIP(100), -1), 0, NULL, wxCB_READONLY);
|
||||||
|
wxArrayString choices = get_all_camera_view_type();
|
||||||
|
for (size_t i = 0; i < choices.size(); i++) { cur_combox->Append(choices[i]); }
|
||||||
|
cur_combox->SetSelection(0);
|
||||||
|
cur_combox->Bind(wxEVT_COMBOBOX, [this](auto &e) {
|
||||||
|
set_view_angle_type(e.GetSelection());
|
||||||
|
Layout();
|
||||||
|
Fit();
|
||||||
|
});
|
||||||
|
//combox_sizer->Add(cur_combox, 0, wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL | wxEXPAND | wxALL, FromDIP(2));
|
||||||
|
// add image
|
||||||
wxImage image(IMAGE_SIZE_WIDTH, IMAGE_SIZE_WIDTH);
|
wxImage image(IMAGE_SIZE_WIDTH, IMAGE_SIZE_WIDTH);
|
||||||
image.InitAlpha();
|
image.InitAlpha();
|
||||||
for (unsigned int r = 0; r < IMAGE_SIZE_WIDTH; ++r) {
|
for (unsigned int r = 0; r < IMAGE_SIZE_WIDTH; ++r) {
|
||||||
|
@ -305,50 +345,38 @@ ObjColorPanel::ObjColorPanel(wxWindow *parent, Slic3r::ObjDialogInOut &in_out, c
|
||||||
FromDIP(0)); // wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL | wxEXPAND | wxALL
|
FromDIP(0)); // wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL | wxEXPAND | wxALL
|
||||||
|
|
||||||
m_sizer_simple->Add(icon_sizer, FromDIP(0), wxALIGN_CENTER | wxALL, FromDIP(0));
|
m_sizer_simple->Add(icon_sizer, FromDIP(0), wxALIGN_CENTER | wxALL, FromDIP(0));
|
||||||
{//choose camera view angle type
|
//{//choose camera view angle type
|
||||||
auto combox_sizer = new wxBoxSizer(wxHORIZONTAL);
|
// //m_sizer_simple->Add(combox_sizer, FromDIP(0), wxALIGN_CENTER | wxALL, FromDIP(2));
|
||||||
wxStaticText *combox_title = new wxStaticText(m_page_simple, wxID_ANY, _L("Choose camera view angle:"));
|
//}
|
||||||
combox_sizer->Add(combox_title, 0, wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL | wxEXPAND | wxALL, FromDIP(0));
|
|
||||||
|
|
||||||
wxStaticText *space_title = new wxStaticText(m_page_simple, wxID_ANY, " ");
|
|
||||||
combox_sizer->Add(space_title, FromDIP(0), wxALIGN_CENTER | wxALL, FromDIP(0));
|
|
||||||
|
|
||||||
auto cur_combox = new ComboBox(m_page_simple, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(FromDIP(100), -1), 0, NULL, wxCB_READONLY);
|
|
||||||
wxArrayString choices = get_all_camera_view_type();
|
|
||||||
for (size_t i = 0; i < choices.size(); i++) {
|
|
||||||
cur_combox->Append(choices[i]);
|
|
||||||
}
|
|
||||||
cur_combox->SetSelection(0);
|
|
||||||
cur_combox->Bind(wxEVT_COMBOBOX, [this](auto &e) {
|
|
||||||
set_view_angle_type(e.GetSelection());
|
|
||||||
Layout();
|
|
||||||
Fit();
|
|
||||||
});
|
|
||||||
combox_sizer->Add(cur_combox, 0, wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL | wxEXPAND | wxALL, FromDIP(0));
|
|
||||||
|
|
||||||
m_sizer_simple->Add(combox_sizer, FromDIP(0), wxALIGN_CENTER | wxALL, FromDIP(2));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
wxBoxSizer * current_filaments_title_sizer = new wxBoxSizer(wxHORIZONTAL);
|
wxBoxSizer * current_filaments_title_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||||
wxStaticText *current_filaments_title = new wxStaticText(m_page_simple, wxID_ANY, _L("Current filament colors:"));
|
wxStaticText *current_filaments_title = new wxStaticText(m_page_simple, wxID_ANY, _L("Current filament colors"));
|
||||||
current_filaments_title->SetFont(Label::Head_14);
|
current_filaments_title->SetFont(Label::Head_14);
|
||||||
current_filaments_title_sizer->Add(current_filaments_title, 0, wxALIGN_CENTER | wxALL, FromDIP(5));
|
current_filaments_title_sizer->Add(current_filaments_title, 0, wxALIGN_CENTER | wxALL, FromDIP(5));
|
||||||
m_sizer_simple->Add(current_filaments_title_sizer, 0, wxEXPAND | wxLEFT, FromDIP(20));
|
m_sizer_simple->Add(current_filaments_title_sizer, 0, wxEXPAND | wxLEFT, FromDIP(20));
|
||||||
|
|
||||||
wxBoxSizer * current_filaments_sizer = new wxBoxSizer(wxHORIZONTAL);
|
wxBoxSizer * current_filaments_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||||
current_filaments_sizer->AddSpacer(FromDIP(10));
|
current_filaments_sizer->AddSpacer(FromDIP(7));
|
||||||
for (size_t i = 0; i < m_colours.size(); i++) {
|
for (size_t i = 0; i < m_colours.size(); i++) {
|
||||||
auto extruder_icon_sizer = create_extruder_icon_and_rgba_sizer(m_page_simple, i, m_colours[i]);
|
auto extruder_icon_sizer = create_extruder_icon_and_rgba_sizer(m_page_simple, i, m_colours[i]);
|
||||||
current_filaments_sizer->Add(extruder_icon_sizer, 0, wxALIGN_CENTER | wxALIGN_CENTER_VERTICAL, FromDIP(10));
|
current_filaments_sizer->Add(extruder_icon_sizer, 0, wxALIGN_CENTER_VERTICAL, FromDIP(10));
|
||||||
|
current_filaments_sizer->AddSpacer(FromDIP(2.5));
|
||||||
}
|
}
|
||||||
m_sizer_simple->Add(current_filaments_sizer, 0, wxEXPAND | wxLEFT, FromDIP(20));
|
m_sizer_simple->Add(current_filaments_sizer, 0, wxEXPAND | wxLEFT, FromDIP(20));
|
||||||
//colors table
|
//colors table title
|
||||||
m_scrolledWindow = new wxScrolledWindow(m_page_simple,wxID_ANY,wxDefaultPosition,wxDefaultSize,wxSB_VERTICAL);
|
wxBoxSizer * matching_title_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||||
m_sizer_simple->Add(m_scrolledWindow, 0, wxEXPAND | wxALL, FromDIP(5));
|
matching_title_sizer->AddSpacer(FromDIP(25));
|
||||||
draw_table();
|
wxStaticText *matching_title = new wxStaticText(m_page_simple, wxID_ANY, _L("Matching"));
|
||||||
|
matching_title->SetFont(Label::Head_14);
|
||||||
|
matching_title_sizer->Add(matching_title, 0, wxEXPAND , 0);
|
||||||
|
m_sizer_simple->Add(matching_title_sizer, 0, wxEXPAND | wxTOP, FromDIP(15));// wxTop has FromDIP(10) margin
|
||||||
|
//new color table
|
||||||
|
draw_new_table();
|
||||||
|
m_sizer_simple->Add(m_new_grid_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(5));
|
||||||
//buttons
|
//buttons
|
||||||
wxBoxSizer *quick_set_sizer = new wxBoxSizer(wxHORIZONTAL);
|
wxBoxSizer *quick_set_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||||
wxStaticText *quick_set_title = new wxStaticText(m_page_simple, wxID_ANY, _L("Quick set:"));
|
quick_set_sizer->AddSpacer(FromDIP(25));
|
||||||
|
wxStaticText *quick_set_title = new wxStaticText(m_page_simple, wxID_ANY, _L("Quick set"));
|
||||||
quick_set_title->SetFont(Label::Head_12);
|
quick_set_title->SetFont(Label::Head_12);
|
||||||
quick_set_sizer->Add(quick_set_title, 0, wxALIGN_CENTER | wxALL, 0);
|
quick_set_sizer->Add(quick_set_title, 0, wxALIGN_CENTER | wxALL, 0);
|
||||||
quick_set_sizer->AddSpacer(FromDIP(10));
|
quick_set_sizer->AddSpacer(FromDIP(10));
|
||||||
|
@ -362,14 +390,15 @@ ObjColorPanel::ObjColorPanel(wxWindow *parent, Slic3r::ObjDialogInOut &in_out, c
|
||||||
quick_set_sizer->AddSpacer(FromDIP(10));
|
quick_set_sizer->AddSpacer(FromDIP(10));
|
||||||
quick_set_sizer->Add(calc_reset_btn_sizer, 0, wxALIGN_CENTER | wxALL, 0);
|
quick_set_sizer->Add(calc_reset_btn_sizer, 0, wxALIGN_CENTER | wxALL, 0);
|
||||||
quick_set_sizer->AddSpacer(FromDIP(10));
|
quick_set_sizer->AddSpacer(FromDIP(10));
|
||||||
m_sizer_simple->Add(quick_set_sizer, 0, wxEXPAND | wxLEFT, FromDIP(30));
|
m_sizer_simple->Add(quick_set_sizer, 0, wxEXPAND | wxTOP, FromDIP(10));
|
||||||
|
|
||||||
wxBoxSizer *warning_sizer = new wxBoxSizer(wxHORIZONTAL);
|
wxBoxSizer *warning_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||||
m_warning_text = new wxStaticText(m_page_simple, wxID_ANY, "");
|
m_warning_text = new wxStaticText(m_page_simple, wxID_ANY, "");
|
||||||
|
m_warning_text->SetForegroundColour(wxColour(107, 107, 107, 100));
|
||||||
warning_sizer->Add(m_warning_text, 0, wxALIGN_CENTER | wxALL, 0);
|
warning_sizer->Add(m_warning_text, 0, wxALIGN_CENTER | wxALL, 0);
|
||||||
m_sizer_simple->Add(warning_sizer, 0, wxEXPAND | wxLEFT, FromDIP(30));
|
m_sizer_simple->Add(warning_sizer, 0, wxEXPAND | wxLEFT, FromDIP(25));
|
||||||
|
|
||||||
m_sizer_simple->AddSpacer(10);
|
m_sizer_simple->AddSpacer(15);
|
||||||
}
|
}
|
||||||
deal_default_strategy();
|
deal_default_strategy();
|
||||||
deal_thumbnail();
|
deal_thumbnail();
|
||||||
|
@ -439,6 +468,16 @@ void ObjColorPanel::update_filament_ids()
|
||||||
m_first_extruder_id = m_cluster_map_filaments[0];
|
m_first_extruder_id = m_cluster_map_filaments[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ObjColorPanel::set_layout_callback(LayoutChanggeCallback callback) {
|
||||||
|
m_layout_callback = callback;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ObjColorPanel::do_layout_callback() {
|
||||||
|
if (m_layout_callback) {
|
||||||
|
m_layout_callback();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
wxBoxSizer *ObjColorPanel::create_approximate_match_btn_sizer(wxWindow *parent)
|
wxBoxSizer *ObjColorPanel::create_approximate_match_btn_sizer(wxWindow *parent)
|
||||||
{
|
{
|
||||||
auto btn_sizer = new wxBoxSizer(wxHORIZONTAL);
|
auto btn_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||||
|
@ -569,6 +608,7 @@ ComboBox *ObjColorPanel::CreateEditorCtrl(wxWindow *parent, int id) // wxRect la
|
||||||
int i = atoi(com_box->GetName().c_str());
|
int i = atoi(com_box->GetName().c_str());
|
||||||
if (i < m_cluster_map_filaments.size()) {
|
if (i < m_cluster_map_filaments.size()) {
|
||||||
m_cluster_map_filaments[i] = com_box->GetSelection();
|
m_cluster_map_filaments[i] = com_box->GetSelection();
|
||||||
|
deal_thumbnail();
|
||||||
if (m_cluster_map_filaments[i] > m_max_filament_index) {
|
if (m_cluster_map_filaments[i] > m_max_filament_index) {
|
||||||
m_max_filament_index = m_cluster_map_filaments[i];
|
m_max_filament_index = m_cluster_map_filaments[i];
|
||||||
update_new_add_final_colors();
|
update_new_add_final_colors();
|
||||||
|
@ -622,102 +662,70 @@ void ObjColorPanel::show_sizer(wxSizer *sizer, bool show)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ObjColorPanel::redraw_part_table() {
|
|
||||||
//show all and set -1
|
void ObjColorPanel::draw_new_table()
|
||||||
deal_reset_btn();
|
{
|
||||||
for (size_t i = 0; i < m_row_sizer_list.size(); i++) {
|
auto cluster_count = m_cluster_colours.size();
|
||||||
show_sizer(m_row_sizer_list[i], true);
|
auto col = 3;
|
||||||
|
auto row = cluster_count / col;
|
||||||
|
auto remainder = cluster_count % col;
|
||||||
|
if (remainder > 0) {
|
||||||
|
row++;
|
||||||
}
|
}
|
||||||
if (m_cluster_colours.size() < m_row_sizer_list.size()) { // show part
|
int old_row = 0;
|
||||||
for (size_t i = m_cluster_colours.size(); i < m_row_sizer_list.size(); i++) {
|
bool first_draw = false;
|
||||||
show_sizer(m_row_sizer_list[i], false);
|
if (m_new_grid_sizer) {
|
||||||
//m_row_panel_list[i]->Show(false); // show_sizer(m_left_color_cluster_boxsizer_list[i],false);
|
old_row = m_new_grid_sizer->GetRows();
|
||||||
// m_result_icon_list[i]->bitmap_combox->Show(false);
|
m_new_grid_sizer->SetRows(row);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
first_draw = true;
|
||||||
|
m_new_grid_sizer = new wxGridSizer(row, 1, 1, 3); //(int rows, int cols, int vgap, int hgap );
|
||||||
|
}
|
||||||
|
if (!first_draw) {
|
||||||
|
for (size_t i = old_row; i < row; i++) { show_sizer(m_row_sizer_list[i], true); }
|
||||||
|
for (size_t i = row; i < old_row; i++) { show_sizer(m_row_sizer_list[i], false); }
|
||||||
|
for (size_t i = 0; i < cluster_count; i++) { show_sizer(m_row_col_boxsizer_list[i], true); }
|
||||||
|
for (size_t i = cluster_count; i < m_color_num_recommend; i++) { show_sizer(m_row_col_boxsizer_list[i], false); }
|
||||||
|
for (size_t ii = 0; ii < row; ii++) {
|
||||||
|
for (size_t j = 0; j < col; j++) {
|
||||||
|
auto id = ii * col + j;
|
||||||
|
if (id >= cluster_count) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
auto color = m_cluster_colours[id];
|
||||||
|
m_color_cluster_icon_list[id]->SetBitmap(*get_extruder_color_icon(color.GetAsString(wxC2S_HTML_SYNTAX).ToStdString(), "", FromDIP(16), FromDIP(16)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (m_cluster_colours.size() > m_row_sizer_list.size()) {
|
if (old_row != row) {
|
||||||
for (size_t i = m_row_sizer_list.size(); i < m_cluster_colours.size(); i++) {
|
do_layout_callback();
|
||||||
int id = i;
|
}
|
||||||
wxPanel *row_panel = new wxPanel(m_scrolledWindow);
|
else {
|
||||||
row_panel->SetBackgroundColour((i+1) % 2 == 0 ? *wxWHITE : wxColour(238, 238, 238));
|
m_new_grid_sizer->Layout();
|
||||||
auto row_sizer = new wxGridSizer(1, 2, 1, 3);
|
}
|
||||||
|
}
|
||||||
|
else {//first draw
|
||||||
|
for (size_t ii = 0; ii < row; ii++) {
|
||||||
|
wxPanel *row_panel = new wxPanel(m_page_simple);
|
||||||
|
//row_panel->SetBackgroundColour(ii % 2 == 0 ? *wxWHITE : wxColour(238, 238, 238));
|
||||||
|
auto row_sizer = new wxGridSizer(1, col, 1, 1);
|
||||||
row_panel->SetSizer(row_sizer);
|
row_panel->SetSizer(row_sizer);
|
||||||
|
|
||||||
row_panel->SetMinSize(wxSize(FromDIP(PANEL_WIDTH), -1));
|
row_panel->SetMinSize(wxSize(FromDIP(PANEL_WIDTH), -1));
|
||||||
row_panel->SetMaxSize(wxSize(FromDIP(PANEL_WIDTH), -1));
|
row_panel->SetMaxSize(wxSize(FromDIP(PANEL_WIDTH), -1));
|
||||||
|
for (size_t j = 0; j < col; j++) {
|
||||||
auto cluster_color_icon_sizer = create_color_icon_and_rgba_sizer(row_panel, id, m_cluster_colours[id]);
|
auto id = ii * col + j;
|
||||||
row_sizer->Add(cluster_color_icon_sizer, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL, FromDIP(CONTENT_BORDER));
|
if (id >= cluster_count) {
|
||||||
// result_combox
|
break;
|
||||||
create_result_button_sizer(row_panel, id);
|
}
|
||||||
row_sizer->Add(m_result_icon_list[id]->bitmap_combox, 0, wxALIGN_CENTER | wxALIGN_CENTER_VERTICAL, 0);
|
auto cluster_color_icon_sizer = create_color_icon_map_rgba_sizer(row_panel, id, m_cluster_colours[id]);
|
||||||
|
m_row_col_boxsizer_list.emplace_back(cluster_color_icon_sizer);
|
||||||
m_row_sizer_list.emplace_back(row_sizer);
|
row_sizer->Add(cluster_color_icon_sizer, 0, wxALIGN_CENTER | wxALIGN_CENTER_VERTICAL, 0);
|
||||||
m_gridsizer->Add(row_panel, 0, wxALIGN_LEFT | wxALL, FromDIP(HEADER_BORDER));
|
|
||||||
}
|
|
||||||
m_gridsizer->Layout();
|
|
||||||
}
|
|
||||||
for (size_t i = 0; i < m_cluster_colours.size(); i++) { // update data
|
|
||||||
// m_color_cluster_icon_list//m_color_cluster_text_list
|
|
||||||
update_color_icon_and_rgba_sizer(i, m_cluster_colours[i]);
|
|
||||||
}
|
|
||||||
m_scrolledWindow->Refresh();
|
|
||||||
}
|
|
||||||
|
|
||||||
void ObjColorPanel::draw_table()
|
|
||||||
{
|
|
||||||
auto row = std::max(m_cluster_colours.size(), m_colours.size()) + 1;
|
|
||||||
m_gridsizer = new wxGridSizer(row, 1, 1, 3); //(int rows, int cols, int vgap, int hgap );
|
|
||||||
|
|
||||||
m_color_cluster_icon_list.clear();
|
|
||||||
m_extruder_icon_list.clear();
|
|
||||||
float row_height ;
|
|
||||||
for (size_t ii = 0; ii < row; ii++) {
|
|
||||||
wxPanel *row_panel = new wxPanel(m_scrolledWindow);
|
|
||||||
row_panel->SetBackgroundColour(ii % 2 == 0 ? *wxWHITE : wxColour(238, 238, 238));
|
|
||||||
auto row_sizer = new wxGridSizer(1, 2, 1, 5);
|
|
||||||
row_panel->SetSizer(row_sizer);
|
|
||||||
|
|
||||||
row_panel->SetMinSize(wxSize(FromDIP(PANEL_WIDTH), -1));
|
|
||||||
row_panel->SetMaxSize(wxSize(FromDIP(PANEL_WIDTH), -1));
|
|
||||||
if (ii == 0) {
|
|
||||||
wxStaticText *colors_left_title = new wxStaticText(row_panel, wxID_ANY, _L("Cluster colors"));
|
|
||||||
colors_left_title->SetFont(Label::Head_14);
|
|
||||||
row_sizer->Add(colors_left_title, 0, wxALIGN_CENTER | wxALL, FromDIP(HEADER_BORDER));
|
|
||||||
|
|
||||||
wxStaticText *colors_middle_title = new wxStaticText(row_panel, wxID_ANY, _L("Map Filament"));
|
|
||||||
colors_middle_title->SetFont(Label::Head_14);
|
|
||||||
row_sizer->Add(colors_middle_title, 0, wxALIGN_CENTER | wxALL, FromDIP(HEADER_BORDER));
|
|
||||||
} else {
|
|
||||||
int id = ii - 1;
|
|
||||||
if (id < m_cluster_colours.size()) {
|
|
||||||
auto cluster_color_icon_sizer = create_color_icon_and_rgba_sizer(row_panel, id, m_cluster_colours[id]);
|
|
||||||
row_sizer->Add(cluster_color_icon_sizer, 0, wxALIGN_CENTER | wxALIGN_CENTER_VERTICAL, FromDIP(CONTENT_BORDER));
|
|
||||||
// result_combox
|
|
||||||
create_result_button_sizer(row_panel, id);
|
|
||||||
row_sizer->Add(m_result_icon_list[id]->bitmap_combox, 0, wxALIGN_CENTER | wxALIGN_CENTER_VERTICAL, FromDIP(CONTENT_BORDER));
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
row_height = row_panel->GetSize().GetHeight();
|
|
||||||
if (ii>=1) {
|
|
||||||
m_row_sizer_list.emplace_back(row_sizer);
|
m_row_sizer_list.emplace_back(row_sizer);
|
||||||
|
m_new_grid_sizer->Add(row_panel, 0, wxALIGN_LEFT | wxALL, FromDIP(HEADER_BORDER));
|
||||||
}
|
}
|
||||||
m_gridsizer->Add(row_panel, 0, wxALIGN_LEFT | wxALL, FromDIP(HEADER_BORDER));
|
|
||||||
}
|
}
|
||||||
m_scrolledWindow->SetSizer(m_gridsizer);
|
|
||||||
const int fix_row = 4;
|
|
||||||
int totalHeight = row_height * (fix_row + 1) * 2;
|
|
||||||
m_scrolledWindow->SetVirtualSize(MIN_OBJCOLOR_DIALOG_WIDTH, totalHeight);
|
|
||||||
auto look = FIX_SCROLL_HEIGTH;
|
|
||||||
if (totalHeight > FIX_SCROLL_HEIGTH) {
|
|
||||||
m_scrolledWindow->SetMinSize(wxSize(MIN_OBJCOLOR_DIALOG_WIDTH, FIX_SCROLL_HEIGTH));
|
|
||||||
m_scrolledWindow->SetMaxSize(wxSize(MIN_OBJCOLOR_DIALOG_WIDTH, FIX_SCROLL_HEIGTH));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
m_scrolledWindow->SetMinSize(wxSize(MIN_OBJCOLOR_DIALOG_WIDTH, totalHeight));
|
|
||||||
}
|
|
||||||
m_scrolledWindow->EnableScrolling(false, true);
|
|
||||||
m_scrolledWindow->ShowScrollbars(wxSHOW_SB_NEVER, wxSHOW_SB_DEFAULT);//wxSHOW_SB_ALWAYS
|
|
||||||
m_scrolledWindow->SetScrollRate(20, 20);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ObjColorPanel::update_new_add_final_colors()
|
void ObjColorPanel::update_new_add_final_colors()
|
||||||
|
@ -758,7 +766,8 @@ void ObjColorPanel::deal_algo(char cluster_number, bool redraw_ui)
|
||||||
}
|
}
|
||||||
//redraw ui
|
//redraw ui
|
||||||
if (redraw_ui) {
|
if (redraw_ui) {
|
||||||
redraw_part_table();
|
deal_reset_btn();
|
||||||
|
draw_new_table();
|
||||||
deal_default_strategy();
|
deal_default_strategy();
|
||||||
deal_thumbnail();
|
deal_thumbnail();
|
||||||
}
|
}
|
||||||
|
@ -768,7 +777,7 @@ void ObjColorPanel::deal_default_strategy()
|
||||||
{
|
{
|
||||||
deal_add_btn();
|
deal_add_btn();
|
||||||
deal_approximate_match_btn();
|
deal_approximate_match_btn();
|
||||||
m_warning_text->SetLabelText(_L("Note:The color has been selected, you can choose OK \n to continue or manually adjust it."));
|
m_warning_text->SetLabelText(_L("Note") + ": " + _L("The color has been selected, you can choose OK \n to continue or manually adjust it."));
|
||||||
}
|
}
|
||||||
|
|
||||||
void ObjColorPanel::deal_thumbnail() {
|
void ObjColorPanel::deal_thumbnail() {
|
||||||
|
@ -895,41 +904,25 @@ void ObjColorPanel::deal_reset_btn()
|
||||||
m_warning_text->SetLabelText("");
|
m_warning_text->SetLabelText("");
|
||||||
}
|
}
|
||||||
|
|
||||||
void ObjColorPanel::create_result_button_sizer(wxWindow *parent, int id)
|
wxBoxSizer *ObjColorPanel::create_color_icon_map_rgba_sizer(wxWindow *parent, int id, const wxColour &color)
|
||||||
{
|
{
|
||||||
for (size_t i = m_result_icon_list.size(); i < id + 1; i++) {
|
auto icon_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||||
m_result_icon_list.emplace_back(new ButtonState());
|
//icon_sizer->AddSpacer(FromDIP(40));
|
||||||
}
|
wxButton *icon = new wxButton(parent, wxID_ANY, {}, wxDefaultPosition, ICON_SIZE, wxBORDER_NONE | wxBU_AUTODRAW);
|
||||||
m_result_icon_list[id]->bitmap_combox = CreateEditorCtrl(parent,id);
|
icon->SetBitmap(*get_extruder_color_icon(color.GetAsString(wxC2S_HTML_SYNTAX).ToStdString(), "", FromDIP(16), FromDIP(16)));
|
||||||
}
|
|
||||||
|
|
||||||
wxBoxSizer *ObjColorPanel::create_color_icon_and_rgba_sizer(wxWindow *parent, int id, const wxColour& color)
|
|
||||||
{
|
|
||||||
auto icon_sizer = new wxBoxSizer(wxHORIZONTAL);
|
|
||||||
icon_sizer->AddSpacer(FromDIP(40));
|
|
||||||
wxButton *icon = new wxButton(parent, wxID_ANY, {}, wxDefaultPosition, ICON_SIZE, wxBORDER_NONE | wxBU_AUTODRAW);
|
|
||||||
icon->SetBitmap(*get_extruder_color_icon(color.GetAsString(wxC2S_HTML_SYNTAX).ToStdString(), std::to_string(id + 1), FromDIP(16), FromDIP(16)));
|
|
||||||
icon->SetCanFocus(false);
|
icon->SetCanFocus(false);
|
||||||
m_color_cluster_icon_list.emplace_back(icon);
|
m_color_cluster_icon_list.emplace_back(icon);
|
||||||
icon_sizer->Add(icon, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL, 0); // wxALIGN_CENTER_VERTICAL | wxTOP | wxBOTTOM
|
icon_sizer->Add(icon, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL, 0); // wxALIGN_CENTER_VERTICAL | wxTOP | wxBOTTOM
|
||||||
icon_sizer->AddSpacer(FromDIP(10));
|
icon_sizer->AddSpacer(FromDIP(10));
|
||||||
|
|
||||||
std::string message = get_color_str(color);
|
wxStaticText *map_text = new wxStaticText(parent, wxID_ANY, _L("—> "));
|
||||||
wxStaticText *rgba_title = new wxStaticText(parent, wxID_ANY, message.c_str());
|
map_text->SetFont(Label::Head_12);
|
||||||
m_color_cluster_text_list.emplace_back(rgba_title);
|
icon_sizer->Add(map_text, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL, 0);
|
||||||
rgba_title->SetMinSize(wxSize(FromDIP(COLOR_LABEL_WIDTH), -1));
|
|
||||||
rgba_title->SetMaxSize(wxSize(FromDIP(COLOR_LABEL_WIDTH), -1));
|
for (size_t i = m_result_icon_list.size(); i < id + 1; i++) {
|
||||||
//rgba_title->SetFont(Label::Head_12);
|
m_result_icon_list.emplace_back(new ButtonState());
|
||||||
icon_sizer->Add(rgba_title, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL, 0);
|
}
|
||||||
|
m_result_icon_list[id]->bitmap_combox = CreateEditorCtrl(parent, id);
|
||||||
|
icon_sizer->Add(m_result_icon_list[id]->bitmap_combox, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL, 0);
|
||||||
return icon_sizer;
|
return icon_sizer;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ObjColorPanel::update_color_icon_and_rgba_sizer(int id, const wxColour &color)
|
|
||||||
{
|
|
||||||
if (id < m_color_cluster_text_list.size()) {
|
|
||||||
auto icon = m_color_cluster_icon_list[id];
|
|
||||||
icon->SetBitmap(*get_extruder_color_icon(color.GetAsString(wxC2S_HTML_SYNTAX).ToStdString(), std::to_string(id + 1), FromDIP(16), FromDIP(16)));
|
|
||||||
std::string message = get_color_str(color);
|
|
||||||
m_color_cluster_text_list[id]->SetLabelText(message.c_str());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -32,20 +32,20 @@ public:
|
||||||
ComboBox* bitmap_combox{nullptr};
|
ComboBox* bitmap_combox{nullptr};
|
||||||
bool is_map{false};//int id{0};
|
bool is_map{false};//int id{0};
|
||||||
};
|
};
|
||||||
|
typedef std::function<void()> LayoutChanggeCallback;
|
||||||
|
void set_layout_callback(LayoutChanggeCallback);
|
||||||
|
void do_layout_callback();
|
||||||
private:
|
private:
|
||||||
wxBoxSizer *create_approximate_match_btn_sizer(wxWindow *parent);
|
wxBoxSizer *create_approximate_match_btn_sizer(wxWindow *parent);
|
||||||
wxBoxSizer *create_add_btn_sizer(wxWindow *parent);
|
wxBoxSizer *create_add_btn_sizer(wxWindow *parent);
|
||||||
wxBoxSizer *create_reset_btn_sizer(wxWindow *parent);
|
wxBoxSizer *create_reset_btn_sizer(wxWindow *parent);
|
||||||
wxBoxSizer *create_extruder_icon_and_rgba_sizer(wxWindow *parent, int id, const wxColour& color);
|
wxBoxSizer *create_extruder_icon_and_rgba_sizer(wxWindow *parent, int id, const wxColour& color);
|
||||||
std::string get_color_str(const wxColour &color);
|
std::string get_color_str(const wxColour &color);
|
||||||
void create_result_button_sizer(wxWindow *parent, int id);
|
wxBoxSizer *create_color_icon_map_rgba_sizer(wxWindow *parent, int id, const wxColour &color);//for display map
|
||||||
wxBoxSizer *create_color_icon_and_rgba_sizer(wxWindow *parent, int id, const wxColour& color);
|
|
||||||
void update_color_icon_and_rgba_sizer(int id, const wxColour &color);
|
|
||||||
ComboBox* CreateEditorCtrl(wxWindow *parent,int id);
|
ComboBox* CreateEditorCtrl(wxWindow *parent,int id);
|
||||||
void draw_table();
|
void draw_new_table();
|
||||||
void update_new_add_final_colors();
|
void update_new_add_final_colors();
|
||||||
void show_sizer(wxSizer *sizer, bool show);
|
void show_sizer(wxSizer *sizer, bool show);
|
||||||
void redraw_part_table();
|
|
||||||
void deal_approximate_match_btn();
|
void deal_approximate_match_btn();
|
||||||
void deal_add_btn();
|
void deal_add_btn();
|
||||||
void deal_reset_btn();
|
void deal_reset_btn();
|
||||||
|
@ -58,12 +58,12 @@ private:
|
||||||
//view ui
|
//view ui
|
||||||
Slic3r::ObjDialogInOut & m_obj_in_out;
|
Slic3r::ObjDialogInOut & m_obj_in_out;
|
||||||
Slic3r::GUI::Camera::ViewAngleType m_camera_view_angle_type{Slic3r::GUI::Camera::ViewAngleType::Iso};
|
Slic3r::GUI::Camera::ViewAngleType m_camera_view_angle_type{Slic3r::GUI::Camera::ViewAngleType::Iso};
|
||||||
wxScrolledWindow * m_scrolledWindow = nullptr;
|
|
||||||
wxPanel * m_page_simple = nullptr;
|
wxPanel * m_page_simple = nullptr;
|
||||||
wxBoxSizer * m_sizer = nullptr;
|
wxBoxSizer * m_sizer = nullptr;
|
||||||
wxBoxSizer * m_sizer_simple = nullptr;
|
wxBoxSizer * m_sizer_simple = nullptr;
|
||||||
SpinInput * m_color_cluster_num_by_user_ebox{nullptr};
|
SpinInput * m_color_cluster_num_by_user_ebox{nullptr};
|
||||||
wxStaticText * m_warning_text{nullptr};
|
wxStaticText * m_warning_text{nullptr};
|
||||||
|
wxGridSizer * m_new_grid_sizer{nullptr};
|
||||||
Button * m_quick_approximate_match_btn{nullptr};
|
Button * m_quick_approximate_match_btn{nullptr};
|
||||||
Button * m_quick_add_btn{nullptr};
|
Button * m_quick_add_btn{nullptr};
|
||||||
Button * m_quick_reset_btn{nullptr};
|
Button * m_quick_reset_btn{nullptr};
|
||||||
|
@ -71,13 +71,14 @@ private:
|
||||||
std::vector<wxButton*> m_color_cluster_icon_list;//need modeify
|
std::vector<wxButton*> m_color_cluster_icon_list;//need modeify
|
||||||
std::vector<wxStaticText*> m_color_cluster_text_list;//need modeify
|
std::vector<wxStaticText*> m_color_cluster_text_list;//need modeify
|
||||||
std::vector<wxGridSizer*> m_row_sizer_list; // control show or not
|
std::vector<wxGridSizer*> m_row_sizer_list; // control show or not
|
||||||
|
std::vector<wxBoxSizer *> m_row_col_boxsizer_list;
|
||||||
std::vector<ButtonState*> m_result_icon_list;
|
std::vector<ButtonState*> m_result_icon_list;
|
||||||
int m_last_cluster_num{-1};
|
int m_last_cluster_num{-1};
|
||||||
const int m_combox_width{50};
|
const int m_combox_width{50};
|
||||||
int m_combox_icon_width;
|
int m_combox_icon_width;
|
||||||
int m_combox_icon_height;
|
int m_combox_icon_height;
|
||||||
wxGridSizer* m_gridsizer = nullptr;
|
|
||||||
wxButton * m_image_button = nullptr;
|
wxButton * m_image_button = nullptr;
|
||||||
|
LayoutChanggeCallback m_layout_callback;
|
||||||
//data
|
//data
|
||||||
char m_last_cluster_number{-2};
|
char m_last_cluster_number{-2};
|
||||||
std::vector<Slic3r::RGBA>& m_input_colors;
|
std::vector<Slic3r::RGBA>& m_input_colors;
|
||||||
|
@ -107,8 +108,11 @@ public:
|
||||||
ObjColorDialog(wxWindow *parent, Slic3r::ObjDialogInOut &in_out, const std::vector<std::string> &extruder_colours);
|
ObjColorDialog(wxWindow *parent, Slic3r::ObjDialogInOut &in_out, const std::vector<std::string> &extruder_colours);
|
||||||
wxBoxSizer* create_btn_sizer(long flags);
|
wxBoxSizer* create_btn_sizer(long flags);
|
||||||
void on_dpi_changed(const wxRect &suggested_rect) override;
|
void on_dpi_changed(const wxRect &suggested_rect) override;
|
||||||
|
void update_layout();
|
||||||
private:
|
private:
|
||||||
ObjColorPanel* m_panel_ObjColor = nullptr;
|
ObjColorPanel* m_panel_ObjColor = nullptr;
|
||||||
|
wxBoxSizer * m_main_sizer = nullptr;
|
||||||
|
wxBoxSizer * m_buttons_sizer = nullptr;
|
||||||
std::unordered_map<int, Button *> m_button_list;
|
std::unordered_map<int, Button *> m_button_list;
|
||||||
std::vector<unsigned char>& m_filament_ids;
|
std::vector<unsigned char>& m_filament_ids;
|
||||||
unsigned char & m_first_extruder_id;
|
unsigned char & m_first_extruder_id;
|
||||||
|
|
Loading…
Reference in New Issue