From 28b7fd90d0551b4abf1d26d81828f13389810b5a Mon Sep 17 00:00:00 2001 From: SoftFever Date: Thu, 16 Jul 2026 18:40:53 +0800 Subject: [PATCH] Restructure DevPrintOptions around a detection-option map --- src/slic3r/GUI/DeviceCore/DevPrintOptions.cpp | 193 ++++++++++++------ src/slic3r/GUI/DeviceCore/DevPrintOptions.h | 83 +++++--- 2 files changed, 184 insertions(+), 92 deletions(-) diff --git a/src/slic3r/GUI/DeviceCore/DevPrintOptions.cpp b/src/slic3r/GUI/DeviceCore/DevPrintOptions.cpp index dd8bd77070..1c9f469165 100644 --- a/src/slic3r/GUI/DeviceCore/DevPrintOptions.cpp +++ b/src/slic3r/GUI/DeviceCore/DevPrintOptions.cpp @@ -6,6 +6,25 @@ namespace Slic3r { +DevPrintOptions::DevPrintOptions(MachineObject* obj) : m_obj(obj) +{ + m_detection_list = { + {PrintOptionEnum::AI_Monitoring, &m_ai_monitoring_detection}, + {PrintOptionEnum::First_Layer_Detection, &m_first_layer_detection}, + {PrintOptionEnum::Buildplate_Mark_Detection, &m_buildplate_mark_detection}, + {PrintOptionEnum::Buildplate_Align_Detection, &m_buildplate_align_detection}, + {PrintOptionEnum::Auto_Recovery_Detection, &m_auto_recovery_detection}, + {PrintOptionEnum::Allow_Prompt_Sound_Detection, &m_allow_prompt_sound_detection}, + {PrintOptionEnum::Filament_Tangle_Detection, &m_filament_tangle_detection}, + {PrintOptionEnum::Idle_Heating_Protect_Detection, &m_idel_heating_protect_detection}, + {PrintOptionEnum::Purify_Air_At_Print_End, &m_purify_air_at_print_end}, + {PrintOptionEnum::Snapshot_Detection, &m_snapshot_detection}, + {PrintOptionEnum::FOD_Check_Detection, &m_fod_check_detection}, + {PrintOptionEnum::Displacement_Detection, &m_displacement_detection}, + {PrintOptionEnum::Smart_Nozzle_Blob_Detection, &m_smart_nozzle_blob_detection}, + }; +} + void DevPrintOptionsParser::Parse(DevPrintOptions* opts, const nlohmann::json& print_json) { try @@ -31,32 +50,44 @@ void DevPrintOptionsParser::ParseDetectionV1_0(DevPrintOptions *opts, MachineObj { try { if (print_json.contains("xcam")) { - if (time(nullptr) - opts->xcam_ai_monitoring_hold_start > HOLD_TIME_3SEC) { + if (time(nullptr) - opts->m_ai_monitoring_detection.detect_hold_start > HOLD_TIME_3SEC) { if (print_json["xcam"].contains("printing_monitor")) { // new protocol - opts->xcam_ai_monitoring = print_json["xcam"]["printing_monitor"].get(); + opts->m_ai_monitoring_detection.current_detect_value = print_json["xcam"]["printing_monitor"].get(); } else { // old version protocol if (print_json["xcam"].contains("spaghetti_detector")) { - opts->xcam_ai_monitoring = print_json["xcam"]["spaghetti_detector"].get(); + opts->m_ai_monitoring_detection.current_detect_value = print_json["xcam"]["spaghetti_detector"].get(); if (print_json["xcam"].contains("print_halt")) { bool print_halt = print_json["xcam"]["print_halt"].get(); - if (print_halt) { opts->xcam_ai_monitoring_sensitivity = "medium"; } + if (print_halt) { opts->m_ai_monitoring_detection.current_detect_sensitivity_value = "medium"; } } } } if (print_json["xcam"].contains("halt_print_sensitivity")) { - opts->xcam_ai_monitoring_sensitivity = print_json["xcam"]["halt_print_sensitivity"].get(); + opts->m_ai_monitoring_detection.current_detect_sensitivity_value = print_json["xcam"]["halt_print_sensitivity"].get(); } } - if (time(nullptr) - opts->xcam_first_layer_hold_start > HOLD_TIME_3SEC) { - if (print_json["xcam"].contains("first_layer_inspector")) { opts->xcam_first_layer_inspector = print_json["xcam"]["first_layer_inspector"].get(); } + // Orca: xcam.cfg is an integer bitfield (distinct from the top-level cfg string) that + // carries the plate-align/FOD/displacement current values. + if (print_json["xcam"].contains("cfg")) { + int xcam_cfg = print_json["xcam"]["cfg"].get(); + if (time(nullptr) - opts->m_buildplate_align_detection.detect_hold_start > HOLD_TIME_3SEC) + opts->m_buildplate_align_detection.current_detect_value = DevUtil::get_flag_bits(xcam_cfg, 20); + if (time(nullptr) - opts->m_fod_check_detection.detect_hold_start > HOLD_TIME_3SEC) + opts->m_fod_check_detection.current_detect_value = DevUtil::get_flag_bits(xcam_cfg, 21); + if (time(nullptr) - opts->m_displacement_detection.detect_hold_start > HOLD_TIME_3SEC) + opts->m_displacement_detection.current_detect_value = DevUtil::get_flag_bits(xcam_cfg, 22); } - if (time(nullptr) - opts->xcam_buildplate_marker_hold_start > HOLD_TIME_3SEC) { + if (time(nullptr) - opts->m_first_layer_detection.detect_hold_start > HOLD_TIME_3SEC) { + if (print_json["xcam"].contains("first_layer_inspector")) { opts->m_first_layer_detection.current_detect_value = print_json["xcam"]["first_layer_inspector"].get(); } + } + + if (time(nullptr) - opts->m_buildplate_mark_detection.detect_hold_start > HOLD_TIME_3SEC) { if (print_json["xcam"].contains("buildplate_marker_detector")) { - opts->xcam_buildplate_marker_detector = print_json["xcam"]["buildplate_marker_detector"].get(); + opts->m_buildplate_mark_detection.current_detect_value = print_json["xcam"]["buildplate_marker_detector"].get(); obj->is_support_build_plate_marker_detect = true; } else { obj->is_support_build_plate_marker_detect = false; @@ -67,31 +98,43 @@ void DevPrintOptionsParser::ParseDetectionV1_0(DevPrintOptions *opts, MachineObj ; } + // Orca: fun2 support bits (distinct from the top-level cfg/fun fields). ORCA's DevUtil has no + // no-border extractor, so the MachineObject helper is used here instead. + if (print_json.contains("fun2") && print_json["fun2"].is_string()) { + std::string fun2 = print_json["fun2"].get(); + if (!fun2.empty()) { + opts->m_buildplate_align_detection.is_support_detect = obj->get_flag_bits_no_border(fun2, 2) == 1; + opts->m_purify_air_at_print_end.is_support_detect = obj->get_flag_bits_no_border(fun2, 4); + opts->m_fod_check_detection.is_support_detect = obj->get_flag_bits_no_border(fun2, 13); + opts->m_displacement_detection.is_support_detect = obj->get_flag_bits_no_border(fun2, 14); + opts->m_smart_nozzle_blob_detection.is_support_detect = obj->get_flag_bits_no_border(fun2, 15); + } + } } void DevPrintOptionsParser::ParseDetectionV1_1(DevPrintOptions *opts, MachineObject *obj, const nlohmann::json &print_json,bool enable) { if (print_json["module_name"].get() == "first_layer_inspector") { - if (time(nullptr) - opts->xcam_first_layer_hold_start > HOLD_TIME_3SEC) { - opts->xcam_first_layer_inspector = enable; + if (time(nullptr) - opts->m_first_layer_detection.detect_hold_start > HOLD_TIME_3SEC) { + opts->m_first_layer_detection.current_detect_value = enable; } } else if (print_json["module_name"].get() == "buildplate_marker_detector") { - if (time(nullptr) - opts->xcam_buildplate_marker_hold_start > HOLD_TIME_3SEC) { - opts->xcam_buildplate_marker_detector = enable; + if (time(nullptr) - opts->m_buildplate_mark_detection.detect_hold_start > HOLD_TIME_3SEC) { + opts->m_buildplate_mark_detection.current_detect_value = enable; } } else if (print_json["module_name"].get() == "printing_monitor") { - if (time(nullptr) - opts->xcam_ai_monitoring_hold_start > HOLD_TIME_3SEC) { - opts->xcam_ai_monitoring = enable; + if (time(nullptr) - opts->m_ai_monitoring_detection.detect_hold_start > HOLD_TIME_3SEC) { + opts->m_ai_monitoring_detection.current_detect_value = enable; if (print_json.contains("halt_print_sensitivity")) { - opts->xcam_ai_monitoring_sensitivity = print_json["halt_print_sensitivity"].get(); + opts->m_ai_monitoring_detection.current_detect_sensitivity_value = print_json["halt_print_sensitivity"].get(); } } } else if (print_json["module_name"].get() == "spaghetti_detector") { - if (time(nullptr) - opts->xcam_ai_monitoring_hold_start > HOLD_TIME_3SEC) { + if (time(nullptr) - opts->m_ai_monitoring_detection.detect_hold_start > HOLD_TIME_3SEC) { // old protocol - opts->xcam_ai_monitoring = enable; + opts->m_ai_monitoring_detection.current_detect_value = enable; if (print_json.contains("print_halt")) { - if (print_json["print_halt"].get()) { opts->xcam_ai_monitoring_sensitivity = "medium"; } + if (print_json["print_halt"].get()) { opts->m_ai_monitoring_detection.current_detect_sensitivity_value = "medium"; } } } } @@ -103,12 +146,12 @@ void DevPrintOptionsParser::ParseDetectionV1_2(DevPrintOptions *opts, MachineObj if (print_json.contains("option")) { if (print_json["option"].is_number()) { int option = print_json["option"].get(); - if (time(nullptr) - opts->xcam_auto_recovery_hold_start > HOLD_TIME_3SEC) { opts->xcam_auto_recovery_step_loss = ((option & 0x01) != 0); } + if (time(nullptr) - opts->m_auto_recovery_detection.detect_hold_start > HOLD_TIME_3SEC) { opts->m_auto_recovery_detection.current_detect_value = ((option & 0x01) != 0); } } } - if (time(nullptr) - opts->xcam_auto_recovery_hold_start > HOLD_TIME_3SEC) { - if (print_json.contains("auto_recovery")) { opts->xcam_auto_recovery_step_loss = print_json["auto_recovery"].get(); } + if (time(nullptr) - opts->m_auto_recovery_detection.detect_hold_start > HOLD_TIME_3SEC) { + if (print_json.contains("auto_recovery")) { opts->m_auto_recovery_detection.current_detect_value = print_json["auto_recovery"].get(); } } } catch (...) {} @@ -117,38 +160,52 @@ void DevPrintOptionsParser::ParseDetectionV1_2(DevPrintOptions *opts, MachineObj void DevPrintOptionsParser::ParseDetectionV2_0(DevPrintOptions *opts, std::string print_json) { - if (time(nullptr) - opts->xcam_first_layer_hold_start > HOLD_TIME_3SEC) { - opts->xcam_first_layer_inspector = DevUtil::get_flag_bits(print_json, 12); + if (time(nullptr) - opts->m_first_layer_detection.detect_hold_start > HOLD_TIME_3SEC) { + opts->m_first_layer_detection.current_detect_value = DevUtil::get_flag_bits(print_json, 12); } - if (time(nullptr) - opts->xcam_ai_monitoring_hold_start > HOLD_COUNT_MAX) { - opts->xcam_ai_monitoring = DevUtil::get_flag_bits(print_json, 15); + if (time(nullptr) - opts->m_ai_monitoring_detection.detect_hold_start > HOLD_COUNT_MAX) { + opts->m_ai_monitoring_detection.current_detect_value = DevUtil::get_flag_bits(print_json, 15); switch (DevUtil::get_flag_bits(print_json, 13, 2)) { - case 0: opts->xcam_ai_monitoring_sensitivity = "never_halt"; break; - case 1: opts->xcam_ai_monitoring_sensitivity = "low"; break; - case 2: opts->xcam_ai_monitoring_sensitivity = "medium"; break; - case 3: opts->xcam_ai_monitoring_sensitivity = "high"; break; + case 0: opts->m_ai_monitoring_detection.current_detect_sensitivity_value = "never_halt"; break; + case 1: opts->m_ai_monitoring_detection.current_detect_sensitivity_value = "low"; break; + case 2: opts->m_ai_monitoring_detection.current_detect_sensitivity_value = "medium"; break; + case 3: opts->m_ai_monitoring_detection.current_detect_sensitivity_value = "high"; break; default: break; } } - if (time(nullptr) - opts->xcam_auto_recovery_hold_start > HOLD_COUNT_MAX){ - opts->xcam_auto_recovery_step_loss =DevUtil::get_flag_bits(print_json, 16); + if (time(nullptr) - opts->m_auto_recovery_detection.detect_hold_start > HOLD_COUNT_MAX){ + opts->m_auto_recovery_detection.current_detect_value = DevUtil::get_flag_bits(print_json, 16); } - if (time(nullptr) - opts->xcam_prompt_sound_hold_start > HOLD_TIME_3SEC) { - opts->xcam_allow_prompt_sound = DevUtil::get_flag_bits(print_json, 22); + if (time(nullptr) - opts->m_allow_prompt_sound_detection.detect_hold_start > HOLD_TIME_3SEC) { + opts->m_allow_prompt_sound_detection.current_detect_value = DevUtil::get_flag_bits(print_json, 22); } - if (time(nullptr) - opts->xcam_filament_tangle_detect_hold_start > HOLD_TIME_3SEC) { - opts->xcam_filament_tangle_detect = DevUtil::get_flag_bits(print_json, 23); + if (time(nullptr) - opts->m_filament_tangle_detection.detect_hold_start > HOLD_TIME_3SEC) { + opts->m_filament_tangle_detection.current_detect_value = DevUtil::get_flag_bits(print_json, 23); } } void DevPrintOptionsParser::ParseDetectionV2_1(DevPrintOptions *opts, std::string cfg) { - if (time(nullptr) - opts->idel_heating_protect_hold_strat > HOLD_TIME_3SEC) - opts->idel_heating_protect_enabled = DevUtil::get_flag_bits(cfg, 32, 2); + if (time(nullptr) - opts->m_idel_heating_protect_detection.detect_hold_start > HOLD_TIME_3SEC) + opts->m_idel_heating_protect_detection.current_detect_value = DevUtil::get_flag_bits(cfg, 32, 2); + + // Orca: further top-level cfg-string detection bits, parsed here alongside idle-heating. + if (time(nullptr) - opts->m_purify_air_at_print_end.detect_hold_start > HOLD_TIME_3SEC) + opts->m_purify_air_at_print_end.current_detect_value = DevUtil::get_flag_bits(cfg, 36, 2); + + // Smart nozzle blob detection mode: cfg bits 43-44 (2 bits), 0=off, 1=on, 2=auto + if (time(nullptr) - opts->m_smart_nozzle_blob_detection.detect_hold_start > HOLD_TIME_3SEC) + opts->m_smart_nozzle_blob_detection.current_detect_value = DevUtil::get_flag_bits(cfg, 43, 2); + + if (time(nullptr) - opts->m_snapshot_detection.detect_hold_start > HOLD_TIME_3SEC) { + opts->m_snapshot_detection.current_detect_value = DevUtil::get_flag_bits(cfg, 38, 2); + opts->m_snapshot_detection.is_support_detect = + opts->m_snapshot_detection.current_detect_value != 0 && opts->m_snapshot_detection.current_detect_value != 3; + } } void DevPrintOptions::SetPrintingSpeedLevel(DevPrintingSpeedLevel speed_level) @@ -163,75 +220,85 @@ void DevPrintOptions::SetPrintingSpeedLevel(DevPrintingSpeedLevel speed_level) } } +PrintOptionData* DevPrintOptions::GetDetectionOption(PrintOptionEnum print_option) +{ + auto it = m_detection_list.find(print_option); + if (it != m_detection_list.end()) + { + return it->second; + } + return nullptr; +} + int DevPrintOptions::command_xcam_control_ai_monitoring(bool on_off, std::string lvl) { bool print_halt = (lvl == "never_halt") ? false : true; - xcam_ai_monitoring = on_off; - xcam_ai_monitoring_hold_start = time(nullptr); - xcam_ai_monitoring_sensitivity = lvl; + m_ai_monitoring_detection.current_detect_value = on_off; + m_ai_monitoring_detection.detect_hold_start = time(nullptr); + m_ai_monitoring_detection.current_detect_sensitivity_value = lvl; return command_xcam_control("printing_monitor", on_off, m_obj, lvl); } int DevPrintOptions::command_xcam_control_idelheatingprotect_detector(bool on_off) { - idel_heating_protect_enabled = on_off; - idel_heating_protect_hold_strat = time(nullptr); + m_idel_heating_protect_detection.current_detect_value = on_off; + m_idel_heating_protect_detection.detect_hold_start = time(nullptr); return command_set_against_continued_heating_mode(on_off); } int DevPrintOptions::command_xcam_control_buildplate_marker_detector(bool on_off) { - xcam_buildplate_marker_detector = on_off; - xcam_buildplate_marker_hold_start = time(nullptr); + m_buildplate_mark_detection.current_detect_value = on_off; + m_buildplate_mark_detection.detect_hold_start = time(nullptr); return command_xcam_control("buildplate_marker_detector", on_off ,m_obj); } int DevPrintOptions::command_xcam_control_first_layer_inspector(bool on_off, bool print_halt) { - xcam_first_layer_inspector = on_off; - xcam_first_layer_hold_start = time(nullptr); + m_first_layer_detection.current_detect_value = on_off; + m_first_layer_detection.detect_hold_start = time(nullptr); return command_xcam_control("first_layer_inspector", on_off, m_obj); } int DevPrintOptions::command_xcam_control_auto_recovery_step_loss(bool on_off) { - xcam_auto_recovery_step_loss = on_off; - xcam_auto_recovery_hold_start = time(nullptr); + m_auto_recovery_detection.current_detect_value = on_off; + m_auto_recovery_detection.detect_hold_start = time(nullptr); return command_set_printing_option(on_off, m_obj); } int DevPrintOptions::command_xcam_control_allow_prompt_sound(bool on_off) { - xcam_allow_prompt_sound = on_off; - xcam_prompt_sound_hold_start = time(nullptr); + m_allow_prompt_sound_detection.current_detect_value = on_off; + m_allow_prompt_sound_detection.detect_hold_start = time(nullptr); return command_set_prompt_sound(on_off, m_obj); } int DevPrintOptions::command_xcam_control_filament_tangle_detect(bool on_off) { - xcam_filament_tangle_detect = on_off; - xcam_filament_tangle_detect_hold_start = time(nullptr); + m_filament_tangle_detection.current_detect_value = on_off; + m_filament_tangle_detection.detect_hold_start = time(nullptr); return command_set_filament_tangle_detect(on_off, m_obj); } void DevPrintOptions::parse_auto_recovery_step_loss_status(int flag) { - if (time(nullptr) - xcam_auto_recovery_hold_start > HOLD_TIME_3SEC) { - xcam_auto_recovery_step_loss = ((flag >> 4) & 0x1) != 0; + if (time(nullptr) - m_auto_recovery_detection.detect_hold_start > HOLD_TIME_3SEC) { + m_auto_recovery_detection.current_detect_value = ((flag >> 4) & 0x1) != 0; } } void DevPrintOptions::parse_allow_prompt_sound_status(int flag) { - if (time(nullptr) - xcam_prompt_sound_hold_start > HOLD_TIME_3SEC) { - xcam_allow_prompt_sound = ((flag >> 17) & 0x1) != 0; + if (time(nullptr) - m_allow_prompt_sound_detection.detect_hold_start > HOLD_TIME_3SEC) { + m_allow_prompt_sound_detection.current_detect_value = ((flag >> 17) & 0x1) != 0; } } void DevPrintOptions::parse_filament_tangle_detect_status(int flag) { - if (time(nullptr) - xcam_filament_tangle_detect_hold_start > HOLD_TIME_3SEC) { - xcam_filament_tangle_detect = ((flag >> 20) & 0x1) != 0; + if (time(nullptr) - m_filament_tangle_detection.detect_hold_start > HOLD_TIME_3SEC) { + m_filament_tangle_detection.current_detect_value = ((flag >> 20) & 0x1) != 0; } } @@ -289,11 +356,5 @@ int DevPrintOptions::command_set_filament_tangle_detect(bool filament_tangle_det return obj->publish_json(j); } - - - - - - } -// namespace Slic3r \ No newline at end of file +// namespace Slic3r diff --git a/src/slic3r/GUI/DeviceCore/DevPrintOptions.h b/src/slic3r/GUI/DeviceCore/DevPrintOptions.h index 46461af561..fce5fcd456 100644 --- a/src/slic3r/GUI/DeviceCore/DevPrintOptions.h +++ b/src/slic3r/GUI/DeviceCore/DevPrintOptions.h @@ -1,4 +1,5 @@ #pragma once +#include #include #include "slic3r/Utils/json_diff.hpp" #include @@ -9,17 +10,47 @@ namespace Slic3r { class MachineObject; +// Identifies a print-detection option tracked in DevPrintOptions::m_detection_list. +enum class PrintOptionEnum +{ + AI_Monitoring, + First_Layer_Detection, + Buildplate_Mark_Detection, + Buildplate_Align_Detection, + Auto_Recovery_Detection, + Allow_Prompt_Sound_Detection, + Filament_Tangle_Detection, + Idle_Heating_Protect_Detection, + Purify_Air_At_Print_End, + Snapshot_Detection, + FOD_Check_Detection, + Displacement_Detection, + Smart_Nozzle_Blob_Detection, +}; + +// State of a single print-detection option. +struct PrintOptionData +{ + bool is_support_detect{false}; // some detections have no supporting field + int current_detect_value{-1}; // -1 until parsed; otherwise the reported value + std::string current_detect_sensitivity_value; + time_t detect_hold_start{0}; // suppresses parsed overwrites for a short hold +}; + class DevPrintOptions { friend class DevPrintOptionsParser; public: - DevPrintOptions(MachineObject* obj): m_obj(obj) {} + DevPrintOptions(MachineObject* obj); public: void SetPrintingSpeedLevel(DevPrintingSpeedLevel speed_level); DevPrintingSpeedLevel GetPrintingSpeedLevel() const { return m_speed_level;} + // Returns the holder for a tracked detection option, or nullptr if not tracked. + PrintOptionData* GetDetectionOption(PrintOptionEnum print_option); + // detect options int command_xcam_control_ai_monitoring(bool on_off, std::string lvl); int command_xcam_control_first_layer_inspector(bool on_off, bool print_halt); @@ -44,37 +75,37 @@ public: void parse_allow_prompt_sound_status(int flag); void parse_filament_tangle_detect_status(int flag); - bool GetAiMonitoring() const { return xcam_ai_monitoring; } - bool GetFirstLayerInspector() const{ return xcam_first_layer_inspector; } - bool GetBuildplateMarkerDetector() const { return xcam_buildplate_marker_detector; } - bool GetAutoRecoveryStepLoss() const { return xcam_auto_recovery_step_loss; } - bool GetAllowPromptSound() const { return xcam_allow_prompt_sound; } - bool GetFilamentTangleDetect() const { return xcam_filament_tangle_detect; } - int GetIdelHeatingProtectEenabled() const { return idel_heating_protect_enabled; } - string GetAiMonitoringSensitivity() const { return xcam_ai_monitoring_sensitivity; } + // Thin wrappers preserved for existing callers; read from the detection-option map. + bool GetAiMonitoring() const { return m_ai_monitoring_detection.current_detect_value == 1; } + bool GetFirstLayerInspector() const{ return m_first_layer_detection.current_detect_value == 1; } + bool GetBuildplateMarkerDetector() const { return m_buildplate_mark_detection.current_detect_value == 1; } + bool GetAutoRecoveryStepLoss() const { return m_auto_recovery_detection.current_detect_value == 1; } + bool GetAllowPromptSound() const { return m_allow_prompt_sound_detection.current_detect_value == 1; } + bool GetFilamentTangleDetect() const { return m_filament_tangle_detection.current_detect_value == 1; } + int GetIdelHeatingProtectEenabled() const { return m_idel_heating_protect_detection.current_detect_value; } + std::string GetAiMonitoringSensitivity() const { return m_ai_monitoring_detection.current_detect_sensitivity_value; } private: // print option DevPrintingSpeedLevel m_speed_level = SPEED_LEVEL_INVALID; - // detect options - bool xcam_ai_monitoring{false}; + // detection options (7 existing + 6 newly parsed) + PrintOptionData m_ai_monitoring_detection; + PrintOptionData m_first_layer_detection; + PrintOptionData m_buildplate_mark_detection; + PrintOptionData m_buildplate_align_detection; + PrintOptionData m_auto_recovery_detection; + PrintOptionData m_allow_prompt_sound_detection; + PrintOptionData m_filament_tangle_detection; + PrintOptionData m_idel_heating_protect_detection; + PrintOptionData m_purify_air_at_print_end; + PrintOptionData m_snapshot_detection; + PrintOptionData m_fod_check_detection; + PrintOptionData m_displacement_detection; + PrintOptionData m_smart_nozzle_blob_detection; - std::string xcam_ai_monitoring_sensitivity; - bool xcam_buildplate_marker_detector{false}; - bool xcam_first_layer_inspector{false}; - bool xcam_auto_recovery_step_loss{false}; - bool xcam_allow_prompt_sound{false}; - bool xcam_filament_tangle_detect{false}; - int idel_heating_protect_enabled = -1; - time_t xcam_ai_monitoring_hold_start = 0; - time_t xcam_buildplate_marker_hold_start = 0; - time_t xcam_first_layer_hold_start = 0; - time_t xcam_auto_recovery_hold_start = 0; - time_t xcam_prompt_sound_hold_start = 0; - time_t xcam_filament_tangle_detect_hold_start = 0; - time_t idel_heating_protect_hold_strat = 0; + std::map m_detection_list; MachineObject* m_obj;/*owner*/ }; @@ -93,4 +124,4 @@ public: static void ParseDetectionV2_1(DevPrintOptions *opts, std::string cfg); }; -} // namespace Slic3r \ No newline at end of file +} // namespace Slic3r