mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-09 07:56:24 -06:00
NEW:support for filament backup and edit
Change-Id: Id0a83e56df75253046cc07d972e9ad156690bbe7
This commit is contained in:
parent
2c00a44de6
commit
80d6479bee
9 changed files with 295 additions and 272 deletions
|
@ -15,6 +15,7 @@
|
|||
#include <wx/progdlg.h>
|
||||
#include <wx/clipbrd.h>
|
||||
#include <wx/dcgraph.h>
|
||||
#include <wx/graphics.h>
|
||||
#include <miniz.h>
|
||||
#include <algorithm>
|
||||
#include "Plater.hpp"
|
||||
|
@ -606,11 +607,6 @@ void MappingItem::render(wxDC &dc)
|
|||
if (m_coloul.Alpha() == 0) txt_colour = wxColour(0x26, 0x2E, 0x30);
|
||||
dc.SetTextForeground(txt_colour);
|
||||
|
||||
/*if (dc.GetTextExtent(m_name).x > GetSize().x - 10) {
|
||||
dc.SetFont(::Label::Body_10);
|
||||
m_name = m_name.substr(0, 3) + "." + m_name.substr(m_name.length() - 1);
|
||||
}*/
|
||||
|
||||
auto txt_size = dc.GetTextExtent(m_tray_index);
|
||||
auto top = (GetSize().y - MAPPING_ITEM_REAL_SIZE.y) / 2 + FromDIP(8);
|
||||
dc.DrawText(m_tray_index, wxPoint((GetSize().x - txt_size.x) / 2, top));
|
||||
|
@ -1123,8 +1119,11 @@ void MappingContainer::doRender(wxDC& dc)
|
|||
}
|
||||
|
||||
AmsReplaceMaterialDialog::AmsReplaceMaterialDialog(wxWindow* parent)
|
||||
: DPIDialog(parent, wxID_ANY, _L("Filaments replace"), wxDefaultPosition, wxDefaultSize, wxSYSTEM_MENU | wxCAPTION | wxCLOSE_BOX)
|
||||
: DPIDialog(parent, wxID_ANY, _L("Filaments Auto refill"), wxDefaultPosition, wxDefaultSize, wxSYSTEM_MENU | wxCAPTION | wxCLOSE_BOX)
|
||||
{
|
||||
#ifdef __WINDOWS__
|
||||
SetDoubleBuffered(true);
|
||||
#endif //__WINDOWS__
|
||||
SetBackgroundColour(*wxWHITE);
|
||||
create();
|
||||
wxGetApp().UpdateDlgDarkUI(this);
|
||||
|
@ -1132,14 +1131,13 @@ AmsReplaceMaterialDialog::AmsReplaceMaterialDialog(wxWindow* parent)
|
|||
|
||||
void AmsReplaceMaterialDialog::create()
|
||||
{
|
||||
SetSize(wxSize(FromDIP(376), -1));
|
||||
SetMinSize(wxSize(FromDIP(376), -1));
|
||||
SetMaxSize(wxSize(FromDIP(376), -1));
|
||||
SetSize(wxSize(FromDIP(445), -1));
|
||||
SetMinSize(wxSize(FromDIP(445), -1));
|
||||
SetMaxSize(wxSize(FromDIP(445), -1));
|
||||
|
||||
// set icon for dialog
|
||||
std::string icon_path = (boost::format("%1%/images/BambuStudioTitle.ico") % resources_dir()).str();
|
||||
SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO));
|
||||
SetSizeHints(wxDefaultSize, wxDefaultSize);
|
||||
|
||||
m_main_sizer = new wxBoxSizer(wxVERTICAL);
|
||||
auto m_top_line = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1), wxTAB_TRAVERSAL);
|
||||
|
@ -1147,6 +1145,17 @@ void AmsReplaceMaterialDialog::create()
|
|||
m_main_sizer->Add(m_top_line, 0, wxEXPAND, 0);
|
||||
|
||||
|
||||
auto label_title = new Label(this, _L("Auto refill"));
|
||||
label_title->SetFont(Label::Head_14);
|
||||
label_title->SetForegroundColour(0x00AE42);
|
||||
auto label_txt = new Label(this, _L("When the current material run out,the printer will continue to print in the following order."));
|
||||
label_txt->SetFont(Label::Body_13);
|
||||
label_txt->SetForegroundColour(0x323A3D);
|
||||
label_txt->SetMinSize(wxSize(FromDIP(380), -1));
|
||||
label_txt->SetMaxSize(wxSize(FromDIP(380), -1));
|
||||
label_txt->Wrap(FromDIP(380));
|
||||
|
||||
m_groups_sizer = new wxWrapSizer( wxHORIZONTAL, wxWRAPSIZER_DEFAULT_FLAGS );
|
||||
auto m_button_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
|
||||
StateColor btn_bg_white(std::pair<wxColour, int>(AMS_CONTROL_DISABLE_COLOUR, StateColor::Disabled),
|
||||
|
@ -1160,26 +1169,32 @@ void AmsReplaceMaterialDialog::create()
|
|||
StateColor btn_text_white(std::pair<wxColour, int>(wxColour(255, 255, 254), StateColor::Disabled),
|
||||
std::pair<wxColour, int>(wxColour(38, 46, 48), StateColor::Enabled));
|
||||
|
||||
auto m_button_close = new Button(this, _L("Close"));
|
||||
m_button_close->SetCornerRadius(FromDIP(11));
|
||||
m_button_close->SetBackgroundColor(btn_bg_white);
|
||||
m_button_close->SetBorderColor(btn_bd_white);
|
||||
m_button_close->SetTextColor(btn_text_white);
|
||||
m_button_close->SetFont(Label::Body_13);
|
||||
m_button_close->SetMinSize(wxSize(FromDIP(42), FromDIP(24)));
|
||||
m_button_close->Bind(wxEVT_BUTTON, [this](auto& e) {
|
||||
EndModal(wxCLOSE);
|
||||
});
|
||||
|
||||
StateColor btn_bg_green(std::pair<wxColour, int>(wxColour(27, 136, 68), StateColor::Pressed), std::pair<wxColour, int>(wxColour(0, 174, 66), StateColor::Normal));
|
||||
/* auto m_button_add = new Button(this, _L("Add substitute relationship"));
|
||||
m_button_add->SetBackgroundColor(btn_bg_green);
|
||||
m_button_add->SetBorderColor(wxColour(0, 174, 66));
|
||||
m_button_add->SetTextColor(wxColour(255, 255, 255));
|
||||
m_button_add->SetSize(wxSize(-1, FromDIP(24)));
|
||||
m_button_add->SetMinSize(wxSize(-1, FromDIP(24)));
|
||||
m_button_add->SetCornerRadius(FromDIP(12));
|
||||
|
||||
|
||||
m_button_add->Bind(wxEVT_BUTTON, [this](auto& e) {
|
||||
EndModal(wxCLOSE);
|
||||
});*/
|
||||
|
||||
m_button_sizer->Add( 0, 0, 1, wxEXPAND, 0 );
|
||||
m_button_sizer->Add(m_button_close, 0, wxALIGN_CENTER, 0);
|
||||
//m_button_sizer->Add(m_button_add, 0, wxALIGN_CENTER, 0);
|
||||
|
||||
|
||||
m_groups_sizer = new wxBoxSizer(wxVERTICAL);
|
||||
m_main_sizer->Add(0,0,0, wxTOP, FromDIP(12));
|
||||
m_main_sizer->Add(m_groups_sizer,0,wxEXPAND|wxLEFT|wxRIGHT, FromDIP(16));
|
||||
m_main_sizer->Add(label_title,0, wxLEFT, FromDIP(30));
|
||||
m_main_sizer->Add(0,0,0, wxTOP, FromDIP(4));
|
||||
m_main_sizer->Add(label_txt,0, wxLEFT, FromDIP(30));
|
||||
m_main_sizer->Add(0,0,0, wxTOP, FromDIP(16));
|
||||
m_main_sizer->Add(m_groups_sizer,0, wxALIGN_CENTER, 0);
|
||||
m_main_sizer->Add(0,0,0, wxTOP, FromDIP(20));
|
||||
m_main_sizer->Add(m_button_sizer,0,wxEXPAND|wxLEFT|wxRIGHT, FromDIP(16));
|
||||
m_main_sizer->Add(m_button_sizer,0,wxALIGN_CENTER, FromDIP(16));
|
||||
m_main_sizer->Add(0,0,0, wxTOP, FromDIP(20));
|
||||
|
||||
|
||||
|
@ -1233,19 +1248,18 @@ void AmsReplaceMaterialDialog::update_machine_obj(MachineObject* obj)
|
|||
for (int filam : m_obj->filam_bak) {
|
||||
auto status_list = GetStatus(filam);
|
||||
|
||||
wxColour group_color;
|
||||
std::map<std::string, wxColour> group_info;
|
||||
std::string group_material;
|
||||
|
||||
//get color & material
|
||||
for (auto i = 0; i < status_list.size(); i++) {
|
||||
if (status_list[i] && tray_list[i] != nullptr) {
|
||||
group_color = AmsTray::decode_color(tray_list[i]->color);
|
||||
group_info[wxGetApp().transition_tridid(i).ToStdString()] = AmsTray::decode_color(tray_list[i]->color);
|
||||
group_material = tray_list[i]->get_display_filament_type();
|
||||
}
|
||||
}
|
||||
|
||||
m_groups_sizer->Add(create_split_line(wxString::Format("%s%d", _L("Group"), group_index), group_color, group_material, status_list), 0, wxEXPAND, 0);
|
||||
m_groups_sizer->Add(0, 0, 0, wxTOP, FromDIP(12));
|
||||
m_groups_sizer->Add(create_backup_group(wxString::Format("%s%d", _L("Group"), group_index), group_info, group_material, status_list), 0, wxALL, FromDIP(10));
|
||||
group_index++;
|
||||
}
|
||||
|
||||
|
@ -1253,92 +1267,10 @@ void AmsReplaceMaterialDialog::update_machine_obj(MachineObject* obj)
|
|||
Fit();
|
||||
}
|
||||
|
||||
wxWindow* AmsReplaceMaterialDialog::create_split_line(wxString gname, wxColour col, wxString material, std::vector<bool> status_list)
|
||||
AmsRMGroup* AmsReplaceMaterialDialog::create_backup_group(wxString gname, std::map<std::string, wxColour> group_info, wxString material, std::vector<bool> status_list)
|
||||
{
|
||||
wxColour background_color = wxColour(0xF4F4F4);
|
||||
|
||||
if (abs(col.Red() - background_color.Red()) <= 5 &&
|
||||
abs(col.Green() - background_color.Green()) <= 5 &&
|
||||
abs(col.Blue() - background_color.Blue()) <= 5) {
|
||||
background_color = wxColour(0xE6E6E6);
|
||||
}
|
||||
|
||||
auto m_panel_group = new StaticBox(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE);
|
||||
m_panel_group->SetCornerRadius(FromDIP(4));
|
||||
m_panel_group->SetBackgroundColor(StateColor(std::pair<wxColour, int>(background_color, StateColor::Normal)));
|
||||
|
||||
m_panel_group->SetSize(wxSize(FromDIP(344), -1));
|
||||
m_panel_group->SetMinSize(wxSize(FromDIP(344), -1));
|
||||
m_panel_group->SetMaxSize(wxSize(FromDIP(344), -1));
|
||||
|
||||
wxBoxSizer* group_sizer = new wxBoxSizer(wxVERTICAL);
|
||||
|
||||
//group title
|
||||
wxBoxSizer* title_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
auto group_name = new Label(m_panel_group, gname);
|
||||
group_name->SetFont(::Label::Head_12);
|
||||
|
||||
Button* material_info = new Button(m_panel_group, material);
|
||||
material_info->SetFont(Label::Head_12);
|
||||
material_info->SetCornerRadius(FromDIP(2));
|
||||
material_info->SetBorderColor(background_color);
|
||||
|
||||
if (col.GetLuminance() < 0.5)
|
||||
material_info->SetTextColor(*wxWHITE);
|
||||
else
|
||||
material_info->SetTextColor(0x6B6B6B);
|
||||
|
||||
material_info->SetMinSize(wxSize(-1, FromDIP(24)));
|
||||
material_info->SetBackgroundColor(col);
|
||||
|
||||
|
||||
title_sizer->Add(group_name, 0, wxALIGN_CENTER, 0);
|
||||
title_sizer->Add(0, 0, 0, wxLEFT, FromDIP(10));
|
||||
title_sizer->Add(material_info, 0, wxALIGN_CENTER, 0);
|
||||
|
||||
|
||||
//group item
|
||||
wxGridSizer* grid_Sizer = new wxGridSizer(0, 8, 0, 0);
|
||||
|
||||
for (int i = 0; i < status_list.size(); i++) {
|
||||
if (status_list[i]) {
|
||||
AmsRMItem* amsitem = new AmsRMItem(m_panel_group, wxID_ANY, wxDefaultPosition, wxDefaultSize);
|
||||
amsitem->set_color(col);
|
||||
|
||||
//set current tray
|
||||
if (!m_obj->m_tray_now.empty() && m_obj->m_tray_now == std::to_string(i)) {
|
||||
amsitem->set_focus(true);
|
||||
}
|
||||
|
||||
amsitem->set_type(RMTYPE_NORMAL);
|
||||
amsitem->set_index(wxGetApp().transition_tridid(i).ToStdString());
|
||||
amsitem->SetBackgroundColour(background_color);
|
||||
grid_Sizer->Add(amsitem, 0, wxALIGN_CENTER | wxTOP | wxBottom, FromDIP(10));
|
||||
}
|
||||
}
|
||||
|
||||
//add the first tray
|
||||
for (int i = 0; i < status_list.size(); i++) {
|
||||
if (status_list[i]) {
|
||||
AmsRMItem* amsitem = new AmsRMItem(m_panel_group, wxID_ANY, wxDefaultPosition, wxDefaultSize);
|
||||
amsitem->set_color(col);
|
||||
amsitem->set_type(RMTYPE_VIRTUAL);
|
||||
amsitem->set_index(wxGetApp().transition_tridid(i).ToStdString());
|
||||
amsitem->SetBackgroundColour(background_color);
|
||||
grid_Sizer->Add(amsitem, 0, wxALIGN_CENTER | wxTOP | wxBottom, FromDIP(10));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
group_sizer->Add(0, 0, 0, wxTOP, FromDIP(10));
|
||||
group_sizer->Add(title_sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(12));
|
||||
group_sizer->Add(grid_Sizer, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(12));
|
||||
group_sizer->Add(0, 0, 0, wxTOP, FromDIP(10));
|
||||
|
||||
m_panel_group->SetSizer(group_sizer);
|
||||
m_panel_group->Layout();
|
||||
group_sizer->Fit(m_panel_group);
|
||||
return m_panel_group;
|
||||
auto grp = new AmsRMGroup(this, group_info, material, gname);
|
||||
return grp;
|
||||
}
|
||||
|
||||
void AmsReplaceMaterialDialog::paintEvent(wxPaintEvent& evt)
|
||||
|
@ -1354,119 +1286,105 @@ void AmsReplaceMaterialDialog::on_dpi_changed(const wxRect& suggested_rect)
|
|||
|
||||
}
|
||||
|
||||
AmsRMItem::AmsRMItem(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size)
|
||||
AmsRMGroup::AmsRMGroup(wxWindow* parent, std::map<std::string, wxColour> group_info, wxString mname, wxString group_index)
|
||||
{
|
||||
wxWindow::Create(parent, id, pos, size);
|
||||
m_group_info.clear();
|
||||
m_group_info = group_info;
|
||||
m_material_name = mname;
|
||||
m_group_index = group_index;
|
||||
|
||||
SetSize(wxSize(FromDIP(42), FromDIP(32)));
|
||||
SetMinSize(wxSize(FromDIP(42), FromDIP(32)));
|
||||
SetMaxSize(wxSize(FromDIP(42), FromDIP(32)));
|
||||
|
||||
/*m_group_info["A1"] = wxColour(255,0,255);
|
||||
m_group_info["A2"] = wxColour(255,215,0);
|
||||
m_group_info["A3"] = wxColour(0,191,255);
|
||||
m_group_info["A4"] = wxColour(255,255,255);
|
||||
m_group_info["A4"] = wxColour(218,165,32);
|
||||
m_group_info["B1"] = wxColour(220, 20, 60);
|
||||
m_group_info["B2"] = wxColour(255, 215, 0);
|
||||
m_group_info["B3"] = wxColour(0, 191, 255);
|
||||
m_group_info["B4"] = wxColour(218, 165, 32);
|
||||
m_group_info["C1"] = wxColour(220, 20, 60);
|
||||
m_group_info["C2"] = wxColour(255, 215, 0);
|
||||
m_group_info["C3"] = wxColour(0, 191, 255);
|
||||
m_group_info["C4"] = wxColour(218, 165, 32);
|
||||
m_group_info["D1"] = wxColour(220, 20, 60);
|
||||
m_group_info["D2"] = wxColour(255, 215, 0);
|
||||
m_group_info["D3"] = wxColour(0, 191, 255);*/
|
||||
|
||||
SetBackgroundColour(*wxWHITE);
|
||||
|
||||
Bind(wxEVT_PAINT, &AmsRMItem::paintEvent, this);
|
||||
}
|
||||
|
||||
void AmsRMItem::paintEvent(wxPaintEvent& evt)
|
||||
{
|
||||
wxPaintDC dc(this);
|
||||
render(dc);
|
||||
}
|
||||
|
||||
void AmsRMItem::render(wxDC& dc)
|
||||
{
|
||||
#ifdef __WXMSW__
|
||||
wxSize size = GetSize();
|
||||
wxMemoryDC memdc;
|
||||
wxBitmap bmp(size.x, size.y);
|
||||
memdc.SelectObject(bmp);
|
||||
memdc.Blit({ 0, 0 }, size, &dc, { 0, 0 });
|
||||
|
||||
{
|
||||
wxGCDC dc2(memdc);
|
||||
doRender(dc2);
|
||||
}
|
||||
|
||||
memdc.SelectObject(wxNullBitmap);
|
||||
dc.DrawBitmap(bmp, 0, 0);
|
||||
#else
|
||||
doRender(dc);
|
||||
#endif
|
||||
}
|
||||
|
||||
void AmsRMItem::doRender(wxDC& dc)
|
||||
{
|
||||
wxSize size = GetSize();
|
||||
|
||||
if (m_type == RMTYPE_NORMAL) {
|
||||
dc.SetPen(wxPen(m_color, 2));
|
||||
dc.SetBrush(*wxTRANSPARENT_BRUSH);
|
||||
}
|
||||
else {
|
||||
dc.SetPen(wxPen(m_color, 2, wxSHORT_DASH));
|
||||
dc.SetBrush(*wxTRANSPARENT_BRUSH);
|
||||
}
|
||||
|
||||
//top bottom line
|
||||
dc.DrawLine(FromDIP(0), FromDIP(4), size.x - FromDIP(5), FromDIP(4));
|
||||
dc.DrawLine(FromDIP(0), size.y - FromDIP(4), size.x - FromDIP(5), size.y - FromDIP(4));
|
||||
|
||||
//left right line
|
||||
dc.DrawLine(FromDIP(1), FromDIP(4), FromDIP(1), FromDIP(11));
|
||||
dc.DrawLine(FromDIP(1), FromDIP(22), FromDIP(1), size.y - FromDIP(4));
|
||||
|
||||
dc.DrawLine(size.x - FromDIP(5), FromDIP(4), size.x - FromDIP(5), FromDIP(11));
|
||||
dc.DrawLine(size.x - FromDIP(5), FromDIP(22), size.x - FromDIP(5), size.y - FromDIP(4));
|
||||
|
||||
//delta
|
||||
dc.DrawLine(FromDIP(0), FromDIP(11), FromDIP(5), size.y / 2);
|
||||
dc.DrawLine(FromDIP(0), FromDIP(22), FromDIP(5), size.y / 2);
|
||||
|
||||
dc.DrawLine(size.x - FromDIP(5), FromDIP(11), size.x - FromDIP(1), size.y / 2);
|
||||
dc.DrawLine(size.x - FromDIP(5), FromDIP(22), size.x - FromDIP(1), size.y / 2);
|
||||
|
||||
|
||||
if (m_focus) {
|
||||
dc.SetPen(wxPen(wxColour(0x00AE42), 2));
|
||||
dc.SetBrush(*wxTRANSPARENT_BRUSH);
|
||||
dc.DrawLine(FromDIP(0), FromDIP(1), size.x - FromDIP(5), FromDIP(1));
|
||||
dc.DrawLine(FromDIP(0), size.y - FromDIP(1), size.x - FromDIP(5), size.y - FromDIP(1));
|
||||
}
|
||||
|
||||
if (m_selected) {
|
||||
}
|
||||
|
||||
auto tsize = dc.GetMultiLineTextExtent(m_index);
|
||||
auto tpot = wxPoint((size.x - tsize.x) / 2 - FromDIP(2), (size.y - tsize.y) / 2 + FromDIP(2));
|
||||
dc.SetTextForeground(wxColour(0x6B6B6B));
|
||||
dc.SetFont(::Label::Head_12);
|
||||
dc.DrawText(m_index, tpot);
|
||||
}
|
||||
|
||||
AmsRMArrow::AmsRMArrow(wxWindow* parent)
|
||||
{
|
||||
|
||||
wxWindow::Create(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize);
|
||||
SetSize(wxSize(FromDIP(166), FromDIP(166)));
|
||||
SetMinSize(wxSize(FromDIP(166), FromDIP(166)));
|
||||
SetMaxSize(wxSize(FromDIP(166), FromDIP(166)));
|
||||
SetBackgroundColour(*wxWHITE);
|
||||
Bind(wxEVT_PAINT, &AmsRMArrow::paintEvent, this);
|
||||
|
||||
m_bitmap_left = ScalableBitmap(this, "replace_arrow_left", 7);
|
||||
m_bitmap_right = ScalableBitmap(this, "replace_arrow_right", 7);
|
||||
m_bitmap_down = ScalableBitmap(this, "replace_arrow_down", 7);
|
||||
backup_current_use_white = ScalableBitmap(this, "backup_current_use1",8);
|
||||
backup_current_use_black = ScalableBitmap(this, "backup_current_use2", 8);
|
||||
bitmap_backup_tips_0 = ScalableBitmap(this, "backup_tips_img", 90);
|
||||
bitmap_editable = ScalableBitmap(this, "ams_editable", 14);
|
||||
bitmap_bg = ScalableBitmap(this, "back_up_ts_bk", 162);
|
||||
bitmap_editable_light = ScalableBitmap(this, "ams_editable_light", 14);
|
||||
|
||||
|
||||
SetSize(wxSize(FromDIP(16), FromDIP(32)));
|
||||
SetMinSize(wxSize(FromDIP(16), FromDIP(32)));
|
||||
SetMaxSize(wxSize(FromDIP(16), FromDIP(32)));
|
||||
Bind(wxEVT_PAINT, &AmsRMGroup::paintEvent, this);
|
||||
Bind(wxEVT_LEFT_DOWN, &AmsRMGroup::on_mouse_move, this);
|
||||
}
|
||||
|
||||
void AmsRMArrow::paintEvent(wxPaintEvent& evt)
|
||||
double AmsRMGroup::GetAngle(wxPoint pointA, wxPoint pointB)
|
||||
{
|
||||
double deltaX = pointA.x - pointB.x;
|
||||
double deltaY = pointA.y - pointB.y;
|
||||
double angle = atan2(deltaY, deltaX);
|
||||
|
||||
angle = angle * 180.0 / M_PI;
|
||||
|
||||
if (angle < 0)
|
||||
angle += 360.0;
|
||||
|
||||
return angle;
|
||||
}
|
||||
|
||||
void AmsRMGroup::on_mouse_move(wxMouseEvent& evt)
|
||||
{
|
||||
wxSize size = GetSize();
|
||||
auto mouseX = evt.GetPosition().x;
|
||||
auto mouseY = evt.GetPosition().y;
|
||||
|
||||
auto click_angle = 360.0 - GetAngle(wxPoint(mouseX,mouseY), wxPoint(size.x / 2, size.x / 2));
|
||||
|
||||
|
||||
float ev_angle = 360.0 / m_group_info.size();
|
||||
float startAngle = 0.0;
|
||||
float endAngle = 0.0;
|
||||
|
||||
for (auto iter = m_group_info.rbegin(); iter != m_group_info.rend(); ++iter) {
|
||||
std::string tray_name = iter->first;
|
||||
wxColour tray_color = iter->second;
|
||||
|
||||
int x = size.x / 2;
|
||||
int y = size.y / 2;
|
||||
int radius = size.x / 2;
|
||||
endAngle += ev_angle;
|
||||
|
||||
if (click_angle >= startAngle && click_angle < endAngle) {
|
||||
//to do
|
||||
set_index(tray_name);
|
||||
Refresh();
|
||||
return;
|
||||
}
|
||||
|
||||
startAngle += ev_angle;
|
||||
}
|
||||
|
||||
evt.Skip();
|
||||
}
|
||||
|
||||
void AmsRMGroup::paintEvent(wxPaintEvent& evt)
|
||||
{
|
||||
wxPaintDC dc(this);
|
||||
render(dc);
|
||||
}
|
||||
|
||||
void AmsRMArrow::render(wxDC& dc)
|
||||
void AmsRMGroup::render(wxDC& dc)
|
||||
{
|
||||
#ifdef __WXMSW__
|
||||
wxSize size = GetSize();
|
||||
|
@ -1487,17 +1405,121 @@ void AmsRMArrow::render(wxDC& dc)
|
|||
#endif
|
||||
}
|
||||
|
||||
void AmsRMArrow::doRender(wxDC& dc)
|
||||
wxPoint AmsRMGroup::CalculateEndpoint(const wxPoint& startPoint, int angle, int length)
|
||||
{
|
||||
int endX = startPoint.x + length * cos(angle * M_PI / 180);
|
||||
int endY = startPoint.y + length * sin(angle * M_PI / 180);
|
||||
return wxPoint(endX, endY);
|
||||
}
|
||||
|
||||
void AmsRMGroup::doRender(wxDC& dc)
|
||||
{
|
||||
wxSize size = GetSize();
|
||||
|
||||
float center_mask_radius = FromDIP(52);
|
||||
float selected_radius = FromDIP(53);
|
||||
|
||||
dc.SetPen(wxPen(wxColour(0, 174, 66)));
|
||||
dc.SetBrush(*wxTRANSPARENT_BRUSH);
|
||||
float ev_angle = 360.0 / m_group_info.size();
|
||||
float startAngle = 0.0;
|
||||
float endAngle = 0.0;
|
||||
|
||||
dc.DrawBitmap(bitmap_bg.bmp(), wxPoint((size.x - bitmap_bg.GetBmpSize().x) / 2, (size.y - bitmap_bg.GetBmpSize().y) / 2));
|
||||
|
||||
dc.SetPen(wxPen(wxColour(0xACACAC)));
|
||||
dc.SetBrush(wxBrush(wxColour(0xACACAC)));
|
||||
dc.DrawCircle(size.x / 2, size.y / 2, FromDIP(7));
|
||||
for (auto iter = m_group_info.rbegin(); iter != m_group_info.rend(); ++iter) {
|
||||
std::string tray_name = iter->first;
|
||||
wxColour tray_color = iter->second;
|
||||
|
||||
dc.SetPen(*wxTRANSPARENT_PEN);
|
||||
|
||||
if (tray_color == *wxWHITE) dc.SetPen(wxPen(wxColour(0xEEEEEE), 2));
|
||||
dc.SetBrush(wxBrush(tray_color));
|
||||
|
||||
int x = size.x / 2;
|
||||
int y = size.y / 2;
|
||||
int radius = size.x / 2 - FromDIP(2);
|
||||
endAngle += ev_angle;
|
||||
|
||||
|
||||
//draw body
|
||||
if (tray_color.Alpha() != 0) {
|
||||
dc.DrawEllipticArc(x - radius, y - radius, radius * 2, radius * 2, startAngle, endAngle);
|
||||
if (tray_color == *wxWHITE) dc.DrawEllipticArc(x - center_mask_radius, y - center_mask_radius, center_mask_radius * 2, center_mask_radius * 2, startAngle, endAngle);
|
||||
}
|
||||
|
||||
//draw selected
|
||||
if (!m_selected_index.empty() && m_selected_index == tray_name) {
|
||||
dc.SetPen(wxPen(0xCECECE, 2));
|
||||
dc.SetBrush(*wxTRANSPARENT_BRUSH);
|
||||
dc.DrawEllipticArc(x - radius, y - radius, radius * 2, radius * 2, startAngle, endAngle);
|
||||
dc.DrawEllipticArc(x - selected_radius, y - selected_radius,selected_radius * 2, selected_radius * 2, startAngle, endAngle);
|
||||
}
|
||||
|
||||
//...
|
||||
startAngle += ev_angle;
|
||||
}
|
||||
|
||||
//draw text
|
||||
startAngle = 0.0;
|
||||
endAngle = 0.0;
|
||||
for (auto iter = m_group_info.rbegin(); iter != m_group_info.rend(); ++iter) {
|
||||
std::string tray_name = iter->first;
|
||||
wxColour tray_color = iter->second;
|
||||
|
||||
int x = size.x / 2;
|
||||
int y = size.y / 2;
|
||||
float radius = size.x / 2 - 15.0;
|
||||
endAngle += ev_angle;
|
||||
|
||||
float midAngle = (startAngle + endAngle) / 2;
|
||||
float x_center = size.x / 2 + radius * cos(midAngle * M_PI / 180.0);
|
||||
float y_center = size.y / 2 + radius * sin(midAngle * M_PI / 180.0);
|
||||
|
||||
//draw tray
|
||||
dc.SetFont(::Label::Body_12);
|
||||
auto text_size = dc.GetTextExtent(tray_name);
|
||||
dc.SetTextForeground(tray_color.GetLuminance() < 0.5 ? *wxWHITE : wxColour(0x262E30));
|
||||
dc.DrawText(tray_name, x_center - text_size.x / 2, size.y - y_center - text_size.y / 2);
|
||||
|
||||
//draw split line
|
||||
dc.SetPen(wxPen(*wxWHITE, 2));
|
||||
dc.SetBrush(*wxTRANSPARENT_BRUSH);
|
||||
auto pos_sp_start = CalculateEndpoint(wxPoint(x, y), (360 - startAngle), size.x / 2 - FromDIP(3));
|
||||
dc.DrawLine(wxPoint(x, y), pos_sp_start);
|
||||
|
||||
//draw current
|
||||
//dc.DrawBitmap(backup_current_use_white.bmp(), x_center - text_size.x / 2 + FromDIP(3), size.y - y_center - text_size.y / 2 + FromDIP(11));
|
||||
//...
|
||||
startAngle += ev_angle;
|
||||
}
|
||||
|
||||
//draw center mask
|
||||
dc.SetPen(*wxTRANSPARENT_PEN);
|
||||
dc.SetBrush(wxBrush(*wxWHITE));
|
||||
|
||||
int x = size.x / 2;
|
||||
int y = size.y / 2;
|
||||
dc.DrawEllipticArc(x - center_mask_radius, y - center_mask_radius, center_mask_radius * 2, center_mask_radius * 2, 0, 360);
|
||||
|
||||
//draw center icon
|
||||
dc.DrawBitmap(bitmap_backup_tips_0.bmp(), wxPoint((size.x - bitmap_backup_tips_0.GetBmpSize().x) / 2, (size.y - bitmap_backup_tips_0.GetBmpSize().y) / 2));
|
||||
//dc.DrawBitmap(bitmap_backup_tips_1.bmp(), wxPoint((size.x - bitmap_backup_tips_1.GetBmpSize().x) / 2, (size.y - bitmap_backup_tips_1.GetBmpSize().y) / 2));
|
||||
|
||||
//draw material
|
||||
dc.SetTextForeground(wxColour(0x323A3D));
|
||||
dc.SetFont(Label::Head_15);
|
||||
auto text_size = dc.GetTextExtent(m_material_name);
|
||||
dc.DrawText(m_material_name, (size.x - text_size.x) / 2,(size.y - text_size.y) / 2 - FromDIP(12));
|
||||
|
||||
dc.SetFont(Label::Body_13);
|
||||
text_size = dc.GetTextExtent(m_group_index);
|
||||
dc.DrawText(m_group_index, (size.x - text_size.x) / 2, (size.y - text_size.y) / 2 + FromDIP(10));
|
||||
|
||||
/* if (wxGetApp().dark_mode()) {
|
||||
dc.DrawBitmap(bitmap_editable_light.bmp(), wxPoint((size.x - bitmap_editable_light.GetBmpSize().x) / 2, (size.y - bitmap_editable_light.GetBmpSize().y) / 2 + FromDIP(15)));
|
||||
}
|
||||
else {
|
||||
dc.DrawBitmap(bitmap_editable.bmp(), wxPoint((size.x - bitmap_editable_light.GetBmpSize().x) / 2, (size.y - bitmap_editable_light.GetBmpSize().y) / 2 + FromDIP(15)));
|
||||
}*/
|
||||
}
|
||||
|
||||
}} // namespace Slic3r::GUI
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue