mirror of
https://github.com/QIDITECH/QIDIStudio.git
synced 2026-02-02 09:58:41 +03:00
fix some bug
This commit is contained in:
@@ -1109,6 +1109,7 @@ void AmsMapingPopup::update(MachineObject* obj, const std::vector<FilamentInfo>&
|
||||
std::vector<std::string> filament_type = GUI::wxGetApp().plater()->box_msg.filament_type;
|
||||
std::vector<std::string> filament_id = GUI::wxGetApp().plater()->box_msg.filament_id;
|
||||
std::vector<int> slot_id = GUI::wxGetApp().plater()->box_msg.slot_id;
|
||||
std::vector<int> slot_state = GUI::wxGetApp().plater()->box_msg.slot_state;
|
||||
int box_count = GUI::wxGetApp().plater()->box_msg.box_count;
|
||||
|
||||
//for (int i = 0; i < 4 * box_count; i++) {
|
||||
@@ -1161,65 +1162,95 @@ void AmsMapingPopup::update(MachineObject* obj, const std::vector<FilamentInfo>&
|
||||
std::vector<MappingContainer *> right_four_slot_containers;
|
||||
//y59
|
||||
//for (std::map<std::string, Ams *>::iterator ams_iter = obj->amsList.begin(); ams_iter != obj->amsList.end(); ams_iter++) {
|
||||
for (int i = 0; i < 1; i++) {
|
||||
int ams_indx = 0;
|
||||
int nozzle_id = 0;
|
||||
//y61
|
||||
for(int box_num = 0; box_num < box_count; box_num++){
|
||||
for (int j = 0; j < 1; j++) {
|
||||
|
||||
auto sizer_mapping_list = new wxBoxSizer(wxHORIZONTAL);
|
||||
auto ams_mapping_item_container = new MappingContainer(nozzle_id == 0 ? m_right_marea_panel : m_left_marea_panel, "QIDI-BOX", 4);
|
||||
ams_mapping_item_container->SetName(nozzle_id == 0 ? m_right_marea_panel->GetName() : m_left_marea_panel->GetName());
|
||||
ams_mapping_item_container->SetSizer(sizer_mapping_list);
|
||||
ams_mapping_item_container->Layout();
|
||||
int ams_indx = 0;
|
||||
int nozzle_id = 0;
|
||||
|
||||
m_has_unmatch_filament = false;
|
||||
auto sizer_mapping_list = new wxBoxSizer(wxHORIZONTAL);
|
||||
auto ams_mapping_item_container = new MappingContainer(nozzle_id == 0 ? m_right_marea_panel : m_left_marea_panel, "QIDI-BOX", 4);
|
||||
ams_mapping_item_container->SetName(nozzle_id == 0 ? m_right_marea_panel->GetName() : m_left_marea_panel->GetName());
|
||||
ams_mapping_item_container->SetSizer(sizer_mapping_list);
|
||||
ams_mapping_item_container->Layout();
|
||||
|
||||
std::vector<TrayData> tray_datas;
|
||||
for (int i = 0; i < 4 * box_count; i++) {
|
||||
TrayData td;
|
||||
m_has_unmatch_filament = false;
|
||||
|
||||
td.id = i;
|
||||
td.ams_id = box_count;
|
||||
td.slot_id = slot_id[i];
|
||||
std::vector<TrayData> tray_datas;
|
||||
for (int i = box_num * 4; i < (box_num + 1) * 4; i++) {
|
||||
TrayData td;
|
||||
|
||||
td.id = i;
|
||||
|
||||
td.ams_id = box_num + 1;
|
||||
if(slot_state[i])
|
||||
td.slot_id = slot_id[i];
|
||||
else
|
||||
td.slot_id = -1;
|
||||
|
||||
|
||||
td.type = NORMAL;
|
||||
td.remain = 0;
|
||||
std::string color = filament_colors[i];
|
||||
td.colour = AmsTray::decode_color((color.erase(0, 1)) + "FF");
|
||||
td.name = filament_type[i];
|
||||
td.filament_type = filament_type[i];
|
||||
td.ctype = TrayType::NORMAL;
|
||||
//for (int j = 0; j < 4 * box_count; j++) {
|
||||
// td.material_cols.push_back(AmsTray::decode_color((filament_colors[i].erase(0, 1)) + "FF"));
|
||||
//}
|
||||
td.type = NORMAL;
|
||||
td.remain = 0;
|
||||
std::string color = filament_colors[i];
|
||||
td.colour = AmsTray::decode_color((color.erase(0, 1)) + "FF");
|
||||
td.name = filament_type[i];
|
||||
td.filament_type = filament_type[i];
|
||||
td.ctype = TrayType::NORMAL;
|
||||
//for (int j = 0; j < 4 * box_count; j++) {
|
||||
// td.material_cols.push_back(AmsTray::decode_color((filament_colors[i].erase(0, 1)) + "FF"));
|
||||
//}
|
||||
|
||||
tray_datas.push_back(td);
|
||||
tray_datas.push_back(td);
|
||||
}
|
||||
|
||||
ams_mapping_item_container->Show();
|
||||
add_ams_mapping(tray_datas, obj->ams_calibrate_remain_flag, ams_mapping_item_container, sizer_mapping_list);
|
||||
m_amsmapping_container_sizer_list.push_back(sizer_mapping_list);
|
||||
m_amsmapping_container_list.push_back(ams_mapping_item_container);
|
||||
|
||||
if (nozzle_id == 0) {
|
||||
has_right_ams = true;
|
||||
if (ams_mapping_item_container->get_slots_num() == 1) {
|
||||
right_one_slot_containers.push_back(ams_mapping_item_container);
|
||||
}
|
||||
else {
|
||||
right_four_slot_containers.push_back(ams_mapping_item_container);
|
||||
}
|
||||
}
|
||||
else if (nozzle_id == 1) {
|
||||
has_left_ams = true;
|
||||
if (ams_mapping_item_container->get_slots_num() == 1) {
|
||||
left_one_slot_containers.push_back(ams_mapping_item_container);
|
||||
}
|
||||
else {
|
||||
left_four_slots_containers.push_back(ams_mapping_item_container);
|
||||
}
|
||||
}
|
||||
//y59 //y61
|
||||
}
|
||||
}
|
||||
|
||||
ams_mapping_item_container->Show();
|
||||
add_ams_mapping(tray_datas, obj->ams_calibrate_remain_flag, ams_mapping_item_container, sizer_mapping_list);
|
||||
m_amsmapping_container_sizer_list.push_back(sizer_mapping_list);
|
||||
m_amsmapping_container_list.push_back(ams_mapping_item_container);
|
||||
//y61
|
||||
//ext
|
||||
{
|
||||
TrayData td;
|
||||
|
||||
if (nozzle_id == 0) {
|
||||
has_right_ams = true;
|
||||
if (ams_mapping_item_container->get_slots_num() == 1) {
|
||||
right_one_slot_containers.push_back(ams_mapping_item_container);
|
||||
}
|
||||
else {
|
||||
right_four_slot_containers.push_back(ams_mapping_item_container);
|
||||
}
|
||||
}
|
||||
else if (nozzle_id == 1) {
|
||||
has_left_ams = true;
|
||||
if (ams_mapping_item_container->get_slots_num() == 1) {
|
||||
left_one_slot_containers.push_back(ams_mapping_item_container);
|
||||
}
|
||||
else {
|
||||
left_four_slots_containers.push_back(ams_mapping_item_container);
|
||||
}
|
||||
}
|
||||
//y59
|
||||
td.id = 0;
|
||||
|
||||
td.ams_id = -1;
|
||||
|
||||
td.slot_id = -1;
|
||||
|
||||
|
||||
td.type = NORMAL;
|
||||
td.remain = 0;
|
||||
std::string color = filament_colors.back();
|
||||
td.colour = AmsTray::decode_color((color.erase(0, 1)) + "FF");
|
||||
td.name = filament_type.back();
|
||||
td.filament_type = filament_type.back();
|
||||
td.ctype = TrayType::NORMAL;
|
||||
add_ext_ams_mapping(td, m_right_extra_slot);
|
||||
}
|
||||
|
||||
_add_containers(this, left_one_slot_containers, left_four_slots_containers, m_sizer_ams_basket_left);
|
||||
|
||||
@@ -1183,7 +1183,7 @@ int MachineObject::ams_filament_mapping(
|
||||
}
|
||||
}
|
||||
//y59
|
||||
if (picked_src_idx >= 0 && picked_tar_idx >= 0) {
|
||||
if (picked_src_idx >= 0 && picked_tar_idx >= 0 && box_filament_infos[picked_tar_idx].slot_id != "-1") {
|
||||
result[picked_src_idx].tray_id = distance_map[k][picked_tar_idx].tray_id;
|
||||
result[picked_src_idx].color = box_filament_infos[picked_tar_idx].color;
|
||||
result[picked_src_idx].type = box_filament_infos[picked_tar_idx].type;
|
||||
|
||||
@@ -2456,6 +2456,9 @@ void Sidebar::update_presets(Preset::Type preset_type)
|
||||
wxGetApp().preset_bundle->export_selections(*wxGetApp().app_config);
|
||||
|
||||
BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": exit.");
|
||||
|
||||
//y61
|
||||
GUI::wxGetApp().sidebar().update_sync_status(nullptr);
|
||||
}
|
||||
|
||||
//QDS
|
||||
@@ -3373,7 +3376,7 @@ std::map<int, DynamicPrintConfig> Sidebar::build_filament_box_list(std::vector<s
|
||||
}
|
||||
|
||||
//ext filament
|
||||
if(slot_state.back() != 0){
|
||||
{
|
||||
DynamicPrintConfig tray_config;
|
||||
tray_config.set_key_value("filament_id", new ConfigOptionStrings{ id.back() });
|
||||
tray_config.set_key_value("tag_uid", new ConfigOptionStrings{ "" }); //clear
|
||||
@@ -9304,16 +9307,14 @@ void Plater::priv::on_action_print_plate(SimpleEvent&)
|
||||
wxString msg = "";
|
||||
GUI::Box_info filament_info;
|
||||
filament_info = qidi.get_box_info(msg, box_ip);
|
||||
GUI::Box_info cur_box_info = q->get_cur_box_info();
|
||||
GUI::Box_info cur_box_info;
|
||||
cur_box_info = q->get_cur_box_info();
|
||||
|
||||
if (filament_info.filament_index != cur_box_info.filament_index
|
||||
|| filament_info.filament_vendor != cur_box_info.filament_vendor
|
||||
|| filament_info.filament_color_index != cur_box_info.filament_color_index
|
||||
|| filament_info.slot_state != cur_box_info.slot_state
|
||||
|| filament_info.slot_id != cur_box_info.slot_id
|
||||
|| filament_info.filament_id != cur_box_info.filament_id
|
||||
|| filament_info.filament_colors != cur_box_info.filament_colors
|
||||
|| filament_info.filament_type != cur_box_info.filament_type
|
||||
|| filament_info.box_count != cur_box_info.box_count
|
||||
|| filament_info.auto_reload_detect != cur_box_info.auto_reload_detect) {
|
||||
has_diff = true;
|
||||
@@ -14544,11 +14545,11 @@ void Plater::export_gcode(bool prefer_removable)
|
||||
unsigned int state = this->p->update_restart_background_process(false, false);
|
||||
if (state & priv::UPDATE_BACKGROUND_PROCESS_INVALID)
|
||||
return;
|
||||
//y56
|
||||
if (wxGetApp().preset_bundle->prints.get_edited_preset().config.opt_string("filename_format") == "{input_filename_base}.gcode")
|
||||
default_output_file = fs::path(into_u8(p->get_export_gcode_filename("", true, p->partplate_list.get_curr_plate_index() == PLATE_ALL_IDX ? true : false)));
|
||||
else
|
||||
default_output_file = fs::path(this->p->background_process.output_filepath_for_project(""));
|
||||
// //y56
|
||||
// if (wxGetApp().preset_bundle->prints.get_edited_preset().config.opt_string("filename_format") == "{input_filename_base}.gcode")
|
||||
// default_output_file = fs::path(into_u8(p->get_export_gcode_filename("", true, p->partplate_list.get_curr_plate_index() == PLATE_ALL_IDX ? true : false)));
|
||||
// else
|
||||
default_output_file = fs::path(this->p->background_process.output_filepath_for_project(""));
|
||||
|
||||
} catch (const Slic3r::PlaceholderParserError &ex) {
|
||||
// Show the error with monospaced font.
|
||||
|
||||
@@ -1367,9 +1367,6 @@ void PlaterPresetComboBox::update()
|
||||
}
|
||||
}
|
||||
|
||||
//y59
|
||||
GUI::wxGetApp().sidebar().update_sync_status(nullptr);
|
||||
|
||||
update_selection();
|
||||
if (m_type == Preset::TYPE_FILAMENT) {
|
||||
update_badge_according_flag();
|
||||
@@ -1540,7 +1537,7 @@ void TabPresetComboBox::update()
|
||||
}
|
||||
|
||||
if (m_type == Preset::TYPE_FILAMENT)
|
||||
add_ams_filaments(into_u8(selected));
|
||||
add_box_filaments(into_u8(selected));
|
||||
|
||||
//QDS: add project embedded preset logic
|
||||
if (!project_embedded_presets.empty())
|
||||
|
||||
@@ -1859,8 +1859,12 @@ void SelectMachineDialog::show_status(PrintDialogStatus status, std::vector<wxSt
|
||||
} else if (status == PrintDialogStatus::PrintStatusInSystemPrinting) {
|
||||
wxString msg_text = _L("The printer is executing instructions. Please restart printing after it ends");
|
||||
update_print_status_msg(msg_text, true, false, true);
|
||||
} else if (status == PrintDialogStatus::PrintStatusInPrinting) {
|
||||
wxString msg_text = _L("The printer is busy on other print job");
|
||||
//y62
|
||||
} else if (status == PrintDialogStatus::PrintStatusPrinterOffline) {
|
||||
wxString msg_text = _L("The printer is offline, please check.");
|
||||
update_print_status_msg(msg_text, true, false, true);
|
||||
} else if (status == PrintDialogStatus::PrintStatusPrinterNotStandby) {
|
||||
wxString msg_text = _L("The printer is not standby, please check.");
|
||||
update_print_status_msg(msg_text, true, false, true);
|
||||
} else if (status == PrintDialogStatus::PrintStatusAmsOnSettingup) {
|
||||
update_print_status_msg(_L("BOX is setting up. Please try again later."), false, false, true);
|
||||
@@ -2318,16 +2322,13 @@ void SelectMachineDialog::on_ok_btn(wxCommandEvent &event)
|
||||
m_plater->export_gcode(output_path);
|
||||
}
|
||||
|
||||
msg = _L("Test the network");
|
||||
m_status_bar->update_status(msg, m_is_canceled, 10, true);
|
||||
|
||||
if (m_isNetMode)
|
||||
{
|
||||
PrintHostJob upload_job(machine_url, machine_ip);
|
||||
upload_job.upload_data.upload_path = upload_file_name;
|
||||
upload_job.upload_data.post_action = PrintHostPostUploadAction::StartPrint;
|
||||
upload_job.upload_data.source_path = output_path.string();
|
||||
upload_job.is_3mf = qidi_3mf;
|
||||
upload_job.upload_data.is_3mf = qidi_3mf;
|
||||
start_to_send(std::move(upload_job));
|
||||
}
|
||||
else
|
||||
@@ -2340,7 +2341,7 @@ void SelectMachineDialog::on_ok_btn(wxCommandEvent &event)
|
||||
upload_job.upload_data.upload_path = upload_file_name;
|
||||
upload_job.upload_data.post_action = PrintHostPostUploadAction::StartPrint;
|
||||
upload_job.upload_data.source_path = output_path.string();
|
||||
upload_job.is_3mf = qidi_3mf;
|
||||
upload_job.upload_data.is_3mf = qidi_3mf;
|
||||
start_to_send(std::move(upload_job));
|
||||
}
|
||||
|
||||
@@ -2577,6 +2578,9 @@ void SelectMachineDialog::start_to_send(PrintHostJob upload_job) {
|
||||
else if (printer_status == "offline") {
|
||||
show_status(PrintDialogStatus::PrintStatusPrinterOffline);
|
||||
return;
|
||||
} else if (printer_status != "standby"){
|
||||
show_status(PrintDialogStatus::PrintStatusPrinterNotStandby);
|
||||
return;
|
||||
}
|
||||
|
||||
if(!m_ams_mapping_result.empty()){
|
||||
@@ -2628,9 +2632,21 @@ void SelectMachineDialog::start_to_send(PrintHostJob upload_job) {
|
||||
cancel = this->m_is_canceled;
|
||||
int gui_progress = progress.ultotal > 0 ? 100 * progress.ulnow / progress.ultotal : 0;
|
||||
OctoPrint::progress_percentage = gui_progress / 100.f;
|
||||
wxString msg = _L("Sending...");
|
||||
bool is_undisplay = false;
|
||||
m_status_bar->update_status(msg, is_undisplay, std::floor(10 + gui_progress * 0.9), true);
|
||||
//y62
|
||||
if(gui_progress < 100){
|
||||
wxString msg = _L("Sending...");
|
||||
bool is_undisplay = false;
|
||||
m_status_bar->update_status(msg, is_undisplay, std::floor(10 + gui_progress * 0.9), true);
|
||||
}
|
||||
else{
|
||||
std::vector<std::string> dot = {"..", "....", "......"};
|
||||
for(int i = 0; i < 3; i++){
|
||||
wxString msg = _L("Waiting for the printer's response") + dot[i];
|
||||
bool is_undisplay = false;
|
||||
m_status_bar->update_status(msg, is_undisplay, 100, true);
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(500));
|
||||
}
|
||||
}
|
||||
},
|
||||
[this](wxString error) {
|
||||
show_status(PrintDialogStatus::PrintStatusPublicUploadFiled);
|
||||
|
||||
@@ -145,6 +145,7 @@ enum PrintDialogStatus : unsigned int {
|
||||
PrinterNotConnectBox,
|
||||
BoxhasSomeProblem,
|
||||
PrintStatusPrinterOffline,
|
||||
PrintStatusPrinterNotStandby,
|
||||
};
|
||||
|
||||
class Material
|
||||
|
||||
@@ -374,8 +374,7 @@ void SendMultiMachinePage::on_sys_color_changed()
|
||||
|
||||
void SendMultiMachinePage::refresh_user_device()
|
||||
{
|
||||
m_pauseThread = true;
|
||||
std::lock_guard<std::mutex> lock(m_mutex);
|
||||
StopThread();
|
||||
|
||||
m_device_items.clear();
|
||||
sizer_machine_list->Clear(true);
|
||||
@@ -440,7 +439,7 @@ void SendMultiMachinePage::refresh_user_device()
|
||||
scroll_macine_list->Layout();
|
||||
sizer_machine_list->Layout();
|
||||
|
||||
m_pauseThread = false;
|
||||
StartThread();
|
||||
}
|
||||
|
||||
QDT::PrintParams SendMultiMachinePage::request_params(MachineObject* obj)
|
||||
@@ -1838,7 +1837,6 @@ void SendMultiMachinePage::StartThread() {
|
||||
return;
|
||||
}
|
||||
m_stopThread = false;
|
||||
m_pauseThread = false;
|
||||
m_statusThread = std::thread(&SendMultiMachinePage::ThreadWorker, this);
|
||||
}
|
||||
|
||||
@@ -1855,17 +1853,11 @@ void SendMultiMachinePage::ThreadWorker() {
|
||||
QIDINetwork qidi;
|
||||
wxString msg = "";
|
||||
while (!m_stopThread) {
|
||||
std::lock_guard<std::mutex> lock(m_mutex);
|
||||
for(auto device : m_device_items) {
|
||||
if (m_pauseThread)
|
||||
if (m_stopThread)
|
||||
break;
|
||||
try {
|
||||
MachineObject* temp_obj = device.second->get_obj();
|
||||
temp_obj->ams_exist_bits = qidi.get_box_state(msg, temp_obj->dev_url) ? 1 : 0;
|
||||
}
|
||||
catch (const std::exception& error) {
|
||||
continue;
|
||||
}
|
||||
MachineObject* temp_obj = device.second->get_obj();
|
||||
temp_obj->ams_exist_bits = qidi.get_box_state(msg, temp_obj->dev_url) ? 1 : 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -167,8 +167,6 @@ private:
|
||||
//y61
|
||||
std::thread m_statusThread;
|
||||
std::atomic<bool> m_stopThread{false};
|
||||
std::atomic<bool> m_pauseThread{ false };
|
||||
std::mutex m_mutex;
|
||||
|
||||
public:
|
||||
SendMultiMachinePage(Plater* plater = nullptr);
|
||||
|
||||
@@ -944,16 +944,13 @@ void SendToPrinterDialog::on_ok(wxCommandEvent &event)
|
||||
m_plater->export_gcode(output_path);
|
||||
}
|
||||
|
||||
msg = _L("Test the network");
|
||||
m_status_bar->update_status(msg, m_is_canceled, 10, true);
|
||||
|
||||
if (m_isNetMode)
|
||||
{
|
||||
PrintHostJob upload_job(machine_url, machine_ip);
|
||||
upload_job.upload_data.upload_path = upload_file_name;
|
||||
upload_job.upload_data.post_action = PrintHostPostUploadAction::None;
|
||||
upload_job.upload_data.source_path = output_path.string();
|
||||
upload_job.is_3mf = qidi_3mf;
|
||||
upload_job.upload_data.is_3mf = qidi_3mf;
|
||||
start_to_send(std::move(upload_job));
|
||||
}
|
||||
else
|
||||
@@ -966,7 +963,7 @@ void SendToPrinterDialog::on_ok(wxCommandEvent &event)
|
||||
upload_job.upload_data.upload_path = upload_file_name;
|
||||
upload_job.upload_data.post_action = PrintHostPostUploadAction::None;
|
||||
upload_job.upload_data.source_path = output_path.string();
|
||||
upload_job.is_3mf = qidi_3mf;
|
||||
upload_job.upload_data.is_3mf = qidi_3mf;
|
||||
start_to_send(std::move(upload_job));
|
||||
}
|
||||
// BOOST_LOG_TRIVIAL(info) << "print_job: on_ok to send";
|
||||
@@ -1128,9 +1125,21 @@ void SendToPrinterDialog::start_to_send(PrintHostJob upload_job) {
|
||||
cancel = m_is_canceled;
|
||||
int gui_progress = progress.ultotal > 0 ? 100 * progress.ulnow / progress.ultotal : 0;
|
||||
OctoPrint::progress_percentage = gui_progress / 100.f;
|
||||
wxString msg = _L("Sending...");
|
||||
bool is_undisplay = false;
|
||||
m_status_bar->update_status(msg, is_undisplay, std::floor(10 + gui_progress * 0.9), true);
|
||||
//y62
|
||||
if(gui_progress < 100){
|
||||
wxString msg = _L("Sending...");
|
||||
bool is_undisplay = false;
|
||||
m_status_bar->update_status(msg, is_undisplay, std::floor(10 + gui_progress * 0.9), true);
|
||||
}
|
||||
else{
|
||||
std::vector<std::string> dot = {"..", "....", "......"};
|
||||
for(int i = 0; i < 3; i++){
|
||||
wxString msg = _L("Waiting for the printer's response") + dot[i];
|
||||
bool is_undisplay = false;
|
||||
m_status_bar->update_status(msg, is_undisplay, 100, true);
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(500));
|
||||
}
|
||||
}
|
||||
},
|
||||
[this](wxString error) {
|
||||
show_status(PrintDialogStatus::PrintStatusPublicUploadFiled);
|
||||
|
||||
@@ -3596,7 +3596,7 @@ void GetBoxInfoDialog::generate_filament_id(GUI::Box_info& machine_filament_info
|
||||
machine_filament_info.filament_id[i] = temp_filament_id;
|
||||
}
|
||||
|
||||
if(machine_filament_info.slot_state.back() != 0)
|
||||
|
||||
{
|
||||
std::string temp_ext_filament_id = filament_id;
|
||||
temp_ext_filament_id = temp_ext_filament_id + "_" + std::to_string(machine_filament_info.filament_vendor.back());
|
||||
|
||||
@@ -2193,7 +2193,7 @@ void TabPrint::build()
|
||||
optgroup->append_single_option_line("vertical_shell_speed", "", 0);
|
||||
optgroup->append_single_option_line("top_surface_speed", "", 0);
|
||||
//y32
|
||||
optgroup->append_single_option_line("enable_overhang_speed", "print-settings/slow-down-for-overhang");
|
||||
optgroup->append_single_option_line("enable_overhang_speed", "print-settings/slow-down-for-overhang", 0);
|
||||
Line line = { L("Overhang speed"), L("This is the speed for various overhang degrees. Overhang degrees are expressed as a percentage of line width. 0 speed means no slowing down for the overhang degree range and wall speed is used") };
|
||||
//y32
|
||||
line.label_path = "print-settings/slow-down-for-overhang";
|
||||
|
||||
Reference in New Issue
Block a user