diff --git a/resources/printers/O1D.json b/resources/printers/O1D.json index aaf4c31d3..2322e81ea 100644 --- a/resources/printers/O1D.json +++ b/resources/printers/O1D.json @@ -20,6 +20,7 @@ } }, "nozzle_temp_range": [ 20, 350 ], + "bed_temp_range": [ 20, 120 ], "support_motor_noise_cali": false, "support_tunnel_mqtt": true, "support_mqtt_alive": true, diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index c0d267cf6..5ff3f5436 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -3288,6 +3288,15 @@ int MachineObject::parse_json(std::string payload, bool key_field_only) } } + // bed temp range + if (jj.contains("bed_temp_range")) { + if (jj["bed_temp_range"].is_array()) { + for (auto it = jj["bed_temp_range"].begin(); it != jj["bed_temp_range"].end(); it++) { + bed_temp_range.push_back(it.value().get()); + } + } + } + //supported function if (jj.contains("support_chamber_temp_edit")) { if (jj["support_chamber_temp_edit"].is_boolean()) { diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp index d593e2364..ec7b2d8d6 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -994,6 +994,9 @@ public: /*nozzle temp range*/ std::vector nozzle_temp_range; + /*temp temp range*/ + std::vector bed_temp_range; + /* sdcard */ MachineObject::SdcardState sdcard_state { NO_SDCARD }; MachineObject::SdcardState get_sdcard_state(); diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index ef9914140..ae89c4e68 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -2675,7 +2675,12 @@ void StatusPanel::update_temp_ctrl(MachineObject *obj) if (!obj) return; m_tempCtrl_bed->SetCurrTemp((int) obj->bed_temp); - m_tempCtrl_bed->SetMaxTemp(obj->get_bed_temperature_limit()); + + auto limit = obj->get_bed_temperature_limit(); + if (obj->bed_temp_range.size() > 1) { + limit = obj->bed_temp_range[1]; + } + m_tempCtrl_bed->SetMaxTemp(limit); if (obj->nozzle_temp_range.size() >= 2) { m_tempCtrl_nozzle->SetMinTemp(obj->nozzle_temp_range[0]); @@ -3805,7 +3810,12 @@ void StatusPanel::on_set_bed_temp() long bed_temp; if (str.ToLong(&bed_temp) && obj) { set_hold_count(m_temp_bed_timeout); + int limit = obj->get_bed_temperature_limit(); + if (obj->bed_temp_range.size() > 1) { + limit = obj->bed_temp_range[1]; + } + if (bed_temp >= limit) { BOOST_LOG_TRIVIAL(info) << "can not set over limit = " << limit << ", set temp = " << bed_temp; bed_temp = limit;