mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-09-22 08:22:58 +00:00
Merge branch 'main' into feat/plugin-feature
This commit is contained in:
@@ -12,6 +12,9 @@
|
||||
#include <vector>
|
||||
#include <optional>
|
||||
#include <memory>
|
||||
#include <unordered_map>
|
||||
#include <unordered_set>
|
||||
#include <vector>
|
||||
#include <wx/string.h>
|
||||
#include <wx/colour.h>
|
||||
|
||||
@@ -20,6 +23,7 @@
|
||||
namespace Slic3r
|
||||
{
|
||||
class MachineObject;
|
||||
struct DevFilamentDryingPreset;
|
||||
|
||||
/**
|
||||
* DevAmsTray - Represents a single filament tray/slot in an AMS unit or virtual tray.
|
||||
@@ -106,6 +110,8 @@ public:
|
||||
|
||||
// static
|
||||
static wxColour decode_color(const std::string& color);
|
||||
|
||||
std::optional<DevFilamentDryingPreset> get_ams_drying_preset() const;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -133,14 +139,67 @@ class DevAms
|
||||
{
|
||||
friend class DevFilaSystemParser;
|
||||
public:
|
||||
enum AmsType : int
|
||||
using AmsType = DevAmsType;
|
||||
static constexpr AmsType EXT_SPOOL = DevAmsType::EXT_SPOOL;
|
||||
static constexpr AmsType AMS = DevAmsType::AMS;
|
||||
static constexpr AmsType AMS_LITE = DevAmsType::AMS_LITE;
|
||||
static constexpr AmsType N3F = DevAmsType::N3F;
|
||||
static constexpr AmsType N3S = DevAmsType::N3S;
|
||||
static constexpr AmsType AMS_LITE_MIXED = DevAmsType::AMS_LITE_MIXED;
|
||||
|
||||
public:
|
||||
|
||||
enum class DryCtrlMode : int
|
||||
{
|
||||
DUMMY = 0,
|
||||
AMS = 1, // AMS
|
||||
AMS_LITE = 2, // AMS-Lite
|
||||
N3F = 3, // N3F
|
||||
N3S = 4, // N3S
|
||||
AMS_LITE_MIXED = 5, // AMS-Lite mixed (A2L / N9). Presents as AMS_LITE to generic callers; see GetAmsType()/IsAmsLiteMixed().
|
||||
Off = 0,
|
||||
OnTime = 1,
|
||||
OnHumidity = 2,
|
||||
};
|
||||
|
||||
enum class DryStatus : char
|
||||
{
|
||||
Off = 0,
|
||||
Checking = 1,
|
||||
Drying = 2,
|
||||
Cooling = 3,
|
||||
Stopping = 4,
|
||||
Error = 5,
|
||||
CannotStopHeatOutofControl = 6,
|
||||
PrdTesting = 7,
|
||||
};
|
||||
|
||||
enum class DrySubStatus
|
||||
{
|
||||
Off = 0,
|
||||
Heating = 1,
|
||||
Dehumidify = 2,
|
||||
};
|
||||
|
||||
enum class DryFanStatus : char
|
||||
{
|
||||
Off = 0,
|
||||
On = 1,
|
||||
};
|
||||
|
||||
enum class CannotDryReason : int
|
||||
{
|
||||
TaskOccupied = 0,
|
||||
InsufficientPower = 1,
|
||||
AmsBusy = 2,
|
||||
ConsumableAtAmsOutlet = 3,
|
||||
InitiatingAmsDrying = 4,
|
||||
NotSupportedIn2dMode = 5,
|
||||
DryingInProgress = 6,
|
||||
Upgrading = 7,
|
||||
InsufficientPowerNeedPluginPower = 8,
|
||||
FilamentAtAmsOutletManualUnload = 10,
|
||||
};
|
||||
|
||||
struct DrySettings
|
||||
{
|
||||
std::string dry_filament;
|
||||
int dry_temp = -1; // -1 means invalid
|
||||
int dry_hour = -1; // -1 means invalid, hours
|
||||
};
|
||||
|
||||
public:
|
||||
@@ -193,11 +252,20 @@ public:
|
||||
int GetHumidityLevel() const { return m_humidity_level; }
|
||||
int GetHumidityPercent() const { return m_humidity_percent; }
|
||||
|
||||
// Only N3F/N3S dry. Written explicitly (not `> AMS_LITE`) so the new AMS_LITE_MIXED (N9) is
|
||||
// excluded; identical to the old expression for every pre-existing type.
|
||||
bool SupportDrying() const { return (m_ams_type == N3F) || (m_ams_type == N3S); }
|
||||
bool SupportDrying() const { return m_ams_type == DevAmsType::N3F || m_ams_type == DevAmsType::N3S; }
|
||||
int GetLeftDryTime() const { return m_left_dry_time; }
|
||||
|
||||
// remote drying control
|
||||
bool IsSupportRemoteDry(const MachineObject* obj) const;
|
||||
std::optional<DryStatus> GetDryStatus() const { return m_dry_status; };
|
||||
std::optional<DrySubStatus> GetDrySubStatus() const { return m_dry_sub_status; }
|
||||
std::optional<DryFanStatus> GetFan1Status() const { return m_dry_fan1_status; }
|
||||
std::optional<DryFanStatus> GetFan2Status() const { return m_dry_fan2_status; }
|
||||
std::optional<std::vector<CannotDryReason>> GetCannotDryReason() const { return m_dry_cannot_reasons; }
|
||||
std::optional<DrySettings> GetDrySettings() const { return m_dry_settings; };
|
||||
|
||||
bool AmsIsDrying();
|
||||
|
||||
private:
|
||||
AmsType m_ams_type = AmsType::AMS;
|
||||
std::string m_ams_id;
|
||||
@@ -218,6 +286,14 @@ private:
|
||||
int m_humidity_level = 5; // AmsType::AMS
|
||||
int m_humidity_percent = -1; // N3F N3S, the percentage, -1 means invalid. eg. 100 means 100%
|
||||
int m_left_dry_time = 0;
|
||||
|
||||
// see is_support_remote_dry
|
||||
std::optional<DryStatus> m_dry_status;
|
||||
std::optional<DrySubStatus> m_dry_sub_status;
|
||||
std::optional<DryFanStatus> m_dry_fan1_status;
|
||||
std::optional<DryFanStatus> m_dry_fan2_status;
|
||||
std::optional<std::vector<CannotDryReason>> m_dry_cannot_reasons;
|
||||
std::optional<DrySettings> m_dry_settings;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -299,7 +375,11 @@ public:
|
||||
public:
|
||||
// ctrls
|
||||
int CtrlAmsReset() const;
|
||||
|
||||
|
||||
// crtl
|
||||
int CtrlAmsStartDryingHour(int ams_id, std::string filament_type, int tag_temp, int tag_duration_hour, bool rotate_tray, int cooling_temp, bool close_power_conflict = false) const;
|
||||
int CtrlAmsStopDrying(int ams_id) const;
|
||||
|
||||
public:
|
||||
static bool IsBBL_Filament(std::string tag_uid);
|
||||
|
||||
@@ -339,4 +419,18 @@ public:
|
||||
static void ParseAgentFilament(const json& data, MachineObject* obj, DevFilaSystem* system);
|
||||
};
|
||||
|
||||
struct DevFilamentDryingPreset
|
||||
{
|
||||
std::string filament_id;
|
||||
|
||||
std::unordered_set<DevAmsType> ams_limitations; // only use ams types in the set
|
||||
std::unordered_map<DevAmsType, float> filament_dev_ams_drying_time_on_idle; // hour
|
||||
std::unordered_map<DevAmsType, float> filament_dev_ams_drying_temperature_on_idle;
|
||||
std::unordered_map<DevAmsType, float> filament_dev_ams_drying_time_on_print; // hour
|
||||
std::unordered_map<DevAmsType, float> filament_dev_ams_drying_temperature_on_print;
|
||||
float filament_dev_drying_cooling_temperature = 0.0f;
|
||||
float filament_dev_drying_softening_temperature = 0.0f;
|
||||
float filament_dev_ams_drying_heat_distortion_temperature = 0.0f;
|
||||
};
|
||||
|
||||
}// namespace Slic3r
|
||||
Reference in New Issue
Block a user