mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-10-21 07:41:09 -06:00
Merge branch 'feature/calib_pa' into SoftFever
This commit is contained in:
commit
473b1805ed
73 changed files with 1776 additions and 668 deletions
|
@ -64,7 +64,7 @@ void AMSMaterialsSetting::create()
|
|||
m_clrData->SetChooseFull(true);
|
||||
m_clrData->SetChooseAlpha(false);
|
||||
|
||||
m_clr_picker = new Button(this, wxEmptyString, wxEmptyString, wxBU_AUTODRAW);
|
||||
m_clr_picker = new Button(this, "", "");
|
||||
m_clr_picker->SetCanFocus(false);
|
||||
m_clr_picker->SetSize(FromDIP(50), FromDIP(25));
|
||||
m_clr_picker->SetMinSize(wxSize(FromDIP(50), FromDIP(25)));
|
||||
|
@ -364,12 +364,7 @@ void AMSMaterialsSetting::on_clr_picker(wxCommandEvent & event)
|
|||
show_flag = true;
|
||||
if (clr_dialog->ShowModal() == wxID_OK) {
|
||||
m_clrData = &(clr_dialog->GetColourData());
|
||||
m_clr_picker->SetBackgroundColor(wxColour(
|
||||
m_clrData->GetColour().Red(),
|
||||
m_clrData->GetColour().Green(),
|
||||
m_clrData->GetColour().Blue(),
|
||||
254
|
||||
));
|
||||
m_clr_picker->SetBackgroundColor(m_clrData->GetColour());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -379,19 +374,13 @@ bool AMSMaterialsSetting::Show(bool show)
|
|||
m_button_confirm->SetMinSize(AMS_MATERIALS_SETTING_BUTTON_SIZE);
|
||||
m_input_nozzle_max->GetTextCtrl()->SetSize(wxSize(-1, FromDIP(20)));
|
||||
m_input_nozzle_min->GetTextCtrl()->SetSize(wxSize(-1, FromDIP(20)));
|
||||
m_clr_picker->SetBackgroundColour(m_clr_picker->GetParent()->GetBackgroundColour());
|
||||
}
|
||||
return DPIDialog::Show(show);
|
||||
}
|
||||
|
||||
void AMSMaterialsSetting::Popup(wxString filament, wxString sn, wxString temp_min, wxString temp_max)
|
||||
{
|
||||
m_clr_picker->SetBackgroundColor(wxColour(
|
||||
m_clrData->GetColour().Red(),
|
||||
m_clrData->GetColour().Green(),
|
||||
m_clrData->GetColour().Blue(),
|
||||
254
|
||||
));
|
||||
m_clr_picker->SetBackgroundColor(m_clrData->GetColour());
|
||||
|
||||
if (!m_is_third) {
|
||||
m_button_confirm->Hide();
|
||||
|
|
|
@ -83,7 +83,7 @@ protected:
|
|||
Button * m_button_confirm;
|
||||
wxStaticText* m_tip_readonly;
|
||||
Button * m_button_close;
|
||||
Button * m_clr_picker;
|
||||
Button * m_clr_picker;
|
||||
wxColourData * m_clrData;
|
||||
#ifdef __APPLE__
|
||||
wxComboBox *m_comboBox_filament_mac;
|
||||
|
|
|
@ -200,11 +200,6 @@ void AMSSetting::create()
|
|||
m_panel_img->Layout();
|
||||
m_sizer_img->Fit(m_panel_img);
|
||||
|
||||
m_sizer_remain_block = new wxBoxSizer(wxVERTICAL);
|
||||
m_sizer_remain_block->Add(m_sizer_remain, 0, wxEXPAND | wxTOP, FromDIP(8));
|
||||
m_sizer_remain_block->Add(0, 0, 0, wxTOP, 8);
|
||||
m_sizer_remain_block->Add(m_sizer_remain_tip, 0, wxLEFT, 18);
|
||||
m_sizer_remain_block->Add(0, 0, 0, wxTOP, 15);
|
||||
|
||||
m_sizerl_body->Add(m_sizer_Insert_material, 0, wxEXPAND, 0);
|
||||
m_sizerl_body->Add(0, 0, 0, wxTOP, 8);
|
||||
|
@ -214,7 +209,10 @@ void AMSSetting::create()
|
|||
m_sizerl_body->Add(0, 0, 0, wxTOP, 8);
|
||||
m_sizerl_body->Add(m_sizer_starting_tip, 0, wxLEFT, 18);
|
||||
m_sizerl_body->Add(0, 0, 0, wxTOP, 15);
|
||||
m_sizerl_body->Add(m_sizer_remain_block, 0, wxEXPAND, 0);
|
||||
m_sizerl_body->Add(m_sizer_remain, 0, wxEXPAND | wxTOP, FromDIP(8));
|
||||
m_sizerl_body->Add(0, 0, 0, wxTOP, 8);
|
||||
m_sizerl_body->Add(m_sizer_remain_tip, 0, wxLEFT, 18);
|
||||
m_sizerl_body->Add(0, 0, 0, wxTOP, 15);
|
||||
m_sizerl_body->Add(m_sizer_switch_filament, 0, wxEXPAND | wxTOP, FromDIP(8));
|
||||
m_sizerl_body->Add(0, 0, 0, wxTOP, 8);
|
||||
m_sizerl_body->Add(m_sizer_switch_filament_tip, 0, wxLEFT, 18);
|
||||
|
@ -233,17 +231,6 @@ void AMSSetting::create()
|
|||
|
||||
this->Centre(wxBOTH);
|
||||
wxGetApp().UpdateDlgDarkUI(this);
|
||||
|
||||
Bind(wxEVT_SHOW, [this](auto& e) {
|
||||
if (this->IsShown()) {
|
||||
if (ams_support_remain) {
|
||||
m_sizer_remain_block->Show(true);
|
||||
}
|
||||
else {
|
||||
m_sizer_remain_block->Show(false);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void AMSSetting::update_insert_material_read_mode(bool selected)
|
||||
|
|
|
@ -39,7 +39,6 @@ public:
|
|||
wxString append_title(wxString text);
|
||||
wxStaticText *append_text(wxString text);
|
||||
MachineObject *obj{nullptr};
|
||||
bool ams_support_remain{false};
|
||||
int ams_id { 0 };
|
||||
|
||||
protected:
|
||||
|
@ -73,7 +72,6 @@ protected:
|
|||
wxBoxSizer *m_sizer_starting_tip_inline;
|
||||
wxBoxSizer *m_sizer_remain_inline;
|
||||
wxBoxSizer *m_sizer_switch_filament_inline;
|
||||
wxBoxSizer *m_sizer_remain_block;
|
||||
};
|
||||
|
||||
}} // namespace Slic3r::GUI
|
||||
|
|
|
@ -456,9 +456,7 @@ void AuFile::on_set_cover()
|
|||
{
|
||||
if (wxGetApp().plater()->model().model_info == nullptr) { wxGetApp().plater()->model().model_info = std::make_shared<ModelInfo>(); }
|
||||
|
||||
fs::path path(into_path(m_file_name));
|
||||
wxGetApp().plater()->model().model_info->cover_file = path.string();
|
||||
//wxGetApp().plater()->model().model_info->cover_file = m_file_name.ToStdString();
|
||||
wxGetApp().plater()->model().model_info->cover_file = m_file_name.ToStdString();
|
||||
|
||||
auto full_path = m_file_path.branch_path();
|
||||
auto full_root_path = full_path.branch_path();
|
||||
|
@ -698,8 +696,7 @@ void AuFolderPanel::update_cover()
|
|||
if (wxGetApp().plater()->model().model_info != nullptr) {
|
||||
for (auto i = 0; i < m_aufiles_list.GetCount(); i++) {
|
||||
AuFiles *aufile = m_aufiles_list[i];
|
||||
|
||||
if (wxString::FromUTF8(wxGetApp().plater()->model().model_info->cover_file) == aufile->file->m_file_name) {
|
||||
if (wxGetApp().plater()->model().model_info->cover_file == aufile->file->m_file_name) {
|
||||
aufile->file->set_cover(true);
|
||||
} else {
|
||||
aufile->file->set_cover(false);
|
||||
|
|
|
@ -24,6 +24,7 @@ enum CUSTOM_ID
|
|||
ID_TITLE,
|
||||
ID_MODEL_STORE,
|
||||
ID_PUBLISH,
|
||||
ID_CALIB,
|
||||
ID_TOOL_BAR = 3200,
|
||||
ID_AMS_NOTEBOOK,
|
||||
};
|
||||
|
@ -194,7 +195,7 @@ void BBLTopbar::Init(wxFrame* parent)
|
|||
m_frame = parent;
|
||||
m_skip_popup_file_menu = false;
|
||||
m_skip_popup_dropdown_menu = false;
|
||||
|
||||
m_skip_popup_calib_menu = false;
|
||||
wxInitAllImageHandlers();
|
||||
|
||||
this->AddSpacer(5);
|
||||
|
@ -241,6 +242,13 @@ void BBLTopbar::Init(wxFrame* parent)
|
|||
wxBitmap redo_inactive_bitmap = create_scaled_bitmap("topbar_redo_inactive", nullptr, TOPBAR_ICON_SIZE);
|
||||
m_redo_item->SetDisabledBitmap(redo_inactive_bitmap);
|
||||
|
||||
this->AddSpacer(FromDIP(10));
|
||||
|
||||
wxBitmap calib_bitmap = create_scaled_bitmap("calib_sf", nullptr, TOPBAR_ICON_SIZE);
|
||||
wxBitmap calib_bitmap_inactive = create_scaled_bitmap("calib_sf_inactive", nullptr, TOPBAR_ICON_SIZE);
|
||||
m_calib_item = this->AddTool(ID_CALIB, "Calibration", calib_bitmap);
|
||||
m_calib_item->SetDisabledBitmap(calib_bitmap_inactive);
|
||||
|
||||
this->AddSpacer(FromDIP(10));
|
||||
this->AddStretchSpacer(1);
|
||||
|
||||
|
@ -298,6 +306,7 @@ void BBLTopbar::Init(wxFrame* parent)
|
|||
this->Bind(wxEVT_MENU_CLOSE, &BBLTopbar::OnMenuClose, this);
|
||||
this->Bind(wxEVT_AUITOOLBAR_TOOL_DROPDOWN, &BBLTopbar::OnFileToolItem, this, ID_TOP_FILE_MENU);
|
||||
this->Bind(wxEVT_AUITOOLBAR_TOOL_DROPDOWN, &BBLTopbar::OnDropdownToolItem, this, ID_TOP_DROPDOWN_MENU);
|
||||
this->Bind(wxEVT_AUITOOLBAR_TOOL_DROPDOWN, &BBLTopbar::OnCalibToolItem, this, ID_CALIB);
|
||||
this->Bind(wxEVT_AUITOOLBAR_TOOL_DROPDOWN, &BBLTopbar::OnIconize, this, wxID_ICONIZE_FRAME);
|
||||
this->Bind(wxEVT_AUITOOLBAR_TOOL_DROPDOWN, &BBLTopbar::OnFullScreen, this, wxID_MAXIMIZE_FRAME);
|
||||
this->Bind(wxEVT_AUITOOLBAR_TOOL_DROPDOWN, &BBLTopbar::OnCloseFrame, this, wxID_CLOSE_FRAME);
|
||||
|
@ -353,17 +362,19 @@ void BBLTopbar::OnRedo(wxAuiToolBarEvent& event)
|
|||
plater->redo();
|
||||
}
|
||||
|
||||
void BBLTopbar::EnableUndoRedoItems()
|
||||
void BBLTopbar::Enable3DEditorItems()
|
||||
{
|
||||
this->EnableTool(m_undo_item->GetId(), true);
|
||||
this->EnableTool(m_redo_item->GetId(), true);
|
||||
this->EnableTool(m_calib_item->GetId(), true);
|
||||
Refresh();
|
||||
}
|
||||
|
||||
void BBLTopbar::DisableUndoRedoItems()
|
||||
void BBLTopbar::Disable3DEditorItems()
|
||||
{
|
||||
this->EnableTool(m_undo_item->GetId(), false);
|
||||
this->EnableTool(m_redo_item->GetId(), false);
|
||||
this->EnableTool(m_calib_item->GetId(), false);
|
||||
Refresh();
|
||||
}
|
||||
|
||||
|
@ -416,6 +427,11 @@ wxMenu* BBLTopbar::GetTopMenu()
|
|||
return &m_top_menu;
|
||||
}
|
||||
|
||||
wxMenu* BBLTopbar::GetCalibMenu()
|
||||
{
|
||||
return &m_calib_menu;
|
||||
}
|
||||
|
||||
void BBLTopbar::SetTitle(wxString title)
|
||||
{
|
||||
wxGCDC dc(this);
|
||||
|
@ -468,6 +484,9 @@ void BBLTopbar::Rescale() {
|
|||
item->SetBitmap(create_scaled_bitmap("topbar_redo", this, TOPBAR_ICON_SIZE));
|
||||
item->SetDisabledBitmap(create_scaled_bitmap("topbar_redo_inactive", nullptr, TOPBAR_ICON_SIZE));
|
||||
|
||||
item = this->FindTool(ID_CALIB);
|
||||
item->SetBitmap(create_scaled_bitmap("ams_readonly", this, TOPBAR_ICON_SIZE));
|
||||
|
||||
item = this->FindTool(ID_TITLE);
|
||||
|
||||
/*item = this->FindTool(ID_PUBLISH);
|
||||
|
@ -581,6 +600,24 @@ void BBLTopbar::OnDropdownToolItem(wxAuiToolBarEvent& evt)
|
|||
tb->SetToolSticky(evt.GetId(), false);
|
||||
}
|
||||
|
||||
void BBLTopbar::OnCalibToolItem(wxAuiToolBarEvent& evt)
|
||||
{
|
||||
wxAuiToolBar* tb = static_cast<wxAuiToolBar*>(evt.GetEventObject());
|
||||
|
||||
tb->SetToolSticky(evt.GetId(), true);
|
||||
|
||||
if (!m_skip_popup_calib_menu) {
|
||||
auto rec = this->GetToolRect(ID_CALIB);
|
||||
PopupMenu(&m_calib_menu, wxPoint(rec.GetLeft(), this->GetSize().GetHeight() - 2));
|
||||
}
|
||||
else {
|
||||
m_skip_popup_calib_menu = false;
|
||||
}
|
||||
|
||||
// make sure the button is "un-stuck"
|
||||
tb->SetToolSticky(evt.GetId(), false);
|
||||
}
|
||||
|
||||
void BBLTopbar::OnMouseLeftDown(wxMouseEvent& event)
|
||||
{
|
||||
wxPoint mouse_pos = ::wxGetMousePosition();
|
||||
|
|
|
@ -24,6 +24,7 @@ public:
|
|||
void OnCloseFrame(wxAuiToolBarEvent& event);
|
||||
void OnFileToolItem(wxAuiToolBarEvent& evt);
|
||||
void OnDropdownToolItem(wxAuiToolBarEvent& evt);
|
||||
void OnCalibToolItem(wxAuiToolBarEvent& evt);
|
||||
void OnMouseLeftDClock(wxMouseEvent& mouse);
|
||||
void OnMouseLeftDown(wxMouseEvent& event);
|
||||
void OnMouseLeftUp(wxMouseEvent& event);
|
||||
|
@ -42,13 +43,14 @@ public:
|
|||
void SetFileMenu(wxMenu* file_menu);
|
||||
void AddDropDownSubMenu(wxMenu* sub_menu, const wxString& title);
|
||||
void AddDropDownMenuItem(wxMenuItem* menu_item);
|
||||
wxMenu *GetTopMenu();
|
||||
wxMenu* GetTopMenu();
|
||||
wxMenu *GetCalibMenu();
|
||||
void SetTitle(wxString title);
|
||||
void SetMaximizedSize();
|
||||
void SetWindowSize();
|
||||
|
||||
void EnableUndoRedoItems();
|
||||
void DisableUndoRedoItems();
|
||||
void Enable3DEditorItems();
|
||||
void Disable3DEditorItems();
|
||||
|
||||
void SaveNormalRect();
|
||||
|
||||
|
@ -60,6 +62,7 @@ private:
|
|||
wxPoint m_delta;
|
||||
wxMenu m_top_menu;
|
||||
wxMenu* m_file_menu;
|
||||
wxMenu m_calib_menu;
|
||||
wxAuiToolBarItem* m_title_item;
|
||||
wxAuiToolBarItem* m_account_item;
|
||||
wxAuiToolBarItem* m_model_store_item;
|
||||
|
@ -67,6 +70,7 @@ private:
|
|||
wxAuiToolBarItem *m_publish_item;
|
||||
wxAuiToolBarItem* m_undo_item;
|
||||
wxAuiToolBarItem* m_redo_item;
|
||||
wxAuiToolBarItem* m_calib_item;
|
||||
wxAuiToolBarItem* maximize_btn;
|
||||
|
||||
wxBitmap m_publish_bitmap;
|
||||
|
@ -78,4 +82,5 @@ private:
|
|||
int m_toolbar_h;
|
||||
bool m_skip_popup_file_menu;
|
||||
bool m_skip_popup_dropdown_menu;
|
||||
bool m_skip_popup_calib_menu;
|
||||
};
|
||||
|
|
|
@ -120,6 +120,7 @@ public:
|
|||
// Get the current print. It is either m_fff_print or m_sla_print.
|
||||
const PrintBase* current_print() const { return m_print; }
|
||||
const Print* fff_print() const { return m_fff_print; }
|
||||
Print* fff_print() { return m_fff_print; }
|
||||
const SLAPrint* sla_print() const { return m_sla_print; }
|
||||
// Take the project path (if provided), extract the name of the project, run it through the macro processor and save it next to the project file.
|
||||
// If the project_path is empty, just run output_filepath().
|
||||
|
|
|
@ -271,7 +271,6 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con
|
|||
}
|
||||
|
||||
double sparse_infill_density = config->option<ConfigOptionPercent>("sparse_infill_density")->value;
|
||||
auto timelapse_type = config->opt_enum<TimelapseType>("timelapse_type");
|
||||
|
||||
if (config->opt_bool("spiral_mode") &&
|
||||
! (config->opt_int("wall_loops") == 1 &&
|
||||
|
@ -280,12 +279,12 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con
|
|||
! config->opt_bool("enable_support") &&
|
||||
config->opt_int("enforce_support_layers") == 0 &&
|
||||
config->opt_bool("ensure_vertical_shell_thickness") &&
|
||||
! config->opt_bool("detect_thin_wall") &&
|
||||
config->opt_enum<TimelapseType>("timelapse_type") == TimelapseType::tlTraditional))
|
||||
! config->opt_bool("detect_thin_wall")))
|
||||
{
|
||||
wxString msg_text = _(L("Spiral mode only works when wall loops is 1, support is disabled, top shell layers is 0, sparse infill density is 0 and timelapse type is traditional"));
|
||||
wxString msg_text = _(L("Spiral mode only works when wall loops is 1, \n"
|
||||
"support is disabled, top shell layers is 0 and sparse infill density is 0\n"));
|
||||
if (is_global_config)
|
||||
msg_text += "\n\n" + _(L("Change these settings automatically? \n"
|
||||
msg_text += "\n" + _(L("Change these settings automatically? \n"
|
||||
"Yes - Change these settings and enable spiral mode automatically\n"
|
||||
"No - Give up using spiral mode this time"));
|
||||
MessageDialog dialog(m_msg_dlg_parent, msg_text, "",
|
||||
|
@ -302,9 +301,7 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con
|
|||
new_conf.set_key_value("enforce_support_layers", new ConfigOptionInt(0));
|
||||
new_conf.set_key_value("ensure_vertical_shell_thickness", new ConfigOptionBool(true));
|
||||
new_conf.set_key_value("detect_thin_wall", new ConfigOptionBool(false));
|
||||
new_conf.set_key_value("timelapse_type", new ConfigOptionEnum<TimelapseType>(tlTraditional));
|
||||
sparse_infill_density = 0;
|
||||
timelapse_type = TimelapseType::tlTraditional;
|
||||
support = false;
|
||||
}
|
||||
else {
|
||||
|
@ -313,7 +310,6 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con
|
|||
apply(config, &new_conf);
|
||||
if (cb_value_change) {
|
||||
cb_value_change("sparse_infill_density", sparse_infill_density);
|
||||
cb_value_change("timelapse_type", timelapse_type);
|
||||
if (!support)
|
||||
cb_value_change("enable_support", false);
|
||||
}
|
||||
|
|
|
@ -1259,29 +1259,6 @@ bool MachineObject::is_recording()
|
|||
return camera_recording;
|
||||
}
|
||||
|
||||
void MachineObject::parse_version_func()
|
||||
{
|
||||
auto ota_version = module_vers.find("ota");
|
||||
if (printer_type == "BL-P001" ||
|
||||
printer_type == "BL-P002") {
|
||||
if (ota_version != module_vers.end()) {
|
||||
if (ota_version->second.sw_ver.compare("01.01.01.00") <= 0) {
|
||||
ams_support_remain = false;
|
||||
ams_support_auto_switch_filament_flag = false;
|
||||
is_xcam_buildplate_supported = false;
|
||||
xcam_support_recovery_step_loss = false;
|
||||
is_support_send_to_sdcard = false;
|
||||
} else {
|
||||
ams_support_remain = true;
|
||||
ams_support_auto_switch_filament_flag = true;
|
||||
is_xcam_buildplate_supported = true;
|
||||
xcam_support_recovery_step_loss = true;
|
||||
is_support_send_to_sdcard = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int MachineObject::command_get_version(bool with_retry)
|
||||
{
|
||||
BOOST_LOG_TRIVIAL(info) << "command_get_version";
|
||||
|
@ -2013,15 +1990,9 @@ bool MachineObject::is_function_supported(PrinterFunction func)
|
|||
func_name = "FUNC_AI_MONITORING";
|
||||
break;
|
||||
case FUNC_BUILDPLATE_MARKER_DETECT:
|
||||
parse_version_func();
|
||||
if (!is_xcam_buildplate_supported)
|
||||
return false;
|
||||
func_name = "FUNC_BUILDPLATE_MARKER_DETECT";
|
||||
break;
|
||||
case FUNC_AUTO_RECOVERY_STEP_LOSS:
|
||||
parse_version_func();
|
||||
if (!xcam_support_recovery_step_loss)
|
||||
return false;
|
||||
func_name = "FUNC_AUTO_RECOVERY_STEP_LOSS";
|
||||
break;
|
||||
case FUNC_FLOW_CALIBRATION:
|
||||
|
@ -2055,15 +2026,9 @@ bool MachineObject::is_function_supported(PrinterFunction func)
|
|||
func_name = "FUNC_ALTER_RESOLUTION";
|
||||
break;
|
||||
case FUNC_SEND_TO_SDCARD:
|
||||
parse_version_func();
|
||||
if (!is_support_send_to_sdcard)
|
||||
return false;
|
||||
func_name = "FUNC_SEND_TO_SDCARD";
|
||||
break;
|
||||
case FUNC_AUTO_SWITCH_FILAMENT:
|
||||
parse_version_func();
|
||||
if (!ams_support_auto_switch_filament_flag)
|
||||
return false;
|
||||
func_name = "FUNC_AUTO_SWITCH_FILAMENT";
|
||||
break;
|
||||
case FUNC_VIRTUAL_CAMERA:
|
||||
|
@ -2650,9 +2615,6 @@ int MachineObject::parse_json(std::string payload)
|
|||
else {
|
||||
if (jj["xcam"].contains("buildplate_marker_detector")) {
|
||||
xcam_buildplate_marker_detector = jj["xcam"]["buildplate_marker_detector"].get<bool>();
|
||||
is_xcam_buildplate_supported = true;
|
||||
} else {
|
||||
is_xcam_buildplate_supported = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2912,8 +2874,6 @@ int MachineObject::parse_json(std::string payload)
|
|||
}
|
||||
if (tray_it->contains("remain")) {
|
||||
curr_tray->remain = (*tray_it)["remain"].get<int>();
|
||||
} else {
|
||||
curr_tray->remain = -1;
|
||||
}
|
||||
try {
|
||||
if (!ams_id.empty() && !curr_tray->id.empty()) {
|
||||
|
@ -3061,7 +3021,6 @@ int MachineObject::parse_json(std::string payload)
|
|||
ver_info.hw_ver = (*it)["hw_ver"].get<std::string>();
|
||||
module_vers.emplace(ver_info.name, ver_info);
|
||||
}
|
||||
parse_version_func();
|
||||
bool get_version_result = true;
|
||||
if (j["info"].contains("result"))
|
||||
if (j["info"]["result"].get<std::string>() == "fail")
|
||||
|
|
|
@ -423,10 +423,8 @@ public:
|
|||
bool ams_insert_flag { false };
|
||||
bool ams_power_on_flag { false };
|
||||
bool ams_calibrate_remain_flag { false };
|
||||
bool ams_support_auto_switch_filament_flag { true };
|
||||
bool ams_auto_switch_filament_flag { false };
|
||||
bool ams_support_use_ams { false };
|
||||
bool ams_support_remain { true };
|
||||
int ams_humidity;
|
||||
int ams_user_setting_hold_count = 0;
|
||||
AmsStatusMain ams_status_main;
|
||||
|
@ -581,10 +579,8 @@ public:
|
|||
bool xcam_ai_monitoring{ false };
|
||||
int xcam_ai_monitoring_hold_count = 0;
|
||||
std::string xcam_ai_monitoring_sensitivity;
|
||||
bool is_xcam_buildplate_supported { true };
|
||||
bool xcam_buildplate_marker_detector{ false };
|
||||
int xcam_buildplate_marker_hold_count = 0;
|
||||
bool xcam_support_recovery_step_loss { true };
|
||||
bool xcam_auto_recovery_step_loss{ false };
|
||||
int xcam_auto_recovery_hold_count = 0;
|
||||
int ams_print_option_count = 0;
|
||||
|
@ -592,7 +588,6 @@ public:
|
|||
/* sdcard */
|
||||
MachineObject::SdcardState sdcard_state { NO_SDCARD };
|
||||
MachineObject::SdcardState get_sdcard_state();
|
||||
bool is_support_send_to_sdcard { true };
|
||||
|
||||
/* HMS */
|
||||
std::vector<HMSItem> hms_list;
|
||||
|
@ -627,8 +622,6 @@ public:
|
|||
|
||||
MachineObject(NetworkAgent* agent, std::string name, std::string id, std::string ip);
|
||||
~MachineObject();
|
||||
|
||||
void parse_version_func();
|
||||
/* command commands */
|
||||
int command_get_version(bool with_retry = true);
|
||||
int command_request_push_all();
|
||||
|
|
|
@ -32,6 +32,7 @@ wxDEFINE_EVENT(EVT_GLTOOLBAR_PRINT_SELECT, SimpleEvent);
|
|||
wxDEFINE_EVENT(EVT_GLTOOLBAR_SEND_TO_PRINTER, SimpleEvent);
|
||||
wxDEFINE_EVENT(EVT_GLTOOLBAR_SEND_TO_PRINTER_ALL, SimpleEvent);
|
||||
|
||||
|
||||
wxDEFINE_EVENT(EVT_GLTOOLBAR_ADD, SimpleEvent);
|
||||
wxDEFINE_EVENT(EVT_GLTOOLBAR_DELETE, SimpleEvent);
|
||||
wxDEFINE_EVENT(EVT_GLTOOLBAR_DELETE_ALL, SimpleEvent);
|
||||
|
|
|
@ -32,6 +32,7 @@ wxDECLARE_EVENT(EVT_GLTOOLBAR_PRINT_SELECT, SimpleEvent);
|
|||
wxDECLARE_EVENT(EVT_GLTOOLBAR_SEND_TO_PRINTER, SimpleEvent);
|
||||
wxDECLARE_EVENT(EVT_GLTOOLBAR_SEND_TO_PRINTER_ALL, SimpleEvent);
|
||||
|
||||
|
||||
wxDECLARE_EVENT(EVT_GLTOOLBAR_ADD, SimpleEvent);
|
||||
wxDECLARE_EVENT(EVT_GLTOOLBAR_DELETE, SimpleEvent);
|
||||
wxDECLARE_EVENT(EVT_GLTOOLBAR_DELETE_ALL, SimpleEvent);
|
||||
|
|
|
@ -728,7 +728,7 @@ static const FileWildcards file_wildcards_by_type[FT_SIZE] = {
|
|||
/* FT_OBJ */ { "OBJ files"sv, { ".obj"sv } },
|
||||
/* FT_AMF */ { "AMF files"sv, { ".amf"sv, ".zip.amf"sv, ".xml"sv } },
|
||||
/* FT_3MF */ { "3MF files"sv, { ".3mf"sv } },
|
||||
/* FT_GCODE */ { "G-code files"sv, { ".gcode"sv } },
|
||||
/* FT_GCODE */ { "G-code files"sv, { ".gcode"sv, ".3mf"sv } },
|
||||
/* FT_MODEL */ {"Supported files"sv, {".3mf"sv, ".stl"sv, ".stp"sv, ".step"sv, ".svg"sv, ".amf"sv, ".obj"sv }},
|
||||
/* FT_PROJECT */ { "Project files"sv, { ".3mf"sv} },
|
||||
/* FT_GALLERY */ { "Known files"sv, { ".stl"sv, ".obj"sv } },
|
||||
|
@ -1699,7 +1699,7 @@ void GUI_App::init_networking_callbacks()
|
|||
wxCommandEvent event(EVT_CONNECT_LAN_MODE_PRINT);
|
||||
|
||||
if (obj) {
|
||||
|
||||
|
||||
if (obj->is_lan_mode_printer()) {
|
||||
if (state == ConnectStatus::ConnectStatusOk) {
|
||||
obj->command_request_push_all();
|
||||
|
@ -1892,9 +1892,6 @@ void GUI_App::init_app_config()
|
|||
if (! wxGetEnv(wxS("XDG_CONFIG_HOME"), &dir) || dir.empty() )
|
||||
dir = wxFileName::GetHomeDir() + wxS("/.config");
|
||||
set_data_dir((dir + "/" + GetAppName()).ToUTF8().data());
|
||||
boost::filesystem::path data_dir_path(data_dir());
|
||||
if (!boost::filesystem::exists(data_dir_path))
|
||||
boost::filesystem::create_directory(data_dir_path);
|
||||
#endif
|
||||
} else {
|
||||
m_datadir_redefined = true;
|
||||
|
@ -2732,7 +2729,7 @@ void GUI_App::UpdateDarkUI(wxWindow* window, bool highlited/* = false*/, bool ju
|
|||
|
||||
/*if (m_is_dark_mode != dark_mode() )
|
||||
m_is_dark_mode = dark_mode();*/
|
||||
|
||||
|
||||
|
||||
if (m_is_dark_mode) {
|
||||
auto original_col = window->GetBackgroundColour();
|
||||
|
@ -3238,7 +3235,7 @@ void GUI_App::load_gcode(wxWindow* parent, wxString& input_file) const
|
|||
{
|
||||
input_file.Clear();
|
||||
wxFileDialog dialog(parent ? parent : GetTopWindow(),
|
||||
_L("Choose one file (gcode/.gco/.g/.ngc/ngc):"),
|
||||
_L("Choose one file (gcode/3mf):"),
|
||||
app_config->get_last_dir(), "",
|
||||
file_wildcards(FT_GCODE), wxFD_OPEN | wxFD_FILE_MUST_EXIST);
|
||||
|
||||
|
|
|
@ -201,7 +201,7 @@ void GridCellFilamentsEditor::BeginEdit(int row, int col, wxGrid* grid)
|
|||
{
|
||||
// This event handler is needed to properly dismiss the editor when the popup is closed
|
||||
m_control->Bind(wxEVT_COMBOBOX_CLOSEUP, &GridCellFilamentsEditor::OnComboCloseUp, this);
|
||||
evtHandler = static_cast<wxGridCellEditorEvtHandler*>(m_control->GetEventHandler());
|
||||
evtHandler = wxDynamicCast(m_control->GetEventHandler(), wxGridCellEditorEvtHandler);
|
||||
}
|
||||
|
||||
// Don't immediately end if we get a kill focus event within BeginEdit
|
||||
|
@ -403,7 +403,7 @@ void GridCellChoiceEditor::BeginEdit(int row, int col, wxGrid *grid)
|
|||
if (m_control) {
|
||||
// This event handler is needed to properly dismiss the editor when the popup is closed
|
||||
m_control->Bind(wxEVT_COMBOBOX_CLOSEUP, &GridCellChoiceEditor::OnComboCloseUp, this);
|
||||
evtHandler = static_cast<wxGridCellEditorEvtHandler*>(m_control->GetEventHandler());
|
||||
evtHandler = wxDynamicCast(m_control->GetEventHandler(), wxGridCellEditorEvtHandler);
|
||||
}
|
||||
|
||||
// Don't immediately end if we get a kill focus event within BeginEdit
|
||||
|
|
|
@ -904,10 +904,10 @@ void MainFrame::init_tabpanel()
|
|||
|
||||
#ifndef __APPLE__
|
||||
if (sel == tp3DEditor) {
|
||||
m_topbar->EnableUndoRedoItems();
|
||||
m_topbar->Enable3DEditorItems();
|
||||
}
|
||||
else {
|
||||
m_topbar->DisableUndoRedoItems();
|
||||
m_topbar->Disable3DEditorItems();
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -1360,6 +1360,9 @@ wxBoxSizer* MainFrame::create_side_tools()
|
|||
m_print_option_btn = new SideButton(this, "", "sidebutton_dropdown", 0, FromDIP(14));
|
||||
|
||||
update_side_button_style();
|
||||
m_print_option_btn->Enable();
|
||||
sizer->Add(FromDIP(15), 0, 0, 0, 0);
|
||||
|
||||
m_slice_option_btn->Enable();
|
||||
m_print_option_btn->Enable();
|
||||
sizer->Add(m_slice_option_btn, 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, FromDIP(1));
|
||||
|
@ -1556,6 +1559,7 @@ wxBoxSizer* MainFrame::create_side_tools()
|
|||
p->append_button(send_to_printer_btn);
|
||||
p->append_button(send_to_printer_all_btn);
|
||||
p->append_button(export_sliced_file_btn);
|
||||
//p->append_button(export_gcode_btn);
|
||||
p->append_button(export_all_sliced_file_btn);
|
||||
}
|
||||
|
||||
|
@ -1702,7 +1706,8 @@ void MainFrame::update_side_button_style()
|
|||
{
|
||||
// BBS
|
||||
int em = em_unit();
|
||||
|
||||
|
||||
m_slice_btn->SetLayoutStyle(1);
|
||||
/*m_slice_btn->SetLayoutStyle(1);
|
||||
m_slice_btn->SetTextLayout(SideButton::EHorizontalOrientation::HO_Center, FromDIP(15));
|
||||
m_slice_btn->SetMinSize(wxSize(-1, FromDIP(24)));
|
||||
|
@ -2454,6 +2459,14 @@ void MainFrame::init_menubar_as_editor()
|
|||
//m_topbar->AddDropDownMenuItem(language_item);
|
||||
//m_topbar->AddDropDownMenuItem(config_item);
|
||||
m_topbar->AddDropDownSubMenu(helpMenu, _L("Help"));
|
||||
|
||||
// SoftFever calibrations
|
||||
append_menu_item(m_topbar->GetCalibMenu(), wxID_ANY, _L("PA - DDE"), _L("Calibrate PA - DDE"),
|
||||
[this](wxCommandEvent&) { if (m_plater) m_plater->calib_pa(false); }, "", nullptr,
|
||||
[this]() {return m_plater->is_view3D_shown();; }, this);
|
||||
append_menu_item(m_topbar->GetCalibMenu(), wxID_ANY, _L("PA - Bowden"), _L("Calibrate PA - Bowden"),
|
||||
[this](wxCommandEvent&) { if (m_plater) m_plater->calib_pa(true); }, "", nullptr,
|
||||
[this]() {return m_plater->is_view3D_shown();; }, this);
|
||||
#else
|
||||
m_menubar->Append(fileMenu, wxString::Format("&%s", _L("File")));
|
||||
if (editMenu)
|
||||
|
|
|
@ -8,7 +8,6 @@
|
|||
#include "MsgDialog.hpp"
|
||||
#include "DownloadProgressDialog.hpp"
|
||||
|
||||
#include <boost/filesystem/string_file.hpp>
|
||||
#undef pid_t
|
||||
#include <boost/process.hpp>
|
||||
#ifdef __WIN32__
|
||||
|
|
|
@ -1198,28 +1198,6 @@ std::vector<int> PartPlate::get_extruders() const
|
|||
return plate_extruders;
|
||||
}
|
||||
|
||||
std::vector<int> PartPlate::get_used_extruders()
|
||||
{
|
||||
std::vector<int> used_extruders;
|
||||
// if gcode.3mf file
|
||||
if (m_model->objects.empty()) {
|
||||
for (int i = 0; i < slice_filaments_info.size(); i++) {
|
||||
used_extruders.push_back(slice_filaments_info[i].id + 1);
|
||||
}
|
||||
return used_extruders;
|
||||
}
|
||||
|
||||
GCodeProcessorResult* result = get_slice_result();
|
||||
if (!result)
|
||||
return used_extruders;
|
||||
|
||||
PrintEstimatedStatistics& ps = result->print_statistics;
|
||||
for (auto it = ps.volumes_per_extruder.begin(); it != ps.volumes_per_extruder.end(); it++) {
|
||||
used_extruders.push_back(it->first + 1);
|
||||
}
|
||||
return used_extruders;
|
||||
}
|
||||
|
||||
Vec3d PartPlate::estimate_wipe_tower_size(const double w, const double wipe_volume) const
|
||||
{
|
||||
Vec3d wipe_tower_size;
|
||||
|
|
|
@ -259,7 +259,6 @@ public:
|
|||
Vec3d get_origin() { return m_origin; }
|
||||
Vec3d estimate_wipe_tower_size(const double w, const double wipe_volume) const;
|
||||
std::vector<int> get_extruders() const;
|
||||
std::vector<int> get_used_extruders();
|
||||
|
||||
/* instance related operations*/
|
||||
//judge whether instance is bound in plate or not
|
||||
|
|
|
@ -7398,7 +7398,7 @@ Print& Plater::fff_print() { return p->fff_print; }
|
|||
const SLAPrint& Plater::sla_print() const { return p->sla_print; }
|
||||
SLAPrint& Plater::sla_print() { return p->sla_print; }
|
||||
|
||||
int Plater::new_project(bool skip_confirm, bool silent)
|
||||
int Plater::new_project(bool skip_confirm, bool silent, const wxString& project_name)
|
||||
{
|
||||
bool transfer_preset_changes = false;
|
||||
// BBS: save confirm
|
||||
|
@ -7438,7 +7438,10 @@ int Plater::new_project(bool skip_confirm, bool silent)
|
|||
//reset project
|
||||
p->project.reset();
|
||||
//set project name
|
||||
p->set_project_name(_L("Untitled"));
|
||||
if (project_name.empty())
|
||||
p->set_project_name(_L("Untitled"));
|
||||
else
|
||||
p->set_project_name(project_name);
|
||||
|
||||
Plater::TakeSnapshot snapshot(this, "New Project", UndoRedo::SnapshotType::ProjectSeparator);
|
||||
|
||||
|
@ -7800,16 +7803,22 @@ bool Plater::up_to_date(bool saved, bool backup)
|
|||
!Slic3r::has_other_changes(backup));
|
||||
}
|
||||
|
||||
void Plater::add_model(bool imperial_units/* = false*/)
|
||||
void Plater::add_model(bool imperial_units/* = false*/, std::string fname/* = ""*/)
|
||||
{
|
||||
wxArrayString input_files;
|
||||
wxGetApp().import_model(this, input_files);
|
||||
if (input_files.empty())
|
||||
return;
|
||||
|
||||
std::vector<fs::path> paths;
|
||||
for (const auto &file : input_files)
|
||||
paths.emplace_back(into_path(file));
|
||||
|
||||
if(fname.empty()){
|
||||
wxArrayString input_files;
|
||||
wxGetApp().import_model(this, input_files);
|
||||
if (input_files.empty())
|
||||
return;
|
||||
|
||||
for (const auto &file : input_files)
|
||||
paths.emplace_back(into_path(file));
|
||||
}
|
||||
else{
|
||||
paths.emplace_back(fname);
|
||||
}
|
||||
|
||||
std::string snapshot_label;
|
||||
assert(! paths.empty());
|
||||
|
@ -7856,6 +7865,16 @@ void Plater::add_model(bool imperial_units/* = false*/)
|
|||
}
|
||||
}
|
||||
|
||||
void Plater::calib_pa(bool bowden) {
|
||||
const auto calib_pa_name = "Pressure Advance Test";
|
||||
new_project(false, false, calib_pa_name);
|
||||
add_model(false, Slic3r::resources_dir() + "/calib/pressure_advance_test.stl");
|
||||
wxGetApp().mainframe->select_tab(size_t(MainFrame::tp3DEditor));
|
||||
|
||||
p->background_process.fff_print()->is_calib_mode() = bowden ? Calib_PA_Bowden : Calib_PA_DDE;
|
||||
|
||||
}
|
||||
|
||||
void Plater::import_sl1_archive()
|
||||
{
|
||||
if (!p->m_ui_jobs.is_any_running())
|
||||
|
@ -8627,6 +8646,9 @@ void Plater::add_file()
|
|||
break;
|
||||
default:break;
|
||||
}
|
||||
|
||||
// SoftFever: ugly fix so we can exist pa calib mode
|
||||
p->background_process.fff_print()->is_calib_mode() = Calib_None;
|
||||
}
|
||||
|
||||
void Plater::update() { p->update(); }
|
||||
|
|
|
@ -202,7 +202,7 @@ public:
|
|||
const SLAPrint& sla_print() const;
|
||||
SLAPrint& sla_print();
|
||||
|
||||
int new_project(bool skip_confirm = false, bool silent = false);
|
||||
int new_project(bool skip_confirm = false, bool silent = false, const wxString& project_name = wxString());
|
||||
// BBS: save & backup
|
||||
void load_project(wxString const & filename = "", wxString const & originfile = "-");
|
||||
int save_project(bool saveAs = false);
|
||||
|
@ -217,7 +217,7 @@ public:
|
|||
bool open_3mf_file(const fs::path &file_path);
|
||||
int get_3mf_file_count(std::vector<fs::path> paths);
|
||||
void add_file();
|
||||
void add_model(bool imperial_units = false);
|
||||
void add_model(bool imperial_units = false, std::string fname = "");
|
||||
void import_sl1_archive();
|
||||
void extract_config_from_project();
|
||||
void load_gcode();
|
||||
|
@ -225,6 +225,9 @@ public:
|
|||
void reload_gcode_from_disk();
|
||||
void refresh_print();
|
||||
|
||||
// SoftFever
|
||||
void calib_pa(bool bowden = false);
|
||||
|
||||
//BBS: add only gcode mode
|
||||
bool only_gcode_mode() { return m_only_gcode; }
|
||||
void set_only_gcode(bool only_gcode) { m_only_gcode = only_gcode; }
|
||||
|
|
|
@ -2930,7 +2930,7 @@ void SelectMachineDialog::set_default()
|
|||
}
|
||||
|
||||
// material info
|
||||
auto extruders = wxGetApp().plater()->get_partplate_list().get_curr_plate()->get_used_extruders();
|
||||
auto extruders = wxGetApp().plater()->get_partplate_list().get_curr_plate()->get_extruders();
|
||||
BitmapCache bmcache;
|
||||
|
||||
MaterialHash::iterator iter = m_materialList.begin();
|
||||
|
|
|
@ -2707,7 +2707,7 @@ void Selection::paste_objects_from_clipboard()
|
|||
auto start_offset = in_current ? src_object->instances.front()->get_offset() : plate->get_build_volume().center();
|
||||
auto point_offset = start_offset - start_point;
|
||||
auto empty_cell = wxGetApp().plater()->canvas3D()->get_nearest_empty_cell({start_point(0), start_point(1)}, {bbox.size()(0)+1, bbox.size()(1)+1});
|
||||
displacement = {empty_cell.x() + point_offset.x(), empty_cell.y() + point_offset.y(), start_offset(2)};
|
||||
displacement = {empty_cell.x() + point_offset.x(), empty_cell.y() + point_offset.y(), start_point(2)};
|
||||
}
|
||||
|
||||
for (ModelInstance* inst : dst_object->instances)
|
||||
|
|
|
@ -1807,7 +1807,6 @@ void StatusPanel::update_ams(MachineObject *obj)
|
|||
// update obj in sub dlg
|
||||
if (m_ams_setting_dlg) {
|
||||
m_ams_setting_dlg->obj = obj;
|
||||
|
||||
if (obj && m_ams_setting_dlg->IsShown()) {
|
||||
m_ams_setting_dlg->update_insert_material_read_mode(obj->ams_insert_flag);
|
||||
m_ams_setting_dlg->update_starting_read_mode(obj->ams_power_on_flag);
|
||||
|
@ -2446,7 +2445,6 @@ void StatusPanel::on_ams_setting_click(SimpleEvent &event)
|
|||
try {
|
||||
int ams_id_int = atoi(ams_id.c_str());
|
||||
m_ams_setting_dlg->ams_id = ams_id_int;
|
||||
m_ams_setting_dlg->ams_support_remain = obj->ams_support_remain;
|
||||
m_ams_setting_dlg->Show();
|
||||
} catch (...) {
|
||||
;
|
||||
|
|
|
@ -4,13 +4,9 @@
|
|||
|
||||
#include <wx/webviewarchivehandler.h>
|
||||
#include <wx/webviewfshandler.h>
|
||||
#if wxUSE_WEBVIEW_EDGE
|
||||
#include <wx/msw/webview_edge.h>
|
||||
#endif
|
||||
#include <wx/uri.h>
|
||||
#if defined(__WIN32__) || defined(__WXMAC__)
|
||||
#include "wx/private/jsscriptwrapper.h"
|
||||
#endif
|
||||
|
||||
#ifdef __WIN32__
|
||||
#include "../WebView2.h"
|
||||
|
|
|
@ -33,7 +33,6 @@
|
|||
|
||||
#include <cstdint> // uint8_t
|
||||
#include <ctype.h> // ::tolower, ::toupper
|
||||
#include <cwctype> // ::towlower
|
||||
#include <cstring> // memcpy
|
||||
|
||||
#include <cstdio>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue