From 578517c9503e6e81d39c2b317c8644fa74f4c2d2 Mon Sep 17 00:00:00 2001 From: YuSanka Date: Mon, 8 Apr 2024 12:23:13 +0200 Subject: [PATCH 01/25] Material Settings: Added tilt parameters + "area_fill" is moved to Material Settings + "Tilt times" group is removed from SLA Printer Settings + Processed disabling/enabling of some parameters in respect to "use_tilt" + Implemented configuration option for vector of Enums --- src/libslic3r/Config.cpp | 10 +- src/libslic3r/Config.hpp | 240 ++++++++++++++++++ src/libslic3r/Preset.cpp | 9 +- src/libslic3r/PrintConfig.cpp | 321 ++++++++++++++++++++++++ src/libslic3r/PrintConfig.hpp | 42 +++- src/libslic3r/SLAPrint.cpp | 19 ++ src/libslic3r/SLAPrintSteps.cpp | 2 +- src/slic3r/GUI/Field.cpp | 9 +- src/slic3r/GUI/OptionsGroup.cpp | 10 +- src/slic3r/GUI/Search.cpp | 11 +- src/slic3r/GUI/Tab.cpp | 165 +++++++++--- src/slic3r/GUI/Tab.hpp | 2 + src/slic3r/GUI/UnsavedChangesDialog.cpp | 10 +- 13 files changed, 807 insertions(+), 43 deletions(-) diff --git a/src/libslic3r/Config.cpp b/src/libslic3r/Config.cpp index 1ad7e44c72..e26a599971 100644 --- a/src/libslic3r/Config.cpp +++ b/src/libslic3r/Config.cpp @@ -294,6 +294,7 @@ ConfigOption* ConfigOptionDef::create_empty_option() const case coBool: return new ConfigOptionBool(); case coBools: return new ConfigOptionBools(); case coEnum: return new ConfigOptionEnumGeneric(this->enum_def->m_enum_keys_map); + case coEnums: return new ConfigOptionEnumsGeneric(this->enum_def->m_enum_keys_map); default: throw ConfigurationError(std::string("Unknown option type for option ") + this->label); } } @@ -304,7 +305,10 @@ ConfigOption* ConfigOptionDef::create_default_option() const if (this->default_value) return (this->default_value->type() == coEnum) ? // Special case: For a DynamicConfig, convert a templated enum to a generic enum. - new ConfigOptionEnumGeneric(this->enum_def->m_enum_keys_map, this->default_value->getInt()) : + new ConfigOptionEnumGeneric(this->enum_def->m_enum_keys_map, this->default_value->getInt()) : + (this->default_value->type() == coEnums) ? + // Special case: For a DynamicConfig, convert a templated enums to a generic enums. + new ConfigOptionEnumsGeneric(this->enum_def->m_enum_keys_map, this->default_value->getInts()) : this->default_value->clone(); return this->create_empty_option(); } @@ -333,7 +337,7 @@ void ConfigDef::finalize() // Validate & finalize open & closed enums. for (std::pair &kvp : options) { ConfigOptionDef& def = kvp.second; - if (def.type == coEnum) { + if (def.type == coEnum || def.type == coEnums) { assert(def.enum_def); assert(def.enum_def->is_valid_closed_enum()); assert(! def.is_gui_type_enum_open()); @@ -1467,6 +1471,7 @@ CEREAL_REGISTER_TYPE(Slic3r::ConfigOptionBool) CEREAL_REGISTER_TYPE(Slic3r::ConfigOptionBools) CEREAL_REGISTER_TYPE(Slic3r::ConfigOptionBoolsNullable) CEREAL_REGISTER_TYPE(Slic3r::ConfigOptionEnumGeneric) +CEREAL_REGISTER_TYPE(Slic3r::ConfigOptionEnumsGeneric) CEREAL_REGISTER_TYPE(Slic3r::ConfigBase) CEREAL_REGISTER_TYPE(Slic3r::DynamicConfig) @@ -1508,4 +1513,5 @@ CEREAL_REGISTER_POLYMORPHIC_RELATION(Slic3r::ConfigOptionSingle, Slic3r::C CEREAL_REGISTER_POLYMORPHIC_RELATION(Slic3r::ConfigOptionVector, Slic3r::ConfigOptionBools) CEREAL_REGISTER_POLYMORPHIC_RELATION(Slic3r::ConfigOptionVector, Slic3r::ConfigOptionBoolsNullable) CEREAL_REGISTER_POLYMORPHIC_RELATION(Slic3r::ConfigOptionInt, Slic3r::ConfigOptionEnumGeneric) +CEREAL_REGISTER_POLYMORPHIC_RELATION(Slic3r::ConfigOptionInts, Slic3r::ConfigOptionEnumsGeneric) CEREAL_REGISTER_POLYMORPHIC_RELATION(Slic3r::ConfigBase, Slic3r::DynamicConfig) diff --git a/src/libslic3r/Config.hpp b/src/libslic3r/Config.hpp index 46126a621c..7f922481e2 100644 --- a/src/libslic3r/Config.hpp +++ b/src/libslic3r/Config.hpp @@ -214,6 +214,8 @@ enum ConfigOptionType { coBools = coBool + coVectorType, // a generic enum coEnum = 9, + // vector of enum values + coEnums = coEnum + coVectorType, }; enum ConfigOptionMode { @@ -290,6 +292,7 @@ public: // Set a value from a ConfigOption. The two options should be compatible. virtual void set(const ConfigOption *option) = 0; virtual int getInt() const { throw BadOptionTypeException("Calling ConfigOption::getInt on a non-int ConfigOption"); } + virtual std::vector getInts() const { throw BadOptionTypeException("Calling ConfigOption::getInts on a non-ints ConfigOption"); } virtual double getFloat() const { throw BadOptionTypeException("Calling ConfigOption::getFloat on a non-float ConfigOption"); } virtual bool getBool() const { throw BadOptionTypeException("Calling ConfigOption::getBool on a non-boolean ConfigOption"); } virtual void setInt(int /* val */) { throw BadOptionTypeException("Calling ConfigOption::setInt on a non-int ConfigOption"); } @@ -1741,6 +1744,113 @@ public: } }; +template +class ConfigOptionEnums : public ConfigOptionVector +{ +public: + // by default, use the first value (0) of the T enum type + ConfigOptionEnums() : ConfigOptionVector() {} + explicit ConfigOptionEnums(size_t n, const T& value) : ConfigOptionVector(n, value) {} + explicit ConfigOptionEnums(std::initializer_list il) : ConfigOptionVector(std::move(il)) {} + explicit ConfigOptionEnums(const std::vector& values) : ConfigOptionVector(values) {} + + static ConfigOptionType static_type() { return coEnums; } + ConfigOptionType type() const override { return static_type(); } + ConfigOption* clone() const override { return new ConfigOptionEnums(*this); } + ConfigOptionEnums& operator=(const ConfigOption *opt) { this->set(opt); return *this; } + bool operator==(const ConfigOptionEnums &rhs) const throw() { return this->values == rhs.values; } + bool operator< (const ConfigOptionEnums &rhs) const throw() { return this->values < rhs.values; } + bool is_nil(size_t) const override { return false; } + + std::vector getInts() const override { + std::vector ret; + ret.reserve(this->values.size()); + for (const auto& v : this->values) + ret.push_back(int(v)); + return ret; + } + + bool operator==(const ConfigOption& rhs) const override + { + if (rhs.type() != this->type()) + throw ConfigurationError("ConfigOptionEnums: Comparing incompatible types"); + // rhs could be of the following type: ConfigOptionEnumsGeneric or ConfigOptionEnums + return this->getInts() == rhs.getInts(); + } + + void set(const ConfigOption* rhs) override { + if (rhs->type() != this->type()) + throw ConfigurationError("ConfigOptionEnums: Assigning an incompatible type"); + // rhs could be of the following type: ConfigOptionEnumGeneric or ConfigOptionEnum + std::vector ret; + std::vector rhs_vals = rhs->getInts(); + ret.reserve(rhs_vals.size()); + for (const int& v : rhs_vals) + ret.push_back(T(v)); + this->values = ret; + } + + std::string serialize() const override + { + const t_config_enum_names& names = ConfigOptionEnum::get_enum_names(); + std::ostringstream ss; + for (const T& v : this->values) { + assert(static_cast(v) < int(names.size())); + if (&v != &this->values.front()) + ss << "," << names[static_cast(v)]; + } + return ss.str(); + } + + std::vector vserialize() const override + { + std::vector vv; + vv.reserve(this->values.size()); + for (const T v : this->values) { + std::ostringstream ss; + serialize_single_value(ss, int(v)); + vv.push_back(ss.str()); + } + return vv; + } + + bool deserialize(const std::string& str, bool append = false) override + { + if (!append) + this->values.clear(); + std::istringstream is(str); + std::string item_str; + while (std::getline(is, item_str, ',')) { + boost::trim(item_str); + if (item_str == "nil") { + throw ConfigurationError("Deserializing nil into a non-nullable object"); + } + else { + std::istringstream iss(item_str); + int value; + iss >> value; + this->values.push_back(static_cast(value)); + } + } + return true; + } + + static bool from_string(const std::string &str, T &value) + { + const t_config_enum_values &enum_keys_map = ConfigOptionEnum::get_enum_values(); + auto it = enum_keys_map.find(str); + if (it == enum_keys_map.end()) + return false; + value = static_cast(it->second); + return true; + } + +private: + void serialize_single_value(std::ostringstream& ss, const int v) const { + ss << v; + } +}; + // Generic enum configuration value. // We use this one in DynamicConfig objects when creating a config value object for ConfigOptionType == coEnum. // In the StaticConfig, it is better to use the specialized ConfigOptionEnum containers. @@ -1797,6 +1907,132 @@ private: template void serialize(Archive& ar) { ar(cereal::base_class(this)); } }; +template +class ConfigOptionEnumsGenericTempl : public ConfigOptionIntsTempl +{ +public: + ConfigOptionEnumsGenericTempl(const t_config_enum_values* keys_map = nullptr) : keys_map(keys_map) {} + explicit ConfigOptionEnumsGenericTempl(const t_config_enum_values* keys_map, std::vector values) : keys_map(keys_map) { this->values = values; } + + const t_config_enum_values* keys_map; + + ConfigOptionEnumsGenericTempl() : ConfigOptionIntsTempl() {} + explicit ConfigOptionEnumsGenericTempl(size_t n, int value) : ConfigOptionIntsTempl(n, value) {} + explicit ConfigOptionEnumsGenericTempl(std::initializer_list il) : ConfigOptionIntsTempl(std::move(il)) {} + explicit ConfigOptionEnumsGenericTempl(const std::vector& v) : ConfigOptionIntsTempl(v) {} + explicit ConfigOptionEnumsGenericTempl(std::vector&& v) : ConfigOptionIntsTempl(std::move(v)) {} + + static ConfigOptionType static_type() { return coEnums; } + ConfigOptionType type() const override { return static_type(); } + ConfigOption* clone() const override { return new ConfigOptionEnumsGenericTempl(*this); } + ConfigOptionEnumsGenericTempl& operator= (const ConfigOption* opt) { this->set(opt); return *this; } + bool operator==(const ConfigOptionEnumsGenericTempl& rhs) const throw() { return this->values == rhs.values; } + bool operator< (const ConfigOptionEnumsGenericTempl& rhs) const throw() { return this->values < rhs.values; } + std::vector getInts() const override { return this->values; } + + bool operator==(const ConfigOption& rhs) const override + { + if (rhs.type() != this->type()) + throw ConfigurationError("ConfigOptionEnumsGeneric: Comparing incompatible types"); + // rhs could be of the following type: ConfigOptionEnumsGeneric or ConfigOptionEnums + return this->values == rhs.getInts(); + } + + void set(const ConfigOption* rhs) override { + if (rhs->type() != this->type()) + throw ConfigurationError("ConfigOptionEnumsGeneric: Assigning an incompatible type"); + // rhs could be of the following type: ConfigOptionEnumsGeneric or ConfigOptionEnums + this->values = rhs->getInts(); + } + + // Could a special "nil" value be stored inside the vector, indicating undefined value? + bool nullable() const override { return NULLABLE; } + // Special "nil" value to be stored into the vector if this->supports_nil(). + static int nil_value() { return std::numeric_limits::max(); } + // A scalar is nil, or all values of a vector are nil. + bool is_nil() const override { for (auto v : this->values) if (v != nil_value()) return false; return true; } + bool is_nil(size_t idx) const override { return this->values[idx < this->values.size() ? idx : 0] == nil_value(); } + + int& get_at(size_t i) { + assert(!this->values.empty()); + return *reinterpret_cast(&((i < this->values.size()) ? this->values[i] : this->values.front())); + } + + int get_at(size_t i) const { return i < this->values.size() ? this->values[i] : this->values.front(); } + + std::string serialize() const override + { + std::ostringstream ss; + for (const int& v : this->values) { + if (&v != &this->values.front()) + ss << ","; + serialize_single_value(ss, v); + } + return ss.str(); + } + + std::vector vserialize() const override + { + std::vector vv; + vv.reserve(this->values.size()); + for (const int v : this->values) { + std::ostringstream ss; + serialize_single_value(ss, v); + vv.push_back(ss.str()); + } + return vv; + } + + bool deserialize(const std::string& str, bool append = false) override + { + if (!append) + this->values.clear(); + std::istringstream is(str); + std::string item_str; + while (std::getline(is, item_str, ',')) { + boost::trim(item_str); + if (item_str == "nil") { + if (NULLABLE) + this->values.push_back(nil_value()); + else + throw ConfigurationError("Deserializing nil into a non-nullable object"); + } + else { + auto it = this->keys_map->find(item_str); + if (it == this->keys_map->end()) + return false; + this->values.push_back(it->second); + } + } + return true; + } + +private: + void serialize_single_value(std::ostringstream& ss, const int v) const { + if (v == nil_value()) { + if (NULLABLE) + ss << "nil"; + else + throw ConfigurationError("Serializing NaN"); + } + else { + for (const auto& kvp : *this->keys_map) + if (kvp.second == v) { + ss << kvp.first; + return; + } + ss << std::string(); + } + } + + friend class cereal::access; + template void serialize(Archive& ar) { ar(cereal::base_class>(this)); } +}; + +using ConfigOptionEnumsGeneric = ConfigOptionEnumsGenericTempl; +using ConfigOptionEnumsGenericNullable = ConfigOptionEnumsGenericTempl; + + // Definition of values / labels for a combo box. // Mostly used for closed enums (when type == coEnum), but may be used for // open enums with ints resp. floats, if gui_type is set to GUIType::i_enum_open" resp. GUIType::f_enum_open. @@ -2043,6 +2279,7 @@ public: case coBool: { auto opt = new ConfigOptionBool(); archive(*opt); return opt; } case coBools: { auto opt = new ConfigOptionBools(); archive(*opt); return opt; } case coEnum: { auto opt = new ConfigOptionEnumGeneric(this->enum_def->m_enum_keys_map); archive(*opt); return opt; } + case coEnums: { auto opt = new ConfigOptionEnumsGeneric(this->enum_def->m_enum_keys_map); archive(*opt); return opt; } default: throw ConfigurationError(std::string("ConfigOptionDef::load_option_from_archive(): Unknown option type for option ") + this->opt_key); } } @@ -2077,6 +2314,7 @@ public: case coBool: archive(*static_cast(opt)); break; case coBools: archive(*static_cast(opt)); break; case coEnum: archive(*static_cast(opt)); break; + case coEnums: archive(*static_cast(opt)); break; default: throw ConfigurationError(std::string("ConfigOptionDef::save_option_to_archive(): Unknown option type for option ") + this->opt_key); } } @@ -2484,6 +2722,8 @@ public: // Thus the virtual method getInt() is used to retrieve the enum value. template ENUM opt_enum(const t_config_option_key &opt_key) const { return static_cast(this->option(opt_key)->getInt()); } + template + ENUM opt_enum(const t_config_option_key &opt_key, unsigned int idx) const { return dynamic_cast*>(this->option(opt_key))->get_at(idx);} bool opt_bool(const t_config_option_key &opt_key) const { return this->option(opt_key)->value != 0; } bool opt_bool(const t_config_option_key &opt_key, unsigned int idx) const { return this->option(opt_key)->get_at(idx) != 0; } diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index 27612f5281..d1e9e7dc65 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include @@ -606,6 +607,7 @@ static std::vector s_Preset_sla_material_options { "material_notes", "material_vendor", "material_print_speed", + "area_fill", "default_sla_material_profile", "compatible_prints", "compatible_prints_condition", "compatible_printers", "compatible_printers_condition", "inherits", @@ -629,13 +631,15 @@ static std::vector s_Preset_sla_material_options { "material_ow_elefant_foot_compensation" }; +static std::vector s_Preset_sla_material_options_all = boost::copy_range>(boost::join(s_Preset_sla_material_options, tilt_options())); + static std::vector s_Preset_sla_printer_options { "printer_technology", "bed_shape", "bed_custom_texture", "bed_custom_model", "max_print_height", "display_width", "display_height", "display_pixels_x", "display_pixels_y", "display_mirror_x", "display_mirror_y", "display_orientation", - "fast_tilt_time", "slow_tilt_time", "high_viscosity_tilt_time", "area_fill", + "fast_tilt_time", "slow_tilt_time", "high_viscosity_tilt_time", //"area_fill", "relative_correction", "relative_correction_x", "relative_correction_y", @@ -659,7 +663,7 @@ const std::vector& Preset::machine_limits_options() { return s_Pres // of the nozzle_diameter vector. const std::vector& Preset::nozzle_options() { return print_config_def.extruder_option_keys(); } const std::vector& Preset::sla_print_options() { return s_Preset_sla_print_options; } -const std::vector& Preset::sla_material_options() { return s_Preset_sla_material_options; } +const std::vector& Preset::sla_material_options() { return s_Preset_sla_material_options_all; } const std::vector& Preset::sla_printer_options() { return s_Preset_sla_printer_options; } const std::vector& Preset::printer_options() @@ -1378,6 +1382,7 @@ inline t_config_option_keys deep_diff(const ConfigBase &config_this, const Confi case coPercents:add_correct_opts_to_diff(opt_key, diff, config_other, config_this); break; case coPoints: add_correct_opts_to_diff(opt_key, diff, config_other, config_this); break; case coFloatsOrPercents: add_correct_opts_to_diff(opt_key, diff, config_other, config_this); break; + case coEnums: add_correct_opts_to_diff(opt_key, diff, config_other, config_this); break; default: diff.emplace_back(opt_key); break; } // "nozzle_diameter" is a vector option which contain info about diameter for each nozzle diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 069b4fbd4e..0d7a284ebc 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -264,6 +264,21 @@ static t_config_enum_values s_keys_map_TopOnePerimeterType { }; CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(TopOnePerimeterType) +static const t_config_enum_values s_keys_map_TiltProfiles{ + { "homingFast", tpHomingFast, }, + { "homingSlow", tpHomingSlow, }, + { "moveFast", tpMoveFast, }, + { "moveSlow", tpMoveSlow, }, + { "layer", tpLayer, }, + { "layerMove", tpLayerMove, }, + { "superSlow", tpSuperSlow, }, + { "resinSensor", tpResinSensor, }, + { "layerMoveSlow", tpLayerMoveSlow,}, + { "layerRelease", tpLayerRelease, }, + { "layerMoveFast", tpLayerMoveFast } +}; +CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(TiltProfiles) + static void assign_printer_technology_to_unknown(t_optiondef_map &options, PrinterTechnology printer_technology) { for (std::pair &kvp : options) @@ -284,6 +299,7 @@ PrintConfigDef::PrintConfigDef() this->init_extruder_option_keys(); assign_printer_technology_to_unknown(this->options, ptFFF); this->init_sla_params(); + this->init_sla_tilt_params(); assign_printer_technology_to_unknown(this->options, ptSLA); this->finalize(); } @@ -4467,6 +4483,207 @@ void PrintConfigDef::init_sla_params() } } +// SLA Materials "sub-presets" settings +void PrintConfigDef::init_sla_tilt_params() +{ + ConfigOptionDef* def; + + def = this->add("delay_before_exposure_ms", coFloats); + def->full_label = L("Delay before exposure"); + def->tooltip = L("Delay time before exposure"); + def->sidetext = L("s"); + def->min = 0; + def->max = 30; + def->mode = comExpert; + def->set_default_value(new ConfigOptionFloats({ 3., 3.})); + + def = this->add("delay_after_exposure_ms", coFloats); + def->full_label = L("Delay after exposure"); + def->tooltip = L("Delay time after exposure"); + def->sidetext = L("s"); + def->min = 0; + def->max = 30; + def->mode = comExpert; + def->set_default_value(new ConfigOptionFloats({ 0., 0.})); + + def = this->add("tower_hop_height_nm", coInts); + def->full_label = L("Tower hop height"); + def->tooltip = L("Tower hop height"); + def->sidetext = L("mm"); + def->min = 0; + def->max = 100; + def->mode = comExpert; + def->set_default_value(new ConfigOptionInts({ 0, 0})); + + //ysFIXME + def = this->add("tower_profile", coEnums); + def->full_label = L("Tower profile"); + def->tooltip = L("Tower profile"); + def->mode = comExpert; + def->set_enum({ + { "homingFast", L("Homing Fast"), }, + { "homingSlow", L("Homing Slow"), }, + { "moveFast", L("Move Fast"), }, + { "moveSlow", L("Move Slow"), }, + { "layer", L("Layer"), }, + { "layerMove", L("Layer Move"), }, + { "superSlow", L("Super Slow"), }, + { "resinSensor", L("Resin Sensor"), }, + }); + def->set_default_value(new ConfigOptionEnums({ tpLayer, tpLayer })); + + def = this->add("tilt_down_initial_profile", coEnums); + def->full_label = L("Tilt down initial profile"); + def->tooltip = L("Tilt down initial profile"); + def->mode = comExpert; + def->set_enum({ + { "homingFast", L("Homing Fast"), }, + { "homingSlow", L("Homing Slow"), }, + { "moveFast", L("Move Fast"), }, + { "moveSlow", L("Move Slow"), }, + { "layerMoveSlow", L("Layer Move Slow"),}, + { "layerRelease", L("Layer Release"), }, + { "layerMoveFast", L("Layer Move Fast") }, + { "superSlow", L("Super Slow"), }, + }); + def->set_default_value(new ConfigOptionEnums({ tpLayerMoveFast, tpLayerMoveFast })); + + def = this->add("tilt_down_finish_profile", coEnums); + def->full_label = L("Tilt down finish profile"); + def->tooltip = L("Tilt down finish profile"); + def->mode = comExpert; + def->set_enum({ + { "homingFast", L("Homing Fast"), }, + { "homingSlow", L("Homing Slow"), }, + { "moveFast", L("Move Fast"), }, + { "moveSlow", L("Move Slow"), }, + { "layerMoveSlow", L("Layer Move Slow"),}, + { "layerRelease", L("Layer Release"), }, + { "layerMoveFast", L("Layer Move Fast") }, + { "superSlow", L("Super Slow"), }, + }); + def->set_default_value(new ConfigOptionEnums({ tpLayerMoveSlow, tpLayerMoveSlow })); + + def = this->add("tilt_up_initial_profile", coEnums); + def->full_label = L("Tilt up initial profile"); + def->tooltip = L("Tilt up initial profile"); + def->mode = comExpert; + def->set_enum({ + { "homingFast", L("Homing Fast"), }, + { "homingSlow", L("Homing Slow"), }, + { "moveFast", L("Move Fast"), }, + { "moveSlow", L("Move Slow"), }, + { "layerMoveSlow", L("Layer Move Slow"),}, + { "layerRelease", L("Layer Release"), }, + { "layerMoveFast", L("Layer Move Fast") }, + { "superSlow", L("Super Slow"), }, + }); + def->set_default_value(new ConfigOptionEnums({ tpMoveFast, tpMoveFast })); + + def = this->add("tilt_up_finish_profile", coEnums); + def->full_label = L("Tilt up finish profile"); + def->tooltip = L("Tilt up finish profile"); + def->mode = comExpert; + def->set_enum({ + { "homingFast", L("Homing Fast"), }, + { "homingSlow", L("Homing Slow"), }, + { "moveFast", L("Move Fast"), }, + { "moveSlow", L("Move Slow"), }, + { "layerMoveSlow", L("Layer Move Slow"),}, + { "layerRelease", L("Layer Release"), }, + { "layerMoveFast", L("Layer Move Fast") }, + { "superSlow", L("Super Slow"), }, + }); + def->set_default_value(new ConfigOptionEnums({ tpLayerMoveFast, tpLayerMoveFast })); + + def = this->add("use_tilt", coBools); + def->full_label = L("Use tilt"); + def->tooltip = L("Use tilt"); + def->mode = comExpert; + def->set_default_value(new ConfigOptionBools({ true, true })); + + def = this->add("tilt_down_offset_steps", coInts); + def->full_label = L("Tilt down offset steps"); + def->tooltip = L("Tilt down offset steps"); + def->sidetext = L("μ-steps"); + def->min = 0; + def->max = 10000; + def->mode = comExpert; + def->set_default_value(new ConfigOptionInts({ 0, 0 })); + + def = this->add("tilt_down_offset_delay_ms", coFloats); + def->full_label = L("Tilt down offset delay"); + def->tooltip = L("Tilt down offset delay"); + def->sidetext = L("s"); + def->min = 0; + def->max = 20; + def->mode = comExpert; + def->set_default_value(new ConfigOptionFloats({ 0., 0. })); + + def = this->add("tilt_down_cycles", coInts); + def->full_label = L("Tilt down cycles"); + def->tooltip = L("Tilt down cycles"); + def->min = 0; + def->max = 10; + def->mode = comExpert; + def->set_default_value(new ConfigOptionInts({ 1, 1 })); + + def = this->add("tilt_down_delay_ms", coFloats); + def->full_label = L("Tilt down delay"); + def->tooltip = L("Tilt down delay"); + def->sidetext = L("s"); + def->min = 0; + def->max = 20; + def->mode = comExpert; + def->set_default_value(new ConfigOptionFloats({ 0., 0. })); + + def = this->add("tilt_up_offset_steps", coInts); + def->full_label = L("Tilt up offset steps"); + def->tooltip = L("Tilt up offset steps"); + def->sidetext = L("μ-steps"); + def->min = 0; + def->max = 10000; + def->mode = comExpert; + def->set_default_value(new ConfigOptionInts({ 1200, 1200 })); + + def = this->add("tilt_up_offset_delay_ms", coFloats); + def->full_label = L("Tilt up offset delay"); + def->tooltip = L("Tilt up offset delay"); + def->sidetext = L("s"); + def->min = 0; + def->max = 20; + def->mode = comExpert; + def->set_default_value(new ConfigOptionFloats({ 0., 0. })); + + def = this->add("tilt_up_cycles", coInts); + def->full_label = L("Tilt up cycles"); + def->tooltip = L("Tilt up cycles"); + def->min = 0; + def->max = 10; + def->mode = comExpert; + def->set_default_value(new ConfigOptionInts({ 1, 1 })); + + def = this->add("tilt_up_delay_ms", coFloats); + def->full_label = L("Tilt up delay"); + def->tooltip = L("Tilt up delay"); + def->sidetext = L("s"); + def->min = 0; + def->max = 20; + def->mode = comExpert; + def->set_default_value(new ConfigOptionFloats({ 0., 0. })); + + def = this->add("moves_time_ms", coFloats); + def->full_label = L("Moves time"); + def->tooltip = L("Moves time"); + def->sidetext = L("s"); + def->min = 0; + def->max = 60; + def->mode = comExpert; + def->set_default_value(new ConfigOptionFloats({ 4.5, 4.5 })); + +} + + // Ignore the following obsolete configuration keys: static std::set PrintConfigDef_ignore = { "clip_multipart_objects", @@ -4741,6 +4958,66 @@ void DynamicPrintConfig::normalize_fdm() opt_wall_transition_length->value = std::max(opt_wall_transition_length->value, 0.001); } +static std::vector s_Preset_sla_tilt_options{ + "delay_before_exposure_ms" + ,"delay_after_exposure_ms" + ,"tower_hop_height_nm" + ,"tower_profile" + ,"use_tilt" + ,"tilt_down_initial_profile" + ,"tilt_down_offset_steps" + ,"tilt_down_offset_delay_ms" + ,"tilt_down_finish_profile" + ,"tilt_down_cycles" + ,"tilt_down_delay_ms" + ,"tilt_up_initial_profile" + ,"tilt_up_offset_steps" + ,"tilt_up_offset_delay_ms" + ,"tilt_up_finish_profile" + ,"tilt_up_cycles" + ,"tilt_up_delay_ms" + ,"moves_time_ms" +}; + +const std::vector& tilt_options() { return s_Preset_sla_tilt_options; } + +// Default values containe option pair of values (Below and Above) for each titl modes +// (Slow, Fast, HighViscosity and NoTilt) + +const std::map tilt_options_floats_defs = +{ + {"delay_before_exposure_ms", ConfigOptionFloats({ 3., 3., 0., 1., 3.5, 3.5, 0., 0. }) } , + {"delay_after_exposure_ms", ConfigOptionFloats({ 0., 0., 0., 0., 0., 0., 0., 0. }) } , + {"tilt_down_offset_delay_ms", ConfigOptionFloats({ 0., 0., 0., 0., 0., 0., 0., 0. }) } , + {"tilt_down_delay_ms", ConfigOptionFloats({ 0., 0., 0., 0., 0., 0., 0., 0. }) } , + {"tilt_up_offset_delay_ms", ConfigOptionFloats({ 0., 0., 0., 0., 0., 0., 0., 0. }) } , + {"tilt_up_delay_ms", ConfigOptionFloats({ 0., 0., 0., 0., 0., 0., 0., 0. }) } , + {"moves_time_ms", ConfigOptionFloats({ 4.5, 4.5, 2.1, 4.3, 14.25, 14.25, 0., 0. }) } , +}; + +const std::map tilt_options_ints_defs = +{ + {"tower_hop_height_nm", ConfigOptionInts({ 0, 0, 0, 0, 5, 5, 0, 0 }) } , + {"tilt_down_offset_steps", ConfigOptionInts({ 0, 0, 0, 0, 2200, 2200, 0, 0 }) } , + {"tilt_down_cycles", ConfigOptionInts({ 1, 1, 1, 1, 1, 1, 0, 0 }) } , + {"tilt_up_offset_steps", ConfigOptionInts({ 1200, 1200, 600, 600, 2200, 2200, 0, 0 }) } , + {"tilt_up_cycles", ConfigOptionInts({ 1, 1, 1, 1, 1, 1, 0, 0 }) } , +}; + +const std::map tilt_options_bools_defs = +{ + {"use_tilt", ConfigOptionBools({ true, true, true, true, true, true, false, false })} , +}; + +const std::map> tilt_options_enums_defs = +{ + {"tower_profile", ConfigOptionEnums({ tpLayer, tpLayer, tpLayer, tpLayer, tpSuperSlow, tpSuperSlow, tpLayer, tpLayer })} , + {"tilt_down_initial_profile", ConfigOptionEnums({ tpLayerMoveFast, tpLayerMoveFast, tpLayerMoveFast, tpLayerMoveFast, tpSuperSlow, tpSuperSlow, tpHomingSlow, tpHomingSlow }) } , + {"tilt_down_finish_profile", ConfigOptionEnums({ tpLayerMoveSlow, tpLayerMoveSlow, tpMoveFast, tpLayerMoveSlow, tpLayerMoveSlow, tpLayerMoveSlow, tpHomingSlow, tpHomingSlow }) } , + {"tilt_up_initial_profile", ConfigOptionEnums({ tpMoveFast, tpMoveFast, tpMoveFast, tpMoveFast, tpLayerMoveSlow, tpLayerMoveSlow, tpHomingSlow, tpHomingSlow }) } , + {"tilt_up_finish_profile", ConfigOptionEnums({ tpLayerMoveFast, tpLayerMoveFast, tpLayerMoveFast, tpLayerMoveFast, tpSuperSlow, tpSuperSlow, tpHomingSlow, tpHomingSlow }) } , +}; + void handle_legacy_sla(DynamicPrintConfig &config) { for (std::string corr : {"relative_correction", "material_correction"}) { @@ -4761,6 +5038,50 @@ void handle_legacy_sla(DynamicPrintConfig &config) } } } + + // Load default tilt options in config in respect to the print speed, if config is loaded from old PS + + if (config.has("material_print_speed") && + !config.has("tilt_down_offset_delay_ms") // Config from old PS doesn't contain any of tilt options, so check it + ) { + int tilt_mode = config.option("material_print_speed")->getInt(); + + for (const std::string& opt_key : s_Preset_sla_tilt_options) { + switch (config.def()->get(opt_key)->type) { + case coFloats: { + ConfigOptionFloats values = tilt_options_floats_defs.at(opt_key); + double val1 = values.get_at(2 * tilt_mode); + double val2 = values.get_at(2 * tilt_mode + 1); + config.set_key_value(opt_key, new ConfigOptionFloats({ val1, val2 })); + } + break; + case coInts: { + auto values = tilt_options_ints_defs.at(opt_key); + int val1 = values.get_at(2 * tilt_mode); + int val2 = values.get_at(2 * tilt_mode + 1); + config.set_key_value(opt_key, new ConfigOptionInts({ val1, val2 })); + } + break; + case coBools: { + auto values = tilt_options_bools_defs.at(opt_key); + bool val1 = values.get_at(2 * tilt_mode); + bool val2 = values.get_at(2 * tilt_mode + 1); + config.set_key_value(opt_key, new ConfigOptionBools({ val1, val2 })); + } + break; + case coEnums: { + auto values = tilt_options_enums_defs.at(opt_key); + int val1 = values.get_at(2 * tilt_mode); + int val2 = values.get_at(2 * tilt_mode + 1); + config.set_key_value(opt_key, new ConfigOptionEnumsGeneric({ val1, val2 })); + } + break; + case coNone: + default: + break; + } + } + } } void DynamicPrintConfig::set_num_extruders(unsigned int num_extruders) diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index e36995842e..68d6962006 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -171,6 +171,20 @@ enum class GCodeThumbnailsFormat { PNG, JPG, QOI }; +enum TiltProfiles : int { + tpHomingFast, + tpHomingSlow, + tpMoveFast, + tpMoveSlow, + tpLayer, + tpLayerMove, + tpSuperSlow, + tpResinSensor, + tpLayerMoveSlow, + tpLayerRelease, + tpLayerMoveFast, +}; + #define CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(NAME) \ template<> const t_config_enum_names& ConfigOptionEnum::get_enum_names(); \ template<> const t_config_enum_values& ConfigOptionEnum::get_enum_values(); @@ -226,6 +240,7 @@ private: void init_fff_params(); void init_extruder_option_keys(); void init_sla_params(); + void init_sla_tilt_params(); void init_sla_support_params(const std::string &method_prefix); std::vector m_extruder_option_keys; @@ -305,6 +320,9 @@ public: { PrintConfigDef::handle_legacy_composite(*this); } }; +// This vector containes list of parameters for preview of tilt profiles +const std::vector& tilt_options(); + void handle_legacy_sla(DynamicPrintConfig &config); class StaticPrintConfig : public StaticConfig @@ -1148,11 +1166,31 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionFloatNullable, material_ow_support_head_width)) ((ConfigOptionFloatNullable, material_ow_branchingsupport_head_width)) ((ConfigOptionIntNullable, material_ow_support_points_density_relative)) - ((ConfigOptionFloatNullable, material_ow_elefant_foot_compensation)) ((ConfigOptionFloatNullable, material_ow_relative_correction_x)) ((ConfigOptionFloatNullable, material_ow_relative_correction_y)) ((ConfigOptionFloatNullable, material_ow_relative_correction_z)) + ((ConfigOptionFloat, area_fill)) + + //tilt params + ((ConfigOptionFloats, delay_before_exposure_ms)) + ((ConfigOptionFloats, delay_after_exposure_ms)) + ((ConfigOptionInts, tower_hop_height_nm)) + ((ConfigOptionEnums, tower_profile)) + ((ConfigOptionBools, use_tilt)) + ((ConfigOptionEnums, tilt_down_initial_profile)) + ((ConfigOptionInts, tilt_down_offset_steps)) + ((ConfigOptionFloats, tilt_down_offset_delay_ms)) + ((ConfigOptionEnums, tilt_down_finish_profile)) + ((ConfigOptionInts, tilt_down_cycles)) + ((ConfigOptionFloats, tilt_down_delay_ms)) + ((ConfigOptionEnums, tilt_up_initial_profile)) + ((ConfigOptionInts, tilt_up_offset_steps)) + ((ConfigOptionFloats, tilt_up_offset_delay_ms)) + ((ConfigOptionEnums, tilt_up_finish_profile)) + ((ConfigOptionInts, tilt_up_cycles)) + ((ConfigOptionFloats, tilt_up_delay_ms)) + ((ConfigOptionFloats, moves_time_ms)) ) PRINT_CONFIG_CLASS_DEFINE( @@ -1179,7 +1217,7 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionFloat, fast_tilt_time)) ((ConfigOptionFloat, slow_tilt_time)) ((ConfigOptionFloat, high_viscosity_tilt_time)) - ((ConfigOptionFloat, area_fill)) +// ((ConfigOptionFloat, area_fill)) ((ConfigOptionFloat, min_exposure_time)) ((ConfigOptionFloat, max_exposure_time)) ((ConfigOptionFloat, min_initial_exposure_time)) diff --git a/src/libslic3r/SLAPrint.cpp b/src/libslic3r/SLAPrint.cpp index 6ced79fd0e..70b6c6d72a 100644 --- a/src/libslic3r/SLAPrint.cpp +++ b/src/libslic3r/SLAPrint.cpp @@ -839,6 +839,24 @@ bool SLAPrint::invalidate_state_by_config_options(const std::vector steps; diff --git a/src/libslic3r/SLAPrintSteps.cpp b/src/libslic3r/SLAPrintSteps.cpp index 56da543fc8..4b67975a87 100644 --- a/src/libslic3r/SLAPrintSteps.cpp +++ b/src/libslic3r/SLAPrintSteps.cpp @@ -924,7 +924,7 @@ void SLAPrint::Steps::merge_slices_and_eval_stats() { print_statistics.clear(); - const double area_fill = printer_config.area_fill.getFloat()*0.01;// 0.5 (50%); + const double area_fill = /*printer_config*/material_config.area_fill.getFloat()*0.01;// 0.5 (50%); const double fast_tilt = printer_config.fast_tilt_time.getFloat();// 5.0; const double slow_tilt = printer_config.slow_tilt_time.getFloat();// 8.0; const double hv_tilt = printer_config.high_viscosity_tilt_time.getFloat();// 10.0; diff --git a/src/slic3r/GUI/Field.cpp b/src/slic3r/GUI/Field.cpp index 369a91960a..a4b2180551 100644 --- a/src/slic3r/GUI/Field.cpp +++ b/src/slic3r/GUI/Field.cpp @@ -1156,6 +1156,10 @@ void Choice::set_selection() field->SetSelection(m_opt.default_value->getInt()); break; } + case coEnums:{ + field->SetSelection(m_opt.default_value->getInts()[m_opt_idx]); + break; + } case coFloat: case coPercent: { double val = m_opt.default_value->getFloat(); @@ -1243,7 +1247,8 @@ void Choice::set_value(const boost::any& value, bool change_event) break; } - case coEnum: { + case coEnum: + case coEnums: { auto val = m_opt.enum_def->enum_to_index(boost::any_cast(value)); assert(val.has_value()); field->SetSelection(val.has_value() ? *val : 0); @@ -1308,7 +1313,7 @@ boost::any& Choice::get_value() if (m_opt_id == rp_option) return m_value = boost::any(ret_str); - if (m_opt.type == coEnum) + if (m_opt.type == coEnum || m_opt.type == coEnums) // Closed enum: The combo box item index returned by the field must be convertible to an enum value. m_value = m_opt.enum_def->index_to_enum(field->GetSelection()); else if (m_opt.gui_type == ConfigOptionDef::GUIType::f_enum_open || m_opt.gui_type == ConfigOptionDef::GUIType::i_enum_open) { diff --git a/src/slic3r/GUI/OptionsGroup.cpp b/src/slic3r/GUI/OptionsGroup.cpp index 5577c98352..3e32256206 100644 --- a/src/slic3r/GUI/OptionsGroup.cpp +++ b/src/slic3r/GUI/OptionsGroup.cpp @@ -80,7 +80,8 @@ const t_field& OptionsGroup::build_field(const t_config_option_key& id, const Co m_fields.emplace(id, SpinCtrl::Create(this->ctrl_parent(), opt, id)); break; case coEnum: - m_fields.emplace(id, Choice::Create(this->ctrl_parent(), opt, id)); + case coEnums: + m_fields.emplace(id, Choice::Create(this->ctrl_parent(), opt, id)); break; case coPoints: m_fields.emplace(id, PointCtrl::Create(this->ctrl_parent(), opt, id)); @@ -239,6 +240,10 @@ void OptionsGroup::change_opt_value(DynamicPrintConfig& config, const t_config_o config.set_key_value(opt_key, opt); } break; + case coEnums: { + ConfigOptionEnumsGeneric* vec_new = new ConfigOptionEnumsGeneric(1, boost::any_cast(value));; + config.option(opt_key)->set_at(vec_new, opt_index, 0); + break; } case coPoints: { if (opt_key == "bed_shape") { config.option(opt_key)->values = boost::any_cast>(value); @@ -1101,6 +1106,9 @@ boost::any ConfigOptionsGroup::get_config_value(const DynamicPrintConfig& config case coEnum: ret = config.option(opt_key)->getInt(); break; + case coEnums: + ret = config.option(opt_key)->getInts()[idx]; + break; case coPoints: if (opt_key == "bed_shape") ret = config.option(opt_key)->values; diff --git a/src/slic3r/GUI/Search.cpp b/src/slic3r/GUI/Search.cpp index d92f5cf2eb..d16e784c1b 100644 --- a/src/slic3r/GUI/Search.cpp +++ b/src/slic3r/GUI/Search.cpp @@ -99,8 +99,11 @@ void OptionsSearcher::append_options(DynamicPrintConfig* config, Preset::Type ty wxString suffix; wxString suffix_local; - if (gc.category == "Machine limits") { - suffix = id == 1 ? L("Stealth") : L("Normal"); + if (gc.category == "Machine limits" || gc.category == "Material printing profile") { + if (gc.category == "Machine limits") + suffix = id == 1 ? L("Stealth") : L("Normal"); + else + suffix = id == 1 ? L("Above") : L("Below"); suffix_local = " " + _(suffix); suffix = " " + suffix; } @@ -124,7 +127,7 @@ void OptionsSearcher::append_options(DynamicPrintConfig* config, Preset::Type ty int cnt = 0; - if ( type != Preset::TYPE_FILAMENT && type != Preset::TYPE_SLA_MATERIAL && !PresetCollection::is_independent_from_extruder_number_option(opt_key) ) + if ( type != Preset::TYPE_FILAMENT && !PresetCollection::is_independent_from_extruder_number_option(opt_key)) switch (config->option(opt_key)->type()) { case coInts: change_opt_key(opt_key, config, cnt); break; @@ -134,6 +137,8 @@ void OptionsSearcher::append_options(DynamicPrintConfig* config, Preset::Type ty case coPercents:change_opt_key(opt_key, config, cnt); break; case coPoints: change_opt_key(opt_key, config, cnt); break; case coFloatsOrPercents: change_opt_key(opt_key, config, cnt); break; + case coEnums: change_opt_key(opt_key, config, cnt); break; + default: break; } diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index c70b940605..40777162d3 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -669,7 +669,7 @@ void Tab::init_options_list() m_options_list.clear(); for (const std::string& opt_key : m_config->keys()) - emplace_option(opt_key, m_type != Preset::TYPE_FILAMENT && m_type != Preset::TYPE_SLA_MATERIAL && !PresetCollection::is_independent_from_extruder_number_option(opt_key)); + emplace_option(opt_key, m_type != Preset::TYPE_FILAMENT && !PresetCollection::is_independent_from_extruder_number_option(opt_key)); } template @@ -692,6 +692,7 @@ void Tab::emplace_option(const std::string& opt_key, bool respect_vec_values/* = case coPercents:add_correct_opts_to_options_list(opt_key, m_options_list, this, m_opt_status_value); break; case coPoints: add_correct_opts_to_options_list(opt_key, m_options_list, this, m_opt_status_value); break; case coFloatsOrPercents: add_correct_opts_to_options_list(opt_key, m_options_list, this, m_opt_status_value); break; + case coEnums: add_correct_opts_to_options_list(opt_key, m_options_list, this, m_opt_status_value); break; default: m_options_list.emplace(opt_key, m_opt_status_value); break; } } @@ -2930,7 +2931,7 @@ void TabPrinter::build_sla() // FIXME: This should be on one line in the UI optgroup->append_single_option_line("display_mirror_x"); optgroup->append_single_option_line("display_mirror_y"); - +/* optgroup = page->new_optgroup(L("Tilt")); line = { L("Tilt time"), "" }; line.append_option(optgroup->get_option("fast_tilt_time")); @@ -2938,7 +2939,7 @@ void TabPrinter::build_sla() line.append_option(optgroup->get_option("high_viscosity_tilt_time")); optgroup->append_line(line); optgroup->append_single_option_line("area_fill"); - +*/ optgroup = page->new_optgroup(L("Corrections")); line = Line{ m_config->def()->get("relative_correction")->full_label, "" }; for (auto& axis : { "X", "Y", "Z" }) { @@ -3022,6 +3023,29 @@ void TabPrinter::append_option_line(ConfigOptionsGroupShp optgroup, const std::s optgroup->append_line(line); } +// Legend for OptionsGroups column's name tooltip +static void create_legend(Slic3r::GUI::PageShp page, const std::vector>& columns, ConfigOptionMode mode, bool is_wider = false) +{ + auto optgroup = page->new_optgroup(""); + auto line = Line{ "", "" }; + + ConfigOptionDef def; + def.type = coString; + def.width = is_wider ? Field::def_width_wider() : Field::def_width(); + def.gui_type = ConfigOptionDef::GUIType::legend; + def.mode = mode; + + for (auto& [name, tooltip] : columns) { + def.tooltip = tooltip; + def.set_default_value(new ConfigOptionString{ into_u8(_(name)) }); + + auto option = Option(def, name + "_legend"); + line.append_option(option); + } + + optgroup->append_line(line); +} + PageShp TabPrinter::build_kinematics_page() { auto page = add_options_page(L("Machine limits"), "cog", true); @@ -3059,27 +3083,12 @@ PageShp TabPrinter::build_kinematics_page() }; if (m_use_silent_mode) { - // Legend for OptionsGroups - auto optgroup = page->new_optgroup(""); - auto line = Line{ "", "" }; + std::vector> legend_columns = { + {L("Normal"), L("Values in this column are for Normal mode")}, + {L("Stealth"), L("Values in this column are for Stealth mode")} + }; - ConfigOptionDef def; - def.type = coString; - def.width = Field::def_width(); - def.gui_type = ConfigOptionDef::GUIType::legend; - def.mode = comAdvanced; - def.tooltip = L("Values in this column are for Normal mode"); - def.set_default_value(new ConfigOptionString{ _(L("Normal")).ToUTF8().data() }); - - auto option = Option(def, "full_power_legend"); - line.append_option(option); - - def.tooltip = L("Values in this column are for Stealth mode"); - def.set_default_value(new ConfigOptionString{ _(L("Stealth")).ToUTF8().data() }); - option = Option(def, "silent_legend"); - line.append_option(option); - - optgroup->append_line(line); + create_legend(page, legend_columns, comAdvanced); } const std::vector axes{ "x", "y", "z", "e" }; @@ -5347,16 +5356,114 @@ void TabSLAMaterial::build() page = add_options_page(L("Material printing profile"), "note"); optgroup = page->new_optgroup(L("Material printing profile")); - option = optgroup->get_option("material_print_speed"); - optgroup->append_single_option_line(option); +// option = optgroup->get_option("material_print_speed"); +// optgroup->append_single_option_line(option); + optgroup->append_single_option_line("area_fill"); + + build_tilt_group(page); +} + +static void append_tilt_options_line(ConfigOptionsGroupShp optgroup, const std::string opt_key) +{ + auto option = optgroup->get_option(opt_key, 0); + auto line = Line{ option.opt.full_label, "" }; + option.opt.width = Field::def_width_wider(); + line.append_option(option); + + option = optgroup->get_option(opt_key, 1); + option.opt.width = Field::def_width_wider(); + line.append_option(option); + + optgroup->append_line(line); +} + +void TabSLAMaterial::build_tilt_group(Slic3r::GUI::PageShp page) +{ + // Legend + std::vector> legend_columns = { + {L("Below"), L("Values in this column are for ???")}, + {L("Above"), L("Values in this column are for ???")}, + }; + create_legend(page, legend_columns, comExpert, true); + + auto optgroup = page->new_optgroup(L("Tilt profiles")); + optgroup->on_change = [this, optgroup](const t_config_option_key& key, boost::any value) + { + if (key.find_first_of("use_tilt") == 0) + toggle_tilt_options(key == "use_tilt#0"); + + update_dirty(); + update(); + }; + + for (const std::string& opt_key : tilt_options()) + append_tilt_options_line(optgroup, opt_key); +} + +static boost::any get_def_config_value(const DynamicPrintConfig& config, const std::string& opt_key, int idx) +{ + boost::any ret; + + const ConfigOptionDef* opt = config.def()->get(opt_key); + auto def_values = opt->default_value; + if (def_values) { + switch (def_values->type()) { + case coFloats: { + double val = static_cast(def_values.get())->get_at(idx); + ret = double_to_string(val); + } + break; + case coInts: + ret = static_cast(def_values.get())->get_at(idx); + break; + case coBools: + ret = static_cast(def_values.get())->get_at(idx); + break; + case coEnums: + ret = static_cast(def_values.get())->get_at(idx); + break; + case coNone: + default: + break; + } + } + return ret; +} + +std::vector disable_tilt_options = { + "tilt_down_initial_profile" + ,"tilt_down_offset_steps" + ,"tilt_down_offset_delay_ms" + ,"tilt_down_finish_profile" + ,"tilt_down_cycles" + ,"tilt_down_delay_ms" + ,"tilt_up_initial_profile" + ,"tilt_up_offset_steps" + ,"tilt_up_offset_delay_ms" + ,"tilt_up_finish_profile" + ,"tilt_up_cycles" + ,"tilt_up_delay_ms" + ,"moves_time_ms" +}; + +void TabSLAMaterial::toggle_tilt_options(bool is_above) +{ + if (m_active_page && m_active_page->title() == "Material printing profile") + { + int column_id = is_above ? 0 : 1; + auto optgroup = m_active_page->get_optgroup("Tilt profiles"); + bool use_tilt = boost::any_cast(optgroup->get_config_value(*m_config, "use_tilt", column_id)); + + for (const std::string& opt_key : disable_tilt_options) { + auto field = optgroup->get_fieldc(opt_key, column_id); + if (field != nullptr) + field->toggle(use_tilt); + } + } } void TabSLAMaterial::toggle_options() { - const Preset ¤t_printer = wxGetApp().preset_bundle->printers.get_edited_preset(); - std::string model = current_printer.config.opt_string("printer_model"); - m_config_manipulation.toggle_field("material_print_speed", model != "SL1"); - if (m_active_page->title() == "Material Overrides") update_material_overrides_page(); } diff --git a/src/slic3r/GUI/Tab.hpp b/src/slic3r/GUI/Tab.hpp index 639e75ffcd..382430405f 100644 --- a/src/slic3r/GUI/Tab.hpp +++ b/src/slic3r/GUI/Tab.hpp @@ -575,6 +575,8 @@ public: ~TabSLAMaterial() {} void build() override; + void build_tilt_group(Slic3r::GUI::PageShp page); + void toggle_tilt_options(bool is_above); void toggle_options() override; void update() override; void msw_rescale() override; diff --git a/src/slic3r/GUI/UnsavedChangesDialog.cpp b/src/slic3r/GUI/UnsavedChangesDialog.cpp index 9c23ca5b6a..ce4a73e415 100644 --- a/src/slic3r/GUI/UnsavedChangesDialog.cpp +++ b/src/slic3r/GUI/UnsavedChangesDialog.cpp @@ -1223,6 +1223,14 @@ static wxString get_string_value(std::string opt_key, const DynamicPrintConfig& auto opt = config.option_def(opt_key)->enum_def->enum_to_label(config.option(opt_key)->getInt()); return opt.has_value() ? _(from_u8(*opt)) : _L("Undef"); } + case coEnums: { + auto values = config.option(opt_key)->getInts(); + if (opt_idx < values.size()) { + auto opt = config.option_def(opt_key)->enum_def->enum_to_label(values[opt_idx]); + return opt.has_value() ? _(from_u8(*opt)) : _L("Undef"); + } + return _L("Undef"); + } case coPoints: { if (opt_key == "bed_shape") { BedShape shape(*config.option(opt_key)); @@ -1313,7 +1321,7 @@ void UnsavedChangesDialog::update_tree(Preset::Type type, PresetCollection* pres m_tree->model->AddPreset(type, from_u8(presets->get_edited_preset().name), old_pt, from_u8(new_selected_preset)); // Collect dirty options. - const bool deep_compare = type != Preset::TYPE_FILAMENT && type != Preset::TYPE_SLA_MATERIAL; + const bool deep_compare = type != Preset::TYPE_FILAMENT; auto dirty_options = presets->current_dirty_options(deep_compare); // process changes of extruders count From a7cf9506741e4d2c5fd7e4ab2580c16e3e376657 Mon Sep 17 00:00:00 2001 From: YuSanka Date: Tue, 30 Jan 2024 15:26:17 +0100 Subject: [PATCH 02/25] SLA: Save config.json which contains tilt parameters into sl1s output archive. --- src/libslic3r/Format/SL1.cpp | 93 +++++++++++++++++++++++++++++++++++- 1 file changed, 92 insertions(+), 1 deletion(-) diff --git a/src/libslic3r/Format/SL1.cpp b/src/libslic3r/Format/SL1.cpp index f298cdf395..3f2cb1da71 100644 --- a/src/libslic3r/Format/SL1.cpp +++ b/src/libslic3r/Format/SL1.cpp @@ -33,6 +33,7 @@ #include +#include #include #include @@ -51,6 +52,88 @@ std::string to_ini(const ConfMap &m) return ret; } +namespace pt = boost::property_tree; + +static std::string write_json_with_post_process(const pt::ptree& ptree) +{ + std::stringstream oss; + pt::write_json(oss, ptree); + + // fix json-out to show node values as a string just for string nodes + std::regex reg("\\\"([0-9]+\\.{0,1}[0-9]*)\\\""); // code is borrowed from https://stackoverflow.com/questions/2855741/why-does-boost-property-tree-write-json-save-everything-as-string-is-it-possibl + std::string result = std::regex_replace(oss.str(), reg, "$1"); + + boost::replace_all(result, "\"true\"", "true"); + boost::replace_all(result, "\"false\"", "false"); + + return result; +} + +std::string to_json(const SLAPrint& print, const ConfMap &m) +{ + auto& cfg = print.full_print_config(); + + pt::ptree below_node; + pt::ptree above_node; + + const t_config_enum_names& enum_names = ConfigOptionEnum::get_enum_names(); + + for (const std::string& opt_key : tilt_options()) { + const ConfigOption* opt = cfg.option(opt_key); + assert(opt != nullptr); + + switch (opt->type()) { + case coFloats: { + auto values = static_cast(opt); + // those options have to be exported in ms instead of s + below_node.put(opt_key, int(1000 * values->get_at(0))); + above_node.put(opt_key, int(1000 * values->get_at(1))); + } + break; + case coInts: { + auto values = static_cast(opt); + int koef = opt_key == "tower_hop_height_nm" ? 1000000 : 1; + below_node.put(opt_key, koef * values->get_at(0)); + above_node.put(opt_key, koef * values->get_at(1)); + } + break; + case coBools: { + auto values = static_cast(opt); + below_node.put(opt_key, values->get_at(0)); + above_node.put(opt_key, values->get_at(1)); + } + break; + case coEnums: { + auto values = static_cast*>(opt); + below_node.put(opt_key, enum_names[values->get_at(0)]); + above_node.put(opt_key, enum_names[values->get_at(1)]); + } + break; + case coNone: + default: + break; + } + } + + pt::ptree profile_node; + profile_node.put("area_fill", cfg.option("area_fill")->serialize()); + profile_node.add_child("below_area_fill", below_node); + profile_node.add_child("above_area_fill", above_node); + + pt::ptree root; + // params from config.ini + for (auto& param : m) + root.put(param.first, param.second ); + + root.put("version", "1"); + root.add_child("exposure_profile", profile_node); + + // Boost confirms its implementation has no 100% conformance to JSON standard. + // In the boost libraries, boost will always serialize each value as string and parse all values to a string equivalent. + // so, post-prosess output + return write_json_with_post_process(root); +} + std::string get_cfg_value(const DynamicPrintConfig &cfg, const std::string &key) { std::string ret; @@ -123,10 +206,15 @@ void fill_slicerconf(ConfMap &m, const SLAPrint &print) auto is_banned = [](const std::string &key) { return std::binary_search(banned_keys.begin(), banned_keys.end(), key); }; + + auto is_tilt_param = [](const std::string& key) -> bool { + const auto& keys = tilt_options(); + return std::find(keys.begin(), keys.end(), key) != keys.end(); + }; auto &cfg = print.full_print_config(); for (const std::string &key : cfg.keys()) - if (! is_banned(key) && ! cfg.option(key)->is_nil()) + if (! is_banned(key) && !is_tilt_param(key) && ! cfg.option(key)->is_nil()) m[key] = cfg.opt_serialize(key); } @@ -212,6 +300,9 @@ void SL1Archive::export_print(Zipper &zipper, zipper.add_entry("prusaslicer.ini"); zipper << to_ini(slicerconf); + zipper.add_entry("config.json"); + zipper << to_json(print, iniconf); + size_t i = 0; for (const sla::EncodedRaster &rst : m_layers) { From 226b20fa179a5c32ecf2b8674c9b86e13ed67554 Mon Sep 17 00:00:00 2001 From: Lukas Matena Date: Mon, 8 Apr 2024 12:24:08 +0200 Subject: [PATCH 03/25] Added a 'layer statistics' legend for SLA --- src/imgui/imconfig.h | 4 ++-- src/libslic3r/SLAPrint.hpp | 6 +++-- src/libslic3r/SLAPrintSteps.cpp | 27 +++++++++++++++++----- src/slic3r/GUI/GLCanvas3D.cpp | 41 +++++++++++++++++++++++++++++++++ src/slic3r/GUI/GLCanvas3D.hpp | 3 +++ src/slic3r/GUI/GUI_Preview.cpp | 7 +++--- src/slic3r/GUI/GUI_Preview.hpp | 4 ++-- 7 files changed, 77 insertions(+), 15 deletions(-) diff --git a/src/imgui/imconfig.h b/src/imgui/imconfig.h index 172db0ec95..0ca4e8fbf7 100644 --- a/src/imgui/imconfig.h +++ b/src/imgui/imconfig.h @@ -153,8 +153,8 @@ namespace ImGui const wchar_t PlugMarker = 0x1C; const wchar_t DowelMarker = 0x1D; const wchar_t SnapMarker = 0x1E; - const wchar_t HorizontalHide = 0xB1; - const wchar_t HorizontalShow = 0xB2; + const wchar_t HorizontalHide = 0xB4; + const wchar_t HorizontalShow = 0xB6; // Do not forget use following letters only in wstring const wchar_t DocumentationButton = 0x2600; const wchar_t DocumentationHoverButton = 0x2601; diff --git a/src/libslic3r/SLAPrint.hpp b/src/libslic3r/SLAPrint.hpp index 4148745f88..93d94b016c 100644 --- a/src/libslic3r/SLAPrint.hpp +++ b/src/libslic3r/SLAPrint.hpp @@ -412,7 +412,8 @@ struct SLAPrintStatistics size_t fast_layers_count; double total_cost; double total_weight; - std::vector layers_times; + std::vector layers_times_running_total; + std::vector layers_areas; // Config with the filled in print statistics. DynamicConfig config() const; @@ -429,7 +430,8 @@ struct SLAPrintStatistics fast_layers_count = 0; total_cost = 0.; total_weight = 0.; - layers_times.clear(); + layers_times_running_total.clear(); + layers_areas.clear(); } }; diff --git a/src/libslic3r/SLAPrintSteps.cpp b/src/libslic3r/SLAPrintSteps.cpp index 4b67975a87..bc792e1f42 100644 --- a/src/libslic3r/SLAPrintSteps.cpp +++ b/src/libslic3r/SLAPrintSteps.cpp @@ -942,8 +942,10 @@ void SLAPrint::Steps::merge_slices_and_eval_stats() { double models_volume(0.0); double estim_time(0.0); - std::vector layers_times; + std::vector> layers_times; // level and time + std::vector> layers_areas; // level and area layers_times.reserve(printer_input.size()); + layers_areas.reserve(printer_input.size()); size_t slow_layers = 0; size_t fast_layers = 0; @@ -961,7 +963,7 @@ void SLAPrint::Steps::merge_slices_and_eval_stats() { // write vars &mutex, &models_volume, &supports_volume, &estim_time, &slow_layers, - &fast_layers, &fade_layer_time, &layers_times](size_t sliced_layer_cnt) + &fast_layers, &fade_layer_time, &layers_times, &layers_areas](size_t sliced_layer_cnt) { PrintLayer &layer = m_print->m_printer_input[sliced_layer_cnt]; @@ -1029,6 +1031,8 @@ void SLAPrint::Steps::merge_slices_and_eval_stats() { Lock lck(mutex); supports_volume += layer_support_area * l_height; } + double layer_area = layer_model_area + layer_support_area; + // Here we can save the expensively calculated polygons for printing ExPolygons trslices; trslices.reserve(model_polygons.size() + supports_polygons.size()); @@ -1039,7 +1043,7 @@ void SLAPrint::Steps::merge_slices_and_eval_stats() { // Calculation of the slow and fast layers to the future controlling those values on FW - const bool is_fast_layer = (layer_model_area + layer_support_area) <= display_area*area_fill; + const bool is_fast_layer = layer_area <= display_area*area_fill; const double tilt_time = material_config.material_print_speed == slamsSlow ? slow_tilt : material_config.material_print_speed == slamsHighViscosity ? hv_tilt : is_fast_layer ? fast_tilt : slow_tilt; @@ -1082,13 +1086,14 @@ void SLAPrint::Steps::merge_slices_and_eval_stats() { + 120 / 1000 // Magical constant to compensate remaining computation delay in exposure thread ); - layers_times.push_back(layer_times); + layers_times.emplace_back(layer.level(), layer_times); estim_time += layer_times; + layers_areas.emplace_back(layer.level(), layer_area * SCALING_FACTOR * SCALING_FACTOR); } }; // sequential version for debugging: - // for(size_t i = 0; i < m_printer_input.size(); ++i) printlayerfn(i); + // for(size_t i = 0; i < printer_input.size(); ++i) printlayerfn(i); execution::for_each(ex_tbb, size_t(0), printer_input.size(), printlayerfn, execution::max_concurrency(ex_tbb)); @@ -1102,7 +1107,17 @@ void SLAPrint::Steps::merge_slices_and_eval_stats() { print_statistics.estimated_print_time = NaNd; else { print_statistics.estimated_print_time = estim_time; - print_statistics.layers_times = layers_times; + + // Times and areas vectors were filled in parallel, they need to be sorted first. + // The print statistics will contain only the values (in the correct order). + std::sort(layers_times.begin(), layers_times.end(), [](const auto& a, const auto& b) { return a.first < b.first; }); + std::sort(layers_areas.begin(), layers_areas.end(), [](const auto& a, const auto& b) { return a.first < b.first; }); + print_statistics.layers_times_running_total.clear(); + for (size_t i=0; i& areas = print.print_statistics().layers_areas; + const std::vector& times = print.print_statistics().layers_times_running_total; + const double display_area = print.printer_config().display_height * print.printer_config().display_width; + if (layer_idx >= 0 && layer_idx < areas.size()) { + const double area = areas[layer_idx]; + const double time = times[layer_idx] - (layer_idx == 0 ? 0. : times[layer_idx-1]); + const double time_until_layer = times[layer_idx]; + + ImGuiWrapper& imgui = *wxGetApp().imgui(); + ImGuiPureWrap::set_next_window_pos(float(cnv_width) - imgui.get_style_scaling() * 5.f, imgui.get_style_scaling() * 55.f, ImGuiCond_Always, 1.0f, 0.0f); + ImGui::SetNextWindowBgAlpha(0.6f); + + ImGuiPureWrap::begin(_u8L("Layer statistics"), ImGuiWindowFlags_NoNav | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoFocusOnAppearing); + ImGui::Text(_u8L("Layer area: %.0f mm²").c_str(), area); + int area_percent_int = int(std::round(100. * area/display_area)); + ImGui::Text(GUI::format(_u8L("Area fill: %1% %%%%"), area_percent_int == 0 ? "<1" : std::to_string(area_percent_int)).c_str()); + ImGui::Separator(); + ImGui::Text(GUI::format(_u8L("Layer time: %1%"), get_time_dhms(time)).c_str()); + std::string buffer_str = _u8L("Time since start: %1%"); + ImGui::Text(GUI::format(buffer_str, get_time_dhms(time_until_layer)).c_str()); + + // The dummy control below uses the assumption that the total time string will be the longest + // and forces the width of the window large enough so it does not resize depending on the current value. + ImGui::Dummy(ImVec2(ImGui::CalcTextSize(GUI::format(buffer_str, get_time_dhms(82799)).c_str()).x, 0.)); + ImGuiPureWrap::end(); + } +} + + + void GLCanvas3D::_render_sla_slices() { if (!m_use_clipping_planes || current_printer_technology() != ptSLA) @@ -6261,6 +6295,13 @@ void GLCanvas3D::_render_sla_slices() // nothing to render, return return; + if (print->finished()) { + double slider_width = 0.; + if (const Preview* preview = dynamic_cast(m_canvas->GetParent())) + slider_width = preview->get_layers_slider_width(); + render_sla_layer_legend(*print, m_layer_slider_index, get_canvas_size().get_width() - slider_width); + } + double clip_min_z = -m_clipping_planes[0].get_data()[3]; double clip_max_z = m_clipping_planes[1].get_data()[3]; for (unsigned int i = 0; i < (unsigned int)print_objects.size(); ++i) { diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp index 3975b02b08..783feb3a16 100644 --- a/src/slic3r/GUI/GLCanvas3D.hpp +++ b/src/slic3r/GUI/GLCanvas3D.hpp @@ -501,6 +501,7 @@ private: ClippingPlane m_camera_clipping_plane; bool m_use_clipping_planes; std::array m_sla_caps; + int m_layer_slider_index = -1; std::string m_sidebar_field; // when true renders an extra frame by not resetting m_dirty to false // see request_extra_frame() @@ -763,6 +764,8 @@ public: void bed_shape_changed(); + void set_layer_slider_index(int i) { m_layer_slider_index = i; } + void set_clipping_plane(unsigned int id, const ClippingPlane& plane) { if (id < 2) { m_clipping_planes[id] = plane; diff --git a/src/slic3r/GUI/GUI_Preview.cpp b/src/slic3r/GUI/GUI_Preview.cpp index c66763ede8..c36e780c4e 100644 --- a/src/slic3r/GUI/GUI_Preview.cpp +++ b/src/slic3r/GUI/GUI_Preview.cpp @@ -328,14 +328,14 @@ void Preview::render_sliders(GLCanvas3D& canvas) m_moves_slider->Render(canvas_width, canvas_height, extra_scale); } -float Preview::get_moves_slider_height() +float Preview::get_moves_slider_height() const { if (m_moves_slider && m_moves_slider->IsShown()) return m_moves_slider->GetHeight(); return 0.0f; } -float Preview::get_layers_slider_width() +float Preview::get_layers_slider_width() const { if (m_layers_slider && m_layers_slider->IsShown()) return m_layers_slider->GetWidth(); @@ -629,7 +629,7 @@ void Preview::update_layers_slider(const std::vector& layers_z, bool kee bool sequential_print = wxGetApp().preset_bundle->prints.get_edited_preset().config.opt_bool("complete_objects"); m_layers_slider->SetDrawMode(sla_print_technology, sequential_print); if (sla_print_technology) - m_layers_slider->SetLayersTimes(plater->sla_print().print_statistics().layers_times); + m_layers_slider->SetLayersTimes(plater->sla_print().print_statistics().layers_times_running_total); else m_layers_slider->SetLayersTimes(m_canvas->get_gcode_layers_times_cache(), m_gcode_result->print_statistics.modes.front().time); @@ -1037,6 +1037,7 @@ void Preview::on_layers_slider_scroll_changed() else if (tech == ptSLA) { m_canvas->set_clipping_plane(0, ClippingPlane(Vec3d::UnitZ(), -m_layers_slider->GetLowerValue())); m_canvas->set_clipping_plane(1, ClippingPlane(-Vec3d::UnitZ(), m_layers_slider->GetHigherValue())); + m_canvas->set_layer_slider_index(m_layers_slider->GetHigherPos()); m_canvas->render(); } } diff --git a/src/slic3r/GUI/GUI_Preview.hpp b/src/slic3r/GUI/GUI_Preview.hpp index 9d8f85304d..35f4d2bbe2 100644 --- a/src/slic3r/GUI/GUI_Preview.hpp +++ b/src/slic3r/GUI/GUI_Preview.hpp @@ -136,8 +136,8 @@ public: void msw_rescale(); void render_sliders(GLCanvas3D& canvas); - float get_layers_slider_width(); - float get_moves_slider_height(); + float get_layers_slider_width() const; + float get_moves_slider_height() const; bool is_loaded() const { return m_loaded; } From f9712b030de2904d77eb1ff6b1265f800fb48482 Mon Sep 17 00:00:00 2001 From: Lukas Matena Date: Fri, 23 Feb 2024 16:19:09 +0100 Subject: [PATCH 04/25] Updated tooltips for the new parameters --- src/libslic3r/PrintConfig.cpp | 41 +++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 0d7a284ebc..132450c108 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -3966,7 +3966,9 @@ void PrintConfigDef::init_sla_params() def = this->add("area_fill", coFloat); def->label = L("Area fill"); - def->tooltip = L("The percentage of the bed area. \nIf the print area exceeds the specified value, \nthen a slow tilt will be used, otherwise - a fast tilt"); + def->tooltip = L("The percentage of the bed area.\nIf the area of a particular layer is smaller than 'area_fill', " + "then 'Below area fill' parameters are used to determine the layer separation (tearing) procedure. " + "Otherwise 'Above area fill parameters are used."); def->sidetext = L("%"); def->min = 0; def->mode = comExpert; @@ -4490,7 +4492,7 @@ void PrintConfigDef::init_sla_tilt_params() def = this->add("delay_before_exposure_ms", coFloats); def->full_label = L("Delay before exposure"); - def->tooltip = L("Delay time before exposure"); + def->tooltip = L("Delay before exposure after previous layer separation."); def->sidetext = L("s"); def->min = 0; def->max = 30; @@ -4499,7 +4501,7 @@ void PrintConfigDef::init_sla_tilt_params() def = this->add("delay_after_exposure_ms", coFloats); def->full_label = L("Delay after exposure"); - def->tooltip = L("Delay time after exposure"); + def->tooltip = L("Delay after exposure before layer separation."); def->sidetext = L("s"); def->min = 0; def->max = 30; @@ -4508,7 +4510,7 @@ void PrintConfigDef::init_sla_tilt_params() def = this->add("tower_hop_height_nm", coInts); def->full_label = L("Tower hop height"); - def->tooltip = L("Tower hop height"); + def->tooltip = L("The height of the tower raise."); def->sidetext = L("mm"); def->min = 0; def->max = 100; @@ -4518,7 +4520,7 @@ void PrintConfigDef::init_sla_tilt_params() //ysFIXME def = this->add("tower_profile", coEnums); def->full_label = L("Tower profile"); - def->tooltip = L("Tower profile"); + def->tooltip = L("Tower profile used for tower raise."); def->mode = comExpert; def->set_enum({ { "homingFast", L("Homing Fast"), }, @@ -4534,7 +4536,7 @@ void PrintConfigDef::init_sla_tilt_params() def = this->add("tilt_down_initial_profile", coEnums); def->full_label = L("Tilt down initial profile"); - def->tooltip = L("Tilt down initial profile"); + def->tooltip = L("Tilt profile used for an initial portion of tilt down move."); def->mode = comExpert; def->set_enum({ { "homingFast", L("Homing Fast"), }, @@ -4550,7 +4552,7 @@ void PrintConfigDef::init_sla_tilt_params() def = this->add("tilt_down_finish_profile", coEnums); def->full_label = L("Tilt down finish profile"); - def->tooltip = L("Tilt down finish profile"); + def->tooltip = L("Tilt profile used for the rest of the tilt down move."); def->mode = comExpert; def->set_enum({ { "homingFast", L("Homing Fast"), }, @@ -4566,7 +4568,7 @@ void PrintConfigDef::init_sla_tilt_params() def = this->add("tilt_up_initial_profile", coEnums); def->full_label = L("Tilt up initial profile"); - def->tooltip = L("Tilt up initial profile"); + def->tooltip = L("Tilt profile used for an initial portion of tilt up move."); def->mode = comExpert; def->set_enum({ { "homingFast", L("Homing Fast"), }, @@ -4582,7 +4584,7 @@ void PrintConfigDef::init_sla_tilt_params() def = this->add("tilt_up_finish_profile", coEnums); def->full_label = L("Tilt up finish profile"); - def->tooltip = L("Tilt up finish profile"); + def->tooltip = L("Tilt profile used for the rest of the tilt-up."); def->mode = comExpert; def->set_enum({ { "homingFast", L("Homing Fast"), }, @@ -4598,13 +4600,13 @@ void PrintConfigDef::init_sla_tilt_params() def = this->add("use_tilt", coBools); def->full_label = L("Use tilt"); - def->tooltip = L("Use tilt"); + def->tooltip = L("If enabled, tilt is used for layer separation. Otherwise, all the parameters below are ignored."); def->mode = comExpert; def->set_default_value(new ConfigOptionBools({ true, true })); def = this->add("tilt_down_offset_steps", coInts); def->full_label = L("Tilt down offset steps"); - def->tooltip = L("Tilt down offset steps"); + def->tooltip = L("Number of steps to move down from the calibrated (horizontal) position with 'tilt_down_initial_profile'."); def->sidetext = L("μ-steps"); def->min = 0; def->max = 10000; @@ -4613,7 +4615,7 @@ void PrintConfigDef::init_sla_tilt_params() def = this->add("tilt_down_offset_delay_ms", coFloats); def->full_label = L("Tilt down offset delay"); - def->tooltip = L("Tilt down offset delay"); + def->tooltip = L("Delay after the tilt reaches 'tilt_down_offset_steps' position."); def->sidetext = L("s"); def->min = 0; def->max = 20; @@ -4622,7 +4624,7 @@ void PrintConfigDef::init_sla_tilt_params() def = this->add("tilt_down_cycles", coInts); def->full_label = L("Tilt down cycles"); - def->tooltip = L("Tilt down cycles"); + def->tooltip = L("Number of cycles to split the rest of the tilt down move."); def->min = 0; def->max = 10; def->mode = comExpert; @@ -4630,7 +4632,7 @@ void PrintConfigDef::init_sla_tilt_params() def = this->add("tilt_down_delay_ms", coFloats); def->full_label = L("Tilt down delay"); - def->tooltip = L("Tilt down delay"); + def->tooltip = L("The delay between tilt-down cycles."); def->sidetext = L("s"); def->min = 0; def->max = 20; @@ -4639,7 +4641,7 @@ void PrintConfigDef::init_sla_tilt_params() def = this->add("tilt_up_offset_steps", coInts); def->full_label = L("Tilt up offset steps"); - def->tooltip = L("Tilt up offset steps"); + def->tooltip = L("Move tilt up to calibrated (horizontal) position minus this offset."); def->sidetext = L("μ-steps"); def->min = 0; def->max = 10000; @@ -4648,7 +4650,7 @@ void PrintConfigDef::init_sla_tilt_params() def = this->add("tilt_up_offset_delay_ms", coFloats); def->full_label = L("Tilt up offset delay"); - def->tooltip = L("Tilt up offset delay"); + def->tooltip = L("Delay after the tilt reaches 'tilt_up_offset_steps' position."); def->sidetext = L("s"); def->min = 0; def->max = 20; @@ -4657,7 +4659,7 @@ void PrintConfigDef::init_sla_tilt_params() def = this->add("tilt_up_cycles", coInts); def->full_label = L("Tilt up cycles"); - def->tooltip = L("Tilt up cycles"); + def->tooltip = L("Number of cycles to split the rest of the tilt-up."); def->min = 0; def->max = 10; def->mode = comExpert; @@ -4665,7 +4667,7 @@ void PrintConfigDef::init_sla_tilt_params() def = this->add("tilt_up_delay_ms", coFloats); def->full_label = L("Tilt up delay"); - def->tooltip = L("Tilt up delay"); + def->tooltip = L("The delay between tilt-up cycles."); def->sidetext = L("s"); def->min = 0; def->max = 20; @@ -4674,7 +4676,8 @@ void PrintConfigDef::init_sla_tilt_params() def = this->add("moves_time_ms", coFloats); def->full_label = L("Moves time"); - def->tooltip = L("Moves time"); + def->tooltip = L("Measured time of this layer separation procedure. This parameter will " + "be deprecated and tilt times will be automatically calculated."); def->sidetext = L("s"); def->min = 0; def->max = 60; From 755493531e193e4f8b55c07d1b4025bfb0cfe0fb Mon Sep 17 00:00:00 2001 From: YuSanka Date: Wed, 10 Apr 2024 12:07:58 +0200 Subject: [PATCH 05/25] Follow up dbcd2b59 - Fixed values for tilt and tower profiles --- src/libslic3r/Format/SL1.cpp | 4 +- src/libslic3r/PrintConfig.cpp | 240 +++++++++++++++++++++------------- src/libslic3r/PrintConfig.hpp | 42 ++++-- src/libslic3r/SLAPrint.cpp | 1 - src/slic3r/GUI/Tab.cpp | 7 +- 5 files changed, 183 insertions(+), 111 deletions(-) diff --git a/src/libslic3r/Format/SL1.cpp b/src/libslic3r/Format/SL1.cpp index 3f2cb1da71..0201aa20be 100644 --- a/src/libslic3r/Format/SL1.cpp +++ b/src/libslic3r/Format/SL1.cpp @@ -76,7 +76,8 @@ std::string to_json(const SLAPrint& print, const ConfMap &m) pt::ptree below_node; pt::ptree above_node; - const t_config_enum_names& enum_names = ConfigOptionEnum::get_enum_names(); + const t_config_enum_names& tilt_enum_names = ConfigOptionEnum::get_enum_names(); + const t_config_enum_names& tower_enum_names = ConfigOptionEnum::get_enum_names(); for (const std::string& opt_key : tilt_options()) { const ConfigOption* opt = cfg.option(opt_key); @@ -104,6 +105,7 @@ std::string to_json(const SLAPrint& print, const ConfMap &m) } break; case coEnums: { + const t_config_enum_names& enum_names = opt_key == "tower_profile" ? tower_enum_names : tilt_enum_names; auto values = static_cast*>(opt); below_node.put(opt_key, enum_names[values->get_at(0)]); above_node.put(opt_key, enum_names[values->get_at(1)]); diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 132450c108..5f54807520 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -257,6 +257,7 @@ static t_config_enum_values s_keys_map_PerimeterGeneratorType { }; CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(PerimeterGeneratorType) + static t_config_enum_values s_keys_map_TopOnePerimeterType { { "none", int(TopOnePerimeterType::None) }, { "top", int(TopOnePerimeterType::TopSurfaces) }, @@ -264,18 +265,36 @@ static t_config_enum_values s_keys_map_TopOnePerimeterType { }; CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(TopOnePerimeterType) +static const t_config_enum_values s_keys_map_TowerProfiles{ + { "layer1", tpLayer1 }, + { "layer2", tpLayer2 }, + { "layer3", tpLayer3 }, + { "layer4", tpLayer4 }, + { "layer5", tpLayer5 }, + { "layer8", tpLayer8 }, + { "layer11", tpLayer11 }, + { "layer14", tpLayer14 }, + { "layer18", tpLayer18 }, + { "layer22", tpLayer22 }, + { "layer24", tpLayer24 }, +}; +CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(TowerProfiles) + static const t_config_enum_values s_keys_map_TiltProfiles{ - { "homingFast", tpHomingFast, }, - { "homingSlow", tpHomingSlow, }, - { "moveFast", tpMoveFast, }, - { "moveSlow", tpMoveSlow, }, - { "layer", tpLayer, }, - { "layerMove", tpLayerMove, }, - { "superSlow", tpSuperSlow, }, - { "resinSensor", tpResinSensor, }, - { "layerMoveSlow", tpLayerMoveSlow,}, - { "layerRelease", tpLayerRelease, }, - { "layerMoveFast", tpLayerMoveFast } + { "move120", tpMove120 }, + { "layer200", tpLayer200 }, + { "move300", tpMove300 }, + { "layer400", tpLayer400 }, + { "layer600", tpLayer600 }, + { "layer800", tpLayer800 }, + { "layer1000", tpLayer1000 }, + { "layer1250", tpLayer1250 }, + { "layer1500", tpLayer1500 }, + { "layer1750", tpLayer1750 }, + { "layer2000", tpLayer2000 }, + { "layer2250", tpLayer2250 }, + { "move5120", tpMove5120 }, + { "move8000", tpMove8000 }, }; CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(TiltProfiles) @@ -3972,7 +3991,7 @@ void PrintConfigDef::init_sla_params() def->sidetext = L("%"); def->min = 0; def->mode = comExpert; - def->set_default_value(new ConfigOptionFloat(50.)); + def->set_default_value(new ConfigOptionFloat(35.)); def = this->add("relative_correction", coFloats); def->label = L("Printer scaling correction"); @@ -4517,86 +4536,74 @@ void PrintConfigDef::init_sla_tilt_params() def->mode = comExpert; def->set_default_value(new ConfigOptionInts({ 0, 0})); - //ysFIXME def = this->add("tower_profile", coEnums); def->full_label = L("Tower profile"); def->tooltip = L("Tower profile used for tower raise."); def->mode = comExpert; - def->set_enum({ - { "homingFast", L("Homing Fast"), }, - { "homingSlow", L("Homing Slow"), }, - { "moveFast", L("Move Fast"), }, - { "moveSlow", L("Move Slow"), }, - { "layer", L("Layer"), }, - { "layerMove", L("Layer Move"), }, - { "superSlow", L("Super Slow"), }, - { "resinSensor", L("Resin Sensor"), }, + def->sidetext = L("mm/s"); + def->set_enum({ + { "layer1", "1" }, + { "layer2", "2" }, + { "layer3", "3" }, + { "layer4", "4" }, + { "layer5", "5" }, + { "layer8", "8" }, + { "layer11", "11" }, + { "layer14", "14" }, + { "layer18", "18" }, + { "layer22", "22" }, + { "layer24", "24" }, }); - def->set_default_value(new ConfigOptionEnums({ tpLayer, tpLayer })); + def->set_default_value(new ConfigOptionEnums({ tpLayer22, tpLayer22 })); + + const std::initializer_list> tilt_profiles_il = { + { "move120", "120" }, + { "layer200", "200" }, + { "move300", "300" }, + { "layer400", "400" }, + { "layer600", "600" }, + { "layer800", "800" }, + { "layer1000", "1000" }, + { "layer1250", "1250" }, + { "layer1500", "1500" }, + { "layer1750", "1750" }, + { "layer2000", "2000" }, + { "layer2250", "2250" }, + { "move5120", "5120" }, + { "move8000", "8000" }, + }; def = this->add("tilt_down_initial_profile", coEnums); def->full_label = L("Tilt down initial profile"); def->tooltip = L("Tilt profile used for an initial portion of tilt down move."); def->mode = comExpert; - def->set_enum({ - { "homingFast", L("Homing Fast"), }, - { "homingSlow", L("Homing Slow"), }, - { "moveFast", L("Move Fast"), }, - { "moveSlow", L("Move Slow"), }, - { "layerMoveSlow", L("Layer Move Slow"),}, - { "layerRelease", L("Layer Release"), }, - { "layerMoveFast", L("Layer Move Fast") }, - { "superSlow", L("Super Slow"), }, - }); - def->set_default_value(new ConfigOptionEnums({ tpLayerMoveFast, tpLayerMoveFast })); + def->sidetext = L("μ-steps/s"); + def->set_enum(tilt_profiles_il); + def->set_default_value(new ConfigOptionEnums({ tpLayer1750, tpLayer1750 })); def = this->add("tilt_down_finish_profile", coEnums); def->full_label = L("Tilt down finish profile"); def->tooltip = L("Tilt profile used for the rest of the tilt down move."); def->mode = comExpert; - def->set_enum({ - { "homingFast", L("Homing Fast"), }, - { "homingSlow", L("Homing Slow"), }, - { "moveFast", L("Move Fast"), }, - { "moveSlow", L("Move Slow"), }, - { "layerMoveSlow", L("Layer Move Slow"),}, - { "layerRelease", L("Layer Release"), }, - { "layerMoveFast", L("Layer Move Fast") }, - { "superSlow", L("Super Slow"), }, - }); - def->set_default_value(new ConfigOptionEnums({ tpLayerMoveSlow, tpLayerMoveSlow })); + def->sidetext = L("μ-steps/s"); + def->set_enum(tilt_profiles_il); + def->set_default_value(new ConfigOptionEnums({ tpLayer1750, tpLayer1750 })); def = this->add("tilt_up_initial_profile", coEnums); def->full_label = L("Tilt up initial profile"); def->tooltip = L("Tilt profile used for an initial portion of tilt up move."); def->mode = comExpert; - def->set_enum({ - { "homingFast", L("Homing Fast"), }, - { "homingSlow", L("Homing Slow"), }, - { "moveFast", L("Move Fast"), }, - { "moveSlow", L("Move Slow"), }, - { "layerMoveSlow", L("Layer Move Slow"),}, - { "layerRelease", L("Layer Release"), }, - { "layerMoveFast", L("Layer Move Fast") }, - { "superSlow", L("Super Slow"), }, - }); - def->set_default_value(new ConfigOptionEnums({ tpMoveFast, tpMoveFast })); + def->sidetext = L("μ-steps/s"); + def->set_enum(tilt_profiles_il); + def->set_default_value(new ConfigOptionEnums({ tpMove8000, tpMove8000 })); def = this->add("tilt_up_finish_profile", coEnums); def->full_label = L("Tilt up finish profile"); def->tooltip = L("Tilt profile used for the rest of the tilt-up."); def->mode = comExpert; - def->set_enum({ - { "homingFast", L("Homing Fast"), }, - { "homingSlow", L("Homing Slow"), }, - { "moveFast", L("Move Fast"), }, - { "moveSlow", L("Move Slow"), }, - { "layerMoveSlow", L("Layer Move Slow"),}, - { "layerRelease", L("Layer Release"), }, - { "layerMoveFast", L("Layer Move Fast") }, - { "superSlow", L("Super Slow"), }, - }); - def->set_default_value(new ConfigOptionEnums({ tpLayerMoveFast, tpLayerMoveFast })); + def->sidetext = L("μ-steps/s"); + def->set_enum(tilt_profiles_il); + def->set_default_value(new ConfigOptionEnums({ tpLayer1750, tpLayer1750 })); def = this->add("use_tilt", coBools); def->full_label = L("Use tilt"); @@ -4674,16 +4681,6 @@ void PrintConfigDef::init_sla_tilt_params() def->mode = comExpert; def->set_default_value(new ConfigOptionFloats({ 0., 0. })); - def = this->add("moves_time_ms", coFloats); - def->full_label = L("Moves time"); - def->tooltip = L("Measured time of this layer separation procedure. This parameter will " - "be deprecated and tilt times will be automatically calculated."); - def->sidetext = L("s"); - def->min = 0; - def->max = 60; - def->mode = comExpert; - def->set_default_value(new ConfigOptionFloats({ 4.5, 4.5 })); - } @@ -4979,23 +4976,21 @@ static std::vector s_Preset_sla_tilt_options{ ,"tilt_up_finish_profile" ,"tilt_up_cycles" ,"tilt_up_delay_ms" - ,"moves_time_ms" }; const std::vector& tilt_options() { return s_Preset_sla_tilt_options; } // Default values containe option pair of values (Below and Above) for each titl modes -// (Slow, Fast, HighViscosity and NoTilt) +// (Slow, Fast, HighViscosity and NoTilt) -> used for SL1S and other vendors printers const std::map tilt_options_floats_defs = { {"delay_before_exposure_ms", ConfigOptionFloats({ 3., 3., 0., 1., 3.5, 3.5, 0., 0. }) } , {"delay_after_exposure_ms", ConfigOptionFloats({ 0., 0., 0., 0., 0., 0., 0., 0. }) } , {"tilt_down_offset_delay_ms", ConfigOptionFloats({ 0., 0., 0., 0., 0., 0., 0., 0. }) } , - {"tilt_down_delay_ms", ConfigOptionFloats({ 0., 0., 0., 0., 0., 0., 0., 0. }) } , + {"tilt_down_delay_ms", ConfigOptionFloats({ 0., 0., 0., 0.5, 0., 0., 0., 0. }) } , {"tilt_up_offset_delay_ms", ConfigOptionFloats({ 0., 0., 0., 0., 0., 0., 0., 0. }) } , {"tilt_up_delay_ms", ConfigOptionFloats({ 0., 0., 0., 0., 0., 0., 0., 0. }) } , - {"moves_time_ms", ConfigOptionFloats({ 4.5, 4.5, 2.1, 4.3, 14.25, 14.25, 0., 0. }) } , }; const std::map tilt_options_ints_defs = @@ -5012,13 +5007,58 @@ const std::map tilt_options_bools_defs = {"use_tilt", ConfigOptionBools({ true, true, true, true, true, true, false, false })} , }; +const std::map> tower_tilt_options_enums_defs = +{ + {"tower_profile", ConfigOptionEnums({ tpLayer22, tpLayer22, tpLayer22, tpLayer22, tpLayer2, tpLayer2, tpLayer1, tpLayer1 })} , +}; + const std::map> tilt_options_enums_defs = { - {"tower_profile", ConfigOptionEnums({ tpLayer, tpLayer, tpLayer, tpLayer, tpSuperSlow, tpSuperSlow, tpLayer, tpLayer })} , - {"tilt_down_initial_profile", ConfigOptionEnums({ tpLayerMoveFast, tpLayerMoveFast, tpLayerMoveFast, tpLayerMoveFast, tpSuperSlow, tpSuperSlow, tpHomingSlow, tpHomingSlow }) } , - {"tilt_down_finish_profile", ConfigOptionEnums({ tpLayerMoveSlow, tpLayerMoveSlow, tpMoveFast, tpLayerMoveSlow, tpLayerMoveSlow, tpLayerMoveSlow, tpHomingSlow, tpHomingSlow }) } , - {"tilt_up_initial_profile", ConfigOptionEnums({ tpMoveFast, tpMoveFast, tpMoveFast, tpMoveFast, tpLayerMoveSlow, tpLayerMoveSlow, tpHomingSlow, tpHomingSlow }) } , - {"tilt_up_finish_profile", ConfigOptionEnums({ tpLayerMoveFast, tpLayerMoveFast, tpLayerMoveFast, tpLayerMoveFast, tpSuperSlow, tpSuperSlow, tpHomingSlow, tpHomingSlow }) } , + {"tilt_down_initial_profile", ConfigOptionEnums({ tpLayer1750, tpLayer1750, tpLayer1750, tpLayer1750, tpLayer800, tpLayer800, tpMove120, tpMove120 }) } , + {"tilt_down_finish_profile", ConfigOptionEnums({ tpLayer1750, tpLayer1750, tpMove8000, tpLayer1750, tpLayer1750, tpLayer1750, tpMove120, tpMove120 }) } , + {"tilt_up_initial_profile", ConfigOptionEnums({ tpMove8000, tpMove8000, tpMove8000, tpMove8000, tpLayer1750, tpLayer1750, tpMove120, tpMove120 }) } , + {"tilt_up_finish_profile", ConfigOptionEnums({ tpLayer1750, tpLayer1750, tpLayer1750, tpLayer1750, tpLayer800, tpLayer800, tpMove120, tpMove120 }) } , +}; + +// Default values containe option pair of values (Below and Above) for each titl modes +// (Slow, Fast, HighViscosity and NoTilt) -> used for SL1 printer + +const std::map tilt_options_floats_sl1_defs = +{ + {"delay_before_exposure_ms", ConfigOptionFloats({ 3., 3., 0., 1., 3.5, 3.5, 0., 0. }) } , + {"delay_after_exposure_ms", ConfigOptionFloats({ 0., 0., 0., 0., 0., 0., 0., 0. }) } , + {"tilt_down_offset_delay_ms", ConfigOptionFloats({ 1., 1., 0., 0., 0., 0., 0., 0. }) } , + {"tilt_down_delay_ms", ConfigOptionFloats({ 0., 0., 0., 0., 0., 0., 0., 0. }) } , + {"tilt_up_offset_delay_ms", ConfigOptionFloats({ 0., 0., 0., 0., 1., 1., 0., 0. }) } , + {"tilt_up_delay_ms", ConfigOptionFloats({ 0., 0., 0., 0., 0., 0., 0., 0. }) } , +}; + +const std::map tilt_options_ints_sl1_defs = +{ + {"tower_hop_height_nm", ConfigOptionInts({ 0, 0, 0, 0, 5, 5, 0, 0 }) } , + {"tilt_down_offset_steps", ConfigOptionInts({ 650, 650, 0, 0, 2200, 2200, 0, 0 }) } , + {"tilt_down_cycles", ConfigOptionInts({ 1, 1, 1, 1, 1, 1, 0, 0 }) } , + {"tilt_up_offset_steps", ConfigOptionInts({ 400, 400, 400, 400, 2200, 2200, 0, 0 }) } , + {"tilt_up_cycles", ConfigOptionInts({ 1, 1, 1, 1, 1, 1, 0, 0 }) } , +}; + +const std::map tilt_options_bools_sl1_defs = +{ + {"use_tilt", ConfigOptionBools({ true, true, true, true, true, true, false, false })} , +}; + + +const std::map> tower_tilt_options_enums_sl1_defs = +{ + {"tower_profile", ConfigOptionEnums({ tpLayer22, tpLayer22, tpLayer22, tpLayer22, tpLayer2, tpLayer2, tpLayer1, tpLayer1 })} , +}; + +const std::map> tilt_options_enums_sl1_defs = +{ + {"tilt_down_initial_profile", ConfigOptionEnums({ tpLayer400, tpLayer400, tpLayer400, tpLayer400, tpLayer600, tpLayer600, tpMove120, tpMove120 }) } , + {"tilt_down_finish_profile", ConfigOptionEnums({ tpLayer1500, tpLayer1500, tpLayer1750, tpLayer1500, tpLayer1500, tpLayer1500, tpMove120, tpMove120 }) } , + {"tilt_up_initial_profile", ConfigOptionEnums({ tpMove5120, tpMove5120, tpMove5120, tpMove5120, tpLayer1500, tpLayer1500, tpMove120, tpMove120 }) } , + {"tilt_up_finish_profile", ConfigOptionEnums({ tpLayer400, tpLayer400, tpLayer400, tpLayer400, tpLayer600, tpLayer600, tpMove120, tpMove120 }) } , }; void handle_legacy_sla(DynamicPrintConfig &config) @@ -5049,33 +5089,49 @@ void handle_legacy_sla(DynamicPrintConfig &config) ) { int tilt_mode = config.option("material_print_speed")->getInt(); + const bool is_sl1_model = config.opt_string("printer_model") != "SL1"; + + const std::map floats_defs = is_sl1_model ? tilt_options_floats_sl1_defs : tilt_options_floats_defs; + const std::map ints_defs = is_sl1_model ? tilt_options_ints_sl1_defs : tilt_options_ints_defs; + const std::map bools_defs = is_sl1_model ? tilt_options_bools_sl1_defs : tilt_options_bools_defs; + const std::map> tower_enums_defs = is_sl1_model ? tower_tilt_options_enums_sl1_defs : tower_tilt_options_enums_defs; + const std::map> tilt_enums_defs = is_sl1_model ? tilt_options_enums_sl1_defs : tilt_options_enums_defs; + for (const std::string& opt_key : s_Preset_sla_tilt_options) { switch (config.def()->get(opt_key)->type) { case coFloats: { - ConfigOptionFloats values = tilt_options_floats_defs.at(opt_key); + ConfigOptionFloats values = floats_defs.at(opt_key); double val1 = values.get_at(2 * tilt_mode); double val2 = values.get_at(2 * tilt_mode + 1); config.set_key_value(opt_key, new ConfigOptionFloats({ val1, val2 })); } break; case coInts: { - auto values = tilt_options_ints_defs.at(opt_key); + auto values = ints_defs.at(opt_key); int val1 = values.get_at(2 * tilt_mode); int val2 = values.get_at(2 * tilt_mode + 1); config.set_key_value(opt_key, new ConfigOptionInts({ val1, val2 })); } break; case coBools: { - auto values = tilt_options_bools_defs.at(opt_key); + auto values = bools_defs.at(opt_key); bool val1 = values.get_at(2 * tilt_mode); bool val2 = values.get_at(2 * tilt_mode + 1); config.set_key_value(opt_key, new ConfigOptionBools({ val1, val2 })); } break; case coEnums: { - auto values = tilt_options_enums_defs.at(opt_key); - int val1 = values.get_at(2 * tilt_mode); - int val2 = values.get_at(2 * tilt_mode + 1); + int val1, val2; + if (opt_key == "tower_profile") { + auto values = tower_enums_defs.at(opt_key); + val1 = values.get_at(2 * tilt_mode); + val2 = values.get_at(2 * tilt_mode + 1); + } + else { + auto values = tilt_enums_defs.at(opt_key); + val1 = values.get_at(2 * tilt_mode); + val2 = values.get_at(2 * tilt_mode + 1); + } config.set_key_value(opt_key, new ConfigOptionEnumsGeneric({ val1, val2 })); } break; diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index 68d6962006..dd58556ccb 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -171,18 +171,35 @@ enum class GCodeThumbnailsFormat { PNG, JPG, QOI }; +enum TowerProfiles : int { + tpLayer1, + tpLayer2, + tpLayer3, + tpLayer4, + tpLayer5, + tpLayer8, + tpLayer11, + tpLayer14, + tpLayer18, + tpLayer22, + tpLayer24, +}; + enum TiltProfiles : int { - tpHomingFast, - tpHomingSlow, - tpMoveFast, - tpMoveSlow, - tpLayer, - tpLayerMove, - tpSuperSlow, - tpResinSensor, - tpLayerMoveSlow, - tpLayerRelease, - tpLayerMoveFast, + tpMove120, + tpLayer200, + tpMove300, + tpLayer400, + tpLayer600, + tpLayer800, + tpLayer1000, + tpLayer1250, + tpLayer1500, + tpLayer1750, + tpLayer2000, + tpLayer2250, + tpMove5120, + tpMove8000, }; #define CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(NAME) \ @@ -1176,7 +1193,7 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionFloats, delay_before_exposure_ms)) ((ConfigOptionFloats, delay_after_exposure_ms)) ((ConfigOptionInts, tower_hop_height_nm)) - ((ConfigOptionEnums, tower_profile)) + ((ConfigOptionEnums, tower_profile)) ((ConfigOptionBools, use_tilt)) ((ConfigOptionEnums, tilt_down_initial_profile)) ((ConfigOptionInts, tilt_down_offset_steps)) @@ -1190,7 +1207,6 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionEnums, tilt_up_finish_profile)) ((ConfigOptionInts, tilt_up_cycles)) ((ConfigOptionFloats, tilt_up_delay_ms)) - ((ConfigOptionFloats, moves_time_ms)) ) PRINT_CONFIG_CLASS_DEFINE( diff --git a/src/libslic3r/SLAPrint.cpp b/src/libslic3r/SLAPrint.cpp index 70b6c6d72a..7adc67c162 100644 --- a/src/libslic3r/SLAPrint.cpp +++ b/src/libslic3r/SLAPrint.cpp @@ -905,7 +905,6 @@ bool SLAPrint::invalidate_state_by_config_options(const std::vector steps; diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 40777162d3..7d98c1a108 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -5367,11 +5367,11 @@ static void append_tilt_options_line(ConfigOptionsGroupShp optgroup, const std:: { auto option = optgroup->get_option(opt_key, 0); auto line = Line{ option.opt.full_label, "" }; - option.opt.width = Field::def_width_wider(); + option.opt.width = Field::def_width/*_wider*/(); line.append_option(option); option = optgroup->get_option(opt_key, 1); - option.opt.width = Field::def_width_wider(); + option.opt.width = Field::def_width/*_wider*/(); line.append_option(option); optgroup->append_line(line); @@ -5384,7 +5384,7 @@ void TabSLAMaterial::build_tilt_group(Slic3r::GUI::PageShp page) {L("Below"), L("Values in this column are for ???")}, {L("Above"), L("Values in this column are for ???")}, }; - create_legend(page, legend_columns, comExpert, true); + create_legend(page, legend_columns, comExpert/*, true*/); auto optgroup = page->new_optgroup(L("Tilt profiles")); optgroup->on_change = [this, optgroup](const t_config_option_key& key, boost::any value) @@ -5443,7 +5443,6 @@ std::vector disable_tilt_options = { ,"tilt_up_finish_profile" ,"tilt_up_cycles" ,"tilt_up_delay_ms" - ,"moves_time_ms" }; void TabSLAMaterial::toggle_tilt_options(bool is_above) From 2fac73b77829a8a7f946a3f40f6e0f58cc91298f Mon Sep 17 00:00:00 2001 From: YuSanka Date: Thu, 11 Apr 2024 09:15:11 +0200 Subject: [PATCH 06/25] SLA tilt profiles: Show/Hide tilt profiles in respect to the printer model. Note: Tilt profiles are supported for SL1, SL1S and M1 only. --- src/slic3r/GUI/GUI_App.cpp | 2 +- src/slic3r/GUI/OptionsGroup.cpp | 2 +- src/slic3r/GUI/Tab.cpp | 63 +++++++++++++++++++++++++++++---- src/slic3r/GUI/Tab.hpp | 5 ++- 4 files changed, 63 insertions(+), 9 deletions(-) diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index ddc66e93dc..64afe001d1 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -1383,7 +1383,7 @@ bool GUI_App::on_init_inner() mainframe->select_tab(size_t(0)); sidebar().obj_list()->init_objects(); // propagate model objects to object list -// update_mode(); // !!! do that later + update_mode(); // mode sizer doesn't exist anymore, so we came update mode here, before load_current_presets SetTopWindow(mainframe); plater_->init_notification_manager(); diff --git a/src/slic3r/GUI/OptionsGroup.cpp b/src/slic3r/GUI/OptionsGroup.cpp index 3e32256206..eed3551ee6 100644 --- a/src/slic3r/GUI/OptionsGroup.cpp +++ b/src/slic3r/GUI/OptionsGroup.cpp @@ -821,7 +821,7 @@ void ConfigOptionsGroup::Hide() void ConfigOptionsGroup::Show(const bool show) { - sizer->ShowItems(show); + if (sizer) sizer->ShowItems(show); #if 0//#ifdef __WXGTK__ m_panel->Show(show); m_grid_sizer->Show(show); diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 7d98c1a108..144f7fb060 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -907,6 +907,7 @@ void Tab::update_mode() m_mode = wxGetApp().get_mode(); update_visibility(); + update_sla_prusa_specific_visibility(); update_changed_tree_ui(); } @@ -2931,15 +2932,15 @@ void TabPrinter::build_sla() // FIXME: This should be on one line in the UI optgroup->append_single_option_line("display_mirror_x"); optgroup->append_single_option_line("display_mirror_y"); -/* + optgroup = page->new_optgroup(L("Tilt")); line = { L("Tilt time"), "" }; line.append_option(optgroup->get_option("fast_tilt_time")); line.append_option(optgroup->get_option("slow_tilt_time")); line.append_option(optgroup->get_option("high_viscosity_tilt_time")); optgroup->append_line(line); - optgroup->append_single_option_line("area_fill"); -*/ +// optgroup->append_single_option_line("area_fill"); + optgroup = page->new_optgroup(L("Corrections")); line = Line{ m_config->def()->get("relative_correction")->full_label, "" }; for (auto& axis : { "X", "Y", "Z" }) { @@ -3615,8 +3616,15 @@ void TabPrinter::update_fff() toggle_options(); } +bool Tab::is_prusa_printer() const +{ + std::string printer_model = m_preset_bundle->printers.get_edited_preset().config.opt_string("printer_model"); + return printer_model == "SL1" || printer_model == "SL1S" || printer_model == "M1"; +} + void TabPrinter::update_sla() -{ ; } +{ +} void Tab::update_ui_items_related_on_parent_preset(const Preset* selected_preset_parent) { @@ -3704,6 +3712,7 @@ void Tab::load_current_preset() m_opt_status_value = (m_presets->get_selected_preset_parent() ? osSystemValue : 0) | osInitValue; init_options_list(); update_visibility(); + update_sla_prusa_specific_visibility(); update_changed_ui(); } #if 0 @@ -4058,6 +4067,7 @@ void Tab::activate_selected_page(std::function throw_if_canceled) this->compatible_widget_reload(m_compatible_prints); } + update_sla_prusa_specific_visibility(); update_changed_ui(); update_description_lines(); toggle_options(); @@ -4974,6 +4984,17 @@ bool TabPrinter::apply_extruder_cnt_from_cache() return false; } +void TabPrinter::update_sla_prusa_specific_visibility() +{ + if (m_active_page && m_active_page->title() == "General") { + auto og_it = std::find_if(m_active_page->m_optgroups.begin(), m_active_page->m_optgroups.end(), [](const ConfigOptionsGroupShp og) { return og->title == "Tilt"; }); + if (og_it != m_active_page->m_optgroups.end()) { + og_it->get()->Show(m_mode == comExpert && !is_prusa_printer()); + Layout(); + } + } +} + bool Tab::validate_custom_gcodes() { if (m_type != Preset::TYPE_FILAMENT && @@ -5355,11 +5376,22 @@ void TabSLAMaterial::build() build_preset_description_line(optgroup.get()); page = add_options_page(L("Material printing profile"), "note"); + +#if 1 optgroup = page->new_optgroup(L("Material printing profile")); -// option = optgroup->get_option("material_print_speed"); -// optgroup->append_single_option_line(option); + optgroup->append_single_option_line("material_print_speed"); + + optgroup = page->new_optgroup(L("Tilt")); optgroup->append_single_option_line("area_fill"); +#else + optgroup = page->new_optgroup(L("Material printing profile")); + option = optgroup->get_option("material_print_speed"); + optgroup->append_single_option_line(option); + + optgroup->append_single_option_line("area_fill"); +#endif + build_tilt_group(page); } @@ -5505,6 +5537,25 @@ void TabSLAMaterial::sys_color_changed() } } +void TabSLAMaterial::update_sla_prusa_specific_visibility() +{ + if (m_active_page && m_active_page->title() == "Material printing profile") { + for (auto& title : { "", "Tilt profiles" }) { + auto og_it = std::find_if(m_active_page->m_optgroups.begin(), m_active_page->m_optgroups.end(), + [title](const ConfigOptionsGroupShp og) { return og->title == title; }); + if (og_it != m_active_page->m_optgroups.end()) + og_it->get()->Show(m_mode == comExpert && is_prusa_printer()); + } + + auto og_it = std::find_if(m_active_page->m_optgroups.begin(), m_active_page->m_optgroups.end(), + [](const ConfigOptionsGroupShp og) { return og->title == "Material printing profile"; }); + if (og_it != m_active_page->m_optgroups.end()) + og_it->get()->Show(m_mode >= comAdvanced && !is_prusa_printer()); + + Layout(); + } +} + static void add_options_into_line(ConfigOptionsGroupShp &optgroup, const std::vector> &prefixes, const std::string &optkey, diff --git a/src/slic3r/GUI/Tab.hpp b/src/slic3r/GUI/Tab.hpp index 382430405f..a577f845f8 100644 --- a/src/slic3r/GUI/Tab.hpp +++ b/src/slic3r/GUI/Tab.hpp @@ -377,6 +377,7 @@ public: void update_mode(); void update_mode_markers(); void update_visibility(); + virtual void update_sla_prusa_specific_visibility() {} virtual void msw_rescale(); virtual void sys_color_changed(); Field* get_field(const t_config_option_key& opt_key, int opt_index = -1) const; @@ -406,11 +407,11 @@ public: static bool validate_custom_gcode(const wxString& title, const std::string& gcode); bool validate_custom_gcodes(); bool validate_custom_gcodes_was_shown{ false }; + bool is_prusa_printer() const; void edit_custom_gcode(const t_config_option_key& opt_key); virtual const std::string& get_custom_gcode(const t_config_option_key& opt_key); virtual void set_custom_gcode(const t_config_option_key& opt_key, const std::string& value); - protected: void create_line_with_widget(ConfigOptionsGroup* optgroup, const std::string& opt_key, const std::string& path, widget_t widget); wxSizer* compatible_widget_create(wxWindow* parent, PresetDependencies &deps); @@ -559,6 +560,7 @@ public: wxSizer* create_bed_shape_widget(wxWindow* parent); void cache_extruder_cnt(const DynamicPrintConfig* config = nullptr); bool apply_extruder_cnt_from_cache(); + void update_sla_prusa_specific_visibility() override; }; class TabSLAMaterial : public Tab @@ -582,6 +584,7 @@ public: void msw_rescale() override; void sys_color_changed() override; bool supports_printer_technology(const PrinterTechnology tech) const override { return tech == ptSLA; } + void update_sla_prusa_specific_visibility() override; }; class TabSLAPrint : public Tab From b4f1257323f898073162640e2dd02aaed876a173 Mon Sep 17 00:00:00 2001 From: YuSanka Date: Wed, 10 Apr 2024 16:06:21 +0200 Subject: [PATCH 07/25] New time estimation for PrusaSla printers --- src/libslic3r/PrintConfig.hpp | 1 + src/libslic3r/SLAPrint.cpp | 3 +- src/libslic3r/SLAPrintSteps.cpp | 303 +++++++++++++++++++++++++++----- src/slic3r/GUI/Sidebar.cpp | 8 + 4 files changed, 274 insertions(+), 41 deletions(-) diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index dd58556ccb..42b6b3de3d 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -1240,6 +1240,7 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionFloat, max_initial_exposure_time)) ((ConfigOptionString, sla_archive_format)) ((ConfigOptionFloat, sla_output_precision)) + ((ConfigOptionString, printer_model)) ) PRINT_CONFIG_CLASS_DERIVED_DEFINE0( diff --git a/src/libslic3r/SLAPrint.cpp b/src/libslic3r/SLAPrint.cpp index 7adc67c162..fdfa02289b 100644 --- a/src/libslic3r/SLAPrint.cpp +++ b/src/libslic3r/SLAPrint.cpp @@ -904,7 +904,8 @@ bool SLAPrint::invalidate_state_by_config_options(const std::vector steps; diff --git a/src/libslic3r/SLAPrintSteps.cpp b/src/libslic3r/SLAPrintSteps.cpp index bc792e1f42..e63d0fb669 100644 --- a/src/libslic3r/SLAPrintSteps.cpp +++ b/src/libslic3r/SLAPrintSteps.cpp @@ -911,6 +911,188 @@ void SLAPrint::Steps::initialize_printer_input() } } +static int Ms(int s) +{ + return s; +} + +// constant values from FW +int tiltHeight = 4959; //nm +int tower_microstep_size_nm = 250000; +int first_extra_slow_layers = 3; +int refresh_delay_ms = 0; + +static int nm_to_tower_microsteps(int nm) { + // add implementation + return nm / tower_microstep_size_nm; +} + +static int count_move_time(const std::string& axis_name, double length, int steprate) +{ + if (length < 0 || steprate < 0) + return 0; + + // sla - fw checks every 0.1 s if axis is still moving.See: Axis._wait_to_stop_delay.Additional 0.021 s is + // measured average delay of the system.Thus, the axis movement time is always quantized by this value. + double delay = 0.121; + + // Both axes use linear ramp movements. This factor compensates the tilt acceleration and deceleration time. + double tilt_comp_factor = 0.1; + + // Both axes use linear ramp movements.This factor compensates the tower acceleration and deceleration time. + int tower_comp_factor = 20000; + + int l = int(length); + return axis_name == "tower" ? Ms((int(l / (steprate * delay) + (steprate + l) / tower_comp_factor) + 1) * (delay * 1000)) : + Ms((int(l / (steprate * delay) + tilt_comp_factor) + 1) * (delay * 1000)); +} + +struct ExposureProfile { + + // map of internal TowerProfiles to maximum_steprates (usteps/s) + // this values was provided in default_tower_moving_profiles.json by SLA-team + std::map tower_speeds = { + { tpLayer1 , 800 }, + { tpLayer2 , 1600 }, + { tpLayer3 , 2400 }, + { tpLayer4 , 3200 }, + { tpLayer5 , 4000 }, + { tpLayer8 , 6400 }, + { tpLayer11, 8800 }, + { tpLayer14, 11200 }, + { tpLayer18, 14400 }, + { tpLayer22, 17600 }, + { tpLayer24, 19200 }, + }; + + // map of internal TiltProfiles to maximum_steprates (usteps/s) + // this values was provided in default_tilt_moving_profiles.json by SLA-team + std::map tilt_speeds = { + { tpMove120 , 120 }, + { tpLayer200 , 200 }, + { tpMove300 , 300 }, + { tpLayer400 , 400 }, + { tpLayer600 , 600 }, + { tpLayer800 , 800 }, + { tpLayer1000, 1000 }, + { tpLayer1250, 1250 }, + { tpLayer1500, 1500 }, + { tpLayer1750, 1750 }, + { tpLayer2000, 2000 }, + { tpLayer2250, 2250 }, + { tpMove5120 , 5120 }, + { tpMove8000 , 8000 }, + }; + + int delay_before_exposure_ms { 0 }; + int delay_after_exposure_ms { 0 }; + int tilt_down_offset_delay_ms { 0 }; + int tilt_down_delay_ms { 0 }; + int tilt_up_offset_delay_ms { 0 }; + int tilt_up_delay_ms { 0 }; + int tower_hop_height_nm { 0 }; + int tilt_down_offset_steps { 0 }; + int tilt_down_cycles { 0 }; + int tilt_up_offset_steps { 0 }; + int tilt_up_cycles { 0 }; + bool use_tilt { true }; + int tower_speed { 0 }; + int tilt_down_initial_speed { 0 }; + int tilt_down_finish_speed { 0 }; + int tilt_up_initial_speed { 0 }; + int tilt_up_finish_speed { 0 }; + + ExposureProfile() {} + + ExposureProfile(const SLAMaterialConfig& config, int opt_id) + { + delay_before_exposure_ms = int(1000 * config.delay_before_exposure_ms.get_at(opt_id)); + delay_after_exposure_ms = int(1000 * config.delay_after_exposure_ms.get_at(opt_id)); + tilt_down_offset_delay_ms = int(1000 * config.tilt_down_offset_delay_ms.get_at(opt_id)); + tilt_down_delay_ms = int(1000 * config.tilt_down_delay_ms.get_at(opt_id)); + tilt_up_offset_delay_ms = int(1000 * config.tilt_up_offset_delay_ms.get_at(opt_id)); + tilt_up_delay_ms = int(1000 * config.tilt_up_delay_ms.get_at(opt_id)); + tower_hop_height_nm = config.tower_hop_height_nm.get_at(opt_id) * 1000000; + tilt_down_offset_steps = config.tilt_down_offset_steps.get_at(opt_id); + tilt_down_cycles = config.tilt_down_cycles.get_at(opt_id); + tilt_up_offset_steps = config.tilt_up_offset_steps.get_at(opt_id); + tilt_up_cycles = config.tilt_up_cycles.get_at(opt_id); + use_tilt = config.use_tilt.get_at(opt_id); + tower_speed = tower_speeds.at(static_cast(config.tower_profile.getInts()[opt_id])); + tilt_down_initial_speed = tilt_speeds.at(static_cast(config.tilt_down_initial_profile.getInts()[opt_id])); + tilt_down_finish_speed = tilt_speeds.at(static_cast(config.tilt_down_finish_profile.getInts()[opt_id])); + tilt_up_initial_speed = tilt_speeds.at(static_cast(config.tilt_up_initial_profile.getInts()[opt_id])); + tilt_up_finish_speed = tilt_speeds.at(static_cast(config.tilt_up_finish_profile.getInts()[opt_id])); + } +}; + +static int layer_peel_move_time(int layer_height_nm, ExposureProfile p) +{ + int profile_change_delay = Ms(20); // propagation delay of sending profile change command to MC + int sleep_delay = Ms(2); // average delay of the Linux system sleep function + + int tilt = Ms(0); + if (p.use_tilt) { + tilt += profile_change_delay; + // initial down movement + tilt += count_move_time( + "tilt", + p.tilt_down_offset_steps, + p.tilt_down_initial_speed); + // initial down delay + tilt += p.tilt_down_offset_delay_ms + sleep_delay; + // profile change delay if down finish profile is different from down initial + tilt += profile_change_delay; + // cycle down movement + tilt += p.tilt_down_cycles * count_move_time( + "tilt", + int((tiltHeight - p.tilt_down_offset_steps) / p.tilt_down_cycles), + p.tilt_down_finish_speed); + // cycle down delay + tilt += p.tilt_down_cycles * (p.tilt_down_delay_ms + sleep_delay); + + // profile change delay if up initial profile is different from down finish + tilt += profile_change_delay; + // initial up movement + tilt += count_move_time( + "tilt", + tiltHeight - p.tilt_up_offset_steps, + p.tilt_up_initial_speed); + // initial up delay + tilt += p.tilt_up_offset_delay_ms + sleep_delay; + // profile change delay if up initial profile is different from down finish + tilt += profile_change_delay; + // finish up movement + tilt += p.tilt_up_cycles * count_move_time( + "tilt", + int(p.tilt_up_offset_steps / p.tilt_up_cycles), + p.tilt_up_finish_speed); + // cycle down delay + tilt += p.tilt_up_cycles * (p.tilt_up_delay_ms + sleep_delay); + } + + int tower = Ms(0); + if (p.tower_hop_height_nm > 0) { + tower += count_move_time( + "tower", + nm_to_tower_microsteps(int(p.tower_hop_height_nm) + layer_height_nm), + p.tower_speed); + tower += count_move_time( + "tower", + nm_to_tower_microsteps(int(p.tower_hop_height_nm)), + p.tower_speed); + tower += profile_change_delay; + } + else { + tower += count_move_time( + "tower", + nm_to_tower_microsteps(layer_height_nm), + p.tower_speed); + tower += profile_change_delay; + } + return int(tilt + tower); +} + // Merging the slices from all the print objects into one slice grid and // calculating print statistics from the merge result. void SLAPrint::Steps::merge_slices_and_eval_stats() { @@ -924,7 +1106,7 @@ void SLAPrint::Steps::merge_slices_and_eval_stats() { print_statistics.clear(); - const double area_fill = /*printer_config*/material_config.area_fill.getFloat()*0.01;// 0.5 (50%); + const double area_fill = material_config.area_fill.getFloat()*0.01;// 0.5 (50%); const double fast_tilt = printer_config.fast_tilt_time.getFloat();// 5.0; const double slow_tilt = printer_config.slow_tilt_time.getFloat();// 8.0; const double hv_tilt = printer_config.high_viscosity_tilt_time.getFloat();// 10.0; @@ -934,6 +1116,13 @@ void SLAPrint::Steps::merge_slices_and_eval_stats() { const int fade_layers_cnt = m_print->m_default_object_config.faded_layers.getInt();// 10 // [3;20] + ExposureProfile below(material_config, 0); + ExposureProfile above(material_config, 1); + + const int first_slow_layers = fade_layers_cnt + first_extra_slow_layers; + const std::string printer_model = printer_config.printer_model; + const bool is_prusa_print = printer_model == "SL1" || printer_model == "SL1S" || printer_model == "M1"; + const auto width = scaled(printer_config.display_width.getFloat()); const auto height = scaled(printer_config.display_height.getFloat()); const double display_area = width*height; @@ -959,7 +1148,7 @@ void SLAPrint::Steps::merge_slices_and_eval_stats() { // Going to parallel: auto printlayerfn = [this, // functions and read only vars - area_fill, display_area, exp_time, init_exp_time, fast_tilt, slow_tilt, hv_tilt, material_config, delta_fade_time, + area_fill, display_area, exp_time, init_exp_time, fast_tilt, slow_tilt, hv_tilt, material_config, delta_fade_time, is_prusa_print, first_slow_layers, below, above, // write vars &mutex, &models_volume, &supports_volume, &estim_time, &slow_layers, @@ -1041,54 +1230,88 @@ void SLAPrint::Steps::merge_slices_and_eval_stats() { layer.transformed_slices(union_ex(trslices)); - // Calculation of the slow and fast layers to the future controlling those values on FW + // Calculation of the printing time + // + Calculation of the slow and fast layers to the future controlling those values on FW + double layer_times = 0.0; - const bool is_fast_layer = layer_area <= display_area*area_fill; - const double tilt_time = material_config.material_print_speed == slamsSlow ? slow_tilt : - material_config.material_print_speed == slamsHighViscosity ? hv_tilt : - is_fast_layer ? fast_tilt : slow_tilt; + if (is_prusa_print) { + const bool is_fast_layer = sliced_layer_cnt < first_slow_layers || layer_area <= display_area * area_fill; - { Lock lck(mutex); - if (is_fast_layer) - fast_layers++; - else - slow_layers++; + { Lock lck(mutex); - // Calculation of the printing time + const int l_height_nm = 1000000 * l_height; - double layer_times = 0.0; - if (sliced_layer_cnt < 3) - layer_times += init_exp_time; - else if (fade_layer_time > exp_time) { - fade_layer_time -= delta_fade_time; - layer_times += fade_layer_time; + if (is_fast_layer) { + fast_layers++; + layer_times = layer_peel_move_time(l_height_nm, below) + + below.delay_before_exposure_ms + + below.delay_after_exposure_ms + + refresh_delay_ms * 5 + // ~ 5x frame display wait + 124; // Magical constant to compensate remaining computation delay in exposure thread + } + else { + slow_layers++; + layer_times = layer_peel_move_time(l_height_nm, above) + + above.delay_before_exposure_ms + + above.delay_after_exposure_ms + + refresh_delay_ms * 5 + // ~ 5x frame display wait + 124; // Magical constant to compensate remaining computation delay in exposure thread + } + + // All before calculations are made in ms, but we need it in s + layer_times *= 0.001; + + layers_times.emplace_back(layer.level(), layer_times); + estim_time += layer_times; + layers_areas.emplace_back(layer.level(), layer_area * SCALING_FACTOR * SCALING_FACTOR); } - else - layer_times += exp_time; - layer_times += tilt_time; - //// Per layer times (magical constants cuclulated from FW) + } + else { + const bool is_fast_layer = layer_area <= display_area*area_fill; + const double tilt_time = material_config.material_print_speed == slamsSlow ? slow_tilt : + material_config.material_print_speed == slamsHighViscosity ? hv_tilt : + is_fast_layer ? fast_tilt : slow_tilt; - static double exposure_safe_delay_before{ 3.0 }; - static double exposure_high_viscosity_delay_before{ 3.5 }; - static double exposure_slow_move_delay_before{ 1.0 }; + { Lock lck(mutex); + if (is_fast_layer) + fast_layers++; + else + slow_layers++; + if (sliced_layer_cnt < 3) + layer_times += init_exp_time; + else if (fade_layer_time > exp_time) { + fade_layer_time -= delta_fade_time; + layer_times += fade_layer_time; + } + else + layer_times += exp_time; + layer_times += tilt_time; - if (material_config.material_print_speed == slamsSlow) - layer_times += exposure_safe_delay_before; - else if (material_config.material_print_speed == slamsHighViscosity) - layer_times += exposure_high_viscosity_delay_before; - else if (!is_fast_layer) - layer_times += exposure_slow_move_delay_before; + //// Per layer times (magical constants cuclulated from FW) - // Increase layer time for "magic constants" from FW - layer_times += ( - l_height * 5 // tower move - + 120 / 1000 // Magical constant to compensate remaining computation delay in exposure thread - ); + static double exposure_safe_delay_before{ 3.0 }; + static double exposure_high_viscosity_delay_before{ 3.5 }; + static double exposure_slow_move_delay_before{ 1.0 }; + + if (material_config.material_print_speed == slamsSlow) + layer_times += exposure_safe_delay_before; + else if (material_config.material_print_speed == slamsHighViscosity) + layer_times += exposure_high_viscosity_delay_before; + else if (!is_fast_layer) + layer_times += exposure_slow_move_delay_before; + + // Increase layer time for "magic constants" from FW + layer_times += ( + l_height * 5 // tower move + + 120 / 1000 // Magical constant to compensate remaining computation delay in exposure thread + ); + + layers_times.emplace_back(layer.level(), layer_times); + estim_time += layer_times; + layers_areas.emplace_back(layer.level(), layer_area * SCALING_FACTOR * SCALING_FACTOR); + } - layers_times.emplace_back(layer.level(), layer_times); - estim_time += layer_times; - layers_areas.emplace_back(layer.level(), layer_area * SCALING_FACTOR * SCALING_FACTOR); } }; diff --git a/src/slic3r/GUI/Sidebar.cpp b/src/slic3r/GUI/Sidebar.cpp index 0340319bfb..d6d8a6031e 100644 --- a/src/slic3r/GUI/Sidebar.cpp +++ b/src/slic3r/GUI/Sidebar.cpp @@ -938,6 +938,14 @@ void Sidebar::update_sliced_info_sizer() m_sliced_info->SetTextAndShow(siCost, str_total_cost, "Cost"); wxString t_est = std::isnan(ps.estimated_print_time) ? "N/A" : from_u8(short_time_ui(get_time_dhms(float(ps.estimated_print_time)))); + // For Prusa SLA printer we add +/- 3% ration for estimated time + if (std::string printer_model = wxGetApp().preset_bundle->printers.get_edited_preset().config.opt_string("printer_model"); + t_est != "N/A" && (printer_model == "SL1" || printer_model == "SL1S" || printer_model == "M1")) { + const double ratio = 0.03 * ps.estimated_print_time; + const wxString ratio_str = from_u8(short_time_ui(get_time_dhms(float(ratio)))); + t_est += " +/- " + ratio_str; + } + m_sliced_info->SetTextAndShow(siEstimatedTime, t_est, _L("Estimated printing time") + ":"); m_plater->get_notification_manager()->set_slicing_complete_print_time(_u8L("Estimated printing time") + ": " + into_u8(t_est), m_plater->is_sidebar_collapsed()); From 1f4a47681255ad132ebae3cd2ba94de794ad8da2 Mon Sep 17 00:00:00 2001 From: Lukas Matena Date: Tue, 30 Apr 2024 15:54:15 +0200 Subject: [PATCH 08/25] Added an error message when tilt would be disabled --- src/libslic3r/SLAPrint.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/libslic3r/SLAPrint.cpp b/src/libslic3r/SLAPrint.cpp index fdfa02289b..56fc81c89d 100644 --- a/src/libslic3r/SLAPrint.cpp +++ b/src/libslic3r/SLAPrint.cpp @@ -685,6 +685,12 @@ std::string SLAPrint::validate(std::vector*) const } } + if (!m_material_config.use_tilt.get_at(0) && m_material_config.tower_hop_height_nm.get_at(0) == 0 + || !m_material_config.use_tilt.get_at(1) && m_material_config.tower_hop_height_nm.get_at(1) == 0) + return _u8L("Disabling the 'Use tilt' function causes the object to separate away from the film in the " + "vertical direction only. Therefore, it is necessary to set the 'Tower hop height' parameter " + " to a reasonable minimum value."); + return ""; } From 41f891c196cd913c67da355b5662369600553a38 Mon Sep 17 00:00:00 2001 From: Lukas Matena Date: Thu, 2 May 2024 13:35:12 +0200 Subject: [PATCH 09/25] Renamed tower/tilt profile to speed (UI only) --- src/libslic3r/PrintConfig.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 5f54807520..026a21d601 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -4537,8 +4537,8 @@ void PrintConfigDef::init_sla_tilt_params() def->set_default_value(new ConfigOptionInts({ 0, 0})); def = this->add("tower_profile", coEnums); - def->full_label = L("Tower profile"); - def->tooltip = L("Tower profile used for tower raise."); + def->full_label = L("Tower speed"); + def->tooltip = L("Tower speed used for tower raise."); def->mode = comExpert; def->sidetext = L("mm/s"); def->set_enum({ @@ -4574,32 +4574,32 @@ void PrintConfigDef::init_sla_tilt_params() }; def = this->add("tilt_down_initial_profile", coEnums); - def->full_label = L("Tilt down initial profile"); - def->tooltip = L("Tilt profile used for an initial portion of tilt down move."); + def->full_label = L("Tilt down initial speed"); + def->tooltip = L("Tilt speed used for an initial portion of tilt down move."); def->mode = comExpert; def->sidetext = L("μ-steps/s"); def->set_enum(tilt_profiles_il); def->set_default_value(new ConfigOptionEnums({ tpLayer1750, tpLayer1750 })); def = this->add("tilt_down_finish_profile", coEnums); - def->full_label = L("Tilt down finish profile"); - def->tooltip = L("Tilt profile used for the rest of the tilt down move."); + def->full_label = L("Tilt down finish speed"); + def->tooltip = L("Tilt speed used for the rest of the tilt down move."); def->mode = comExpert; def->sidetext = L("μ-steps/s"); def->set_enum(tilt_profiles_il); def->set_default_value(new ConfigOptionEnums({ tpLayer1750, tpLayer1750 })); def = this->add("tilt_up_initial_profile", coEnums); - def->full_label = L("Tilt up initial profile"); - def->tooltip = L("Tilt profile used for an initial portion of tilt up move."); + def->full_label = L("Tilt up initial speed"); + def->tooltip = L("Tilt speed used for an initial portion of tilt up move."); def->mode = comExpert; def->sidetext = L("μ-steps/s"); def->set_enum(tilt_profiles_il); def->set_default_value(new ConfigOptionEnums({ tpMove8000, tpMove8000 })); def = this->add("tilt_up_finish_profile", coEnums); - def->full_label = L("Tilt up finish profile"); - def->tooltip = L("Tilt profile used for the rest of the tilt-up."); + def->full_label = L("Tilt up finish speed"); + def->tooltip = L("Tilt speed used for the rest of the tilt-up."); def->mode = comExpert; def->sidetext = L("μ-steps/s"); def->set_enum(tilt_profiles_il); From b0cf024a0316b915a6949d25d877f37c97f65e66 Mon Sep 17 00:00:00 2001 From: YuSanka Date: Thu, 2 May 2024 16:35:49 +0200 Subject: [PATCH 10/25] Renamed tower/tilt profile to speed (back end only) --- src/libslic3r/Format/SL1.cpp | 69 +++++++---- src/libslic3r/PrintConfig.cpp | 208 ++++++++++++++++---------------- src/libslic3r/PrintConfig.hpp | 78 ++++++------ src/libslic3r/SLAPrint.cpp | 28 ++--- src/libslic3r/SLAPrintSteps.cpp | 82 ++++++------- src/slic3r/GUI/Tab.cpp | 16 +-- 6 files changed, 251 insertions(+), 230 deletions(-) diff --git a/src/libslic3r/Format/SL1.cpp b/src/libslic3r/Format/SL1.cpp index 0201aa20be..2150dcca93 100644 --- a/src/libslic3r/Format/SL1.cpp +++ b/src/libslic3r/Format/SL1.cpp @@ -19,6 +19,7 @@ #include "libslic3r/miniz_extension.hpp" #include "libslic3r/LocalesUtils.hpp" #include "libslic3r/GCode/ThumbnailData.hpp" +#include "libslic3r/Utils/JsonUtils.hpp" #include "SLAArchiveReader.hpp" #include "SLAArchiveFormatRegistry.hpp" @@ -52,23 +53,43 @@ std::string to_ini(const ConfMap &m) return ret; } -namespace pt = boost::property_tree; - -static std::string write_json_with_post_process(const pt::ptree& ptree) +static std::string get_key(const std::string& opt_key) { - std::stringstream oss; - pt::write_json(oss, ptree); + static const std::set ms_opts = { + "delay_before_exposure" + , "delay_after_exposure" + , "tilt_down_offset_delay" + , "tilt_up_offset_delay" + , "tilt_down_delay" + , "tilt_up_delay" + }; + + static const std::set nm_opts = { + "tower_hop_height" + }; + + static const std::set speed_opts = { + "tower_speed" + , "tilt_down_initial_speed" + , "tilt_down_finish_speed" + , "tilt_up_initial_speed" + , "tilt_up_finish_speed" + }; - // fix json-out to show node values as a string just for string nodes - std::regex reg("\\\"([0-9]+\\.{0,1}[0-9]*)\\\""); // code is borrowed from https://stackoverflow.com/questions/2855741/why-does-boost-property-tree-write-json-save-everything-as-string-is-it-possibl - std::string result = std::regex_replace(oss.str(), reg, "$1"); + if (ms_opts.find(opt_key) != ms_opts.end()) + return opt_key + "_ms"; - boost::replace_all(result, "\"true\"", "true"); - boost::replace_all(result, "\"false\"", "false"); + if (nm_opts.find(opt_key) != nm_opts.end()) + return opt_key + "_nm"; - return result; + if (speed_opts.find(opt_key) != speed_opts.end()) + return boost::replace_all_copy(opt_key, "_speed", "_profile"); + + return opt_key; } +namespace pt = boost::property_tree; + std::string to_json(const SLAPrint& print, const ConfMap &m) { auto& cfg = print.full_print_config(); @@ -76,8 +97,8 @@ std::string to_json(const SLAPrint& print, const ConfMap &m) pt::ptree below_node; pt::ptree above_node; - const t_config_enum_names& tilt_enum_names = ConfigOptionEnum::get_enum_names(); - const t_config_enum_names& tower_enum_names = ConfigOptionEnum::get_enum_names(); + const t_config_enum_names& tilt_enum_names = ConfigOptionEnum< TiltSpeeds>::get_enum_names(); + const t_config_enum_names& tower_enum_names = ConfigOptionEnum::get_enum_names(); for (const std::string& opt_key : tilt_options()) { const ConfigOption* opt = cfg.option(opt_key); @@ -87,28 +108,28 @@ std::string to_json(const SLAPrint& print, const ConfMap &m) case coFloats: { auto values = static_cast(opt); // those options have to be exported in ms instead of s - below_node.put(opt_key, int(1000 * values->get_at(0))); - above_node.put(opt_key, int(1000 * values->get_at(1))); + below_node.put(get_key(opt_key), int(1000 * values->get_at(0))); + above_node.put(get_key(opt_key), int(1000 * values->get_at(1))); } break; case coInts: { auto values = static_cast(opt); - int koef = opt_key == "tower_hop_height_nm" ? 1000000 : 1; - below_node.put(opt_key, koef * values->get_at(0)); - above_node.put(opt_key, koef * values->get_at(1)); + int koef = opt_key == "tower_hop_height" ? 1000000 : 1; + below_node.put(get_key(opt_key), koef * values->get_at(0)); + above_node.put(get_key(opt_key), koef * values->get_at(1)); } break; case coBools: { auto values = static_cast(opt); - below_node.put(opt_key, values->get_at(0)); - above_node.put(opt_key, values->get_at(1)); + below_node.put(get_key(opt_key), values->get_at(0)); + above_node.put(get_key(opt_key), values->get_at(1)); } break; case coEnums: { - const t_config_enum_names& enum_names = opt_key == "tower_profile" ? tower_enum_names : tilt_enum_names; - auto values = static_cast*>(opt); - below_node.put(opt_key, enum_names[values->get_at(0)]); - above_node.put(opt_key, enum_names[values->get_at(1)]); + const t_config_enum_names& enum_names = opt_key == "tower_speed" ? tower_enum_names : tilt_enum_names; + auto values = static_cast*>(opt); + below_node.put(get_key(opt_key), enum_names[values->get_at(0)]); + above_node.put(get_key(opt_key), enum_names[values->get_at(1)]); } break; case coNone: diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 026a21d601..c0fcb63fc2 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -265,38 +265,38 @@ static t_config_enum_values s_keys_map_TopOnePerimeterType { }; CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(TopOnePerimeterType) -static const t_config_enum_values s_keys_map_TowerProfiles{ - { "layer1", tpLayer1 }, - { "layer2", tpLayer2 }, - { "layer3", tpLayer3 }, - { "layer4", tpLayer4 }, - { "layer5", tpLayer5 }, - { "layer8", tpLayer8 }, - { "layer11", tpLayer11 }, - { "layer14", tpLayer14 }, - { "layer18", tpLayer18 }, - { "layer22", tpLayer22 }, - { "layer24", tpLayer24 }, +static const t_config_enum_values s_keys_map_TowerSpeeds{ + { "layer1", tsLayer1 }, + { "layer2", tsLayer2 }, + { "layer3", tsLayer3 }, + { "layer4", tsLayer4 }, + { "layer5", tsLayer5 }, + { "layer8", tsLayer8 }, + { "layer11", tsLayer11 }, + { "layer14", tsLayer14 }, + { "layer18", tsLayer18 }, + { "layer22", tsLayer22 }, + { "layer24", tsLayer24 }, }; -CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(TowerProfiles) +CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(TowerSpeeds) -static const t_config_enum_values s_keys_map_TiltProfiles{ - { "move120", tpMove120 }, - { "layer200", tpLayer200 }, - { "move300", tpMove300 }, - { "layer400", tpLayer400 }, - { "layer600", tpLayer600 }, - { "layer800", tpLayer800 }, - { "layer1000", tpLayer1000 }, - { "layer1250", tpLayer1250 }, - { "layer1500", tpLayer1500 }, - { "layer1750", tpLayer1750 }, - { "layer2000", tpLayer2000 }, - { "layer2250", tpLayer2250 }, - { "move5120", tpMove5120 }, - { "move8000", tpMove8000 }, +static const t_config_enum_values s_keys_map_TiltSpeeds{ + { "move120", tsMove120 }, + { "layer200", tsLayer200 }, + { "move300", tsMove300 }, + { "layer400", tsLayer400 }, + { "layer600", tsLayer600 }, + { "layer800", tsLayer800 }, + { "layer1000", tsLayer1000 }, + { "layer1250", tsLayer1250 }, + { "layer1500", tsLayer1500 }, + { "layer1750", tsLayer1750 }, + { "layer2000", tsLayer2000 }, + { "layer2250", tsLayer2250 }, + { "move5120", tsMove5120 }, + { "move8000", tsMove8000 }, }; -CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(TiltProfiles) +CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(TiltSpeeds) static void assign_printer_technology_to_unknown(t_optiondef_map &options, PrinterTechnology printer_technology) { @@ -4509,7 +4509,7 @@ void PrintConfigDef::init_sla_tilt_params() { ConfigOptionDef* def; - def = this->add("delay_before_exposure_ms", coFloats); + def = this->add("delay_before_exposure", coFloats); def->full_label = L("Delay before exposure"); def->tooltip = L("Delay before exposure after previous layer separation."); def->sidetext = L("s"); @@ -4518,7 +4518,7 @@ void PrintConfigDef::init_sla_tilt_params() def->mode = comExpert; def->set_default_value(new ConfigOptionFloats({ 3., 3.})); - def = this->add("delay_after_exposure_ms", coFloats); + def = this->add("delay_after_exposure", coFloats); def->full_label = L("Delay after exposure"); def->tooltip = L("Delay after exposure before layer separation."); def->sidetext = L("s"); @@ -4527,7 +4527,7 @@ void PrintConfigDef::init_sla_tilt_params() def->mode = comExpert; def->set_default_value(new ConfigOptionFloats({ 0., 0.})); - def = this->add("tower_hop_height_nm", coInts); + def = this->add("tower_hop_height", coInts); def->full_label = L("Tower hop height"); def->tooltip = L("The height of the tower raise."); def->sidetext = L("mm"); @@ -4536,12 +4536,12 @@ void PrintConfigDef::init_sla_tilt_params() def->mode = comExpert; def->set_default_value(new ConfigOptionInts({ 0, 0})); - def = this->add("tower_profile", coEnums); + def = this->add("tower_speed", coEnums); def->full_label = L("Tower speed"); def->tooltip = L("Tower speed used for tower raise."); def->mode = comExpert; def->sidetext = L("mm/s"); - def->set_enum({ + def->set_enum({ { "layer1", "1" }, { "layer2", "2" }, { "layer3", "3" }, @@ -4554,9 +4554,9 @@ void PrintConfigDef::init_sla_tilt_params() { "layer22", "22" }, { "layer24", "24" }, }); - def->set_default_value(new ConfigOptionEnums({ tpLayer22, tpLayer22 })); + def->set_default_value(new ConfigOptionEnums({ tsLayer22, tsLayer22 })); - const std::initializer_list> tilt_profiles_il = { + const std::initializer_list> tilt_speeds_il = { { "move120", "120" }, { "layer200", "200" }, { "move300", "300" }, @@ -4573,37 +4573,37 @@ void PrintConfigDef::init_sla_tilt_params() { "move8000", "8000" }, }; - def = this->add("tilt_down_initial_profile", coEnums); + def = this->add("tilt_down_initial_speed", coEnums); def->full_label = L("Tilt down initial speed"); def->tooltip = L("Tilt speed used for an initial portion of tilt down move."); def->mode = comExpert; def->sidetext = L("μ-steps/s"); - def->set_enum(tilt_profiles_il); - def->set_default_value(new ConfigOptionEnums({ tpLayer1750, tpLayer1750 })); + def->set_enum(tilt_speeds_il); + def->set_default_value(new ConfigOptionEnums({ tsLayer1750, tsLayer1750 })); - def = this->add("tilt_down_finish_profile", coEnums); + def = this->add("tilt_down_finish_speed", coEnums); def->full_label = L("Tilt down finish speed"); def->tooltip = L("Tilt speed used for the rest of the tilt down move."); def->mode = comExpert; def->sidetext = L("μ-steps/s"); - def->set_enum(tilt_profiles_il); - def->set_default_value(new ConfigOptionEnums({ tpLayer1750, tpLayer1750 })); + def->set_enum(tilt_speeds_il); + def->set_default_value(new ConfigOptionEnums({ tsLayer1750, tsLayer1750 })); - def = this->add("tilt_up_initial_profile", coEnums); + def = this->add("tilt_up_initial_speed", coEnums); def->full_label = L("Tilt up initial speed"); def->tooltip = L("Tilt speed used for an initial portion of tilt up move."); def->mode = comExpert; def->sidetext = L("μ-steps/s"); - def->set_enum(tilt_profiles_il); - def->set_default_value(new ConfigOptionEnums({ tpMove8000, tpMove8000 })); + def->set_enum(tilt_speeds_il); + def->set_default_value(new ConfigOptionEnums({ tsMove8000, tsMove8000 })); - def = this->add("tilt_up_finish_profile", coEnums); + def = this->add("tilt_up_finish_speed", coEnums); def->full_label = L("Tilt up finish speed"); def->tooltip = L("Tilt speed used for the rest of the tilt-up."); def->mode = comExpert; def->sidetext = L("μ-steps/s"); - def->set_enum(tilt_profiles_il); - def->set_default_value(new ConfigOptionEnums({ tpLayer1750, tpLayer1750 })); + def->set_enum(tilt_speeds_il); + def->set_default_value(new ConfigOptionEnums({ tsLayer1750, tsLayer1750 })); def = this->add("use_tilt", coBools); def->full_label = L("Use tilt"); @@ -4620,7 +4620,7 @@ void PrintConfigDef::init_sla_tilt_params() def->mode = comExpert; def->set_default_value(new ConfigOptionInts({ 0, 0 })); - def = this->add("tilt_down_offset_delay_ms", coFloats); + def = this->add("tilt_down_offset_delay", coFloats); def->full_label = L("Tilt down offset delay"); def->tooltip = L("Delay after the tilt reaches 'tilt_down_offset_steps' position."); def->sidetext = L("s"); @@ -4637,7 +4637,7 @@ void PrintConfigDef::init_sla_tilt_params() def->mode = comExpert; def->set_default_value(new ConfigOptionInts({ 1, 1 })); - def = this->add("tilt_down_delay_ms", coFloats); + def = this->add("tilt_down_delay", coFloats); def->full_label = L("Tilt down delay"); def->tooltip = L("The delay between tilt-down cycles."); def->sidetext = L("s"); @@ -4655,7 +4655,7 @@ void PrintConfigDef::init_sla_tilt_params() def->mode = comExpert; def->set_default_value(new ConfigOptionInts({ 1200, 1200 })); - def = this->add("tilt_up_offset_delay_ms", coFloats); + def = this->add("tilt_up_offset_delay", coFloats); def->full_label = L("Tilt up offset delay"); def->tooltip = L("Delay after the tilt reaches 'tilt_up_offset_steps' position."); def->sidetext = L("s"); @@ -4672,7 +4672,7 @@ void PrintConfigDef::init_sla_tilt_params() def->mode = comExpert; def->set_default_value(new ConfigOptionInts({ 1, 1 })); - def = this->add("tilt_up_delay_ms", coFloats); + def = this->add("tilt_up_delay", coFloats); def->full_label = L("Tilt up delay"); def->tooltip = L("The delay between tilt-up cycles."); def->sidetext = L("s"); @@ -4959,23 +4959,23 @@ void DynamicPrintConfig::normalize_fdm() } static std::vector s_Preset_sla_tilt_options{ - "delay_before_exposure_ms" - ,"delay_after_exposure_ms" - ,"tower_hop_height_nm" - ,"tower_profile" + "delay_before_exposure" + ,"delay_after_exposure" + ,"tower_hop_height" + ,"tower_speed" ,"use_tilt" - ,"tilt_down_initial_profile" + ,"tilt_down_initial_speed" ,"tilt_down_offset_steps" - ,"tilt_down_offset_delay_ms" - ,"tilt_down_finish_profile" + ,"tilt_down_offset_delay" + ,"tilt_down_finish_speed" ,"tilt_down_cycles" - ,"tilt_down_delay_ms" - ,"tilt_up_initial_profile" + ,"tilt_down_delay" + ,"tilt_up_initial_speed" ,"tilt_up_offset_steps" - ,"tilt_up_offset_delay_ms" - ,"tilt_up_finish_profile" + ,"tilt_up_offset_delay" + ,"tilt_up_finish_speed" ,"tilt_up_cycles" - ,"tilt_up_delay_ms" + ,"tilt_up_delay" }; const std::vector& tilt_options() { return s_Preset_sla_tilt_options; } @@ -4985,21 +4985,21 @@ const std::vector& tilt_options() { return s_Preset_sla_tilt_option const std::map tilt_options_floats_defs = { - {"delay_before_exposure_ms", ConfigOptionFloats({ 3., 3., 0., 1., 3.5, 3.5, 0., 0. }) } , - {"delay_after_exposure_ms", ConfigOptionFloats({ 0., 0., 0., 0., 0., 0., 0., 0. }) } , - {"tilt_down_offset_delay_ms", ConfigOptionFloats({ 0., 0., 0., 0., 0., 0., 0., 0. }) } , - {"tilt_down_delay_ms", ConfigOptionFloats({ 0., 0., 0., 0.5, 0., 0., 0., 0. }) } , - {"tilt_up_offset_delay_ms", ConfigOptionFloats({ 0., 0., 0., 0., 0., 0., 0., 0. }) } , - {"tilt_up_delay_ms", ConfigOptionFloats({ 0., 0., 0., 0., 0., 0., 0., 0. }) } , + {"delay_before_exposure", ConfigOptionFloats({ 3., 3., 0., 1., 3.5, 3.5, 0., 0. }) } , + {"delay_after_exposure", ConfigOptionFloats({ 0., 0., 0., 0., 0., 0., 0., 0. }) } , + {"tilt_down_offset_delay", ConfigOptionFloats({ 0., 0., 0., 0., 0., 0., 0., 0. }) } , + {"tilt_down_delay", ConfigOptionFloats({ 0., 0., 0., 0.5, 0., 0., 0., 0. }) } , + {"tilt_up_offset_delay", ConfigOptionFloats({ 0., 0., 0., 0., 0., 0., 0., 0. }) } , + {"tilt_up_delay", ConfigOptionFloats({ 0., 0., 0., 0., 0., 0., 0., 0. }) } , }; const std::map tilt_options_ints_defs = { - {"tower_hop_height_nm", ConfigOptionInts({ 0, 0, 0, 0, 5, 5, 0, 0 }) } , - {"tilt_down_offset_steps", ConfigOptionInts({ 0, 0, 0, 0, 2200, 2200, 0, 0 }) } , - {"tilt_down_cycles", ConfigOptionInts({ 1, 1, 1, 1, 1, 1, 0, 0 }) } , - {"tilt_up_offset_steps", ConfigOptionInts({ 1200, 1200, 600, 600, 2200, 2200, 0, 0 }) } , - {"tilt_up_cycles", ConfigOptionInts({ 1, 1, 1, 1, 1, 1, 0, 0 }) } , + {"tower_hop_height", ConfigOptionInts({ 0, 0, 0, 0, 5, 5, 0, 0 }) } , + {"tilt_down_offset_steps", ConfigOptionInts({ 0, 0, 0, 0, 2200, 2200, 0, 0 }) } , + {"tilt_down_cycles", ConfigOptionInts({ 1, 1, 1, 1, 1, 1, 0, 0 }) } , + {"tilt_up_offset_steps", ConfigOptionInts({ 1200, 1200, 600, 600, 2200, 2200, 0, 0 }) } , + {"tilt_up_cycles", ConfigOptionInts({ 1, 1, 1, 1, 1, 1, 0, 0 }) } , }; const std::map tilt_options_bools_defs = @@ -5007,17 +5007,17 @@ const std::map tilt_options_bools_defs = {"use_tilt", ConfigOptionBools({ true, true, true, true, true, true, false, false })} , }; -const std::map> tower_tilt_options_enums_defs = +const std::map> tower_tilt_options_enums_defs = { - {"tower_profile", ConfigOptionEnums({ tpLayer22, tpLayer22, tpLayer22, tpLayer22, tpLayer2, tpLayer2, tpLayer1, tpLayer1 })} , + {"tower_speed", ConfigOptionEnums({ tsLayer22, tsLayer22, tsLayer22, tsLayer22, tsLayer2, tsLayer2, tsLayer1, tsLayer1 })} , }; -const std::map> tilt_options_enums_defs = +const std::map> tilt_options_enums_defs = { - {"tilt_down_initial_profile", ConfigOptionEnums({ tpLayer1750, tpLayer1750, tpLayer1750, tpLayer1750, tpLayer800, tpLayer800, tpMove120, tpMove120 }) } , - {"tilt_down_finish_profile", ConfigOptionEnums({ tpLayer1750, tpLayer1750, tpMove8000, tpLayer1750, tpLayer1750, tpLayer1750, tpMove120, tpMove120 }) } , - {"tilt_up_initial_profile", ConfigOptionEnums({ tpMove8000, tpMove8000, tpMove8000, tpMove8000, tpLayer1750, tpLayer1750, tpMove120, tpMove120 }) } , - {"tilt_up_finish_profile", ConfigOptionEnums({ tpLayer1750, tpLayer1750, tpLayer1750, tpLayer1750, tpLayer800, tpLayer800, tpMove120, tpMove120 }) } , + {"tilt_down_initial_speed", ConfigOptionEnums({ tsLayer1750, tsLayer1750, tsLayer1750, tsLayer1750, tsLayer800, tsLayer800, tsMove120, tsMove120 }) } , + {"tilt_down_finish_speed", ConfigOptionEnums({ tsLayer1750, tsLayer1750, tsMove8000, tsLayer1750, tsLayer1750, tsLayer1750, tsMove120, tsMove120 }) } , + {"tilt_up_initial_speed", ConfigOptionEnums({ tsMove8000, tsMove8000, tsMove8000, tsMove8000, tsLayer1750, tsLayer1750, tsMove120, tsMove120 }) } , + {"tilt_up_finish_speed", ConfigOptionEnums({ tsLayer1750, tsLayer1750, tsLayer1750, tsLayer1750, tsLayer800, tsLayer800, tsMove120, tsMove120 }) } , }; // Default values containe option pair of values (Below and Above) for each titl modes @@ -5025,21 +5025,21 @@ const std::map> tilt_options_enums_ const std::map tilt_options_floats_sl1_defs = { - {"delay_before_exposure_ms", ConfigOptionFloats({ 3., 3., 0., 1., 3.5, 3.5, 0., 0. }) } , - {"delay_after_exposure_ms", ConfigOptionFloats({ 0., 0., 0., 0., 0., 0., 0., 0. }) } , - {"tilt_down_offset_delay_ms", ConfigOptionFloats({ 1., 1., 0., 0., 0., 0., 0., 0. }) } , - {"tilt_down_delay_ms", ConfigOptionFloats({ 0., 0., 0., 0., 0., 0., 0., 0. }) } , - {"tilt_up_offset_delay_ms", ConfigOptionFloats({ 0., 0., 0., 0., 1., 1., 0., 0. }) } , - {"tilt_up_delay_ms", ConfigOptionFloats({ 0., 0., 0., 0., 0., 0., 0., 0. }) } , + {"delay_before_exposure", ConfigOptionFloats({ 3., 3., 0., 1., 3.5, 3.5, 0., 0. }) } , + {"delay_after_exposure", ConfigOptionFloats({ 0., 0., 0., 0., 0., 0., 0., 0. }) } , + {"tilt_down_offset_delay", ConfigOptionFloats({ 1., 1., 0., 0., 0., 0., 0., 0. }) } , + {"tilt_down_delay", ConfigOptionFloats({ 0., 0., 0., 0., 0., 0., 0., 0. }) } , + {"tilt_up_offset_delay", ConfigOptionFloats({ 0., 0., 0., 0., 1., 1., 0., 0. }) } , + {"tilt_up_delay", ConfigOptionFloats({ 0., 0., 0., 0., 0., 0., 0., 0. }) } , }; const std::map tilt_options_ints_sl1_defs = { - {"tower_hop_height_nm", ConfigOptionInts({ 0, 0, 0, 0, 5, 5, 0, 0 }) } , - {"tilt_down_offset_steps", ConfigOptionInts({ 650, 650, 0, 0, 2200, 2200, 0, 0 }) } , - {"tilt_down_cycles", ConfigOptionInts({ 1, 1, 1, 1, 1, 1, 0, 0 }) } , - {"tilt_up_offset_steps", ConfigOptionInts({ 400, 400, 400, 400, 2200, 2200, 0, 0 }) } , - {"tilt_up_cycles", ConfigOptionInts({ 1, 1, 1, 1, 1, 1, 0, 0 }) } , + {"tower_hop_height", ConfigOptionInts({ 0, 0, 0, 0, 5, 5, 0, 0 }) } , + {"tilt_down_offset_steps", ConfigOptionInts({ 650, 650, 0, 0, 2200, 2200, 0, 0 }) } , + {"tilt_down_cycles", ConfigOptionInts({ 1, 1, 1, 1, 1, 1, 0, 0 }) } , + {"tilt_up_offset_steps", ConfigOptionInts({ 400, 400, 400, 400, 2200, 2200, 0, 0 }) } , + {"tilt_up_cycles", ConfigOptionInts({ 1, 1, 1, 1, 1, 1, 0, 0 }) } , }; const std::map tilt_options_bools_sl1_defs = @@ -5048,17 +5048,17 @@ const std::map tilt_options_bools_sl1_defs = }; -const std::map> tower_tilt_options_enums_sl1_defs = +const std::map> tower_tilt_options_enums_sl1_defs = { - {"tower_profile", ConfigOptionEnums({ tpLayer22, tpLayer22, tpLayer22, tpLayer22, tpLayer2, tpLayer2, tpLayer1, tpLayer1 })} , + {"tower_speed", ConfigOptionEnums({ tsLayer22, tsLayer22, tsLayer22, tsLayer22, tsLayer2, tsLayer2, tsLayer1, tsLayer1 })} , }; -const std::map> tilt_options_enums_sl1_defs = +const std::map> tilt_options_enums_sl1_defs = { - {"tilt_down_initial_profile", ConfigOptionEnums({ tpLayer400, tpLayer400, tpLayer400, tpLayer400, tpLayer600, tpLayer600, tpMove120, tpMove120 }) } , - {"tilt_down_finish_profile", ConfigOptionEnums({ tpLayer1500, tpLayer1500, tpLayer1750, tpLayer1500, tpLayer1500, tpLayer1500, tpMove120, tpMove120 }) } , - {"tilt_up_initial_profile", ConfigOptionEnums({ tpMove5120, tpMove5120, tpMove5120, tpMove5120, tpLayer1500, tpLayer1500, tpMove120, tpMove120 }) } , - {"tilt_up_finish_profile", ConfigOptionEnums({ tpLayer400, tpLayer400, tpLayer400, tpLayer400, tpLayer600, tpLayer600, tpMove120, tpMove120 }) } , + {"tilt_down_initial_speed", ConfigOptionEnums({ tsLayer400, tsLayer400, tsLayer400, tsLayer400, tsLayer600, tsLayer600, tsMove120, tsMove120 }) } , + {"tilt_down_finish_speed", ConfigOptionEnums({ tsLayer1500, tsLayer1500, tsLayer1750, tsLayer1500, tsLayer1500, tsLayer1500, tsMove120, tsMove120 }) } , + {"tilt_up_initial_speed", ConfigOptionEnums({ tsMove5120, tsMove5120, tsMove5120, tsMove5120, tsLayer1500, tsLayer1500, tsMove120, tsMove120 }) } , + {"tilt_up_finish_speed", ConfigOptionEnums({ tsLayer400, tsLayer400, tsLayer400, tsLayer400, tsLayer600, tsLayer600, tsMove120, tsMove120 }) } , }; void handle_legacy_sla(DynamicPrintConfig &config) @@ -5085,7 +5085,7 @@ void handle_legacy_sla(DynamicPrintConfig &config) // Load default tilt options in config in respect to the print speed, if config is loaded from old PS if (config.has("material_print_speed") && - !config.has("tilt_down_offset_delay_ms") // Config from old PS doesn't contain any of tilt options, so check it + !config.has("tilt_down_offset_delay") // Config from old PS doesn't contain any of tilt options, so check it ) { int tilt_mode = config.option("material_print_speed")->getInt(); @@ -5094,8 +5094,8 @@ void handle_legacy_sla(DynamicPrintConfig &config) const std::map floats_defs = is_sl1_model ? tilt_options_floats_sl1_defs : tilt_options_floats_defs; const std::map ints_defs = is_sl1_model ? tilt_options_ints_sl1_defs : tilt_options_ints_defs; const std::map bools_defs = is_sl1_model ? tilt_options_bools_sl1_defs : tilt_options_bools_defs; - const std::map> tower_enums_defs = is_sl1_model ? tower_tilt_options_enums_sl1_defs : tower_tilt_options_enums_defs; - const std::map> tilt_enums_defs = is_sl1_model ? tilt_options_enums_sl1_defs : tilt_options_enums_defs; + const std::map> tower_enums_defs = is_sl1_model ? tower_tilt_options_enums_sl1_defs : tower_tilt_options_enums_defs; + const std::map> tilt_enums_defs = is_sl1_model ? tilt_options_enums_sl1_defs : tilt_options_enums_defs; for (const std::string& opt_key : s_Preset_sla_tilt_options) { switch (config.def()->get(opt_key)->type) { @@ -5122,7 +5122,7 @@ void handle_legacy_sla(DynamicPrintConfig &config) break; case coEnums: { int val1, val2; - if (opt_key == "tower_profile") { + if (opt_key == "tower_speed") { auto values = tower_enums_defs.at(opt_key); val1 = values.get_at(2 * tilt_mode); val2 = values.get_at(2 * tilt_mode + 1); diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index 42b6b3de3d..30dade6990 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -171,35 +171,35 @@ enum class GCodeThumbnailsFormat { PNG, JPG, QOI }; -enum TowerProfiles : int { - tpLayer1, - tpLayer2, - tpLayer3, - tpLayer4, - tpLayer5, - tpLayer8, - tpLayer11, - tpLayer14, - tpLayer18, - tpLayer22, - tpLayer24, +enum TowerSpeeds : int { + tsLayer1, + tsLayer2, + tsLayer3, + tsLayer4, + tsLayer5, + tsLayer8, + tsLayer11, + tsLayer14, + tsLayer18, + tsLayer22, + tsLayer24, }; -enum TiltProfiles : int { - tpMove120, - tpLayer200, - tpMove300, - tpLayer400, - tpLayer600, - tpLayer800, - tpLayer1000, - tpLayer1250, - tpLayer1500, - tpLayer1750, - tpLayer2000, - tpLayer2250, - tpMove5120, - tpMove8000, +enum TiltSpeeds : int { + tsMove120, + tsLayer200, + tsMove300, + tsLayer400, + tsLayer600, + tsLayer800, + tsLayer1000, + tsLayer1250, + tsLayer1500, + tsLayer1750, + tsLayer2000, + tsLayer2250, + tsMove5120, + tsMove8000, }; #define CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(NAME) \ @@ -1190,23 +1190,23 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionFloat, area_fill)) //tilt params - ((ConfigOptionFloats, delay_before_exposure_ms)) - ((ConfigOptionFloats, delay_after_exposure_ms)) - ((ConfigOptionInts, tower_hop_height_nm)) - ((ConfigOptionEnums, tower_profile)) + ((ConfigOptionFloats, delay_before_exposure)) + ((ConfigOptionFloats, delay_after_exposure)) + ((ConfigOptionInts, tower_hop_height)) + ((ConfigOptionEnums, tower_speed)) ((ConfigOptionBools, use_tilt)) - ((ConfigOptionEnums, tilt_down_initial_profile)) + ((ConfigOptionEnums, tilt_down_initial_speed)) ((ConfigOptionInts, tilt_down_offset_steps)) - ((ConfigOptionFloats, tilt_down_offset_delay_ms)) - ((ConfigOptionEnums, tilt_down_finish_profile)) + ((ConfigOptionFloats, tilt_down_offset_delay)) + ((ConfigOptionEnums, tilt_down_finish_speed)) ((ConfigOptionInts, tilt_down_cycles)) - ((ConfigOptionFloats, tilt_down_delay_ms)) - ((ConfigOptionEnums, tilt_up_initial_profile)) + ((ConfigOptionFloats, tilt_down_delay)) + ((ConfigOptionEnums, tilt_up_initial_speed)) ((ConfigOptionInts, tilt_up_offset_steps)) - ((ConfigOptionFloats, tilt_up_offset_delay_ms)) - ((ConfigOptionEnums, tilt_up_finish_profile)) + ((ConfigOptionFloats, tilt_up_offset_delay)) + ((ConfigOptionEnums, tilt_up_finish_speed)) ((ConfigOptionInts, tilt_up_cycles)) - ((ConfigOptionFloats, tilt_up_delay_ms)) + ((ConfigOptionFloats, tilt_up_delay)) ) PRINT_CONFIG_CLASS_DEFINE( diff --git a/src/libslic3r/SLAPrint.cpp b/src/libslic3r/SLAPrint.cpp index 56fc81c89d..236d4d219f 100644 --- a/src/libslic3r/SLAPrint.cpp +++ b/src/libslic3r/SLAPrint.cpp @@ -685,8 +685,8 @@ std::string SLAPrint::validate(std::vector*) const } } - if (!m_material_config.use_tilt.get_at(0) && m_material_config.tower_hop_height_nm.get_at(0) == 0 - || !m_material_config.use_tilt.get_at(1) && m_material_config.tower_hop_height_nm.get_at(1) == 0) + if (!m_material_config.use_tilt.get_at(0) && m_material_config.tower_hop_height.get_at(0) == 0 + || !m_material_config.use_tilt.get_at(1) && m_material_config.tower_hop_height.get_at(1) == 0) return _u8L("Disabling the 'Use tilt' function causes the object to separate away from the film in the " "vertical direction only. Therefore, it is necessary to set the 'Tower hop height' parameter " " to a reasonable minimum value."); @@ -846,23 +846,23 @@ bool SLAPrint::invalidate_state_by_config_options(const std::vector tower_speeds = { - { tpLayer1 , 800 }, - { tpLayer2 , 1600 }, - { tpLayer3 , 2400 }, - { tpLayer4 , 3200 }, - { tpLayer5 , 4000 }, - { tpLayer8 , 6400 }, - { tpLayer11, 8800 }, - { tpLayer14, 11200 }, - { tpLayer18, 14400 }, - { tpLayer22, 17600 }, - { tpLayer24, 19200 }, + std::map tower_speeds = { + { tsLayer1 , 800 }, + { tsLayer2 , 1600 }, + { tsLayer3 , 2400 }, + { tsLayer4 , 3200 }, + { tsLayer5 , 4000 }, + { tsLayer8 , 6400 }, + { tsLayer11, 8800 }, + { tsLayer14, 11200 }, + { tsLayer18, 14400 }, + { tsLayer22, 17600 }, + { tsLayer24, 19200 }, }; - // map of internal TiltProfiles to maximum_steprates (usteps/s) + // map of internal TiltSpeeds to maximum_steprates (usteps/s) // this values was provided in default_tilt_moving_profiles.json by SLA-team - std::map tilt_speeds = { - { tpMove120 , 120 }, - { tpLayer200 , 200 }, - { tpMove300 , 300 }, - { tpLayer400 , 400 }, - { tpLayer600 , 600 }, - { tpLayer800 , 800 }, - { tpLayer1000, 1000 }, - { tpLayer1250, 1250 }, - { tpLayer1500, 1500 }, - { tpLayer1750, 1750 }, - { tpLayer2000, 2000 }, - { tpLayer2250, 2250 }, - { tpMove5120 , 5120 }, - { tpMove8000 , 8000 }, + std::map tilt_speeds = { + { tsMove120 , 120 }, + { tsLayer200 , 200 }, + { tsMove300 , 300 }, + { tsLayer400 , 400 }, + { tsLayer600 , 600 }, + { tsLayer800 , 800 }, + { tsLayer1000, 1000 }, + { tsLayer1250, 1250 }, + { tsLayer1500, 1500 }, + { tsLayer1750, 1750 }, + { tsLayer2000, 2000 }, + { tsLayer2250, 2250 }, + { tsMove5120 , 5120 }, + { tsMove8000 , 8000 }, }; int delay_before_exposure_ms { 0 }; @@ -1006,23 +1006,23 @@ struct ExposureProfile { ExposureProfile(const SLAMaterialConfig& config, int opt_id) { - delay_before_exposure_ms = int(1000 * config.delay_before_exposure_ms.get_at(opt_id)); - delay_after_exposure_ms = int(1000 * config.delay_after_exposure_ms.get_at(opt_id)); - tilt_down_offset_delay_ms = int(1000 * config.tilt_down_offset_delay_ms.get_at(opt_id)); - tilt_down_delay_ms = int(1000 * config.tilt_down_delay_ms.get_at(opt_id)); - tilt_up_offset_delay_ms = int(1000 * config.tilt_up_offset_delay_ms.get_at(opt_id)); - tilt_up_delay_ms = int(1000 * config.tilt_up_delay_ms.get_at(opt_id)); - tower_hop_height_nm = config.tower_hop_height_nm.get_at(opt_id) * 1000000; + delay_before_exposure_ms = int(1000 * config.delay_before_exposure.get_at(opt_id)); + delay_after_exposure_ms = int(1000 * config.delay_after_exposure.get_at(opt_id)); + tilt_down_offset_delay_ms = int(1000 * config.tilt_down_offset_delay.get_at(opt_id)); + tilt_down_delay_ms = int(1000 * config.tilt_down_delay.get_at(opt_id)); + tilt_up_offset_delay_ms = int(1000 * config.tilt_up_offset_delay.get_at(opt_id)); + tilt_up_delay_ms = int(1000 * config.tilt_up_delay.get_at(opt_id)); + tower_hop_height_nm = config.tower_hop_height.get_at(opt_id) * 1000000; tilt_down_offset_steps = config.tilt_down_offset_steps.get_at(opt_id); tilt_down_cycles = config.tilt_down_cycles.get_at(opt_id); tilt_up_offset_steps = config.tilt_up_offset_steps.get_at(opt_id); tilt_up_cycles = config.tilt_up_cycles.get_at(opt_id); use_tilt = config.use_tilt.get_at(opt_id); - tower_speed = tower_speeds.at(static_cast(config.tower_profile.getInts()[opt_id])); - tilt_down_initial_speed = tilt_speeds.at(static_cast(config.tilt_down_initial_profile.getInts()[opt_id])); - tilt_down_finish_speed = tilt_speeds.at(static_cast(config.tilt_down_finish_profile.getInts()[opt_id])); - tilt_up_initial_speed = tilt_speeds.at(static_cast(config.tilt_up_initial_profile.getInts()[opt_id])); - tilt_up_finish_speed = tilt_speeds.at(static_cast(config.tilt_up_finish_profile.getInts()[opt_id])); + tower_speed = tower_speeds.at(static_cast(config.tower_speed.getInts()[opt_id])); + tilt_down_initial_speed = tilt_speeds.at(static_cast(config.tilt_down_initial_speed.getInts()[opt_id])); + tilt_down_finish_speed = tilt_speeds.at(static_cast(config.tilt_down_finish_speed.getInts()[opt_id])); + tilt_up_initial_speed = tilt_speeds.at(static_cast(config.tilt_up_initial_speed.getInts()[opt_id])); + tilt_up_finish_speed = tilt_speeds.at(static_cast(config.tilt_up_finish_speed.getInts()[opt_id])); } }; diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 144f7fb060..ebaceccefd 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -5463,18 +5463,18 @@ static boost::any get_def_config_value(const DynamicPrintConfig& config, const s } std::vector disable_tilt_options = { - "tilt_down_initial_profile" + "tilt_down_initial_speed" ,"tilt_down_offset_steps" - ,"tilt_down_offset_delay_ms" - ,"tilt_down_finish_profile" + ,"tilt_down_offset_delay" + ,"tilt_down_finish_speed" ,"tilt_down_cycles" - ,"tilt_down_delay_ms" - ,"tilt_up_initial_profile" + ,"tilt_down_delay" + ,"tilt_up_initial_speed" ,"tilt_up_offset_steps" - ,"tilt_up_offset_delay_ms" - ,"tilt_up_finish_profile" + ,"tilt_up_offset_delay" + ,"tilt_up_finish_speed" ,"tilt_up_cycles" - ,"tilt_up_delay_ms" + ,"tilt_up_delay" }; void TabSLAMaterial::toggle_tilt_options(bool is_above) From 5e80aed9da9b842414e4a15b9a716ae26e8ad507 Mon Sep 17 00:00:00 2001 From: Roman Tyr <36745189+rtyr@users.noreply.github.com> Date: Mon, 6 May 2024 11:00:24 +0200 Subject: [PATCH 11/25] Added values for material profiles. --- resources/profiles/PrusaResearch.idx | 5 + resources/profiles/PrusaResearch.ini | 2257 +++++++++----------------- 2 files changed, 773 insertions(+), 1489 deletions(-) diff --git a/resources/profiles/PrusaResearch.idx b/resources/profiles/PrusaResearch.idx index 5e85032d76..875e91094b 100644 --- a/resources/profiles/PrusaResearch.idx +++ b/resources/profiles/PrusaResearch.idx @@ -1,4 +1,9 @@ +min_slic3r_version = 2.8.0-alpha0 +1.14.0-alpha0 Added values for SLA material profiles. min_slic3r_version = 2.7.3-beta1 +1.13.3 Updated FW version notification. +1.13.2 Added material profiles for Prusament Resin Flex Anatomic Red and Prusament Resin Flex Gingiva Mask. +1.13.1 Added material profile for Prusament Resin Model Transparent Clear. Enabled stealth mode support for MINI, XL, MK3.5, MK3.9, MK4 (this mode will be available in FW 6.0.0). 1.13.0 Updated version for PrusaSlicer 2.7.3 1.13.0-beta3 Reduced number of top/bottom layers (0.6). Updated cooling thresholds. 1.13.0-beta2 Disabled ramping lift for MK3.5. diff --git a/resources/profiles/PrusaResearch.ini b/resources/profiles/PrusaResearch.ini index bb62aade6a..67465079cd 100644 --- a/resources/profiles/PrusaResearch.ini +++ b/resources/profiles/PrusaResearch.ini @@ -5,7 +5,7 @@ name = Prusa Research # Configuration version of this file. Config file will only be installed, if the config_version differs. # This means, the server may force the PrusaSlicer configuration to be downgraded. -config_version = 1.13.0 +config_version = 1.14.0-alpha0 # Where to get the updates from? config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/PrusaResearch/ changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1% @@ -265,7 +265,7 @@ technology = SLA family = SL1 bed_model = sl1_bed.stl bed_texture = sl1.svg -default_materials = Prusa Orange Tough @0.05; Prusament Resin Tough Prusa Orange @0.05 +default_materials = Prusament Resin Tough Prusa Orange @0.05 [printer_model:SL1S] name = Original Prusa SL1S SPEED @@ -274,7 +274,7 @@ technology = SLA family = SL1 bed_model = sl1s_bed.stl bed_texture = sl1s.svg -default_materials = Prusa Orange Tough @0.05 SL1S; Prusament Resin Tough Prusa Orange @0.05 SL1S +default_materials = Prusament Resin Tough Prusa Orange @0.05 SL1S # All presets starting with asterisk, for example *common*, are intermediate and they will # not make it into the user interface. @@ -4124,6 +4124,21 @@ overhang_speed_3 = 80% # 0.4mm nozzle IS +[print:0.20mm SOLUBLE FULL @MK4IS 0.4] +inherits = 0.20mm STRUCTURAL @MK4IS 0.4; *soluble_support_MMU3* +solid_infill_speed = 60 +top_infill_extrusion_width = 0.42 +support_material_speed = 80 +support_material_interface_speed = 40 +support_material_extrusion_width = 0.4 +compatible_printers_condition = printer_notes=~/.*MK4IS.*/ and nozzle_diameter[0]==0.4 and single_extruder_multi_material + +[print:0.20mm SOLUBLE INTERFACE @MK4IS 0.4] +inherits = 0.20mm SOLUBLE FULL @MK4IS 0.4 +support_material_extruder = 0 +support_material_interface_layers = 3 +support_material_with_sheath = 0 + [print:0.20mm SPEED @MK4IS 0.4] inherits = *MK4IS_common* renamed_from = "0.20mm Input Shaper @MK4IS 0.4" @@ -6276,7 +6291,7 @@ temperature = 220 start_filament_gcode = "{if printer_notes!~/.*(MK3.5|MINIIS).*/}\nM900 K{if printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.6}0.12{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/ and nozzle_diameter[0]==0.8}0.06{elsif printer_notes=~/.*PRINTER_MODEL_MINI.*/}0.2{elsif nozzle_diameter[0]==0.8}0.01{elsif nozzle_diameter[0]==0.6}0.02{else}0.04{endif} ; Filament gcode LA 1.5\n{if printer_notes=~/.*PRINTER_MODEL_MINI.*/};{elsif printer_notes=~/.*PRINTER_HAS_BOWDEN.*/}M900 K200{elsif nozzle_diameter[0]==0.6}M900 K12{elsif nozzle_diameter[0]==0.8};{else}M900 K20{endif} ; Filament gcode LA 1.0\n{endif}\n\n{if printer_notes=~/.*MINIIS.*/}\nM572 S{if nozzle_diameter[0]==0.6}0.1{elsif nozzle_diameter[0]==0.8}0.07{elsif nozzle_diameter[0]==0.4}0.19{elsif nozzle_diameter[0]==0.25}0.55{else}0{endif}\n{endif}\n\n{if printer_notes=~/.*MK3.5.*/}\nM572 S{if nozzle_diameter[0]==0.4}0.02{elsif nozzle_diameter[0]==0.5}0.018{elsif nozzle_diameter[0]==0.6}0.012{elsif nozzle_diameter[0]==0.8}0.01{elsif nozzle_diameter[0]==0.25}0.09{elsif nozzle_diameter[0]==0.3}0.065{else}0{endif} ; Filament gcode\n{endif}" [filament:*PLAPG*] -start_filament_gcode = "M900 K{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.07{elsif nozzle_diameter[0]==0.35}0.06{elsif nozzle_diameter[0]==0.6}0.03{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.8}0.015{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*(MK4IS|XLIS).*/}\nM572 S{if nozzle_diameter[0]==0.4}0.036{elsif nozzle_diameter[0]==0.5}0.025{elsif nozzle_diameter[0]==0.6}0.02{elsif nozzle_diameter[0]==0.8}0.014{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.08{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp" +start_filament_gcode = "M900 K{if nozzle_diameter[filament_extruder_id]==0.4}0.05{elsif nozzle_diameter[filament_extruder_id]==0.25}0.14{elsif nozzle_diameter[filament_extruder_id]==0.3}0.07{elsif nozzle_diameter[filament_extruder_id]==0.35}0.06{elsif nozzle_diameter[filament_extruder_id]==0.6}0.03{elsif nozzle_diameter[filament_extruder_id]==0.5}0.035{elsif nozzle_diameter[filament_extruder_id]==0.8}0.015{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*(MK4IS|XLIS).*/}\nM572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.036{elsif nozzle_diameter[filament_extruder_id]==0.5}0.025{elsif nozzle_diameter[filament_extruder_id]==0.6}0.02{elsif nozzle_diameter[filament_extruder_id]==0.8}0.014{elsif nozzle_diameter[filament_extruder_id]==0.25}0.12{elsif nozzle_diameter[filament_extruder_id]==0.3}0.08{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp" compatible_printers_condition = printer_notes=~/.*MK4.*/ and nozzle_diameter[0]!=0.8 and nozzle_diameter[0]!=0.6 slowdown_below_layer_time = 8 idle_temperature = 70 @@ -6375,7 +6390,7 @@ filament_max_volumetric_speed = 15 [filament:*PETPG*] compatible_printers_condition = printer_notes=~/.*MK4.*/ and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 filament_max_volumetric_speed = 9.5 -start_filament_gcode = "M900 K{if nozzle_diameter[0]==0.4}0.07{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.09{elsif nozzle_diameter[0]==0.35}0.08{elsif nozzle_diameter[0]==0.6}0.04{elsif nozzle_diameter[0]==0.5}0.05{elsif nozzle_diameter[0]==0.8}0.02{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*(MK4IS|XLIS).*/}\nM572 S{if nozzle_diameter[0]==0.4}0.055{elsif nozzle_diameter[0]==0.5}0.042{elsif nozzle_diameter[0]==0.6}0.032{elsif nozzle_diameter[0]==0.8}0.018{elsif nozzle_diameter[0]==0.25}0.18{elsif nozzle_diameter[0]==0.3}0.1{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp" +start_filament_gcode = "M900 K{if nozzle_diameter[filament_extruder_id]==0.4}0.07{elsif nozzle_diameter[filament_extruder_id]==0.25}0.12{elsif nozzle_diameter[filament_extruder_id]==0.3}0.09{elsif nozzle_diameter[filament_extruder_id]==0.35}0.08{elsif nozzle_diameter[filament_extruder_id]==0.6}0.04{elsif nozzle_diameter[filament_extruder_id]==0.5}0.05{elsif nozzle_diameter[filament_extruder_id]==0.8}0.02{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*(MK4IS|XLIS).*/}\nM572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.055{elsif nozzle_diameter[filament_extruder_id]==0.5}0.042{elsif nozzle_diameter[filament_extruder_id]==0.6}0.032{elsif nozzle_diameter[filament_extruder_id]==0.8}0.018{elsif nozzle_diameter[filament_extruder_id]==0.25}0.18{elsif nozzle_diameter[filament_extruder_id]==0.3}0.1{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp" idle_temperature = 70 filament_retract_length = 0.8 filament_wipe = 1 @@ -6597,7 +6612,7 @@ compatible_printers_condition = printer_notes!~/.*MINI.*/ and printer_notes!~/.* [filament:*ABSPG*] compatible_printers_condition = printer_notes=~/.*MK4.*/ and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and ! single_extruder_multi_material filament_max_volumetric_speed = 12 -start_filament_gcode = "M900 K{if nozzle_diameter[0]==0.4}0.04{elsif nozzle_diameter[0]==0.25}0.1{elsif nozzle_diameter[0]==0.3}0.06{elsif nozzle_diameter[0]==0.35}0.05{elsif nozzle_diameter[0]==0.5}0.03{elsif nozzle_diameter[0]==0.6}0.02{elsif nozzle_diameter[0]==0.8}0.01{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*(MK4IS|XLIS).*/}\nM572 S{if nozzle_diameter[0]==0.4}0.02{elsif nozzle_diameter[0]==0.5}0.018{elsif nozzle_diameter[0]==0.6}0.012{elsif nozzle_diameter[0]==0.8}0.01{elsif nozzle_diameter[0]==0.25}0.09{elsif nozzle_diameter[0]==0.3}0.065{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S40 ; set heatbreak target temp" +start_filament_gcode = "M900 K{if nozzle_diameter[filament_extruder_id]==0.4}0.04{elsif nozzle_diameter[filament_extruder_id]==0.25}0.1{elsif nozzle_diameter[filament_extruder_id]==0.3}0.06{elsif nozzle_diameter[filament_extruder_id]==0.35}0.05{elsif nozzle_diameter[filament_extruder_id]==0.5}0.03{elsif nozzle_diameter[filament_extruder_id]==0.6}0.02{elsif nozzle_diameter[filament_extruder_id]==0.8}0.01{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*(MK4IS|XLIS).*/}\nM572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.02{elsif nozzle_diameter[filament_extruder_id]==0.5}0.018{elsif nozzle_diameter[filament_extruder_id]==0.6}0.012{elsif nozzle_diameter[filament_extruder_id]==0.8}0.01{elsif nozzle_diameter[filament_extruder_id]==0.25}0.09{elsif nozzle_diameter[filament_extruder_id]==0.3}0.065{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S40 ; set heatbreak target temp" filament_cooling_final_speed = 50 filament_cooling_initial_speed = 10 filament_cooling_moves = 5 @@ -6645,7 +6660,7 @@ slowdown_below_layer_time = 25 [filament:*PCPG*] inherits = *ABSPG* filament_max_volumetric_speed = 8 -start_filament_gcode = "M900 K{if nozzle_diameter[0]==0.4}0.07{elsif nozzle_diameter[0]==0.3}0.09{elsif nozzle_diameter[0]==0.35}0.08{elsif nozzle_diameter[0]==0.6}0.04{elsif nozzle_diameter[0]==0.5}0.05{elsif nozzle_diameter[0]==0.8}0.02{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*(MK4IS|XLIS).*/}\nM572 S{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.6}0.025{elsif nozzle_diameter[0]==0.8}0.016{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.09{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S45 ; set heatbreak target temp" +start_filament_gcode = "M900 K{if nozzle_diameter[filament_extruder_id]==0.4}0.07{elsif nozzle_diameter[filament_extruder_id]==0.3}0.09{elsif nozzle_diameter[filament_extruder_id]==0.35}0.08{elsif nozzle_diameter[filament_extruder_id]==0.6}0.04{elsif nozzle_diameter[filament_extruder_id]==0.5}0.05{elsif nozzle_diameter[filament_extruder_id]==0.8}0.02{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*(MK4IS|XLIS).*/}\nM572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.05{elsif nozzle_diameter[filament_extruder_id]==0.5}0.035{elsif nozzle_diameter[filament_extruder_id]==0.6}0.025{elsif nozzle_diameter[filament_extruder_id]==0.8}0.016{elsif nozzle_diameter[filament_extruder_id]==0.25}0.14{elsif nozzle_diameter[filament_extruder_id]==0.3}0.09{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S45 ; set heatbreak target temp" filament_minimal_purge_on_wipe_tower = 35 compatible_printers_condition = printer_notes=~/.*MK4.*/ and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and ! single_extruder_multi_material @@ -6684,7 +6699,7 @@ compatible_printers_condition = printer_model=~/.*XL.*/ and nozzle_diameter[0]== [filament:*PAPG*] inherits = *ABSPG* filament_max_volumetric_speed = 5 -start_filament_gcode = "M900 K{if nozzle_diameter[0]==0.4}0.07{elsif nozzle_diameter[0]==0.3}0.09{elsif nozzle_diameter[0]==0.35}0.08{elsif nozzle_diameter[0]==0.6}0.04{elsif nozzle_diameter[0]==0.5}0.05{elsif nozzle_diameter[0]==0.8}0.02{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*(MK4IS|XLIS).*/}\nM572 S{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.6}0.025{elsif nozzle_diameter[0]==0.8}0.016{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.09{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S45 ; set heatbreak target temp" +start_filament_gcode = "M900 K{if nozzle_diameter[filament_extruder_id]==0.4}0.07{elsif nozzle_diameter[filament_extruder_id]==0.3}0.09{elsif nozzle_diameter[filament_extruder_id]==0.35}0.08{elsif nozzle_diameter[filament_extruder_id]==0.6}0.04{elsif nozzle_diameter[filament_extruder_id]==0.5}0.05{elsif nozzle_diameter[filament_extruder_id]==0.8}0.02{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*(MK4IS|XLIS).*/}\nM572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.05{elsif nozzle_diameter[filament_extruder_id]==0.5}0.035{elsif nozzle_diameter[filament_extruder_id]==0.6}0.025{elsif nozzle_diameter[filament_extruder_id]==0.8}0.016{elsif nozzle_diameter[filament_extruder_id]==0.25}0.14{elsif nozzle_diameter[filament_extruder_id]==0.3}0.09{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S45 ; set heatbreak target temp" idle_temperature = 150 filament_minimal_purge_on_wipe_tower = 35 compatible_printers_condition = printer_notes=~/.*MK4.*/ and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and ! single_extruder_multi_material @@ -6755,6 +6770,7 @@ filament_retract_before_travel = 2 compatible_printers_condition = printer_notes=~/.*MK4.*/ and nozzle_diameter[0]>=0.3 and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 and ! single_extruder_multi_material idle_temperature = 70 start_filament_gcode = "M900 K0 ; Filament gcode\n\nM142 S36 ; set heatbreak target temp" +filament_travel_max_lift = 0.6 [filament:*FLEX06PG*] inherits = *FLEXPG* @@ -8001,7 +8017,7 @@ inherits = Generic PETG @PG 0.8; *PET08XL* inherits = Generic PETG @PG renamed_from = "Generic PETG @MK4IS" filament_max_volumetric_speed = 9 -min_fan_speed = 35 +min_fan_speed = 30 max_fan_speed = 60 first_layer_temperature = 240 temperature = 245 @@ -9251,7 +9267,7 @@ first_layer_temperature = 230 temperature = 220 filament_max_volumetric_speed = 7.5 slowdown_below_layer_time = 10 -start_filament_gcode = "M572 S{if nozzle_diameter[0]==0.4}0.03{elsif nozzle_diameter[0]==0.5}0.022{elsif nozzle_diameter[0]==0.6}0.018{elsif nozzle_diameter[0]==0.8}0.012{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.075{else}0{endif} ; Filament gcode\nM142 S36 ; set heatbreak target temp" +start_filament_gcode = "M572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.03{elsif nozzle_diameter[filament_extruder_id]==0.5}0.022{elsif nozzle_diameter[filament_extruder_id]==0.6}0.018{elsif nozzle_diameter[filament_extruder_id]==0.8}0.012{elsif nozzle_diameter[filament_extruder_id]==0.25}0.12{elsif nozzle_diameter[filament_extruder_id]==0.3}0.075{else}0{endif} ; Filament gcode\nM142 S36 ; set heatbreak target temp" compatible_printers_condition = printer_notes=~/.*XLIS.*/ and nozzle_diameter[0]!=0.8 and nozzle_diameter[0]!=0.6 [filament:Generic PLA Silk @XLIS 0.6] @@ -12086,7 +12102,7 @@ inherits = Prusa PETG @PG 0.8; *PET08XL* [filament:Prusa PETG @PGIS] inherits = Generic PETG @PG renamed_from = "Prusa PETG @MK4IS" -min_fan_speed = 35 +min_fan_speed = 30 max_fan_speed = 60 first_layer_temperature = 240 temperature = 245 @@ -12182,7 +12198,7 @@ inherits = Prusament PETG @PG 0.8; *PET08XL* inherits = Prusament PETG @PG renamed_from = "Prusament PETG @MK4IS" filament_max_volumetric_speed = 9.5 -min_fan_speed = 35 +min_fan_speed = 30 max_fan_speed = 60 compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_notes=~/.*MK4IS.*/ and nozzle_diameter[0]!=0.8 and nozzle_diameter[0]!=0.6 @@ -14513,7 +14529,7 @@ first_layer_temperature = 230 temperature = 225 filament_max_volumetric_speed = 7.5 slowdown_below_layer_time = 10 -start_filament_gcode = "M572 S{if nozzle_diameter[0]==0.4}0.033{elsif nozzle_diameter[0]==0.5}0.022{elsif nozzle_diameter[0]==0.6}0.018{elsif nozzle_diameter[0]==0.8}0.012{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.075{else}0{endif} ; Filament gcode\nM142 S36 ; set heatbreak target temp" +start_filament_gcode = "M572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.033{elsif nozzle_diameter[filament_extruder_id]==0.5}0.022{elsif nozzle_diameter[filament_extruder_id]==0.6}0.018{elsif nozzle_diameter[filament_extruder_id]==0.8}0.012{elsif nozzle_diameter[filament_extruder_id]==0.25}0.12{elsif nozzle_diameter[filament_extruder_id]==0.3}0.075{else}0{endif} ; Filament gcode\nM142 S36 ; set heatbreak target temp" compatible_printers_condition = printer_notes=~/.*XLIS.*/ and nozzle_diameter[0]!=0.8 and nozzle_diameter[0]!=0.6 [filament:Prusament PLA Blend @XLIS 0.6] @@ -15131,10 +15147,27 @@ temperature = 210 [filament:Verbatim BVOH @PG] inherits = Verbatim BVOH; *ABSPG* -first_layer_temperature = 215 -temperature = 210 +first_layer_temperature = 220 +temperature = 220 idle_temperature = 70 filament_max_volumetric_speed = 4 +compatible_printers_condition = printer_notes=~/.*MK4.*/ and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 + +#MMU3 parameters +filament_minimal_purge_on_wipe_tower = 35 +filament_loading_speed = 10 +filament_loading_speed_start = 50 +filament_unloading_speed = 100 +filament_unloading_speed_start = 100 +filament_load_time = 10.5 +filament_unload_time = 8.5 +filament_toolchange_delay = 0 +filament_cooling_moves = 3 +filament_cooling_final_speed = 3.5 +filament_cooling_initial_speed = 10 +filament_stamping_distance = 45 +filament_stamping_loading_speed = 29 +filament_ramming_parameters = "250 100 39.9677 40.1613 40.2581 40.1613 40.0645| 0.05 39.9548 0.45 40.1484 0.95 40.1484 1.45 40.1484 1.95 40.1484 2.45 40.1484 2.95 40.1484 3.45 40.1484 3.95 40.1484 4.45 40.1484 4.95 40.1484" [filament:Verbatim BVOH @PG 0.6] inherits = Verbatim BVOH @PG; *ABS06PG* @@ -16237,9 +16270,9 @@ inherits = *common* layer_height = 0.025 support_head_width = 2 -[sla_print:0.035 Detail] -inherits = *common* -layer_height = 0.035 +; [sla_print:0.035 Detail] +; inherits = *common* +; layer_height = 0.035 [sla_print:0.05 Normal] inherits = *common* @@ -16279,6 +16312,9 @@ initial_exposure_time = 45 initial_layer_height = 0.05 material_correction = 1,1,1 material_notes = +material_print_speed = fast + +# SL1 [sla_material:*common 0.025*] inherits = *common* @@ -16304,6 +16340,30 @@ exposure_time = 20 initial_exposure_time = 45 initial_layer_height = 0.1 +[sla_material:*sl1_fast*] +area_fill = 35 +delay_before_exposure = 0,1 +delay_after_exposure = 0,0 +tower_hop_height = 0,0 +tower_speed = layer22,layer22 +use_tilt = 1,1 +tilt_down_initial_speed = layer400,layer400 +tilt_down_offset_steps = 0,0 +tilt_down_offset_delay = 0,0 +tilt_down_finish_speed = layer1750,layer1500 +tilt_down_cycles = 1,1 +tilt_down_delay = 0,0 +tilt_up_initial_speed = move5120,move5120 +tilt_up_offset_steps = 400,400 +tilt_up_offset_delay = 0,0 +tilt_up_finish_speed = layer400,layer400 +tilt_up_cycles = 1,1 +tilt_up_delay = 0,0 +# For legacy slicer versions +material_print_speed = fast + +# SL1S + [sla_material:*0.025_sl1s*] inherits = *common* compatible_prints_condition = layer_height == 0.025 @@ -16326,10 +16386,80 @@ exposure_time = 2.6 initial_exposure_time = 25 initial_layer_height = 0.1 +[sla_material:*sl1s_slow*] +area_fill = 35 +delay_before_exposure = 3,3 +delay_after_exposure = 0,0 +tower_hop_height = 0,0 +tower_speed = layer22,layer22 +use_tilt = 1,1 +tilt_down_initial_speed = layer1750,layer1750 +tilt_down_offset_steps = 0,0 +tilt_down_offset_delay = 0,0 +tilt_down_finish_speed = layer1750,layer1750 +tilt_down_cycles = 1,1 +tilt_down_delay = 0,0 +tilt_up_initial_speed = move8000,move8000 +tilt_up_offset_steps = 1200,1200 +tilt_up_offset_delay = 0,0 +tilt_up_finish_speed = layer1750,layer1750 +tilt_up_cycles = 1,1 +tilt_up_delay = 0,0 +# For legacy slicer versions +material_print_speed = slow + +[sla_material:*sl1s_fast*] +area_fill = 35 +delay_before_exposure = 0,1 +delay_after_exposure = 0,0 +tower_hop_height = 0,0 +tower_speed = layer22,layer22 +use_tilt = 1,1 +tilt_down_initial_speed = layer1750,layer1750 +tilt_down_offset_steps = 0,0 +tilt_down_offset_delay = 0,0 +tilt_down_finish_speed = move8000,layer1750 +tilt_down_cycles = 1,1 +tilt_down_delay = 0,0 +tilt_up_initial_speed = move8000,move8000 +tilt_up_offset_steps = 600,600 +tilt_up_offset_delay = 0,0 +tilt_up_finish_speed = layer1750,layer1750 +tilt_up_cycles = 1,1 +tilt_up_delay = 0,0 +# For legacy slicer versions +material_print_speed = slow + +[sla_material:*sl1s_hv*] +area_fill = 35 +delay_before_exposure = 3.5,3.5 +delay_after_exposure = 0,0 +tower_hop_height = 5,5 +tower_speed = layer2,layer2 +use_tilt = 1,1 +tilt_down_initial_speed = layer800,layer800 +tilt_down_offset_steps = 2200,2200 +tilt_down_offset_delay = 0,0 +tilt_down_finish_speed = layer1750,layer1750 +tilt_down_cycles = 1,1 +tilt_down_delay = 0,0 +tilt_up_initial_speed = layer1750,layer1750 +tilt_up_offset_steps = 2200,2200 +tilt_up_offset_delay = 0,0 +tilt_up_finish_speed = layer800,layer800 +tilt_up_cycles = 1,1 +tilt_up_delay = 0,0 +# For legacy slicer versions +material_print_speed = slow + +[sla_material:*legacy_fast*] +# For legacy slicer versions +material_print_speed = fast + ########### Materials 0.025 [sla_material:3DM-ABS @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 12 initial_exposure_time = 35 material_type = Tough @@ -16337,7 +16467,7 @@ material_vendor = 3DM material_colour = #FF8040 [sla_material:3DM-Vulcan Gold @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 12 initial_exposure_time = 30 material_type = Casting @@ -16345,7 +16475,7 @@ material_vendor = 3DM material_colour = #B0B000 [sla_material:3DM-TOUGH Clear @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 9 initial_exposure_time = 30 material_type = Tough @@ -16353,7 +16483,7 @@ material_vendor = 3DM material_colour = #F8F8F8 [sla_material:3DM-HR Red Wine @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 14 initial_exposure_time = 35 material_type = Tough @@ -16361,7 +16491,7 @@ material_vendor = 3DM material_colour = #EC0000 [sla_material:BlueCast Phrozen Wax @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 15 initial_exposure_time = 50 material_type = Tough @@ -16369,7 +16499,7 @@ material_vendor = BlueCast material_colour = #007EFD [sla_material:BlueCast Castable Wax @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 8 initial_exposure_time = 35 material_type = Casting @@ -16377,7 +16507,7 @@ material_vendor = BlueCast material_colour = #007EFD [sla_material:BlueCast EcoGray @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 6 initial_exposure_time = 40 material_type = Tough @@ -16385,23 +16515,23 @@ material_vendor = BlueCast material_colour = #808080 [sla_material:BlueCast Kera Master Dental @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 6 initial_exposure_time = 45 -material_type = Dental +material_type = Medical material_vendor = BlueCast material_colour = #B0B000 [sla_material:BlueCast Model Dental Gray @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 6 initial_exposure_time = 35 -material_type = Dental +material_type = Medical material_vendor = BlueCast material_colour = #C0C0C0 [sla_material:BlueCast X10 @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 4 initial_exposure_time = 100 material_type = Tough @@ -16409,7 +16539,7 @@ material_vendor = BlueCast material_colour = #007EFD [sla_material:BlueCast X-One @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 25 initial_exposure_time = 35 material_type = Casting @@ -16417,7 +16547,7 @@ material_vendor = BlueCast material_colour = #C0C0C0 [sla_material:DruckWege Type D High Temp @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 6 initial_exposure_time = 20 material_type = Tough @@ -16425,7 +16555,7 @@ material_vendor = DruckWege material_colour = #E800E8 [sla_material:Esun Bio-Photopolymer Resin White @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 5 initial_exposure_time = 30 material_type = Tough @@ -16433,7 +16563,7 @@ material_vendor = Esun material_colour = #FFFFFF [sla_material:FunToDo Castable Blend Red @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 10 initial_exposure_time = 35 material_type = Casting @@ -16441,7 +16571,7 @@ material_vendor = FunToDo material_colour = #EC0000 [sla_material:FunToDo Snow White @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 7 initial_exposure_time = 35 material_type = Tough @@ -16449,7 +16579,7 @@ material_vendor = FunToDo material_colour = #FFFFFF [sla_material:Harz Labs Basic Resin Red @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 10 initial_exposure_time = 20 material_type = Tough @@ -16457,7 +16587,7 @@ material_vendor = Harz Labs material_colour = #EC0000 [sla_material:Harz Labs Model Resin Cherry @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 10 initial_exposure_time = 20 material_type = Tough @@ -16465,7 +16595,7 @@ material_vendor = Harz Labs material_colour = #EC0000 [sla_material:Harz Labs Model Resin Black @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 10 initial_exposure_time = 20 material_type = Tough @@ -16473,15 +16603,15 @@ material_vendor = Harz Labs material_colour = #595959 [sla_material:Harz Labs Dental Cast Red @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 10 initial_exposure_time = 20 -material_type = Dental +material_type = Medical material_vendor = Harz Labs material_colour = #EC0000 [sla_material:Esun Standard Resin Black @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 6 initial_exposure_time = 30 material_type = Tough @@ -16489,7 +16619,7 @@ material_vendor = Esun material_colour = #595959 [sla_material:Photocentric Ash Grey @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 9 initial_exposure_time = 30 material_type = Tough @@ -16497,7 +16627,7 @@ material_vendor = Photocentric material_colour = #C0C0C0 [sla_material:Resinworks 3D Violet @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 15 initial_exposure_time = 30 material_type = Tough @@ -16505,7 +16635,7 @@ material_vendor = Resinworks 3D material_colour = #E800E8 [sla_material:Resinworks 3D Green @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 17 initial_exposure_time = 30 material_type = Tough @@ -16513,7 +16643,7 @@ material_vendor = Resinworks 3D material_colour = #00B900 [sla_material:Monocure 3D Black Rapid Resin @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 4 initial_exposure_time = 35 material_type = Tough @@ -16521,7 +16651,7 @@ material_vendor = Monocure material_colour = #595959 [sla_material:Monocure 3D Blue Rapid Resin @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 4 initial_exposure_time = 35 material_type = Tough @@ -16531,7 +16661,7 @@ material_colour = #007EFD ## Prusa Polymers 0.025 [sla_material:Prusament Resin Tough Prusa Orange @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 5 initial_exposure_time = 35 material_type = Tough @@ -16539,7 +16669,7 @@ material_vendor = Prusa Polymers material_colour = #FF8040 [sla_material:Prusament Resin Tough Rich Black @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 5 initial_exposure_time = 35 material_type = Tough @@ -16547,7 +16677,7 @@ material_vendor = Prusa Polymers material_colour = #595959 [sla_material:Prusament Resin Tough Anthracite Grey @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 6 initial_exposure_time = 35 material_type = Tough @@ -16555,7 +16685,7 @@ material_vendor = Prusa Polymers material_colour = #808080 [sla_material:Prusament Resin Tough Sandstone Model @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 4 initial_exposure_time = 35 material_type = Tough @@ -16563,7 +16693,7 @@ material_vendor = Prusa Polymers material_colour = #EEA061 [sla_material:Prusament Resin Tough Terra Brown @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 4 initial_exposure_time = 35 material_type = Tough @@ -16571,7 +16701,7 @@ material_vendor = Prusa Polymers material_colour = #7A5C45 [sla_material:Prusament Resin Tough Brick Red @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 4 initial_exposure_time = 35 material_type = Tough @@ -16579,7 +16709,7 @@ material_vendor = Prusa Polymers material_colour = #B46056 [sla_material:Prusament Resin Tough Grass Green @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 4 initial_exposure_time = 35 material_type = Tough @@ -16587,7 +16717,7 @@ material_vendor = Prusa Polymers material_colour = #37823F [sla_material:Prusament Resin Tough Bright Yellow @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 4 initial_exposure_time = 35 material_type = Tough @@ -16595,7 +16725,7 @@ material_vendor = Prusa Polymers material_colour = #F9DB4C [sla_material:Prusament Resin Tough Transparent Green @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 5 initial_exposure_time = 35 material_type = Tough @@ -16603,7 +16733,7 @@ material_vendor = Prusa Polymers material_colour = #1DAf5E [sla_material:Prusament Resin Tough Transparent Red @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 6 initial_exposure_time = 35 material_type = Tough @@ -16611,7 +16741,7 @@ material_vendor = Prusa Polymers material_colour = #D21B31 [sla_material:Prusament Resin Tough Transparent Amber @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 5 initial_exposure_time = 35 material_type = Tough @@ -16619,7 +16749,7 @@ material_vendor = Prusa Polymers material_colour = #FCB30E [sla_material:Prusament Resin Tough Classic Red @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 3 initial_exposure_time = 35 material_type = Tough @@ -16627,7 +16757,7 @@ material_vendor = Prusa Polymers material_colour = #EC0000 [sla_material:Prusament Resin Model Solid Grey @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 4.5 initial_exposure_time = 35 material_type = Tough @@ -16635,7 +16765,7 @@ material_vendor = Prusa Polymers material_colour = #9C9D9D [sla_material:Prusament Resin Model Alabaster White @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 4.5 initial_exposure_time = 30 material_type = Tough @@ -16643,7 +16773,7 @@ material_vendor = Prusa Polymers material_colour = #D6D7D8 [sla_material:Prusament Resin Model Neutral Beige @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 4.8 initial_exposure_time = 35 material_type = Tough @@ -16651,7 +16781,7 @@ material_vendor = Prusa Polymers material_colour = #BF9C87 [sla_material:Prusament Resin Model Ultra Violet @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 5 initial_exposure_time = 35 material_type = Tough @@ -16659,7 +16789,7 @@ material_vendor = Prusa Polymers material_colour = #413A7A [sla_material:Prusament Resin BioBased60 Herbal Green @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 7 initial_exposure_time = 30 material_type = Tough @@ -16667,7 +16797,7 @@ material_vendor = Prusa Polymers material_colour = #3AD200 [sla_material:Prusament Resin BioBased60 Magma Red @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 7 initial_exposure_time = 35 material_type = Tough @@ -16675,7 +16805,7 @@ material_vendor = Prusa Polymers material_colour = #D20202 [sla_material:Prusament Resin BioBased60 Natural Yellow @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 6 initial_exposure_time = 35 material_type = Tough @@ -16683,7 +16813,7 @@ material_vendor = Prusa Polymers material_colour = #ECDE05 [sla_material:Prusament Resin BioBased60 Obsidian Black @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 10 initial_exposure_time = 35 material_type = Tough @@ -16691,7 +16821,7 @@ material_vendor = Prusa Polymers material_colour = #232323 [sla_material:Prusament Resin BioBased60 Sapphire Blue @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 7.7 initial_exposure_time = 35 material_type = Tough @@ -16699,7 +16829,7 @@ material_vendor = Prusa Polymers material_colour = #2196F3 [sla_material:Prusament Resin BioBased60 Ivory White @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 7.5 initial_exposure_time = 35 material_type = Tough @@ -16707,7 +16837,7 @@ material_vendor = Prusa Polymers material_colour = #E3D99F [sla_material:Prusament Resin Flex80 Transparent Clear @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 10 initial_exposure_time = 30 material_type = Flexible @@ -16715,7 +16845,7 @@ material_vendor = Prusa Polymers material_colour = #F3F6F4 [sla_material:Prusament Resin Flex80 Black @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 8 initial_exposure_time = 30 material_type = Flexible @@ -16723,192 +16853,15 @@ material_vendor = Prusa Polymers material_colour = #595959 [sla_material:Prusament Resin Flex80 White @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 5.5 initial_exposure_time = 35 material_type = Flexible material_vendor = Prusa Polymers material_colour = #E2D3DB -## Prusa 0.025 - -[sla_material:Prusa Orange Tough @0.025] -inherits = *common 0.025* -exposure_time = 6 -initial_exposure_time = 35 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #FF8040 - -[sla_material:Prusa Grey Tough @0.025] -inherits = *common 0.025* -exposure_time = 7 -initial_exposure_time = 35 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #FF8040 - -[sla_material:Prusa Azure Blue Tough @0.025] -inherits = *common 0.025* -exposure_time = 7 -initial_exposure_time = 35 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #007EFD - -## [sla_material:Prusa Blue Tough @0.025] -## inherits = *common 0.025* -## exposure_time = 5 -## initial_exposure_time = 35 -## material_type = Tough -## material_vendor = Made for Prusa - -[sla_material:Prusa Maroon Tough @0.025] -inherits = *common 0.025* -exposure_time = 6 -initial_exposure_time = 35 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #804000 - -[sla_material:Prusa Beige Tough @0.025] -inherits = *common 0.025* -exposure_time = 6 -initial_exposure_time = 35 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #FFEEE6 - -[sla_material:Prusa Pink Tough @0.025] -inherits = *common 0.025* -exposure_time = 7 -initial_exposure_time = 35 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #FF80C0 - -[sla_material:Prusa White Tough @0.025] -inherits = *common 0.025* -exposure_time = 6.5 -initial_exposure_time = 35 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #FFFFFF - -[sla_material:Prusa Transparent Tough @0.025] -inherits = *common 0.025* -exposure_time = 6 -initial_exposure_time = 15 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #F8F8F8 - -[sla_material:Prusa Green Dental Casting @0.025] -inherits = *common 0.025* -exposure_time = 12 -initial_exposure_time = 40 -material_type = Casting -material_vendor = Made for Prusa -material_colour = #00B900 - -[sla_material:Prusa Transparent Green Tough @0.025] -inherits = *common 0.025* -exposure_time = 5 -initial_exposure_time = 35 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #00B900 - -[sla_material:Prusa Clear ABS like @0.025] -inherits = *common 0.025* -exposure_time = 6 -initial_exposure_time = 30 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #F8F8F8 - -[sla_material:Prusa White ABS like @0.025] -inherits = *common 0.025* -exposure_time = 5 -initial_exposure_time = 30 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #FFFFFF - -[sla_material:Prusa Grey High Tenacity @0.025] -inherits = *common 0.025* -exposure_time = 5 -initial_exposure_time = 30 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #C0C0C0 - -[sla_material:Prusa Super Low Odor Cyan Tough @0.025] -inherits = *common 0.025* -exposure_time = 5 -initial_exposure_time = 35 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #79FFFF - -[sla_material:Prusa Super Low Odor Magenta Tough @0.025] -inherits = *common 0.025* -exposure_time = 5 -initial_exposure_time = 35 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #E800E8 - -[sla_material:Prusa Super Low Odor Yellow Tough @0.025] -inherits = *common 0.025* -exposure_time = 5 -initial_exposure_time = 35 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #FFFF6F - -[sla_material:Prusa Orange-Yellow Teeth Model @0.025] -inherits = *common 0.025* -exposure_time = 5 -initial_exposure_time = 30 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #FFFF6F - -[sla_material:Prusa Vibrant Orange Tough @0.025] -inherits = *common 0.025* -exposure_time = 6 -initial_exposure_time = 35 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #FF8040 - -[sla_material:Prusa Rich Black Tough @0.025] -inherits = *common 0.025* -exposure_time = 5 -initial_exposure_time = 35 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #595959 - -[sla_material:Prusa Deep Blue Transparent Tough @0.025] -inherits = *common 0.025* -exposure_time = 5 -initial_exposure_time = 35 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #F8F8F8 - -[sla_material:Prusa Yellow Jewelry Casting @0.025] -inherits = *common 0.025* -exposure_time = 8 -initial_exposure_time = 45 -material_type = Casting -material_vendor = Made for Prusa -material_colour = #FFFF6F - [sla_material:Ameralabs TGM-7 LED @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 4 initial_exposure_time = 35 material_type = Tough @@ -16916,7 +16869,7 @@ material_vendor = Ameralabs material_colour = #C0C0C0 [sla_material:PrimaCreator Tough Light Grey @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 6 initial_exposure_time = 35 material_type = Tough @@ -16924,7 +16877,7 @@ material_vendor = PrimaCreator material_colour = #C0C0C0 [sla_material:PrimaCreator Tough Clear @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 5 initial_exposure_time = 35 material_type = Tough @@ -16932,7 +16885,7 @@ material_vendor = PrimaCreator material_colour = #F8F8F8 [sla_material:PrimaCreator Tough White @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 5 initial_exposure_time = 35 material_type = Tough @@ -16940,7 +16893,7 @@ material_vendor = PrimaCreator material_colour = #FFFFFF [sla_material:PrimaCreator Flex Clear @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 4.5 initial_exposure_time = 30 material_type = Flexible @@ -16948,7 +16901,7 @@ material_vendor = PrimaCreator material_colour = #F8F8F8 [sla_material:Siraya Tech Simple Clear @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 8 initial_exposure_time = 35 material_type = Tough @@ -16956,7 +16909,7 @@ material_vendor = Siraya Tech material_colour = #F8F8F8 [sla_material:Siraya Tech Blu Clear V2 @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 9 initial_exposure_time = 30 material_type = Tough @@ -16964,7 +16917,7 @@ material_vendor = Siraya Tech material_colour = #F8F8F8 [sla_material:Siraya Tech Blu Blue @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 6 initial_exposure_time = 35 material_type = Tough @@ -16972,7 +16925,7 @@ material_vendor = Siraya Tech material_colour = #007EFD [sla_material:Siraya Tech Fast Grey @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 6 initial_exposure_time = 35 material_type = Tough @@ -16980,7 +16933,7 @@ material_vendor = Siraya Tech material_colour = #C0C0C0 [sla_material:Siraya Tech Tenacious @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 6 initial_exposure_time = 35 material_type = Tough @@ -16988,7 +16941,7 @@ material_vendor = Siraya Tech material_colour = #F8F8F8 [sla_material:Siraya Tech Easy @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 11 initial_exposure_time = 15 material_type = Tough @@ -16996,7 +16949,7 @@ material_vendor = Siraya Tech material_colour = #F8F8F8 [sla_material:Siraya Tech Sculpt @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 7 initial_exposure_time = 35 material_type = Tough @@ -17004,7 +16957,7 @@ material_vendor = Siraya Tech material_colour = #C0C0C0 [sla_material:Siraya Tech Fast Black @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 6 initial_exposure_time = 35 material_type = Tough @@ -17012,23 +16965,23 @@ material_vendor = Siraya Tech material_colour = #007EFD [sla_material:NextDent Model 2.0 Grey @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 14 initial_exposure_time = 35 -material_type = Dental +material_type = Medical material_vendor = NextDent material_colour = #808080 [sla_material:NextDent Surgical Guide @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 6 initial_exposure_time = 35 -material_type = Dental +material_type = Medical material_vendor = NextDent material_colour = #FF8040 [sla_material:NextDent Cast Purple @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 7 initial_exposure_time = 20 material_type = Casting @@ -17036,7 +16989,7 @@ material_vendor = NextDent material_colour = #E800E8 [sla_material:MakerJuice Labs Standard Red @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 9 initial_exposure_time = 35 material_type = Tough @@ -17044,7 +16997,7 @@ material_vendor = MakerJuice Labs material_colour = #EC0000 [sla_material:3DJake High Precision Grey @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 8.5 initial_exposure_time = 35 material_type = Tough @@ -17052,7 +17005,7 @@ material_vendor = 3DJake material_colour = #C0C0C0 [sla_material:3DJake High Precision Blue @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 6.5 initial_exposure_time = 35 material_type = Tough @@ -17060,7 +17013,7 @@ material_vendor = 3DJake material_colour = #007EFD [sla_material:Zortrax Black @0.025] -inherits = *common 0.025* +inherits = *common 0.025*; *sl1_fast* exposure_time = 4 initial_exposure_time = 35 material_type = Tough @@ -17070,15 +17023,15 @@ material_colour = #595959 ########### Materials 0.05 [sla_material:Asiga Denta Model @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 15 initial_exposure_time = 30 -material_type = Dental +material_type = Medical material_vendor = Asiga material_colour = #FFEEE6 [sla_material:Asiga PlasGRAY @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 29 initial_exposure_time = 60 material_type = Tough @@ -17086,7 +17039,7 @@ material_vendor = Asiga material_colour = #C0C0C0 [sla_material:Ameralabs TGM-7 LED @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 7 initial_exposure_time = 35 material_type = Tough @@ -17094,7 +17047,7 @@ material_vendor = Ameralabs material_colour = #C0C0C0 [sla_material:Ameralabs AMD 3 LED @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 5 initial_exposure_time = 30 material_type = Tough @@ -17102,7 +17055,7 @@ material_vendor = Ameralabs material_colour = #808080 [sla_material:BlueCast EcoGray @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 7 initial_exposure_time = 35 material_type = Tough @@ -17110,23 +17063,23 @@ material_vendor = BlueCast material_colour = #808080 [sla_material:BlueCast Kera Master Dental @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 7 initial_exposure_time = 50 -material_type = Dental +material_type = Medical material_vendor = BlueCast material_colour = #FFEEE6 [sla_material:BlueCast Model Dental Gray @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 8 initial_exposure_time = 35 -material_type = Dental +material_type = Medical material_vendor = BlueCast material_colour = #C0C0C0 [sla_material:BlueCast LCD-DLP Original @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 10 initial_exposure_time = 60 material_type = Tough @@ -17134,7 +17087,7 @@ material_vendor = BlueCast material_colour = #007EFD [sla_material:BlueCast Phrozen Wax @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 16 initial_exposure_time = 50 material_type = Tough @@ -17142,7 +17095,7 @@ material_vendor = BlueCast material_colour = #007EFD [sla_material:BlueCast Castable Wax @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 11 initial_exposure_time = 35 material_type = Casting @@ -17150,7 +17103,7 @@ material_vendor = BlueCast material_colour = #E800E8 [sla_material:BlueCast S+ @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 9 initial_exposure_time = 45 material_type = Tough @@ -17158,7 +17111,7 @@ material_vendor = BlueCast material_colour = #00B900 [sla_material:BlueCast X5 @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 9 initial_exposure_time = 100 material_type = Tough @@ -17166,7 +17119,7 @@ material_vendor = BlueCast material_colour = #007EFD [sla_material:BlueCast X10 @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 6 initial_exposure_time = 100 material_type = Tough @@ -17174,7 +17127,7 @@ material_vendor = BlueCast material_colour = #007EFD [sla_material:BlueCast 23LS @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 8 initial_exposure_time = 50 material_type = Tough @@ -17182,7 +17135,7 @@ material_vendor = BlueCast material_colour = #007EFD [sla_material:BlueCast X-One @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 27 initial_exposure_time = 35 material_type = Casting @@ -17190,7 +17143,7 @@ material_vendor = BlueCast material_colour = #C0C0C0 [sla_material:DruckWege Type D High Temp @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 10 initial_exposure_time = 20 material_type = Tough @@ -17198,7 +17151,7 @@ material_vendor = DruckWege material_colour = #E800E8 [sla_material:Monocure 3D Black Rapid Resin @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 6 initial_exposure_time = 35 material_type = Tough @@ -17206,7 +17159,7 @@ material_vendor = Monocure material_colour = #595959 [sla_material:Monocure 3D Blue Rapid Resin @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 7 initial_exposure_time = 35 material_type = Tough @@ -17214,7 +17167,7 @@ material_vendor = Monocure material_colour = #007EFD [sla_material:Monocure 3D Clear Rapid Resin @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 8 initial_exposure_time = 40 material_type = Tough @@ -17222,7 +17175,7 @@ material_vendor = Monocure material_colour = #F8F8F8 [sla_material:Monocure 3D Grey Rapid Resin @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 10 initial_exposure_time = 30 material_type = Tough @@ -17230,7 +17183,7 @@ material_vendor = Monocure material_colour = #C0C0C0 [sla_material:Monocure 3D White Rapid Resin @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 10 initial_exposure_time = 35 material_type = Tough @@ -17238,7 +17191,7 @@ material_vendor = Monocure material_colour = #FFFFFF [sla_material:3DM-HTR140 (high temperature) @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 12 initial_exposure_time = 45 material_type = Tough @@ -17246,7 +17199,7 @@ material_vendor = 3DM material_colour = #EC0000 [sla_material:Esun Bio-Photopolymer Resin White @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 8 initial_exposure_time = 30 material_type = Tough @@ -17254,7 +17207,7 @@ material_vendor = Esun material_colour = #FFFFFF [sla_material:Esun Standard Resin Black @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 7 initial_exposure_time = 30 material_type = Tough @@ -17262,7 +17215,7 @@ material_vendor = Esun material_colour = #595959 [sla_material:FunToDo Castable Blend Red @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 15 initial_exposure_time = 35 material_type = Casting @@ -17270,7 +17223,7 @@ material_vendor = FunToDo material_colour = #EC0000 [sla_material:FunToDo Industrial Blend Unpigmented @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 4 initial_exposure_time = 35 material_type = Tough @@ -17278,7 +17231,7 @@ material_vendor = FunToDo material_colour = #F8F8F8 [sla_material:FunToDo Snow White @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 10 initial_exposure_time = 35 material_type = Tough @@ -17286,7 +17239,7 @@ material_vendor = FunToDo material_colour = #FFFFFF [sla_material:3DM-ABS @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 13 initial_exposure_time = 25 material_type = Tough @@ -17294,7 +17247,7 @@ material_vendor = 3DM material_colour = #FF8040 [sla_material:3DM-BLACK @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 20 initial_exposure_time = 40 material_type = Tough @@ -17302,15 +17255,15 @@ material_vendor = 3DM material_colour = #595959 [sla_material:3DM-DENT @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 7 initial_exposure_time = 45 -material_type = Dental +material_type = Medical material_vendor = 3DM material_colour = #FFEEE6 [sla_material:3DM-HR Green @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 15 initial_exposure_time = 40 material_type = Tough @@ -17318,7 +17271,7 @@ material_vendor = 3DM material_colour = #00B900 [sla_material:3DM-HR Red Wine @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 18 initial_exposure_time = 35 material_type = Tough @@ -17326,7 +17279,7 @@ material_vendor = 3DM material_colour = #EC0000 [sla_material:3DM-XPRO White @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 9 initial_exposure_time = 35 material_type = Tough @@ -17334,7 +17287,7 @@ material_vendor = 3DM material_colour = #FFFFFF [sla_material:3DM-Vulcan Gold @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 15 initial_exposure_time = 30 material_type = Tough @@ -17342,7 +17295,7 @@ material_vendor = 3DM material_colour = #B0B000 [sla_material:3DM-TOUGH Clear @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 15 initial_exposure_time = 30 material_type = Tough @@ -17350,7 +17303,7 @@ material_vendor = 3DM material_colour = #F8F8F8 [sla_material:FunToDo Ash Grey @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 9 initial_exposure_time = 40 material_type = Tough @@ -17358,7 +17311,7 @@ material_vendor = FunToDo material_colour = #808080 [sla_material:Harz Labs Model Resin Cherry @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 13 initial_exposure_time = 20 material_type = Tough @@ -17366,7 +17319,7 @@ material_vendor = Harz Labs material_colour = #EC0000 [sla_material:Harz Labs Basic Resin Red @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 13 initial_exposure_time = 20 material_type = Tough @@ -17374,7 +17327,7 @@ material_vendor = Harz Labs material_colour = #EC0000 [sla_material:Harz Labs Model Resin Black @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 13 initial_exposure_time = 20 material_type = Tough @@ -17382,15 +17335,15 @@ material_vendor = Harz Labs material_colour = #595959 [sla_material:Harz Labs Dental Cast Red @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 13 initial_exposure_time = 20 -material_type = Dental +material_type = Medical material_vendor = Harz Labs material_colour = #EC0000 [sla_material:Resinworks 3D Violet @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 17 initial_exposure_time = 30 material_type = Tough @@ -17398,7 +17351,7 @@ material_vendor = Resinworks 3D material_colour = #E800E8 [sla_material:Resinworks 3D Green @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 21 initial_exposure_time = 35 material_type = Tough @@ -17406,7 +17359,7 @@ material_vendor = Resinworks 3D material_colour = #00B900 [sla_material:Photocentric Hard Grey @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 15 initial_exposure_time = 30 material_type = Tough @@ -17414,7 +17367,7 @@ material_vendor = Photocentric material_colour = #808080 [sla_material:Photocentric Ash Grey @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 10 initial_exposure_time = 30 material_type = Tough @@ -17422,7 +17375,7 @@ material_vendor = Photocentric material_colour = #C0C0C0 [sla_material:PrimaCreator Tough Light Grey @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 8.5 initial_exposure_time = 35 material_type = Tough @@ -17430,7 +17383,7 @@ material_vendor = PrimaCreator material_colour = #C0C0C0 [sla_material:PrimaCreator Tough Clear @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 7 initial_exposure_time = 35 material_type = Tough @@ -17438,7 +17391,7 @@ material_vendor = PrimaCreator material_colour = #F8F8F8 [sla_material:PrimaCreator Tough White @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 7.5 initial_exposure_time = 35 material_type = Tough @@ -17446,7 +17399,7 @@ material_vendor = PrimaCreator material_colour = #FFFFFF [sla_material:PrimaCreator Flex Clear @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 6.5 initial_exposure_time = 30 material_type = Flexible @@ -17454,7 +17407,7 @@ material_vendor = PrimaCreator material_colour = #F8F8F8 [sla_material:Siraya Tech Simple Clear @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 10 initial_exposure_time = 35 material_type = Tough @@ -17462,7 +17415,7 @@ material_vendor = Siraya Tech material_colour = #F8F8F8 [sla_material:Siraya Tech Blu Clear V2 @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 10 initial_exposure_time = 30 material_type = Tough @@ -17470,7 +17423,7 @@ material_vendor = Siraya Tech material_colour = #F8F8F8 [sla_material:Siraya Tech Blu Blue @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 12 initial_exposure_time = 35 material_type = Tough @@ -17478,7 +17431,7 @@ material_vendor = Siraya Tech material_colour = #007EFD [sla_material:Siraya Tech Fast Grey @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 10 initial_exposure_time = 35 material_type = Tough @@ -17486,7 +17439,7 @@ material_vendor = Siraya Tech material_colour = #C0C0C0 [sla_material:Siraya Tech Tenacious @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 8 initial_exposure_time = 35 material_type = Tough @@ -17494,7 +17447,7 @@ material_vendor = Siraya Tech material_colour = #F8F8F8 [sla_material:Siraya Tech Easy @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 12 initial_exposure_time = 15 material_type = Tough @@ -17502,7 +17455,7 @@ material_vendor = Siraya Tech material_colour = #F8F8F8 [sla_material:Siraya Tech Sculpt @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 8 initial_exposure_time = 35 material_type = Tough @@ -17510,7 +17463,7 @@ material_vendor = Siraya Tech material_colour = #C0C0C0 [sla_material:Siraya Tech Fast Black @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 9 initial_exposure_time = 35 material_type = Tough @@ -17518,23 +17471,23 @@ material_vendor = Siraya Tech material_colour = #595959 [sla_material:NextDent Model 2.0 Grey @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 12 initial_exposure_time = 35 -material_type = Dental +material_type = Medical material_vendor = NextDent material_colour = #C0C0C0 [sla_material:NextDent Surgical Guide @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 7 initial_exposure_time = 35 -material_type = Dental +material_type = Medical material_vendor = NextDent material_colour = #FFEEE6 [sla_material:NextDent Cast Purple @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 9 initial_exposure_time = 20 material_type = Casting @@ -17542,15 +17495,15 @@ material_vendor = NextDent material_colour = #E800E8 [sla_material:NextDent Crown Bridge @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 11 initial_exposure_time = 35 -material_type = Dental +material_type = Medical material_vendor = NextDent material_colour = #FFFFFF [sla_material:MakerJuice Labs Standard Red @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 10 initial_exposure_time = 35 material_type = Tough @@ -17558,7 +17511,7 @@ material_vendor = MakerJuice Labs material_colour = #EC0000 [sla_material:3DJake High Precision Grey @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 9 initial_exposure_time = 35 material_type = Tough @@ -17566,7 +17519,7 @@ material_vendor = 3DJake material_colour = #C0C0C0 [sla_material:3DJake High Precision Blue @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 7 initial_exposure_time = 35 material_type = Tough @@ -17574,7 +17527,7 @@ material_vendor = 3DJake material_colour = #007EFD [sla_material:Dragon Resin Metalshine Metal Grey @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 30 initial_exposure_time = 50 material_type = Tough @@ -17582,7 +17535,7 @@ material_vendor = Dragon Resin material_colour = #808080 [sla_material:Dragon Resin Metalshine Dark Brass @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 30 initial_exposure_time = 50 material_type = Tough @@ -17590,7 +17543,7 @@ material_vendor = Dragon Resin material_colour = #B0B000 [sla_material:Dragon Resin Metalshine Brass @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 30 initial_exposure_time = 50 material_type = Tough @@ -17598,7 +17551,7 @@ material_vendor = Dragon Resin material_colour = #B0B000 [sla_material:Zortrax Black @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 7 initial_exposure_time = 35 material_type = Tough @@ -17608,7 +17561,7 @@ material_colour = #595959 ## Prusa Polymers 0.05 [sla_material:Prusament Resin Tough Prusa Orange @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 6 initial_exposure_time = 35 material_type = Tough @@ -17616,7 +17569,7 @@ material_vendor = Prusa Polymers material_colour = #FF8040 [sla_material:Prusament Resin Tough Rich Black @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 6 initial_exposure_time = 35 material_type = Tough @@ -17624,7 +17577,7 @@ material_vendor = Prusa Polymers material_colour = #595959 [sla_material:Prusament Resin Tough Anthracite Grey @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 7 initial_exposure_time = 35 material_type = Tough @@ -17632,7 +17585,7 @@ material_vendor = Prusa Polymers material_colour = #C0C0C0 [sla_material:Prusament Resin Tough Sandstone Model @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 6 initial_exposure_time = 35 material_type = Tough @@ -17640,7 +17593,7 @@ material_vendor = Prusa Polymers material_colour = #EEA061 [sla_material:Prusament Resin Tough Terra Brown @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 6 initial_exposure_time = 35 material_type = Tough @@ -17648,7 +17601,7 @@ material_vendor = Prusa Polymers material_colour = #7A5C45 [sla_material:Prusament Resin Tough Brick Red @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 6 initial_exposure_time = 35 material_type = Tough @@ -17656,7 +17609,7 @@ material_vendor = Prusa Polymers material_colour = #B46056 [sla_material:Prusament Resin Tough Grass Green @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 6 initial_exposure_time = 35 material_type = Tough @@ -17664,7 +17617,7 @@ material_vendor = Prusa Polymers material_colour = #37823F [sla_material:Prusament Resin Tough Bright Yellow @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 6 initial_exposure_time = 35 material_type = Tough @@ -17672,7 +17625,7 @@ material_vendor = Prusa Polymers material_colour = #F9DB4C [sla_material:Prusament Resin Tough Transparent Green @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 6 initial_exposure_time = 35 material_type = Tough @@ -17680,7 +17633,7 @@ material_vendor = Prusa Polymers material_colour = #1DAf5E [sla_material:Prusament Resin Tough Transparent Red @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 8 initial_exposure_time = 35 material_type = Tough @@ -17688,7 +17641,7 @@ material_vendor = Prusa Polymers material_colour = #D21B31 [sla_material:Prusament Resin Tough Transparent Amber @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 6 initial_exposure_time = 35 material_type = Tough @@ -17696,7 +17649,7 @@ material_vendor = Prusa Polymers material_colour = #FCB30E [sla_material:Prusament Resin Tough Classic Red @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 4 initial_exposure_time = 35 material_type = Tough @@ -17704,7 +17657,7 @@ material_vendor = Prusa Polymers material_colour = #EC0000 [sla_material:Prusament Resin Model Solid Grey @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 5 initial_exposure_time = 35 material_type = Tough @@ -17712,7 +17665,7 @@ material_vendor = Prusa Polymers material_colour = #9C9D9D [sla_material:Prusament Resin Model Alabaster White @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 5 initial_exposure_time = 30 material_type = Tough @@ -17720,7 +17673,7 @@ material_vendor = Prusa Polymers material_colour = #D6D7D8 [sla_material:Prusament Resin Model Neutral Beige @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 5.5 initial_exposure_time = 35 material_type = Tough @@ -17728,7 +17681,7 @@ material_vendor = Prusa Polymers material_colour = #BF9C87 [sla_material:Prusament Resin Model Ultra Violet @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 6 initial_exposure_time = 35 material_type = Tough @@ -17736,7 +17689,7 @@ material_vendor = Prusa Polymers material_colour = #413A7A [sla_material:Prusament Resin BioBased60 Herbal Green @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 8 initial_exposure_time = 30 material_type = Tough @@ -17744,7 +17697,7 @@ material_vendor = Prusa Polymers material_colour = #3AD200 [sla_material:Prusament Resin BioBased60 Magma Red @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 8 initial_exposure_time = 35 material_type = Tough @@ -17752,7 +17705,7 @@ material_vendor = Prusa Polymers material_colour = #D20202 [sla_material:Prusament Resin BioBased60 Natural Yellow @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 7 initial_exposure_time = 35 material_type = Tough @@ -17760,7 +17713,7 @@ material_vendor = Prusa Polymers material_colour = #ECDE05 [sla_material:Prusament Resin BioBased60 Obsidian Black @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 12 initial_exposure_time = 35 material_type = Tough @@ -17768,7 +17721,7 @@ material_vendor = Prusa Polymers material_colour = #232323 [sla_material:Prusament Resin BioBased60 Sapphire Blue @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 8 initial_exposure_time = 35 material_type = Tough @@ -17776,7 +17729,7 @@ material_vendor = Prusa Polymers material_colour = #2196F3 [sla_material:Prusament Resin BioBased60 Ivory White @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 9.5 initial_exposure_time = 35 material_type = Tough @@ -17784,7 +17737,7 @@ material_vendor = Prusa Polymers material_colour = #E3D99F [sla_material:Prusament Resin Flex80 Transparent Clear @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 15 initial_exposure_time = 30 material_type = Flexible @@ -17792,7 +17745,7 @@ material_vendor = Prusa Polymers material_colour = #F3F6F4 [sla_material:Prusament Resin Flex80 Black @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 10 initial_exposure_time = 30 material_type = Flexible @@ -17800,289 +17753,17 @@ material_vendor = Prusa Polymers material_colour = #595959 [sla_material:Prusament Resin Flex80 White @0.05] -inherits = *common 0.05* +inherits = *common 0.05*; *sl1_fast* exposure_time = 6.5 initial_exposure_time = 35 material_type = Flexible material_vendor = Prusa Polymers material_colour = #E2D3DB -## Prusa 0.05 - -[sla_material:Prusa Beige Tough @0.05] -inherits = *common 0.05* -exposure_time = 7 -initial_exposure_time = 35 -material_type = Tough -material_vendor = Made for Prusa -material_colour = - -[sla_material:Prusa Orange Tough @0.05] -inherits = *common 0.05* -exposure_time = 7.5 -initial_exposure_time = 35 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #FF8040 - -[sla_material:Prusa Grey Tough @0.05] -inherits = *common 0.05* -exposure_time = 8.5 -initial_exposure_time = 35 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #808080 - -[sla_material:Prusa Black Tough @0.05] -inherits = *common 0.05* -exposure_time = 6 -initial_exposure_time = 35 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #595959 - -## [sla_material:Prusa Super Low Odor Beige Tough @0.05] -## inherits = *common 0.05* -## exposure_time = 7.5 -## initial_exposure_time = 35 -## material_type = Tough -## material_vendor = Made for Prusa - -## [sla_material:Prusa Super Low Odor White Tough @0.05] -## inherits = *common 0.05* -## exposure_time = 6.5 -## initial_exposure_time = 35 -## material_type = Tough -## material_vendor = Made for Prusa - -## [sla_material:Prusa Super Low Odor Grey Tough @0.05] -## inherits = *common 0.05* -## exposure_time = 6.5 -## initial_exposure_time = 35 -## material_type = Tough -## material_vendor = Made for Prusa - -[sla_material:Prusa Super Low Odor Cyan Tough @0.05] -inherits = *common 0.05* -exposure_time = 6 -initial_exposure_time = 35 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #79FFFF - -[sla_material:Prusa Super Low Odor Magenta Tough @0.05] -inherits = *common 0.05* -exposure_time = 6 -initial_exposure_time = 35 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #E800E8 - -[sla_material:Prusa Super Low Odor Yellow Tough @0.05] -inherits = *common 0.05* -exposure_time = 6 -initial_exposure_time = 35 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #FFFF6F - -## [sla_material:Prusa Black High Tenacity @0.05] -## inherits = *common 0.05* -## exposure_time = 7 -## initial_exposure_time = 35 -## material_type = Tough -## material_vendor = Made for Prusa - -[sla_material:Prusa Orange-Yellow Teeth Model @0.05] -inherits = *common 0.05* -exposure_time = 7 -initial_exposure_time = 30 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #FFFF6F - -[sla_material:Prusa Green Dental Casting @0.05] -inherits = *common 0.05* -exposure_time = 13 -initial_exposure_time = 50 -material_type = Casting -material_vendor = Made for Prusa -material_colour = #00B900 - -## [sla_material:Prusa Yellow Solid @0.05] -## inherits = *common 0.05* -## exposure_time = 7 -## initial_exposure_time = 35 - -[sla_material:Prusa White Tough @0.05] -inherits = *common 0.05* -exposure_time = 7.5 -initial_exposure_time = 35 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #FFFFFF - -[sla_material:Prusa Transparent Green Tough @0.05] -inherits = *common 0.05* -exposure_time = 6 -initial_exposure_time = 35 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #00B900 - -[sla_material:Prusa Transparent Red Tough @0.05] -inherits = *common 0.05* -exposure_time = 6 -initial_exposure_time = 35 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #EC0000 - -[sla_material:Prusa Maroon Tough @0.05] -inherits = *common 0.05* -exposure_time = 7.5 -initial_exposure_time = 35 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #804000 - -[sla_material:Prusa Pink Tough @0.05] -inherits = *common 0.05* -exposure_time = 8 -initial_exposure_time = 35 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #FF80C0 - -[sla_material:Prusa Azure Blue Tough @0.05] -inherits = *common 0.05* -exposure_time = 8 -initial_exposure_time = 35 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #007EFD - -## [sla_material:Prusa Blue Tough @0.05] -## inherits = *common 0.05* -## exposure_time = 8 -## initial_exposure_time = 35 -## material_type = Tough -## material_vendor = Made for Prusa - -[sla_material:Prusa Transparent Tough @0.05] -inherits = *common 0.05* -exposure_time = 7 -initial_exposure_time = 15 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #F8F8F8 - -## [sla_material:Prusa Yellow Flexible @0.05] -## inherits = *common 0.05* -## exposure_time = 9 -## initial_exposure_time = 35 - -[sla_material:Prusa Transparent Flexible @0.05] -inherits = *common 0.05* -exposure_time = 5 -initial_exposure_time = 15 -material_type = Flexible -material_vendor = Made for Prusa -material_colour = #F8F8F8 - -## [sla_material:Prusa White Flexible @0.05] -## inherits = *common 0.05* -## exposure_time = 9 -## initial_exposure_time = 35 - -[sla_material:Prusa Blue Flexible @0.05] -inherits = *common 0.05* -exposure_time = 5 -initial_exposure_time = 15 -material_type = Flexible -material_vendor = Made for Prusa -material_colour = #007EFD - -## [sla_material:Prusa Black Flexible @0.05] -## inherits = *common 0.05* -## exposure_time = 9 -## initial_exposure_time = 35 - -## [sla_material:Prusa Red Flexible @0.05] -## inherits = *common 0.05* -## exposure_time = 9 -## initial_exposure_time = 35 - -[sla_material:Prusa Clear ABS like @0.05] -inherits = *common 0.05* -exposure_time = 8 -initial_exposure_time = 30 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #F8F8F8 - -[sla_material:Prusa White ABS like @0.05] -inherits = *common 0.05* -exposure_time = 8 -initial_exposure_time = 30 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #FFFFFF - -[sla_material:Prusa Yellow Jewelry Casting @0.05] -inherits = *common 0.05* -exposure_time = 13 -initial_exposure_time = 45 -material_type = Casting -material_vendor = Made for Prusa -material_colour = #FFFF6F - -[sla_material:Prusa Grey High Tenacity @0.05] -inherits = *common 0.05* -exposure_time = 7 -initial_exposure_time = 30 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #C0C0C0 - -[sla_material:Prusa Vibrant Orange Tough @0.05] -inherits = *common 0.05* -exposure_time = 7 -initial_exposure_time = 35 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #FF8040 - -[sla_material:Prusa Rich Black Tough @0.05] -inherits = *common 0.05* -exposure_time = 8 -initial_exposure_time = 35 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #595959 - -[sla_material:Prusa Deep Blue Transparent Tough @0.05] -inherits = *common 0.05* -exposure_time = 8 -initial_exposure_time = 35 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #007EFD - -########### Materials 0.035 - -[sla_material:Prusa Orange Tough @0.035] -inherits = *common 0.035* -exposure_time = 6 -initial_exposure_time = 35 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #FF8040 - ########### Materials 0.1 [sla_material:BlueCast EcoGray @0.1] -inherits = *common 0.1* +inherits = *common 0.1*; *sl1_fast* exposure_time = 10 initial_exposure_time = 35 material_type = Tough @@ -18090,7 +17771,7 @@ material_vendor = BlueCast material_colour = #C0C0C0 [sla_material:BlueCast Kera Master Dental @0.1] -inherits = *common 0.1* +inherits = *common 0.1*; *sl1_fast* exposure_time = 13 initial_exposure_time = 50 material_type = Tough @@ -18098,7 +17779,7 @@ material_vendor = BlueCast material_colour = #FFEEE6 [sla_material:BlueCast X-One @0.1] -inherits = *common 0.1* +inherits = *common 0.1*; *sl1_fast* exposure_time = 30 initial_exposure_time = 45 material_type = Casting @@ -18106,7 +17787,7 @@ material_vendor = BlueCast material_colour = #C0C0C0 [sla_material:Ameralabs TGM-7 LED @0.1] -inherits = *common 0.1* +inherits = *common 0.1*; *sl1_fast* exposure_time = 10 initial_exposure_time = 45 material_type = Tough @@ -18116,7 +17797,7 @@ material_colour = #C0C0C0 ## Prusa Polymers 0.1 [sla_material:Prusament Resin Tough Prusa Orange @0.1] -inherits = *common 0.1* +inherits = *common 0.1*; *sl1_fast* exposure_time = 13 initial_exposure_time = 45 material_type = Tough @@ -18124,7 +17805,7 @@ material_vendor = Prusa Polymers material_colour = #FF8040 [sla_material:Prusament Resin Tough Rich Black @0.1] -inherits = *common 0.1* +inherits = *common 0.1*; *sl1_fast* exposure_time = 13 initial_exposure_time = 45 material_type = Tough @@ -18132,7 +17813,7 @@ material_vendor = Prusa Polymers material_colour = #595959 [sla_material:Prusament Resin Tough Anthracite Grey @0.1] -inherits = *common 0.1* +inherits = *common 0.1*; *sl1_fast* exposure_time = 14 initial_exposure_time = 45 material_type = Tough @@ -18140,7 +17821,7 @@ material_vendor = Prusa Polymers material_colour = #808080 [sla_material:Prusament Resin Tough Classic Red @0.1] -inherits = *common 0.1* +inherits = *common 0.1*; *sl1_fast* exposure_time = 6 initial_exposure_time = 45 material_type = Tough @@ -18148,7 +17829,7 @@ material_vendor = Prusa Polymers material_colour = #EC0000 [sla_material:Prusament Resin Tough Sandstone Model @0.1] -inherits = *common 0.1* +inherits = *common 0.1*; *sl1_fast* exposure_time = 13 initial_exposure_time = 45 material_type = Tough @@ -18156,7 +17837,7 @@ material_vendor = Prusa Polymers material_colour = #EEA061 [sla_material:Prusament Resin Tough Terra Brown @0.1] -inherits = *common 0.1* +inherits = *common 0.1*; *sl1_fast* exposure_time = 13 initial_exposure_time = 45 material_type = Tough @@ -18164,7 +17845,7 @@ material_vendor = Prusa Polymers material_colour = #7A5C45 [sla_material:Prusament Resin Tough Brick Red @0.1] -inherits = *common 0.1* +inherits = *common 0.1*; *sl1_fast* exposure_time = 13 initial_exposure_time = 45 material_type = Tough @@ -18172,7 +17853,7 @@ material_vendor = Prusa Polymers material_colour = #B46056 [sla_material:Prusament Resin Tough Grass Green @0.1] -inherits = *common 0.1* +inherits = *common 0.1*; *sl1_fast* exposure_time = 13 initial_exposure_time = 45 material_type = Tough @@ -18180,7 +17861,7 @@ material_vendor = Prusa Polymers material_colour = #37823F [sla_material:Prusament Resin Tough Bright Yellow @0.1] -inherits = *common 0.1* +inherits = *common 0.1*; *sl1_fast* exposure_time = 13 initial_exposure_time = 45 material_type = Tough @@ -18188,7 +17869,7 @@ material_vendor = Prusa Polymers material_colour = #F9DB4C [sla_material:Prusament Resin Tough Transparent Green @0.1] -inherits = *common 0.1* +inherits = *common 0.1*; *sl1_fast* exposure_time = 13 initial_exposure_time = 45 material_type = Tough @@ -18196,7 +17877,7 @@ material_vendor = Prusa Polymers material_colour = #1DAf5E [sla_material:Prusament Resin Tough Transparent Red @0.1] -inherits = *common 0.1* +inherits = *common 0.1*; *sl1_fast* exposure_time = 13 initial_exposure_time = 45 material_type = Tough @@ -18204,7 +17885,7 @@ material_vendor = Prusa Polymers material_colour = #D21B31 [sla_material:Prusament Resin Tough Transparent Amber @0.1] -inherits = *common 0.1* +inherits = *common 0.1*; *sl1_fast* exposure_time = 13 initial_exposure_time = 45 material_type = Tough @@ -18212,7 +17893,7 @@ material_vendor = Prusa Polymers material_colour = #FCB30E [sla_material:Prusament Resin BioBased60 Herbal Green @0.1] -inherits = *common 0.1* +inherits = *common 0.1*; *sl1_fast* exposure_time = 13 initial_exposure_time = 45 material_type = Tough @@ -18220,7 +17901,7 @@ material_vendor = Prusa Polymers material_colour = #3AD200 [sla_material:Prusament Resin Model Solid Grey @0.1] -inherits = *common 0.1* +inherits = *common 0.1*; *sl1_fast* exposure_time = 13 initial_exposure_time = 45 material_type = Tough @@ -18228,7 +17909,7 @@ material_vendor = Prusa Polymers material_colour = #9C9D9D [sla_material:Prusament Resin Model Alabaster White @0.1] -inherits = *common 0.1* +inherits = *common 0.1*; *sl1_fast* exposure_time = 13 initial_exposure_time = 45 material_type = Tough @@ -18236,7 +17917,7 @@ material_vendor = Prusa Polymers material_colour = #D6D7D8 [sla_material:Prusament Resin Model Neutral Beige @0.1] -inherits = *common 0.1* +inherits = *common 0.1*; *sl1_fast* exposure_time = 7 initial_exposure_time = 45 material_type = Tough @@ -18244,7 +17925,7 @@ material_vendor = Prusa Polymers material_colour = #BF9C87 [sla_material:Prusament Resin Model Ultra Violet @0.1] -inherits = *common 0.1* +inherits = *common 0.1*; *sl1_fast* exposure_time = 7 initial_exposure_time = 35 material_type = Tough @@ -18252,7 +17933,7 @@ material_vendor = Prusa Polymers material_colour = #413A7A [sla_material:Prusament Resin BioBased60 Magma Red @0.1] -inherits = *common 0.1* +inherits = *common 0.1*; *sl1_fast* exposure_time = 13 initial_exposure_time = 45 material_type = Tough @@ -18260,7 +17941,7 @@ material_vendor = Prusa Polymers material_colour = #D20202 [sla_material:Prusament Resin BioBased60 Natural Yellow @0.1] -inherits = *common 0.1* +inherits = *common 0.1*; *sl1_fast* exposure_time = 8 initial_exposure_time = 35 material_type = Tough @@ -18268,7 +17949,7 @@ material_vendor = Prusa Polymers material_colour = #ECDE05 [sla_material:Prusament Resin BioBased60 Obsidian Black @0.1] -inherits = *common 0.1* +inherits = *common 0.1*; *sl1_fast* exposure_time = 16 initial_exposure_time = 35 material_type = Tough @@ -18276,7 +17957,7 @@ material_vendor = Prusa Polymers material_colour = #232323 [sla_material:Prusament Resin BioBased60 Sapphire Blue @0.1] -inherits = *common 0.1* +inherits = *common 0.1*; *sl1_fast* exposure_time = 9 initial_exposure_time = 35 material_type = Tough @@ -18284,7 +17965,7 @@ material_vendor = Prusa Polymers material_colour = #2196F3 [sla_material:Prusament Resin BioBased60 Ivory White @0.1] -inherits = *common 0.1* +inherits = *common 0.1*; *sl1_fast* exposure_time = 12 initial_exposure_time = 45 material_type = Tough @@ -18292,7 +17973,7 @@ material_vendor = Prusa Polymers material_colour = #E3D99F [sla_material:Prusament Resin Flex80 Transparent Clear @0.1] -inherits = *common 0.1* +inherits = *common 0.1*; *sl1_fast* exposure_time = 20 initial_exposure_time = 30 material_type = Flexible @@ -18300,7 +17981,7 @@ material_vendor = Prusa Polymers material_colour = #F3F6F4 [sla_material:Prusament Resin Flex80 Black @0.1] -inherits = *common 0.1* +inherits = *common 0.1*; *sl1_fast* exposure_time = 13 initial_exposure_time = 30 material_type = Flexible @@ -18308,105 +17989,15 @@ material_vendor = Prusa Polymers material_colour = #595959 [sla_material:Prusament Resin Flex80 White @0.1] -inherits = *common 0.1* +inherits = *common 0.1*; *sl1_fast* exposure_time = 7.5 initial_exposure_time = 45 material_type = Flexible material_vendor = Prusa Polymers material_colour = #E2D3DB -## Prusa 0.1 - -[sla_material:Prusa Orange Tough @0.1] -inherits = *common 0.1* -exposure_time = 13 -initial_exposure_time = 45 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #FF8040 - -[sla_material:Prusa Beige Tough @0.1] -inherits = *common 0.1* -exposure_time = 13 -initial_exposure_time = 45 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #FFEEE6 - -[sla_material:Prusa Pink Tough @0.1] -inherits = *common 0.1* -exposure_time = 13 -initial_exposure_time = 45 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #FF80C0 - -[sla_material:Prusa Azure Blue Tough @0.1] -inherits = *common 0.1* -exposure_time = 13 -initial_exposure_time = 45 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #007EFD - -[sla_material:Prusa Maroon Tough @0.1] -inherits = *common 0.1* -exposure_time = 13 -initial_exposure_time = 45 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #804000 - -[sla_material:Prusa White Tough @0.1] -inherits = *common 0.1* -exposure_time = 13 -initial_exposure_time = 45 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #FFFFFF - -[sla_material:Prusa Black Tough @0.1] -inherits = *common 0.1* -exposure_time = 13 -initial_exposure_time = 55 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #595959 - -[sla_material:Prusa Transparent Tough @0.1] -inherits = *common 0.1* -exposure_time = 8 -initial_exposure_time = 35 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #F8F8F8 - -[sla_material:Prusa Green Dental Casting @0.1] -inherits = *common 0.1* -exposure_time = 15 -initial_exposure_time = 50 -material_type = Casting -material_vendor = Made for Prusa -material_colour = #00B900 - -[sla_material:Prusa Transparent Green Tough @0.1] -inherits = *common 0.1* -exposure_time = 7 -initial_exposure_time = 35 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #00B900 - -[sla_material:Prusa Vibrant Orange Tough @0.1] -inherits = *common 0.1* -exposure_time = 8 -initial_exposure_time = 35 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #FF8040 - [sla_material:PrimaCreator Tough Light Grey @0.1] -inherits = *common 0.1* +inherits = *common 0.1*; *sl1_fast* exposure_time = 14 initial_exposure_time = 45 material_type = Tough @@ -18414,7 +18005,7 @@ material_vendor = PrimaCreator material_colour = #C0C0C0 [sla_material:PrimaCreator Tough Clear @0.1] -inherits = *common 0.1* +inherits = *common 0.1*; *sl1_fast* exposure_time = 13 initial_exposure_time = 45 material_type = Tough @@ -18422,7 +18013,7 @@ material_vendor = PrimaCreator material_colour = #F8F8F8 [sla_material:PrimaCreator Tough White @0.1] -inherits = *common 0.1* +inherits = *common 0.1*; *sl1_fast* exposure_time = 13 initial_exposure_time = 45 material_type = Tough @@ -18430,7 +18021,7 @@ material_vendor = PrimaCreator material_colour = #FFFFFF [sla_material:PrimaCreator Flex Clear @0.1] -inherits = *common 0.1* +inherits = *common 0.1*; *sl1_fast* exposure_time = 12 initial_exposure_time = 35 material_type = Flexible @@ -18444,7 +18035,7 @@ material_colour = #F8F8F8 ## Prusa Polymers 0.025 [sla_material:Prusament Resin Tough Prusa Orange @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 1.8 initial_exposure_time = 25 material_type = Tough @@ -18452,7 +18043,7 @@ material_vendor = Prusa Polymers material_colour = #FF8040 [sla_material:Prusament Resin Tough Rich Black @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 1.8 initial_exposure_time = 25 material_type = Tough @@ -18460,7 +18051,7 @@ material_vendor = Prusa Polymers material_colour = #595959 [sla_material:Prusament Resin Tough Anthracite Grey @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2 initial_exposure_time = 25 material_type = Tough @@ -18468,7 +18059,7 @@ material_vendor = Prusa Polymers material_colour = #808080 [sla_material:Prusament Resin Tough Sandstone Model @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2 initial_exposure_time = 25 material_type = Tough @@ -18476,7 +18067,7 @@ material_vendor = Prusa Polymers material_colour = #EEA061 [sla_material:Prusament Resin Tough Terra Brown @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 1.8 initial_exposure_time = 25 material_type = Tough @@ -18484,7 +18075,7 @@ material_vendor = Prusa Polymers material_colour = #7A5C45 [sla_material:Prusament Resin Tough Brick Red @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 1.8 initial_exposure_time = 25 material_type = Tough @@ -18492,7 +18083,7 @@ material_vendor = Prusa Polymers material_colour = #B46056 [sla_material:Prusament Resin Tough Grass Green @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 1.8 initial_exposure_time = 25 material_type = Tough @@ -18500,7 +18091,7 @@ material_vendor = Prusa Polymers material_colour = #37823F [sla_material:Prusament Resin Tough Bright Yellow @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 1.8 initial_exposure_time = 25 material_type = Tough @@ -18508,7 +18099,7 @@ material_vendor = Prusa Polymers material_colour = #F9DB4C [sla_material:Prusament Resin Tough Transparent Green @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 1.8 initial_exposure_time = 25 material_type = Tough @@ -18516,7 +18107,7 @@ material_vendor = Prusa Polymers material_colour = #1DAf5E [sla_material:Prusament Resin Tough Transparent Red @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2 initial_exposure_time = 25 material_type = Tough @@ -18524,7 +18115,7 @@ material_vendor = Prusa Polymers material_colour = #D21B31 [sla_material:Prusament Resin Tough Transparent Amber @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 1.8 initial_exposure_time = 25 material_type = Tough @@ -18532,7 +18123,7 @@ material_vendor = Prusa Polymers material_colour = #FCB30E [sla_material:Prusament Resin Tough Classic Red @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 1.8 initial_exposure_time = 25 material_type = Tough @@ -18540,7 +18131,7 @@ material_vendor = Prusa Polymers material_colour = #EC0000 [sla_material:Prusament Resin Model Solid Grey @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2 initial_exposure_time = 25 material_type = Tough @@ -18548,7 +18139,7 @@ material_vendor = Prusa Polymers material_colour = #9C9D9D [sla_material:Prusament Resin Model Alabaster White @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2 initial_exposure_time = 20 material_type = Tough @@ -18556,7 +18147,7 @@ material_vendor = Prusa Polymers material_colour = #D6D7D8 [sla_material:Prusament Resin Model Neutral Beige @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2 initial_exposure_time = 25 material_type = Tough @@ -18564,23 +18155,23 @@ material_vendor = Prusa Polymers material_colour = #BF9C87 [sla_material:Prusament Resin Model Ultra Violet @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2 initial_exposure_time = 25 material_type = Tough material_vendor = Prusa Polymers material_colour = #413A7A -; [sla_material:Prusament Resin Model Transparent Clear @0.025 SL1S] -; inherits = *0.025_sl1s* -; exposure_time = 1.8 -; initial_exposure_time = 10 -; material_type = Tough -; material_vendor = Prusa Polymers -; material_colour = #F3F6F4 +[sla_material:Prusament Resin Model Transparent Clear @0.025 SL1S] +inherits = *0.025_sl1s*; *sl1s_fast*; *legacy_fast* +exposure_time = 2.2 +initial_exposure_time = 10 +material_type = Tough +material_vendor = Prusa Polymers +material_colour = #F3F6F4 [sla_material:Prusament Resin BioBased60 Herbal Green @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 3.5 initial_exposure_time = 30 material_type = Tough @@ -18588,7 +18179,7 @@ material_vendor = Prusa Polymers material_colour = #3AD200 [sla_material:Prusament Resin BioBased60 Magma Red @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 3.5 initial_exposure_time = 30 material_type = Tough @@ -18596,7 +18187,7 @@ material_vendor = Prusa Polymers material_colour = #D20202 [sla_material:Prusament Resin BioBased60 Natural Yellow @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_slow* exposure_time = 2.8 initial_exposure_time = 30 material_type = Tough @@ -18605,7 +18196,7 @@ material_colour = #ECDE05 material_print_speed = slow [sla_material:Prusament Resin BioBased60 Obsidian Black @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 4.5 initial_exposure_time = 25 material_type = Tough @@ -18613,7 +18204,7 @@ material_vendor = Prusa Polymers material_colour = #232323 [sla_material:Prusament Resin BioBased60 Sapphire Blue @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2.8 initial_exposure_time = 25 material_type = Tough @@ -18621,7 +18212,7 @@ material_vendor = Prusa Polymers material_colour = #2196F3 [sla_material:Prusament Resin BioBased60 Ivory White @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 3 initial_exposure_time = 50 material_type = Tough @@ -18629,7 +18220,7 @@ material_vendor = Prusa Polymers material_colour = #E3D99F [sla_material:Prusament Resin Flex80 Transparent Clear @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_slow* exposure_time = 4 initial_exposure_time = 25 material_type = Flexible @@ -18638,7 +18229,7 @@ material_colour = #F3F6F4 material_print_speed = slow [sla_material:Prusament Resin Flex80 Black @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_slow* exposure_time = 2.6 initial_exposure_time = 25 material_type = Flexible @@ -18647,137 +18238,31 @@ material_colour = #595959 material_print_speed = slow [sla_material:Prusament Resin Flex80 White @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 1.8 initial_exposure_time = 17 material_type = Flexible material_vendor = Prusa Polymers material_colour = #E2D3DB -## Made for Prusa 0.025 +[sla_material:Prusament Resin Flex Anatomic Red @0.025 SL1S] +inherits = *0.025_sl1s*; *sl1s_slow* +exposure_time = 2.6 +initial_exposure_time = 20 +material_type = Medical +material_vendor = Prusa Polymers +material_colour = #AD4F54 -[sla_material:Prusa Orange Tough @0.025 SL1S] -inherits = *0.025_sl1s* -exposure_time = 1.8 -initial_exposure_time = 25 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #FF8040 - -[sla_material:Prusa White ABS like @0.025 SL1S] -inherits = *0.025_sl1s* -exposure_time = 1.8 -initial_exposure_time = 25 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #FFFFFF - -[sla_material:Prusa Azure Blue Tough @0.025 SL1S] -inherits = *0.025_sl1s* -exposure_time = 1.8 -initial_exposure_time = 25 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #007EFD - -[sla_material:Prusa Black Tough @0.025 SL1S] -inherits = *0.025_sl1s* -exposure_time = 2 -initial_exposure_time = 25 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #595959 - -[sla_material:Prusa Cyan Tough @0.025 SL1S] -inherits = *0.025_sl1s* -exposure_time = 1.8 -initial_exposure_time = 25 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #79FFFF - -[sla_material:Prusa Magenta Tough @0.025 SL1S] -inherits = *0.025_sl1s* -exposure_time = 1.8 -initial_exposure_time = 25 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #E800E8 - -[sla_material:Prusa Maroon Tough @0.025 SL1S] -inherits = *0.025_sl1s* -exposure_time = 2 -initial_exposure_time = 25 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #804000 - -[sla_material:Prusa White Tough @0.025 SL1S] -inherits = *0.025_sl1s* -exposure_time = 1.8 -initial_exposure_time = 25 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #FFFFFF - -[sla_material:Prusa Pink Tough @0.025 SL1S] -inherits = *0.025_sl1s* -exposure_time = 1.8 -initial_exposure_time = 25 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #FF80C0 - -[sla_material:Prusa Grey Tough @0.025 SL1S] -inherits = *0.025_sl1s* -exposure_time = 2 -initial_exposure_time = 25 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #C0C0C0 - -[sla_material:Prusa Blue Flexible @0.025 SL1S] -inherits = *0.025_sl1s* -exposure_time = 1.8 -initial_exposure_time = 25 -material_type = Flexible -material_vendor = Made for Prusa -material_colour = #007EFD - -[sla_material:Prusa Grey High Tenacity @0.025 SL1S] -inherits = *0.025_sl1s* -exposure_time = 1.8 -initial_exposure_time = 25 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #C0C0C0 - -[sla_material:Prusa Vibrant Orange Tough @0.025 SL1S] -inherits = *0.025_sl1s* -exposure_time = 4 -initial_exposure_time = 25 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #FF8040 - -[sla_material:Prusa Deep Blue Transparent Tough @0.025 SL1S] -inherits = *0.025_sl1s* -exposure_time = 4 -initial_exposure_time = 25 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #007EFD - -[sla_material:Prusa Green Dental Casting @0.025 SL1S] -inherits = *0.025_sl1s* -exposure_time = 3 -initial_exposure_time = 50 -material_type = Casting -material_vendor = Made for Prusa -material_colour = #00B900 +[sla_material:Prusament Resin Flex Gingiva Mask @0.025 SL1S] +inherits = *0.025_sl1s*; *sl1s_slow* +exposure_time = 2.6 +initial_exposure_time = 20 +material_type = Medical +material_vendor = Prusa Polymers +material_colour = #DB7F80 [sla_material:Ameralabs TGM-7 LED @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_slow* exposure_time = 1.8 initial_exposure_time = 25 material_type = Tough @@ -18786,7 +18271,7 @@ material_colour = #C0C0C0 material_print_speed = slow [sla_material:BASF Ultracur3D RG 35 @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 4 initial_exposure_time = 25 material_type = Tough @@ -18794,7 +18279,7 @@ material_vendor = BASF material_colour = #FFEEE6 [sla_material:BASF Ultracur3D ST 45 @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2.5 initial_exposure_time = 25 material_type = Tough @@ -18802,7 +18287,7 @@ material_vendor = BASF material_colour = #595959 [sla_material:BASF Ultracur3D ST 45 M @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2.5 initial_exposure_time = 25 material_type = Tough @@ -18810,7 +18295,7 @@ material_vendor = BASF material_colour = #595959 [sla_material:BASF Ultracur3D ST 80 @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 4.5 initial_exposure_time = 25 material_type = Tough @@ -18818,7 +18303,7 @@ material_vendor = BASF material_colour = #FFEEE6 [sla_material:BASF Ultracur3D ST 80 White @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 4.5 initial_exposure_time = 25 material_type = Tough @@ -18826,7 +18311,7 @@ material_vendor = BASF material_colour = #FFFFFF [sla_material:BASF Ultracur3D ST 80 Black @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 4.5 initial_exposure_time = 25 material_type = Tough @@ -18834,7 +18319,7 @@ material_vendor = BASF material_colour = #595959 [sla_material:BASF Ultracur3D EL 150 Black @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2 initial_exposure_time = 25 material_type = Flexible @@ -18842,7 +18327,7 @@ material_vendor = BASF material_colour = #595959 [sla_material:BASF Ultracur3D FL 300 Black @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 3 initial_exposure_time = 25 material_type = Flexible @@ -18850,7 +18335,7 @@ material_vendor = BASF material_colour = #595959 [sla_material:BlueCast X-One @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_slow* exposure_time = 6 initial_exposure_time = 25 material_type = Casting @@ -18859,7 +18344,7 @@ material_colour = #C0C0C0 material_print_speed = slow [sla_material:PrimaCreator Tough Light Grey @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 1.8 initial_exposure_time = 25 material_type = Tough @@ -18867,7 +18352,7 @@ material_vendor = PrimaCreator material_colour = #C0C0C0 [sla_material:PrimaCreator Tough Clear @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 1.8 initial_exposure_time = 25 material_type = Tough @@ -18875,7 +18360,7 @@ material_vendor = PrimaCreator material_colour = #F8F8F8 [sla_material:PrimaCreator Tough White @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 1.8 initial_exposure_time = 25 material_type = Tough @@ -18883,7 +18368,7 @@ material_vendor = PrimaCreator material_colour = #FFFFFF [sla_material:PrimaCreator Flex Clear @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 1.8 initial_exposure_time = 25 material_type = Flexible @@ -18891,7 +18376,7 @@ material_vendor = PrimaCreator material_colour = #F8F8F8 [sla_material:PrimaCreator Water Washable Transparent @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 1.8 initial_exposure_time = 25 material_type = Tough @@ -18899,16 +18384,16 @@ material_vendor = PrimaCreator material_colour = #F8F8F8 [sla_material:DruckWege Type D Dental Model @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_slow* exposure_time = 1.2 initial_exposure_time = 15 -material_type = Dental +material_type = Medical material_vendor = DruckWege material_colour = #FFEEE6 material_print_speed = slow [sla_material:DruckWege Type D Standard White @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_slow* exposure_time = 1.6 initial_exposure_time = 15 material_type = Tough @@ -18917,7 +18402,7 @@ material_colour = #FFFFFF material_print_speed = slow [sla_material:DruckWege Type D Standard Pigmentfrei Clear @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_slow* exposure_time = 1.8 initial_exposure_time = 15 material_type = Tough @@ -18926,7 +18411,7 @@ material_colour = #F8F8F8 material_print_speed = slow [sla_material:3DM-ABS Orange @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 1.8 initial_exposure_time = 25 material_type = Tough @@ -18934,7 +18419,7 @@ material_vendor = 3DM material_colour = #FF8040 [sla_material:3DM-TOUGH Clear @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 1.8 initial_exposure_time = 25 material_type = Tough @@ -18942,7 +18427,7 @@ material_vendor = 3DM material_colour = #F8F8F8 [sla_material:Peopoly Deft White @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 1.8 initial_exposure_time = 25 material_type = Tough @@ -18950,7 +18435,7 @@ material_vendor = Peopoly material_colour = #FFFFFF [sla_material:Peopoly Neo Clear @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 1.8 initial_exposure_time = 25 material_type = Tough @@ -18958,7 +18443,7 @@ material_vendor = Peopoly material_colour = #F8F8F8 [sla_material:Liqcreate Clear Impact @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 7 initial_exposure_time = 40 material_type = Tough @@ -18966,7 +18451,7 @@ material_vendor = Liqcreate material_colour = #F8F8F8 [sla_material:Liqcreate Strong X @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 7 initial_exposure_time = 40 material_type = Tough @@ -18974,7 +18459,7 @@ material_vendor = Liqcreate material_colour = #C0C0C0 [sla_material:Resinworks 3D Green @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 5 initial_exposure_time = 25 material_type = Tough @@ -18982,7 +18467,7 @@ material_vendor = Resinworks 3D material_colour = #00B900 [sla_material:3DJake Blue @0.025 SL1S] -inherits = *0.025_sl1s* +inherits = *0.025_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 1.8 initial_exposure_time = 25 material_type = Tough @@ -18994,7 +18479,7 @@ material_colour = #007EFD ## Prusa Polymers 0.05 [sla_material:Prusament Resin Tough Prusa Orange @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2 initial_exposure_time = 25 material_type = Tough @@ -19002,7 +18487,7 @@ material_vendor = Prusa Polymers material_colour = #FF8040 [sla_material:Prusament Resin Tough Rich Black @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2 initial_exposure_time = 25 material_type = Tough @@ -19010,7 +18495,7 @@ material_vendor = Prusa Polymers material_colour = #595959 [sla_material:Prusament Resin Tough Anthracite Grey @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2.4 initial_exposure_time = 25 material_type = Tough @@ -19018,7 +18503,7 @@ material_vendor = Prusa Polymers material_colour = #808080 [sla_material:Prusament Resin Tough Sandstone Model @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2.4 initial_exposure_time = 25 material_type = Tough @@ -19026,7 +18511,7 @@ material_vendor = Prusa Polymers material_colour = #EEA061 [sla_material:Prusament Resin Tough Terra Brown @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2 initial_exposure_time = 25 material_type = Tough @@ -19034,7 +18519,7 @@ material_vendor = Prusa Polymers material_colour = #7A5C45 [sla_material:Prusament Resin Tough Brick Red @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2 initial_exposure_time = 25 material_type = Tough @@ -19042,7 +18527,7 @@ material_vendor = Prusa Polymers material_colour = #B46056 [sla_material:Prusament Resin Tough Grass Green @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2 initial_exposure_time = 25 material_type = Tough @@ -19050,7 +18535,7 @@ material_vendor = Prusa Polymers material_colour = #37823F [sla_material:Prusament Resin Tough Bright Yellow @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2 initial_exposure_time = 25 material_type = Tough @@ -19058,7 +18543,7 @@ material_vendor = Prusa Polymers material_colour = #F9DB4C [sla_material:Prusament Resin Tough Transparent Green @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2 initial_exposure_time = 25 material_type = Tough @@ -19066,7 +18551,7 @@ material_vendor = Prusa Polymers material_colour = #1DAf5E [sla_material:Prusament Resin Tough Transparent Red @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2.6 initial_exposure_time = 25 material_type = Tough @@ -19074,7 +18559,7 @@ material_vendor = Prusa Polymers material_colour = #D21B31 [sla_material:Prusament Resin Tough Transparent Amber @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2.6 initial_exposure_time = 25 material_type = Tough @@ -19082,7 +18567,7 @@ material_vendor = Prusa Polymers material_colour = #FCB30E [sla_material:Prusament Resin Tough Classic Red @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2 initial_exposure_time = 25 material_type = Tough @@ -19090,7 +18575,7 @@ material_vendor = Prusa Polymers material_colour = #EC0000 [sla_material:Prusament Resin Model Solid Grey @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2.2 initial_exposure_time = 25 material_type = Tough @@ -19098,7 +18583,7 @@ material_vendor = Prusa Polymers material_colour = #9C9D9D [sla_material:Prusament Resin Model Alabaster White @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2.2 initial_exposure_time = 20 material_type = Tough @@ -19106,7 +18591,7 @@ material_vendor = Prusa Polymers material_colour = #D6D7D8 [sla_material:Prusament Resin Model Neutral Beige @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2.2 initial_exposure_time = 25 material_type = Tough @@ -19114,23 +18599,23 @@ material_vendor = Prusa Polymers material_colour = #BF9C87 [sla_material:Prusament Resin Model Ultra Violet @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2.2 initial_exposure_time = 25 material_type = Tough material_vendor = Prusa Polymers material_colour = #413A7A -; [sla_material:Prusament Resin Model Transparent Clear @0.05 SL1S] -; inherits = *0.05_sl1s* -; exposure_time = 2 -; initial_exposure_time = 10 -; material_type = Tough -; material_vendor = Prusa Polymers -; material_colour = #F3F6F4 +[sla_material:Prusament Resin Model Transparent Clear @0.05 SL1S] +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* +exposure_time = 2.5 +initial_exposure_time = 10 +material_type = Tough +material_vendor = Prusa Polymers +material_colour = #F3F6F4 [sla_material:Prusament Resin BioBased60 Herbal Green @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 4 initial_exposure_time = 30 material_type = Tough @@ -19138,7 +18623,7 @@ material_vendor = Prusa Polymers material_colour = #3AD200 [sla_material:Prusament Resin BioBased60 Magma Red @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 4 initial_exposure_time = 30 material_type = Tough @@ -19146,7 +18631,7 @@ material_vendor = Prusa Polymers material_colour = #D20202 [sla_material:Prusament Resin BioBased60 Natural Yellow @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_slow* exposure_time = 3 initial_exposure_time = 30 material_type = Tough @@ -19155,7 +18640,7 @@ material_colour = #ECDE05 material_print_speed = slow [sla_material:Prusament Resin BioBased60 Obsidian Black @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 6 initial_exposure_time = 25 material_type = Tough @@ -19163,7 +18648,7 @@ material_vendor = Prusa Polymers material_colour = #232323 [sla_material:Prusament Resin BioBased60 Sapphire Blue @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 3 initial_exposure_time = 25 material_type = Tough @@ -19171,7 +18656,7 @@ material_vendor = Prusa Polymers material_colour = #2196F3 [sla_material:Prusament Resin BioBased60 Ivory White @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 3.5 initial_exposure_time = 50 material_type = Tough @@ -19179,7 +18664,7 @@ material_vendor = Prusa Polymers material_colour = #E3D99F [sla_material:Prusament Resin Flex80 Transparent Clear @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_slow* exposure_time = 5 initial_exposure_time = 25 material_type = Flexible @@ -19188,7 +18673,7 @@ material_colour = #F3F6F4 material_print_speed = slow [sla_material:Prusament Resin Flex80 Black @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_slow* exposure_time = 3 initial_exposure_time = 25 material_type = Flexible @@ -19197,137 +18682,31 @@ material_colour = #595959 material_print_speed = slow [sla_material:Prusament Resin Flex80 White @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 3 initial_exposure_time = 17 material_type = Flexible material_vendor = Prusa Polymers material_colour = #E2D3DB -## Made for Prusa 0.05 +[sla_material:Prusament Resin Flex Anatomic Red @0.05 SL1S] +inherits = *0.05_sl1s*; *sl1s_slow* +exposure_time = 3 +initial_exposure_time = 20 +material_type = Medical +material_vendor = Prusa Polymers +material_colour = #AD4F54 -[sla_material:Prusa Orange Tough @0.05 SL1S] -inherits = *0.05_sl1s* -exposure_time = 2 -initial_exposure_time = 25 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #FF8040 - -[sla_material:Prusa White ABS like @0.05 SL1S] -inherits = *0.05_sl1s* -exposure_time = 2 -initial_exposure_time = 25 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #FFFFFF - -[sla_material:Prusa Azure Blue Tough @0.05 SL1S] -inherits = *0.05_sl1s* -exposure_time = 2 -initial_exposure_time = 25 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #007EFD - -[sla_material:Prusa Black Tough @0.05 SL1S] -inherits = *0.05_sl1s* -exposure_time = 2.4 -initial_exposure_time = 25 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #595959 - -[sla_material:Prusa Cyan Tough @0.05 SL1S] -inherits = *0.05_sl1s* -exposure_time = 2 -initial_exposure_time = 25 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #79FFFF - -[sla_material:Prusa Magenta Tough @0.05 SL1S] -inherits = *0.05_sl1s* -exposure_time = 2 -initial_exposure_time = 25 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #E800E8 - -[sla_material:Prusa Maroon Tough @0.05 SL1S] -inherits = *0.05_sl1s* -exposure_time = 2.4 -initial_exposure_time = 25 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #804000 - -[sla_material:Prusa White Tough @0.05 SL1S] -inherits = *0.05_sl1s* -exposure_time = 2 -initial_exposure_time = 25 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #FFFFFF - -[sla_material:Prusa Pink Tough @0.05 SL1S] -inherits = *0.05_sl1s* -exposure_time = 2 -initial_exposure_time = 25 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #FF80C0 - -[sla_material:Prusa Blue Flexible @0.05 SL1S] -inherits = *0.05_sl1s* -exposure_time = 2 -initial_exposure_time = 25 -material_type = Flexible -material_vendor = Made for Prusa -material_colour = #007EFD - -[sla_material:Prusa Grey Tough @0.05 SL1S] -inherits = *0.05_sl1s* -exposure_time = 2.4 -initial_exposure_time = 25 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #C0C0C0 - -[sla_material:Prusa Grey High Tenacity @0.05 SL1S] -inherits = *0.05_sl1s* -exposure_time = 2 -initial_exposure_time = 25 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #C0C0C0 - -[sla_material:Prusa Vibrant Orange Tough @0.05 SL1S] -inherits = *0.05_sl1s* -exposure_time = 5 -initial_exposure_time = 25 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #FF8040 - -[sla_material:Prusa Deep Blue Transparent Tough @0.05 SL1S] -inherits = *0.05_sl1s* -exposure_time = 5 -initial_exposure_time = 25 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #007EFD - -[sla_material:Prusa Green Dental Casting @0.05 SL1S] -inherits = *0.05_sl1s* -exposure_time = 4 -initial_exposure_time = 50 -material_type = Casting -material_vendor = Made for Prusa -material_colour = #00B900 +[sla_material:Prusament Resin Flex Gingiva Mask @0.05 SL1S] +inherits = *0.05_sl1s*; *sl1s_slow* +exposure_time = 3 +initial_exposure_time = 20 +material_type = Medical +material_vendor = Prusa Polymers +material_colour = #DB7F80 [sla_material:Ameralabs TGM-7 LED @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_slow* exposure_time = 2 initial_exposure_time = 25 material_type = Tough @@ -19336,7 +18715,7 @@ material_colour = #C0C0C0 material_print_speed = slow [sla_material:BASF Ultracur3D RG 35 @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 4.5 initial_exposure_time = 25 material_type = Tough @@ -19344,7 +18723,7 @@ material_vendor = BASF material_colour = #FFEEE6 [sla_material:BASF Ultracur3D ST 45 @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 3 initial_exposure_time = 25 material_type = Tough @@ -19352,7 +18731,7 @@ material_vendor = BASF material_colour = #595959 [sla_material:BASF Ultracur3D ST 45 M @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 3 initial_exposure_time = 25 material_type = Tough @@ -19360,7 +18739,7 @@ material_vendor = BASF material_colour = #595959 [sla_material:BASF Ultracur3D ST 80 @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 5.5 initial_exposure_time = 25 material_type = Tough @@ -19368,7 +18747,7 @@ material_vendor = BASF material_colour = #FFEEE6 [sla_material:BASF Ultracur3D ST 80 White @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 5.9 initial_exposure_time = 25 material_type = Tough @@ -19376,7 +18755,7 @@ material_vendor = BASF material_colour = #FFFFFF [sla_material:BASF Ultracur3D ST 80 Black @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 5.9 initial_exposure_time = 25 material_type = Tough @@ -19384,7 +18763,7 @@ material_vendor = BASF material_colour = #595959 [sla_material:BASF Ultracur3D EL 150 Black @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 3.8 initial_exposure_time = 25 material_type = Flexible @@ -19392,7 +18771,7 @@ material_vendor = BASF material_colour = #595959 [sla_material:BASF Ultracur3D FL 300 Black @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 4.8 initial_exposure_time = 25 material_type = Flexible @@ -19400,7 +18779,7 @@ material_vendor = BASF material_colour = #595959 [sla_material:PrimaCreator Tough Light Grey @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2.4 initial_exposure_time = 25 material_type = Tough @@ -19408,7 +18787,7 @@ material_vendor = PrimaCreator material_colour = #C0C0C0 [sla_material:PrimaCreator Tough Clear @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2 initial_exposure_time = 25 material_type = Tough @@ -19416,7 +18795,7 @@ material_vendor = PrimaCreator material_colour = #F8F8F8 [sla_material:PrimaCreator Tough White @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2 initial_exposure_time = 25 material_type = Tough @@ -19424,7 +18803,7 @@ material_vendor = PrimaCreator material_colour = #FFFFFF [sla_material:PrimaCreator Flex Clear @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2 initial_exposure_time = 25 material_type = Flexible @@ -19432,7 +18811,7 @@ material_vendor = PrimaCreator material_colour = #F8F8F8 [sla_material:PrimaCreator Water Washable Transparent @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2 initial_exposure_time = 25 material_type = Tough @@ -19440,16 +18819,16 @@ material_vendor = PrimaCreator material_colour = #F8F8F8 [sla_material:DruckWege Type D Dental Model @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_slow* exposure_time = 1.4 initial_exposure_time = 15 -material_type = Dental +material_type = Medical material_vendor = DruckWege material_colour = #FFEEE6 material_print_speed = slow [sla_material:DruckWege Type D Standard White @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_slow* exposure_time = 2 initial_exposure_time = 15 material_type = Tough @@ -19458,7 +18837,7 @@ material_colour = #FFFFFF material_print_speed = slow [sla_material:DruckWege Type D Standard Pigmentfrei Clear @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_slow* exposure_time = 2 initial_exposure_time = 15 material_type = Tough @@ -19467,7 +18846,7 @@ material_colour = #F8F8F8 material_print_speed = slow [sla_material:3DM-ABS Orange @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2.6 initial_exposure_time = 25 material_type = Tough @@ -19475,7 +18854,7 @@ material_vendor = 3DM material_colour = #FF8040 [sla_material:3DM-TOUGH Clear @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2.6 initial_exposure_time = 25 material_type = Tough @@ -19483,7 +18862,7 @@ material_vendor = 3DM material_colour = #F8F8F8 [sla_material:Peopoly Deft White @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2 initial_exposure_time = 25 material_type = Tough @@ -19491,7 +18870,7 @@ material_vendor = Peopoly material_colour = #FFFFFF [sla_material:Peopoly Neo Clear @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2 initial_exposure_time = 25 material_type = Tough @@ -19499,7 +18878,7 @@ material_vendor = Peopoly material_colour = #F8F8F8 [sla_material:3DM-ABS @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2.6 initial_exposure_time = 25 material_type = Tough @@ -19507,15 +18886,15 @@ material_vendor = 3DM material_colour = #FF8040 [sla_material:3DM-DENT @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2.3 initial_exposure_time = 36 -material_type = Dental +material_type = Medical material_vendor = 3DM material_colour = #FFEEE6 [sla_material:3DM-HR Green @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 5 initial_exposure_time = 28 material_type = Tough @@ -19523,7 +18902,7 @@ material_vendor = 3DM material_colour = #00B900 [sla_material:3DM-HR Red Wine @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 6 initial_exposure_time = 32 material_type = Tough @@ -19531,7 +18910,7 @@ material_vendor = 3DM material_colour = #EC0000 [sla_material:3DM-Vulcan Gold @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 5 initial_exposure_time = 24 material_type = Casting @@ -19539,7 +18918,7 @@ material_vendor = 3DM material_colour = #B0B000 [sla_material:3DM-XPRO White @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 3 initial_exposure_time = 28 material_type = Tough @@ -19547,15 +18926,15 @@ material_vendor = 3DM material_colour = #FFFFFF [sla_material:Asiga Denta Model @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 5 initial_exposure_time = 24 -material_type = Dental +material_type = Medical material_vendor = Asiga material_colour = #FFEEE6 [sla_material:Asiga PlasGRAY @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 9.7 initial_exposure_time = 48 material_type = Tough @@ -19563,7 +18942,7 @@ material_vendor = Asiga material_colour = #C0C0C0 [sla_material:BlueCast EcoGray @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2.3 initial_exposure_time = 28 material_type = Tough @@ -19571,7 +18950,7 @@ material_vendor = BlueCast material_colour = #808080 [sla_material:BlueCast Phrozen Wax @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 5.3 initial_exposure_time = 40 material_type = Tough @@ -19579,7 +18958,7 @@ material_vendor = BlueCast material_colour = #007EFD [sla_material:BlueCast X-One @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_slow* exposure_time = 7 initial_exposure_time = 25 material_type = Casting @@ -19588,15 +18967,15 @@ material_colour = #C0C0C0 material_print_speed = slow [sla_material:NextDent Model 2.0 Grey @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 4 initial_exposure_time = 28 -material_type = Dental +material_type = Medical material_vendor = NextDent material_colour = #C0C0C0 [sla_material:NextDent Cast Purple @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 3 initial_exposure_time = 16 material_type = Casting @@ -19604,7 +18983,7 @@ material_vendor = NextDent material_colour = #E800E8 [sla_material:Siraya Tech Tenacious @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2.7 initial_exposure_time = 28 material_type = Tough @@ -19612,7 +18991,7 @@ material_vendor = Siraya Tech material_colour = #F8F8F8 [sla_material:Siraya Tech Blu Clear V2 @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 3.3 initial_exposure_time = 24 material_type = Tough @@ -19620,7 +18999,7 @@ material_vendor = Siraya Tech material_colour = #F8F8F8 [sla_material:Siraya Tech Blu Blue @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 4 initial_exposure_time = 28 material_type = Tough @@ -19628,7 +19007,7 @@ material_vendor = Siraya Tech material_colour = #007EFD [sla_material:Siraya Tech Fast Black @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 3 initial_exposure_time = 28 material_type = Tough @@ -19636,7 +19015,7 @@ material_vendor = Siraya Tech material_colour = #595959 [sla_material:Siraya Tech Fast Grey @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 3.3 initial_exposure_time = 28 material_type = Tough @@ -19644,7 +19023,7 @@ material_vendor = Siraya Tech material_colour = #C0C0C0 [sla_material:Siraya Tech Simple Clear @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 3.3 initial_exposure_time = 28 material_type = Tough @@ -19652,7 +19031,7 @@ material_vendor = Siraya Tech material_colour = #F8F8F8 [sla_material:Siraya Tech Sculpt @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2.7 initial_exposure_time = 28 material_type = Tough @@ -19660,7 +19039,7 @@ material_vendor = Siraya Tech material_colour = #C0C0C0 [sla_material:Harz Labs Model Resin Cherry @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 4.3 initial_exposure_time = 16 material_type = Tough @@ -19668,7 +19047,7 @@ material_vendor = Harz Labs material_colour = #EC0000 [sla_material:Harz Labs Model Resin Black @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 4.3 initial_exposure_time = 16 material_type = Tough @@ -19676,7 +19055,7 @@ material_vendor = Harz Labs material_colour = #595959 [sla_material:Harz Labs Basic Resin Red @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 4.3 initial_exposure_time = 16 material_type = Tough @@ -19684,7 +19063,7 @@ material_vendor = Harz Labs material_colour = #EC0000 [sla_material:Resinworks 3D Violet @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 5.7 initial_exposure_time = 24 material_type = Tough @@ -19692,7 +19071,7 @@ material_vendor = Resinworks 3D material_colour = #E800E8 [sla_material:FunToDo Industrial Blend Unpigmented @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 1.3 initial_exposure_time = 28 material_type = Tough @@ -19700,7 +19079,7 @@ material_vendor = FunToDo material_colour = #F8F8F8 [sla_material:FunToDo Snow White @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 3.3 initial_exposure_time = 28 material_type = Tough @@ -19708,7 +19087,7 @@ material_vendor = FunToDo material_colour = #FFFFFF [sla_material:FunToDo Ash Grey @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 3 initial_exposure_time = 32 material_type = Tough @@ -19716,7 +19095,7 @@ material_vendor = FunToDo material_colour = #808080 [sla_material:Ameralabs AMD 3 LED @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 1.7 initial_exposure_time = 24 material_type = Tough @@ -19724,7 +19103,7 @@ material_vendor = Ameralabs material_colour = #808080 [sla_material:Dragon Resin Metalshine Metal Grey @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 10 initial_exposure_time = 40 material_type = Tough @@ -19732,7 +19111,7 @@ material_vendor = Dragon Resin material_colour = #808080 [sla_material:Dragon Resin Metalshine Dark Brass @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 10 initial_exposure_time = 40 material_type = Tough @@ -19740,7 +19119,7 @@ material_vendor = Dragon Resin material_colour = #B0B000 [sla_material:Dragon Resin Metalshine Brass @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 10 initial_exposure_time = 40 material_type = Tough @@ -19748,7 +19127,7 @@ material_vendor = Dragon Resin material_colour = #B0B000 [sla_material:Esun Bio-Photopolymer Resin White @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2.7 initial_exposure_time = 24 material_type = Tough @@ -19756,7 +19135,7 @@ material_vendor = Esun material_colour = #FFFFFF [sla_material:Esun Standard Resin Black @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2.3 initial_exposure_time = 24 material_type = Tough @@ -19764,7 +19143,7 @@ material_vendor = Esun material_colour = #595959 [sla_material:Monocure 3D Black Rapid Resin @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2 initial_exposure_time = 28 material_type = Tough @@ -19772,7 +19151,7 @@ material_vendor = Monocure material_colour = #595959 [sla_material:Monocure 3D Blue Rapid Resin @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2.3 initial_exposure_time = 28 material_type = Tough @@ -19780,7 +19159,7 @@ material_vendor = Monocure material_colour = #007EFD [sla_material:Monocure 3D Clear Rapid Resin @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2.7 initial_exposure_time = 32 material_type = Tough @@ -19788,7 +19167,7 @@ material_vendor = Monocure material_colour = #F8F8F8 [sla_material:Monocure 3D Grey Rapid Resin @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 3.3 initial_exposure_time = 25 material_type = Tough @@ -19796,7 +19175,7 @@ material_vendor = Monocure material_colour = #C0C0C0 [sla_material:Monocure 3D White Rapid Resin @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 3.3 initial_exposure_time = 28 material_type = Tough @@ -19804,7 +19183,7 @@ material_vendor = Monocure material_colour = #FFFFFF [sla_material:Photocentric Hard Grey @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 5 initial_exposure_time = 24 material_type = Tough @@ -19812,7 +19191,7 @@ material_vendor = Photocentric material_colour = #808080 [sla_material:Liqcreate Clear Impact @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 10 initial_exposure_time = 40 material_type = Tough @@ -19820,7 +19199,7 @@ material_vendor = Liqcreate material_colour = #F8F8F8 [sla_material:Liqcreate Strong X @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 10 initial_exposure_time = 40 material_type = Tough @@ -19828,7 +19207,7 @@ material_vendor = Liqcreate material_colour = #C0C0C0 [sla_material:Resinworks 3D Green @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 7 initial_exposure_time = 25 material_type = Tough @@ -19836,7 +19215,7 @@ material_vendor = Resinworks 3D material_colour = #00B900 [sla_material:3DJake Blue @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2 initial_exposure_time = 25 material_type = Tough @@ -19844,7 +19223,7 @@ material_vendor = 3DJake material_colour = #007EFD [sla_material:LOCTITE 3D IND475 @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 4 initial_exposure_time = 15 material_type = Flexible @@ -19852,7 +19231,7 @@ material_vendor = Henkel material_colour = #FFFFFF [sla_material:LOCTITE 3D PRO476 @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 7 initial_exposure_time = 25 material_type = Tough @@ -19860,7 +19239,7 @@ material_vendor = Henkel material_colour = #595959 [sla_material:LOCTITE 3D 3843 HDT60 High Toughness @0.05 SL1S] -inherits = *0.05_sl1s* +inherits = *0.05_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 13 initial_exposure_time = 25 material_type = Tough @@ -19872,7 +19251,7 @@ material_colour = #595959 ## Prusa Polymers 0.1 [sla_material:Prusament Resin Tough Prusa Orange @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2.6 initial_exposure_time = 25 material_type = Tough @@ -19880,7 +19259,7 @@ material_vendor = Prusa Polymers material_colour = #FF8040 [sla_material:Prusament Resin Tough Rich Black @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2.6 initial_exposure_time = 25 material_type = Tough @@ -19888,7 +19267,7 @@ material_vendor = Prusa Polymers material_colour = #595959 [sla_material:Prusament Resin Tough Anthracite Grey @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 3 initial_exposure_time = 25 material_type = Tough @@ -19896,7 +19275,7 @@ material_vendor = Prusa Polymers material_colour = #808080 [sla_material:Prusament Resin Tough Sandstone Model @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 3 initial_exposure_time = 25 material_type = Tough @@ -19904,7 +19283,7 @@ material_vendor = Prusa Polymers material_colour = #EEA061 [sla_material:Prusament Resin Tough Terra Brown @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2.6 initial_exposure_time = 25 material_type = Tough @@ -19912,7 +19291,7 @@ material_vendor = Prusa Polymers material_colour = #7A5C45 [sla_material:Prusament Resin Tough Brick Red @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2.6 initial_exposure_time = 25 material_type = Tough @@ -19920,7 +19299,7 @@ material_vendor = Prusa Polymers material_colour = #B46056 [sla_material:Prusament Resin Tough Grass Green @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2.6 initial_exposure_time = 25 material_type = Tough @@ -19928,7 +19307,7 @@ material_vendor = Prusa Polymers material_colour = #37823F [sla_material:Prusament Resin Tough Bright Yellow @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2.6 initial_exposure_time = 25 material_type = Tough @@ -19936,7 +19315,7 @@ material_vendor = Prusa Polymers material_colour = #F9DB4C [sla_material:Prusament Resin Tough Transparent Green @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2.6 initial_exposure_time = 25 material_type = Tough @@ -19944,7 +19323,7 @@ material_vendor = Prusa Polymers material_colour = #1DAf5E [sla_material:Prusament Resin Tough Transparent Red @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 3 initial_exposure_time = 25 material_type = Tough @@ -19952,7 +19331,7 @@ material_vendor = Prusa Polymers material_colour = #D21B31 [sla_material:Prusament Resin Tough Transparent Amber @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 3.6 initial_exposure_time = 25 material_type = Tough @@ -19960,7 +19339,7 @@ material_vendor = Prusa Polymers material_colour = #FCB30E [sla_material:Prusament Resin Tough Classic Red @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2.6 initial_exposure_time = 25 material_type = Tough @@ -19968,7 +19347,7 @@ material_vendor = Prusa Polymers material_colour = #EC0000 [sla_material:Prusament Resin Model Solid Grey @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2.8 initial_exposure_time = 25 material_type = Tough @@ -19976,7 +19355,7 @@ material_vendor = Prusa Polymers material_colour = #9C9D9D [sla_material:Prusament Resin Model Alabaster White @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2.8 initial_exposure_time = 20 material_type = Tough @@ -19984,7 +19363,7 @@ material_vendor = Prusa Polymers material_colour = #D6D7D8 [sla_material:Prusament Resin Model Neutral Beige @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2.8 initial_exposure_time = 25 material_type = Tough @@ -19992,24 +19371,24 @@ material_vendor = Prusa Polymers material_colour = #BF9C87 [sla_material:Prusament Resin Model Ultra Violet @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2.6 initial_exposure_time = 25 material_type = Tough material_vendor = Prusa Polymers material_colour = #413A7A -; [sla_material:Prusament Resin Model Transparent Clear @0.1 SL1S] -; inherits = *0.1_sl1s* -; exposure_time = 2.4 -; initial_exposure_time = 10 -; material_type = Tough -; material_vendor = Prusa Polymers -; material_colour = #F3F6F4 -; material_print_speed = slow +[sla_material:Prusament Resin Model Transparent Clear @0.1 SL1S] +inherits = *0.1_sl1s*; *sl1s_slow* +exposure_time = 3.2 +initial_exposure_time = 10 +material_type = Tough +material_vendor = Prusa Polymers +material_colour = #F3F6F4 +material_print_speed = slow [sla_material:Prusament Resin BioBased60 Herbal Green @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 5 initial_exposure_time = 30 material_type = Tough @@ -20017,7 +19396,7 @@ material_vendor = Prusa Polymers material_colour = #3AD200 [sla_material:Prusament Resin BioBased60 Magma Red @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 5 initial_exposure_time = 30 material_type = Tough @@ -20025,7 +19404,7 @@ material_vendor = Prusa Polymers material_colour = #D20202 [sla_material:Prusament Resin BioBased60 Natural Yellow @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_slow* exposure_time = 4 initial_exposure_time = 30 material_type = Tough @@ -20034,7 +19413,7 @@ material_colour = #ECDE05 material_print_speed = slow [sla_material:Prusament Resin BioBased60 Obsidian Black @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 7.5 initial_exposure_time = 25 material_type = Tough @@ -20042,7 +19421,7 @@ material_vendor = Prusa Polymers material_colour = #232323 [sla_material:Prusament Resin BioBased60 Sapphire Blue @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 4 initial_exposure_time = 25 material_type = Tough @@ -20050,7 +19429,7 @@ material_vendor = Prusa Polymers material_colour = #2196F3 [sla_material:Prusament Resin BioBased60 Ivory White @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 4.5 initial_exposure_time = 50 material_type = Tough @@ -20058,7 +19437,7 @@ material_vendor = Prusa Polymers material_colour = #E3D99F [sla_material:Prusament Resin Flex80 Transparent Clear @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_slow* exposure_time = 6 initial_exposure_time = 25 material_type = Flexible @@ -20067,7 +19446,7 @@ material_colour = #F3F6F4 material_print_speed = slow [sla_material:Prusament Resin Flex80 Black @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_slow* exposure_time = 3.5 initial_exposure_time = 25 material_type = Flexible @@ -20076,137 +19455,31 @@ material_colour = #595959 material_print_speed = slow [sla_material:Prusament Resin Flex80 White @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 3.5 initial_exposure_time = 17 material_type = Flexible material_vendor = Prusa Polymers material_colour = #E2D3DB -## Made for Prusa 0.1 +[sla_material:Prusament Resin Flex Anatomic Red @0.1 SL1S] +inherits = *0.1_sl1s*; *sl1s_slow* +exposure_time = 3.5 +initial_exposure_time = 20 +material_type = Medical +material_vendor = Prusa Polymers +material_colour = #AD4F54 -[sla_material:Prusa Orange Tough @0.1 SL1S] -inherits = *0.1_sl1s* -exposure_time = 2.6 -initial_exposure_time = 25 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #FF8040 - -[sla_material:Prusa White ABS like @0.1 SL1S] -inherits = *0.1_sl1s* -exposure_time = 2.6 -initial_exposure_time = 25 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #FFFFFF - -[sla_material:Prusa Azure Blue Tough @0.1 SL1S] -inherits = *0.1_sl1s* -exposure_time = 2.6 -initial_exposure_time = 25 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #007EFD - -[sla_material:Prusa Black Tough @0.1 SL1S] -inherits = *0.1_sl1s* -exposure_time = 3 -initial_exposure_time = 25 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #595959 - -[sla_material:Prusa Cyan Tough @0.1 SL1S] -inherits = *0.1_sl1s* -exposure_time = 2.6 -initial_exposure_time = 25 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #79FFFF - -[sla_material:Prusa Magenta Tough @0.1 SL1S] -inherits = *0.1_sl1s* -exposure_time = 2.6 -initial_exposure_time = 25 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #E800E8 - -[sla_material:Prusa Maroon Tough @0.1 SL1S] -inherits = *0.1_sl1s* -exposure_time = 3 -initial_exposure_time = 25 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #804000 - -[sla_material:Prusa White Tough @0.1 SL1S] -inherits = *0.1_sl1s* -exposure_time = 2.6 -initial_exposure_time = 25 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #FFFFFF - -[sla_material:Prusa Pink Tough @0.1 SL1S] -inherits = *0.1_sl1s* -exposure_time = 2.6 -initial_exposure_time = 25 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #FF80C0 - -[sla_material:Prusa Blue Flexible @0.1 SL1S] -inherits = *0.1_sl1s* -exposure_time = 2.6 -initial_exposure_time = 25 -material_type = Flexible -material_vendor = Made for Prusa -material_colour = #007EFD - -[sla_material:Prusa Grey Tough @0.1 SL1S] -inherits = *0.1_sl1s* -exposure_time = 3 -initial_exposure_time = 25 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #007EFD - -[sla_material:Prusa Grey High Tenacity @0.1 SL1S] -inherits = *0.1_sl1s* -exposure_time = 2.6 -initial_exposure_time = 25 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #808080 - -[sla_material:Prusa Vibrant Orange Tough @0.1 SL1S] -inherits = *0.1_sl1s* -exposure_time = 10 -initial_exposure_time = 25 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #FF8040 - -[sla_material:Prusa Deep Blue Transparent Tough @0.1 SL1S] -inherits = *0.1_sl1s* -exposure_time = 10 -initial_exposure_time = 25 -material_type = Tough -material_vendor = Made for Prusa -material_colour = #007EFD - -[sla_material:Prusa Green Dental Casting @0.1 SL1S] -inherits = *0.1_sl1s* -exposure_time = 8 -initial_exposure_time = 50 -material_type = Casting -material_vendor = Made for Prusa -material_colour = #00B900 +[sla_material:Prusament Resin Flex Gingiva Mask @0.1 SL1S] +inherits = *0.1_sl1s*; *sl1s_slow* +exposure_time = 3.5 +initial_exposure_time = 20 +material_type = Medical +material_vendor = Prusa Polymers +material_colour = #DB7F80 [sla_material:Ameralabs TGM-7 LED @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_slow* exposure_time = 2.6 initial_exposure_time = 25 material_type = Tough @@ -20215,7 +19488,7 @@ material_colour = #C0C0C0 material_print_speed = slow [sla_material:BASF Ultracur3D RG 35 @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 10 initial_exposure_time = 25 material_type = Tough @@ -20223,7 +19496,7 @@ material_vendor = BASF material_colour = #FFEEE6 [sla_material:BASF Ultracur3D ST 45 @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 7.5 initial_exposure_time = 25 material_type = Tough @@ -20231,7 +19504,7 @@ material_vendor = BASF material_colour = #595959 [sla_material:BASF Ultracur3D ST 45 M @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 4.5 initial_exposure_time = 25 material_type = Tough @@ -20239,7 +19512,7 @@ material_vendor = BASF material_colour = #595959 [sla_material:BASF Ultracur3D ST 80 @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 9 initial_exposure_time = 25 material_type = Tough @@ -20247,7 +19520,7 @@ material_vendor = BASF material_colour = #FFEEE6 [sla_material:BASF Ultracur3D ST 80 White @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 9 initial_exposure_time = 25 material_type = Tough @@ -20255,7 +19528,7 @@ material_vendor = BASF material_colour = #FFFFFF [sla_material:BASF Ultracur3D ST 80 Black @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 9 initial_exposure_time = 25 material_type = Tough @@ -20263,7 +19536,7 @@ material_vendor = BASF material_colour = #595959 [sla_material:BASF Ultracur3D EL 150 Black @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 5 initial_exposure_time = 25 material_type = Flexible @@ -20271,7 +19544,7 @@ material_vendor = BASF material_colour = #595959 [sla_material:BASF Ultracur3D FL 300 Black @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 6 initial_exposure_time = 25 material_type = Flexible @@ -20279,7 +19552,7 @@ material_vendor = BASF material_colour = #595959 [sla_material:BlueCast X-One @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_slow* exposure_time = 8.5 initial_exposure_time = 25 material_type = Casting @@ -20288,7 +19561,7 @@ material_colour = #C0C0C0 material_print_speed = slow [sla_material:PrimaCreator Tough Light Grey @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 3 initial_exposure_time = 25 material_type = Tough @@ -20296,7 +19569,7 @@ material_vendor = PrimaCreator material_colour = #C0C0C0 [sla_material:PrimaCreator Tough Clear @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2.6 initial_exposure_time = 25 material_type = Tough @@ -20304,7 +19577,7 @@ material_vendor = PrimaCreator material_colour = #F8F8F8 [sla_material:PrimaCreator Tough White @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2.6 initial_exposure_time = 25 material_type = Tough @@ -20312,7 +19585,7 @@ material_vendor = PrimaCreator material_colour = #FFFFFF [sla_material:PrimaCreator Flex Clear @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2.6 initial_exposure_time = 25 material_type = Flexible @@ -20320,7 +19593,7 @@ material_vendor = PrimaCreator material_colour = #F8F8F8 [sla_material:PrimaCreator Water Washable Transparent @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2.6 initial_exposure_time = 25 material_type = Tough @@ -20328,16 +19601,16 @@ material_vendor = PrimaCreator material_colour = #F8F8F8 [sla_material:DruckWege Type D Dental Model @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_slow* exposure_time = 2.6 initial_exposure_time = 15 -material_type = Dental +material_type = Medical material_vendor = DruckWege material_colour = #FFEEE6 material_print_speed = slow [sla_material:3DM-ABS Orange @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 3 initial_exposure_time = 25 material_type = Tough @@ -20345,7 +19618,7 @@ material_vendor = 3DM material_colour = #FF8040 [sla_material:3DM-TOUGH Clear @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 3 initial_exposure_time = 25 material_type = Tough @@ -20353,7 +19626,7 @@ material_vendor = 3DM material_colour = #F8F8F8 [sla_material:Peopoly Deft White @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2.6 initial_exposure_time = 25 material_type = Tough @@ -20361,7 +19634,7 @@ material_vendor = Peopoly material_colour = #FFFFFF [sla_material:Peopoly Neo Clear @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 2.6 initial_exposure_time = 25 material_type = Tough @@ -20369,7 +19642,7 @@ material_vendor = Peopoly material_colour = #F8F8F8 [sla_material:Liqcreate Clear Impact @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 20 initial_exposure_time = 40 material_type = Tough @@ -20377,7 +19650,7 @@ material_vendor = Liqcreate material_colour = #F8F8F8 [sla_material:Liqcreate Strong X @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 20 initial_exposure_time = 40 material_type = Tough @@ -20385,7 +19658,7 @@ material_vendor = Liqcreate material_colour = #C0C0C0 [sla_material:Resinworks 3D Green @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 13 initial_exposure_time = 25 material_type = Tough @@ -20393,7 +19666,7 @@ material_vendor = Resinworks 3D material_colour = #00B900 [sla_material:3DJake Blue @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 3 initial_exposure_time = 25 material_type = Tough @@ -20401,7 +19674,7 @@ material_vendor = 3DJake material_colour = #007EFD [sla_material:LOCTITE 3D IND475 @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 6.5 initial_exposure_time = 15 material_type = Flexible @@ -20409,7 +19682,7 @@ material_vendor = Henkel material_colour = #FFFFFF [sla_material:LOCTITE 3D PRO476 @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 9 initial_exposure_time = 25 material_type = Tough @@ -20417,7 +19690,7 @@ material_vendor = Henkel material_colour = #595959 [sla_material:LOCTITE 3D 3843 HDT60 High Toughness @0.1 SL1S] -inherits = *0.1_sl1s* +inherits = *0.1_sl1s*; *sl1s_fast*; *legacy_fast* exposure_time = 18 initial_exposure_time = 25 material_type = Tough @@ -21171,21 +20444,22 @@ bed_shape = 0x0,180x0,180x180,0x180 default_filament_profile = "Prusament PLA" default_print_profile = 0.15mm QUALITY @MINI gcode_flavor = marlin2 -machine_max_acceleration_e = 5000 -machine_max_acceleration_extruding = 2000 -machine_max_acceleration_retracting = 1250 -machine_max_acceleration_travel = 2500 -machine_max_acceleration_x = 2500 -machine_max_acceleration_y = 2500 -machine_max_acceleration_z = 400 -machine_max_feedrate_e = 80 -machine_max_feedrate_x = 180 -machine_max_feedrate_y = 180 -machine_max_feedrate_z = 12 -machine_max_jerk_e = 10 -machine_max_jerk_x = 8 -machine_max_jerk_y = 8 -machine_max_jerk_z = 2 +silent_mode = 1 +machine_max_acceleration_e = 5000,5000 +machine_max_acceleration_extruding = 2000,2000 +machine_max_acceleration_retracting = 1250,1250 +machine_max_acceleration_travel = 2500,2500 +machine_max_acceleration_x = 2500,2500 +machine_max_acceleration_y = 2500,2500 +machine_max_acceleration_z = 400,400 +machine_max_feedrate_e = 80,80 +machine_max_feedrate_x = 180,180 +machine_max_feedrate_y = 180,180 +machine_max_feedrate_z = 12,12 +machine_max_jerk_e = 10,10 +machine_max_jerk_x = 8,8 +machine_max_jerk_y = 8,8 +machine_max_jerk_z = 2,2 machine_min_extruding_rate = 0 machine_min_travel_rate = 0 max_layer_height = 0.25 @@ -21202,7 +20476,6 @@ retract_before_travel = 1.5 retract_lift_above = 0 retract_lift_below = 179 retract_layer_change = 1 -silent_mode = 0 remaining_times = 1 start_gcode = M862.3 P \"[printer_model]\" ; printer model check\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S170 ; set extruder temp for bed leveling\nM140 S[first_layer_bed_temperature] ; set bed temp\nM109 R170 ; wait for bed leveling temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM204 T1250 ; set travel acceleration\nG28 ; home all without mesh bed level\nG29 ; mesh bed leveling \nM204 T[machine_max_acceleration_travel] ; restore travel acceleration\nM104 S[first_layer_temperature] ; set extruder temp\nG92 E0\nG1 Y-2 X179 F2400\nG1 Z3 F720\nM109 S[first_layer_temperature] ; wait for extruder temp\n\n; intro line\nG1 X170 F1000\nG1 Z0.2 F720\nG1 X110 E8 F900\nG1 X40 E10 F700\nG92 E0\n\nM221 S95 ; set flow end_gcode = G1 E-1 F2100 ; retract\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+2, max_print_height)} F720 ; Move print head up{endif}\nG1 X178 Y178 F4200 ; park print head\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+30, max_print_height)} F720 ; Move print head further up{endif}\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM221 S100 ; reset flow\nM900 K0 ; reset LA\nM84 ; disable motors\n; max_layer_z = [max_layer_z] @@ -21259,18 +20532,20 @@ bed_shape = 0x0,180x0,180x180,0x180 default_filament_profile = "Prusament PLA @MINIIS" default_print_profile = 0.20mm SPEED @MINIIS 0.4 gcode_flavor = marlin2 -machine_max_acceleration_extruding = 4000 -machine_max_acceleration_travel = 4000 -machine_max_acceleration_x = 4000 -machine_max_acceleration_y = 4000 -machine_max_acceleration_z = 400 -machine_max_feedrate_e = 80 -machine_max_feedrate_x = 400 -machine_max_feedrate_y = 400 +silent_mode = 1 +machine_max_acceleration_e = 5000,5000 +machine_max_acceleration_extruding = 4000,2500 +machine_max_acceleration_retracting = 1250,1250 +machine_max_acceleration_travel = 4000,2500 +machine_max_acceleration_x = 4000,2500 +machine_max_acceleration_y = 4000,2500 +machine_max_acceleration_z = 400,400 +machine_max_feedrate_x = 400,180 +machine_max_feedrate_y = 400,180 retract_length = 2.5 retract_lift = 0.2 wipe = 0 -start_gcode = M862.3 P "MINI" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM862.5 P2 ; g-code level check\nM862.6 P"Input shaper" ; FW feature check\nM115 U5.1.2+13478\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S170 ; set extruder temp for bed leveling\nM140 S[first_layer_bed_temperature] ; set bed temp\nM109 R170 ; wait for bed leveling temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM569 S1 X Y ; set stealthchop for X Y\nM204 T1250 ; set travel acceleration\nG28 ; home all without mesh bed level\nG29 ; mesh bed leveling \nM104 S[first_layer_temperature] ; set extruder temp\nG92 E0\n\nG1 X0 Y-2 Z3 F2400\n\nM109 S[first_layer_temperature] ; wait for extruder temp\n\n; intro line\nG1 X10 Z0.2 F1000\nG1 X70 E8 F900\nG1 X140 E10 F700\nG92 E0\n\nM569 S0 X Y ; set spreadcycle for X Y\nM204 T[machine_max_acceleration_travel] ; restore travel acceleration\nM572 W0.06 ; set smooth time\nM221 S95 ; set flow\n +start_gcode = M862.3 P "MINI" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM862.5 P2 ; g-code level check\nM862.6 P"Input shaper" ; FW feature check\nM115 U6.0.0+14794\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S170 ; set extruder temp for bed leveling\nM140 S[first_layer_bed_temperature] ; set bed temp\nM109 R170 ; wait for bed leveling temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM569 S1 X Y ; set stealthchop for X Y\nM204 T1250 ; set travel acceleration\nG28 ; home all without mesh bed level\nG29 ; mesh bed leveling \nM104 S[first_layer_temperature] ; set extruder temp\nG92 E0\n\nG1 X0 Y-2 Z3 F2400\n\nM109 S[first_layer_temperature] ; wait for extruder temp\n\n; intro line\nG1 X10 Z0.2 F1000\nG1 X70 E8 F900\nG1 X140 E10 F700\nG92 E0\n\nM569 S0 X Y ; set spreadcycle for X Y\nM204 T[machine_max_acceleration_travel] ; restore travel acceleration\nM572 W0.06 ; set smooth time\nM221 S95 ; set flow\n end_gcode = {if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+2, max_print_height)} F720 ; Move print head up{endif}\nG1 X170 Y170 F4200 ; park print head\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+50, max_print_height)} F720 ; Move print head further up{endif}\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM221 S100 ; reset flow\nM572 S0 ; reset PA\nM569 S1 X Y ; reset to stealthchop for X Y\nM84 ; disable motors\n; max_layer_z = [max_layer_z] printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_MINIIS\nNO_TEMPLATES\n before_layer_gcode = ;BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]\nM201 X{interpolate_table(extruded_weight_total, (0,4000), (1000,1700), (10000,1700))} Y{interpolate_table(extruded_weight_total, (0,4000), (1000,1700), (10000,1700))}\n{if ! spiral_vase}M74 W[extruded_weight_total]{endif}\n @@ -21320,27 +20595,27 @@ printer_variant = 0.4 printer_model = XL nozzle_diameter = 0.4 end_gcode = {if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+2, max_print_height)} F720{endif} ; Move bed down\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X6 Y350 F6000 ; park\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+100, max_print_height)} F300{endif} ; Move bed down\nM900 K0 ; reset LA\nM142 S36 ; reset heatbreak target temp\nM221 S100 ; reset flow percentage\nM84 ; disable motors\n; max_layer_z = [max_layer_z] +silent_mode = 1 machine_limits_usage = emit_to_gcode -machine_max_acceleration_e = 2500 -machine_max_acceleration_extruding = 3000 -machine_max_acceleration_retracting = 1200 -machine_max_acceleration_travel = 3000 -machine_max_acceleration_x = 5000 -machine_max_acceleration_y = 5000 -machine_max_acceleration_z = 200 -machine_max_feedrate_e = 100 -machine_max_feedrate_x = 400 -machine_max_feedrate_y = 400 -machine_max_feedrate_z = 12 -machine_max_jerk_e = 10 -machine_max_jerk_x = 8 -machine_max_jerk_y = 8 -machine_max_jerk_z = 2 +machine_max_acceleration_e = 2500,2500 +machine_max_acceleration_extruding = 3000,2500 +machine_max_acceleration_retracting = 1200,1200 +machine_max_acceleration_travel = 3000,2500 +machine_max_acceleration_x = 5000,2500 +machine_max_acceleration_y = 5000,2500 +machine_max_acceleration_z = 200,200 +machine_max_feedrate_e = 100,100 +machine_max_feedrate_x = 400,140 +machine_max_feedrate_y = 400,140 +machine_max_feedrate_z = 12,12 +machine_max_jerk_e = 10,10 +machine_max_jerk_x = 8,8 +machine_max_jerk_y = 8,8 +machine_max_jerk_z = 2,2 machine_min_extruding_rate = 0,0 machine_min_travel_rate = 0,0 max_layer_height = 0.25 min_layer_height = 0.07 -silent_mode = 0 remaining_times = 1 printer_notes = Do not remove the keywords below.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_XL\nPG retract_lift_below = 359 @@ -21350,7 +20625,7 @@ retract_before_travel = 1.5 retract_before_wipe = 80% retract_layer_change = 1 retract_length = 0.8 -start_gcode = M17 ; enable steppers\nM862.3 P "XL" ; printer model check\nM115 U5.1.2+13478\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n; set print area\nM555 X{first_layer_print_min[0]} Y{first_layer_print_min[1]} W{(first_layer_print_max[0]) - (first_layer_print_min[0])} H{(first_layer_print_max[1]) - (first_layer_print_min[1])}\n; inform about nozzle diameter\nM862.1 P[nozzle_diameter]\n; set & wait for bed and extruder temp for MBL\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 T0 S{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == "PC" or filament_type[0] == "PA") ? (first_layer_temperature[0] - 25) : (filament_type[0] == "FLEX") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; set extruder temp for bed leveling\nM109 T0 R{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == "PC" or filament_type[0] == "PA") ? (first_layer_temperature[0] - 25) : (filament_type[0] == "FLEX") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n; home carriage, pick tool, home all\nG28 XY\nM84 E ; turn off E motor\nG28 Z\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nG29 G ; absorb heat\n; move to the nozzle cleanup area\nG1 X{(min(((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))), first_layer_print_min[0])) + 32} Y{(min((first_layer_print_min[1] - 7), first_layer_print_min[1]))} Z{5} F4800\nM302 S160 ; lower cold extrusion limit to 160C\nG1 E{-(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; retraction for nozzle cleanup\n; nozzle cleanup\nM84 E ; turn off E motor\nG29 P9 X{((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)))} Y{(first_layer_print_min[1] - 7)} W{32} H{7}\nG0 Z10 F480 ; move away in Z\n{if first_layer_bed_temperature[0] > 60}\nG0 Z70 F480 ; move away (a bit more) in Z\nG0 X30 Y{print_bed_min[1]} F6000 ; move away in X/Y for higher bed temperatures\n{endif}\nM106 S100 ; cool off the nozzle\nM107 ; stop cooling off the nozzle - turn off the fan\n; MBL\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X30 Y0 W50 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\nM104 S[first_layer_temperature] ; set extruder temp\nG1 Z10 F720 ; move away in Z\nG0 X30 Y-8 F6000 ; move next to the sheet\n; wait for extruder temp\nM109 T0 S{first_layer_temperature[0]}\n;\n; purge\n;\nG92 E0 ; reset extruder position\nG0 X{(0 == 0 ? 30 : (0 == 1 ? 150 : (0 == 2 ? 210 : 330)))} Y{(0 < 4 ? -8 : -5.5)} ; move close to the sheet's edge\nG1 E{(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E10 X40 Z0.2 F500 ; purge\nG0 X70 E9 F800 ; purge\nG0 X{70 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{70 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG92 E0 ; reset extruder position\n +start_gcode = M17 ; enable steppers\nM862.3 P "XL" ; printer model check\nM115 U6.0.0+14794\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n; set print area\nM555 X{first_layer_print_min[0]} Y{first_layer_print_min[1]} W{(first_layer_print_max[0]) - (first_layer_print_min[0])} H{(first_layer_print_max[1]) - (first_layer_print_min[1])}\n; inform about nozzle diameter\nM862.1 P[nozzle_diameter]\n; set & wait for bed and extruder temp for MBL\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 T0 S{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == "PC" or filament_type[0] == "PA") ? (first_layer_temperature[0] - 25) : (filament_type[0] == "FLEX") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; set extruder temp for bed leveling\nM109 T0 R{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == "PC" or filament_type[0] == "PA") ? (first_layer_temperature[0] - 25) : (filament_type[0] == "FLEX") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n; home carriage, pick tool, home all\nG28 XY\nM84 E ; turn off E motor\nG28 Z\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nG29 G ; absorb heat\n; move to the nozzle cleanup area\nG1 X{(min(((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))), first_layer_print_min[0])) + 32} Y{(min((first_layer_print_min[1] - 7), first_layer_print_min[1]))} Z{5} F4800\nM302 S160 ; lower cold extrusion limit to 160C\nG1 E{-(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; retraction for nozzle cleanup\n; nozzle cleanup\nM84 E ; turn off E motor\nG29 P9 X{((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)))} Y{(first_layer_print_min[1] - 7)} W{32} H{7}\nG0 Z10 F480 ; move away in Z\n{if first_layer_bed_temperature[0] > 60}\nG0 Z70 F480 ; move away (a bit more) in Z\nG0 X30 Y{print_bed_min[1]} F6000 ; move away in X/Y for higher bed temperatures\n{endif}\nM106 S100 ; cool off the nozzle\nM107 ; stop cooling off the nozzle - turn off the fan\n; MBL\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X30 Y0 W50 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\nM104 S[first_layer_temperature] ; set extruder temp\nG1 Z10 F720 ; move away in Z\nG0 X30 Y-8 F6000 ; move next to the sheet\n; wait for extruder temp\nM109 T0 S{first_layer_temperature[0]}\n;\n; purge\n;\nG92 E0 ; reset extruder position\nG0 X{(0 == 0 ? 30 : (0 == 1 ? 150 : (0 == 2 ? 210 : 330)))} Y{(0 < 4 ? -8 : -5.5)} ; move close to the sheet's edge\nG1 E{(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E10 X40 Z0.2 F500 ; purge\nG0 X70 E9 F800 ; purge\nG0 X{70 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{70 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG92 E0 ; reset extruder position\n default_print_profile = 0.20mm QUALITY @XL 0.4 default_filament_profile = "Prusament PLA @PG" thumbnails = 16x16/QOI, 313x173/QOI, 440x240/QOI, 480x240/QOI, 640x480/PNG @@ -21366,14 +20641,19 @@ retract_length_toolchange = 0 [printer:*commonXLIS*] inherits = *commonXL* printer_model = XLIS -machine_max_acceleration_extruding = 4000 -machine_max_acceleration_travel = 5000 -machine_max_acceleration_x = 7000 -machine_max_acceleration_y = 7000 -machine_max_feedrate_x = 400 -machine_max_feedrate_y = 400 +silent_mode = 1 +machine_max_acceleration_e = 2500,2500 +machine_max_acceleration_extruding = 4000,2500 +machine_max_acceleration_retracting = 1200,1200 +machine_max_acceleration_travel = 5000,2500 +machine_max_acceleration_x = 7000,2500 +machine_max_acceleration_y = 7000,2500 +machine_max_acceleration_z = 200,200 +machine_max_feedrate_e = 100,100 +machine_max_feedrate_x = 400,140 +machine_max_feedrate_y = 400,140 printer_notes = Do not remove the keywords below.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_XLIS\nPG\nINPUT_SHAPER -start_gcode = M17 ; enable steppers\nM862.3 P "XL" ; printer model check\nM862.5 P2 ; g-code level check\nM862.6 P"Input shaper" ; FW feature check\nM115 U5.1.2+13478\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n; set print area\nM555 X{first_layer_print_min[0]} Y{first_layer_print_min[1]} W{(first_layer_print_max[0]) - (first_layer_print_min[0])} H{(first_layer_print_max[1]) - (first_layer_print_min[1])}\n; inform about nozzle diameter\nM862.1 P[nozzle_diameter]\n; set & wait for bed and extruder temp for MBL\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 T0 S{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == "PC" or filament_type[0] == "PA") ? (first_layer_temperature[0] - 25) : (filament_type[0] == "FLEX") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; set extruder temp for bed leveling\nM109 T0 R{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == "PC" or filament_type[0] == "PA") ? (first_layer_temperature[0] - 25) : (filament_type[0] == "FLEX") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n; home carriage, pick tool, home all\nG28 XY\nM84 E ; turn off E motor\nG28 Z\n\nM104 T{initial_tool} S{if is_nil(idle_temperature[initial_tool])}70{else}{idle_temperature[initial_tool]}{endif}\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nG29 G ; absorb heat\n\nM109 T0 R{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == "PC" or filament_type[0] == "PA") ? (first_layer_temperature[0] - 25) : (filament_type[0] == "FLEX") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} \n; wait for temp\n\n; move to the nozzle cleanup area\nG1 X{(min(((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))), first_layer_print_min[0])) + 32} Y{(min((first_layer_print_min[1] - 7), first_layer_print_min[1]))} Z{5} F4800\nM302 S160 ; lower cold extrusion limit to 160C\nG1 E{-(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; retraction for nozzle cleanup\n; nozzle cleanup\nM84 E ; turn off E motor\nG29 P9 X{((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)))} Y{(first_layer_print_min[1] - 7)} W{32} H{7}\nG0 Z10 F480 ; move away in Z\n{if first_layer_bed_temperature[0] > 60}\nG0 Z70 F480 ; move away (a bit more) in Z\nG0 X30 Y{print_bed_min[1]} F6000 ; move away in X/Y for higher bed temperatures\n{endif}\nM106 S100 ; cool off the nozzle\nM107 ; stop cooling off the nozzle - turn off the fan\n; MBL\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X30 Y0 W50 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\nM104 S[first_layer_temperature] ; set extruder temp\nG1 Z10 F720 ; move away in Z\nG0 X30 Y-8 F6000 ; move next to the sheet\n; wait for extruder temp\nM109 T0 S{first_layer_temperature[0]}\n;\n; purge\n;\nG92 E0 ; reset extruder position\nG0 X{(0 == 0 ? 30 : (0 == 1 ? 150 : (0 == 2 ? 210 : 330)))} Y{(0 < 4 ? -8 : -5.5)} ; move close to the sheet's edge\nG1 E{(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E10 X40 Z0.2 F500 ; purge\nG0 X70 E9 F800 ; purge\nG0 X{70 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{70 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG92 E0 ; reset extruder position\n\nM593 X T2 F38.4\nM593 Y T2 F39.2\n +start_gcode = M17 ; enable steppers\nM862.3 P "XL" ; printer model check\nM862.5 P2 ; g-code level check\nM862.6 P"Input shaper" ; FW feature check\nM115 U6.0.0+14794\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n; set print area\nM555 X{first_layer_print_min[0]} Y{first_layer_print_min[1]} W{(first_layer_print_max[0]) - (first_layer_print_min[0])} H{(first_layer_print_max[1]) - (first_layer_print_min[1])}\n; inform about nozzle diameter\nM862.1 P[nozzle_diameter]\n; set & wait for bed and extruder temp for MBL\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 T0 S{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == "PC" or filament_type[0] == "PA") ? (first_layer_temperature[0] - 25) : (filament_type[0] == "FLEX") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; set extruder temp for bed leveling\nM109 T0 R{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == "PC" or filament_type[0] == "PA") ? (first_layer_temperature[0] - 25) : (filament_type[0] == "FLEX") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n; home carriage, pick tool, home all\nG28 XY\nM84 E ; turn off E motor\nG28 Z\n\nM104 T{initial_tool} S{if is_nil(idle_temperature[initial_tool])}70{else}{idle_temperature[initial_tool]}{endif}\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nG29 G ; absorb heat\n\nM109 T0 R{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == "PC" or filament_type[0] == "PA") ? (first_layer_temperature[0] - 25) : (filament_type[0] == "FLEX") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} \n; wait for temp\n\n; move to the nozzle cleanup area\nG1 X{(min(((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))), first_layer_print_min[0])) + 32} Y{(min((first_layer_print_min[1] - 7), first_layer_print_min[1]))} Z{5} F4800\nM302 S160 ; lower cold extrusion limit to 160C\nG1 E{-(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; retraction for nozzle cleanup\n; nozzle cleanup\nM84 E ; turn off E motor\nG29 P9 X{((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)))} Y{(first_layer_print_min[1] - 7)} W{32} H{7}\nG0 Z10 F480 ; move away in Z\n{if first_layer_bed_temperature[0] > 60}\nG0 Z70 F480 ; move away (a bit more) in Z\nG0 X30 Y{print_bed_min[1]} F6000 ; move away in X/Y for higher bed temperatures\n{endif}\nM106 S100 ; cool off the nozzle\nM107 ; stop cooling off the nozzle - turn off the fan\n; MBL\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X30 Y0 W50 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\nM104 S[first_layer_temperature] ; set extruder temp\nG1 Z10 F720 ; move away in Z\nG0 X30 Y-8 F6000 ; move next to the sheet\n; wait for extruder temp\nM109 T0 S{first_layer_temperature[0]}\n;\n; purge\n;\nG92 E0 ; reset extruder position\nG0 X{(0 == 0 ? 30 : (0 == 1 ? 150 : (0 == 2 ? 210 : 330)))} Y{(0 < 4 ? -8 : -5.5)} ; move close to the sheet's edge\nG1 E{(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E10 X40 Z0.2 F500 ; purge\nG0 X70 E9 F800 ; purge\nG0 X{70 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{70 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG92 E0 ; reset extruder position\n\nM593 X T2 F38.4\nM593 Y T2 F39.2\n default_print_profile = 0.20mm SPEED @XLIS 0.4 default_filament_profile = "Prusament PLA @XLIS" @@ -21396,7 +20676,7 @@ retract_restart_extra = 0,0,0,0,0 retract_restart_extra_toolchange = 0,0,0,0,0 wipe = 1,1,1,1,1 extruder_colour = #FF8000;#DB5182;#3EC0FF;#FF4F4F;#FBEB7D -start_gcode = M17 ; enable steppers\nM862.3 P "XL" ; printer model check\nM115 U5.1.2+13478\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n; set print area\nM555 X{first_layer_print_min[0]} Y{first_layer_print_min[1]} W{(first_layer_print_max[0]) - (first_layer_print_min[0])} H{(first_layer_print_max[1]) - (first_layer_print_min[1])}\n; inform about nozzle diameter\n{if (is_extruder_used[0])}M862.1 T0 P{nozzle_diameter[0]}{endif}\n{if (is_extruder_used[1])}M862.1 T1 P{nozzle_diameter[1]}{endif}\n{if (is_extruder_used[2])}M862.1 T2 P{nozzle_diameter[2]}{endif}\n{if (is_extruder_used[3])}M862.1 T3 P{nozzle_diameter[3]}{endif}\n{if (is_extruder_used[4])}M862.1 T4 P{nozzle_diameter[4]}{endif}\n\n; turn off unused heaters\n{if ! is_extruder_used[0]} M104 T0 S0 {endif}\n{if ! is_extruder_used[1]} M104 T1 S0 {endif}\n{if num_extruders > 2 and ! is_extruder_used[2]} M104 T2 S0 {endif}\n{if num_extruders > 3 and ! is_extruder_used[3]} M104 T3 S0 {endif}\n{if num_extruders > 4 and ! is_extruder_used[4]} M104 T4 S0 {endif}\n\nM217 Z{max(zhop, 2.0)} ; set toolchange z hop to 2mm, or zhop variable from slicer if higher\n; set bed and extruder temp for MBL\nM140 S[first_layer_bed_temperature] ; set bed temp\nG0 Z5 ; add Z clearance\nM109 T{initial_tool} S{((filament_notes[initial_tool]=~/.*HT_MBL10.*/) ? (first_layer_temperature[initial_tool] - 10) : (filament_type[initial_tool] == "PC" or filament_type[initial_tool] == "PA") ? (first_layer_temperature[initial_tool] - 25) : (filament_type[initial_tool] == "FLEX") ? 210 : (filament_type[initial_tool]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n\n; Home XY\nG28 XY\n; try picking tools used in print\nG1 F{travel_speed * 60}\n{if (is_extruder_used[0]) and (initial_tool != 0)}T0 S1 L0 D0{endif}\n{if (is_extruder_used[1]) and (initial_tool != 1)}T1 S1 L0 D0{endif}\n{if (is_extruder_used[2]) and (initial_tool != 2)}T2 S1 L0 D0{endif}\n{if (is_extruder_used[3]) and (initial_tool != 3)}T3 S1 L0 D0{endif}\n{if (is_extruder_used[4]) and (initial_tool != 4)}T4 S1 L0 D0{endif}\n; select tool that will be used to home & MBL\nT{initial_tool} S1 L0 D0\n; home Z with MBL tool\nM84 E ; turn off E motor\nG28 Z\nG0 Z5 ; add Z clearance\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nG29 G ; absorb heat\n; move to the nozzle cleanup area\nG1 X{(min(((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))), first_layer_print_min[0])) + 32} Y{(min((first_layer_print_min[1] - 7), first_layer_print_min[1]))} Z{5} F{(travel_speed * 60)}\nM302 S160 ; lower cold extrusion limit to 160C\nG1 E{-(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; retraction for nozzle cleanup\n; nozzle cleanup\nM84 E ; turn off E motor\nG29 P9 X{((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)))} Y{(first_layer_print_min[1] - 7)} W{32} H{7}\nG0 Z5 F480 ; move away in Z\nM107 ; turn off the fan\n; MBL\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X30 Y0 W{(((is_extruder_used[4]) or ((is_extruder_used[3]) or (is_extruder_used[2]))) ? "300" : ((is_extruder_used[1]) ? "130" : "50"))} H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\nG1 Z10 F720 ; move away in Z\nG1 F{travel_speed * 60}\nP0 S1 L1 D0; park the tool\n; set extruder temp\n{if first_layer_temperature[0] > 0 and (is_extruder_used[0])}M104 T0 S{first_layer_temperature[0]}{endif}\n{if first_layer_temperature[1] > 0 and (is_extruder_used[1])}M104 T1 S{first_layer_temperature[1]}{endif}\n{if first_layer_temperature[2] > 0 and (is_extruder_used[2])}M104 T2 S{first_layer_temperature[2]}{endif}\n{if first_layer_temperature[3] > 0 and (is_extruder_used[3])}M104 T3 S{first_layer_temperature[3]}{endif}\n{if first_layer_temperature[4] > 0 and (is_extruder_used[4])}M104 T4 S{first_layer_temperature[4]}{endif}\n{if (is_extruder_used[0]) and initial_tool != 0}\n;\n; purge first tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T0 S{first_layer_temperature[0]}\nT0 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(0 == 0 ? 30 : (0 == 1 ? 150 : (0 == 2 ? 210 : 330)))} Y{(0 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[0])}10{else}30{endif} X40 Z0.2 F{if is_nil(filament_multitool_ramming[0])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X70 E9 F800 ; continue purging and wipe the nozzle\nG0 X{70 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{70 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[0]} F2400 ; retract\n{e_retracted[0] = 1.5 * retract_length[0]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(is_nil(idle_temperature[0]) ? (first_layer_temperature[0] + standby_temperature_delta) : (idle_temperature[0]))} T0\n{endif}\n{if (is_extruder_used[1]) and initial_tool != 1}\n;\n; purge second tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T1 S{first_layer_temperature[1]}\nT1 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(1 == 0 ? 30 : (1 == 1 ? 150 : (1 == 2 ? 210 : 330)))} Y{(1 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[1])}10{else}30{endif} X140 Z0.2 F{if is_nil(filament_multitool_ramming[1])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X110 E9 F800 ; continue purging and wipe the nozzle\nG0 X{110 - 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{110 - 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[1]} F2400 ; retract\n{e_retracted[1] = 1.5 * retract_length[1]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(is_nil(idle_temperature[1]) ? (first_layer_temperature[1] + standby_temperature_delta) : (idle_temperature[1]))} T1\n{endif}\n{if (is_extruder_used[2]) and initial_tool != 2}\n;\n; purge third tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T2 S{first_layer_temperature[2]}\nT2 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(2 == 0 ? 30 : (2 == 1 ? 150 : (2 == 2 ? 210 : 330)))} Y{(2 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[2])}10{else}30{endif} X220 Z0.2 F{if is_nil(filament_multitool_ramming[2])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X250 E9 F800 ; continue purging and wipe the nozzle\nG0 X{250 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{250 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[2]} F2400 ; retract\n{e_retracted[2] = 1.5 * retract_length[2]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(is_nil(idle_temperature[2]) ? (first_layer_temperature[2] + standby_temperature_delta) : (idle_temperature[2]))} T2\n{endif}\n{if (is_extruder_used[3]) and initial_tool != 3}\n;\n; purge fourth tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T3 S{first_layer_temperature[3]}\nT3 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(3 == 0 ? 30 : (3 == 1 ? 150 : (3 == 2 ? 210 : 330)))} Y{(3 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[3])}10{else}30{endif} X320 Z0.2 F{if is_nil(filament_multitool_ramming[3])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X290 E9 F800 ; continue purging and wipe the nozzle\nG0 X{290 - 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{290 - 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[3]} F2400 ; retract\n{e_retracted[3] = 1.5 * retract_length[3]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(is_nil(idle_temperature[3]) ? (first_layer_temperature[3] + standby_temperature_delta) : (idle_temperature[3]))} T3\n{endif}\n{if (is_extruder_used[4]) and initial_tool != 4}\n;\n; purge fifth tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T4 S{first_layer_temperature[4]}\nT4 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(4 == 0 ? 30 : (4 == 1 ? 150 : (4 == 2 ? 210 : 330)))} Y{(4 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[4])}10{else}30{endif} X320 Z0.2 F{if is_nil(filament_multitool_ramming[4])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X290 E9 F800 ; continue purging and wipe the nozzle\nG0 X{290 - 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{290 - 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[4]} F2400 ; retract\n{e_retracted[4] = 1.5 * retract_length[4]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(is_nil(idle_temperature[4]) ? (first_layer_temperature[4] + standby_temperature_delta) : (idle_temperature[4]))} T4\n{endif}\n;\n; purge initial tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T{initial_tool} S{first_layer_temperature[initial_tool]}\nT{initial_tool} S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330)))} Y{(initial_tool < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[initial_tool])}10{else}30{endif} X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330))) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 10)} Z0.2 F{if is_nil(filament_multitool_ramming[initial_tool])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330))) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 40)} E9 F800 ; continue purging and wipe the nozzle\nG0 X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330))) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 40) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 3)} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330))) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 40) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 3 * 2)} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[initial_tool]} F2400 ; retract\n{e_retracted[initial_tool] = 1.5 * retract_length[initial_tool]}\nG92 E0 ; reset extruder position +start_gcode = M17 ; enable steppers\nM862.3 P "XL" ; printer model check\nM115 U6.0.0+14794\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n; set print area\nM555 X{first_layer_print_min[0]} Y{first_layer_print_min[1]} W{(first_layer_print_max[0]) - (first_layer_print_min[0])} H{(first_layer_print_max[1]) - (first_layer_print_min[1])}\n; inform about nozzle diameter\n{if (is_extruder_used[0])}M862.1 T0 P{nozzle_diameter[0]}{endif}\n{if (is_extruder_used[1])}M862.1 T1 P{nozzle_diameter[1]}{endif}\n{if (is_extruder_used[2])}M862.1 T2 P{nozzle_diameter[2]}{endif}\n{if (is_extruder_used[3])}M862.1 T3 P{nozzle_diameter[3]}{endif}\n{if (is_extruder_used[4])}M862.1 T4 P{nozzle_diameter[4]}{endif}\n\n; turn off unused heaters\n{if ! is_extruder_used[0]} M104 T0 S0 {endif}\n{if ! is_extruder_used[1]} M104 T1 S0 {endif}\n{if num_extruders > 2 and ! is_extruder_used[2]} M104 T2 S0 {endif}\n{if num_extruders > 3 and ! is_extruder_used[3]} M104 T3 S0 {endif}\n{if num_extruders > 4 and ! is_extruder_used[4]} M104 T4 S0 {endif}\n\nM217 Z{max(zhop, 2.0)} ; set toolchange z hop to 2mm, or zhop variable from slicer if higher\n; set bed and extruder temp for MBL\nM140 S[first_layer_bed_temperature] ; set bed temp\nG0 Z5 ; add Z clearance\nM109 T{initial_tool} S{((filament_notes[initial_tool]=~/.*HT_MBL10.*/) ? (first_layer_temperature[initial_tool] - 10) : (filament_type[initial_tool] == "PC" or filament_type[initial_tool] == "PA") ? (first_layer_temperature[initial_tool] - 25) : (filament_type[initial_tool] == "FLEX") ? 210 : (filament_type[initial_tool]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n\n; Home XY\nG28 XY\n; try picking tools used in print\nG1 F{travel_speed * 60}\n{if (is_extruder_used[0]) and (initial_tool != 0)}T0 S1 L0 D0{endif}\n{if (is_extruder_used[1]) and (initial_tool != 1)}T1 S1 L0 D0{endif}\n{if (is_extruder_used[2]) and (initial_tool != 2)}T2 S1 L0 D0{endif}\n{if (is_extruder_used[3]) and (initial_tool != 3)}T3 S1 L0 D0{endif}\n{if (is_extruder_used[4]) and (initial_tool != 4)}T4 S1 L0 D0{endif}\n; select tool that will be used to home & MBL\nT{initial_tool} S1 L0 D0\n; home Z with MBL tool\nM84 E ; turn off E motor\nG28 Z\nG0 Z5 ; add Z clearance\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nG29 G ; absorb heat\n; move to the nozzle cleanup area\nG1 X{(min(((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))), first_layer_print_min[0])) + 32} Y{(min((first_layer_print_min[1] - 7), first_layer_print_min[1]))} Z{5} F{(travel_speed * 60)}\nM302 S160 ; lower cold extrusion limit to 160C\nG1 E{-(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; retraction for nozzle cleanup\n; nozzle cleanup\nM84 E ; turn off E motor\nG29 P9 X{((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)))} Y{(first_layer_print_min[1] - 7)} W{32} H{7}\nG0 Z5 F480 ; move away in Z\nM107 ; turn off the fan\n; MBL\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X30 Y0 W{(((is_extruder_used[4]) or ((is_extruder_used[3]) or (is_extruder_used[2]))) ? "300" : ((is_extruder_used[1]) ? "130" : "50"))} H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\nG1 Z10 F720 ; move away in Z\nG1 F{travel_speed * 60}\nP0 S1 L1 D0; park the tool\n; set extruder temp\n{if first_layer_temperature[0] > 0 and (is_extruder_used[0])}M104 T0 S{first_layer_temperature[0]}{endif}\n{if first_layer_temperature[1] > 0 and (is_extruder_used[1])}M104 T1 S{first_layer_temperature[1]}{endif}\n{if first_layer_temperature[2] > 0 and (is_extruder_used[2])}M104 T2 S{first_layer_temperature[2]}{endif}\n{if first_layer_temperature[3] > 0 and (is_extruder_used[3])}M104 T3 S{first_layer_temperature[3]}{endif}\n{if first_layer_temperature[4] > 0 and (is_extruder_used[4])}M104 T4 S{first_layer_temperature[4]}{endif}\n{if (is_extruder_used[0]) and initial_tool != 0}\n;\n; purge first tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T0 S{first_layer_temperature[0]}\nT0 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(0 == 0 ? 30 : (0 == 1 ? 150 : (0 == 2 ? 210 : 330)))} Y{(0 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[0])}10{else}30{endif} X40 Z0.2 F{if is_nil(filament_multitool_ramming[0])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X70 E9 F800 ; continue purging and wipe the nozzle\nG0 X{70 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{70 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[0]} F2400 ; retract\n{e_retracted[0] = 1.5 * retract_length[0]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(is_nil(idle_temperature[0]) ? (first_layer_temperature[0] + standby_temperature_delta) : (idle_temperature[0]))} T0\n{endif}\n{if (is_extruder_used[1]) and initial_tool != 1}\n;\n; purge second tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T1 S{first_layer_temperature[1]}\nT1 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(1 == 0 ? 30 : (1 == 1 ? 150 : (1 == 2 ? 210 : 330)))} Y{(1 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[1])}10{else}30{endif} X140 Z0.2 F{if is_nil(filament_multitool_ramming[1])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X110 E9 F800 ; continue purging and wipe the nozzle\nG0 X{110 - 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{110 - 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[1]} F2400 ; retract\n{e_retracted[1] = 1.5 * retract_length[1]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(is_nil(idle_temperature[1]) ? (first_layer_temperature[1] + standby_temperature_delta) : (idle_temperature[1]))} T1\n{endif}\n{if (is_extruder_used[2]) and initial_tool != 2}\n;\n; purge third tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T2 S{first_layer_temperature[2]}\nT2 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(2 == 0 ? 30 : (2 == 1 ? 150 : (2 == 2 ? 210 : 330)))} Y{(2 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[2])}10{else}30{endif} X220 Z0.2 F{if is_nil(filament_multitool_ramming[2])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X250 E9 F800 ; continue purging and wipe the nozzle\nG0 X{250 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{250 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[2]} F2400 ; retract\n{e_retracted[2] = 1.5 * retract_length[2]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(is_nil(idle_temperature[2]) ? (first_layer_temperature[2] + standby_temperature_delta) : (idle_temperature[2]))} T2\n{endif}\n{if (is_extruder_used[3]) and initial_tool != 3}\n;\n; purge fourth tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T3 S{first_layer_temperature[3]}\nT3 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(3 == 0 ? 30 : (3 == 1 ? 150 : (3 == 2 ? 210 : 330)))} Y{(3 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[3])}10{else}30{endif} X320 Z0.2 F{if is_nil(filament_multitool_ramming[3])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X290 E9 F800 ; continue purging and wipe the nozzle\nG0 X{290 - 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{290 - 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[3]} F2400 ; retract\n{e_retracted[3] = 1.5 * retract_length[3]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(is_nil(idle_temperature[3]) ? (first_layer_temperature[3] + standby_temperature_delta) : (idle_temperature[3]))} T3\n{endif}\n{if (is_extruder_used[4]) and initial_tool != 4}\n;\n; purge fifth tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T4 S{first_layer_temperature[4]}\nT4 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(4 == 0 ? 30 : (4 == 1 ? 150 : (4 == 2 ? 210 : 330)))} Y{(4 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[4])}10{else}30{endif} X320 Z0.2 F{if is_nil(filament_multitool_ramming[4])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X290 E9 F800 ; continue purging and wipe the nozzle\nG0 X{290 - 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{290 - 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[4]} F2400 ; retract\n{e_retracted[4] = 1.5 * retract_length[4]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(is_nil(idle_temperature[4]) ? (first_layer_temperature[4] + standby_temperature_delta) : (idle_temperature[4]))} T4\n{endif}\n;\n; purge initial tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T{initial_tool} S{first_layer_temperature[initial_tool]}\nT{initial_tool} S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330)))} Y{(initial_tool < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[initial_tool])}10{else}30{endif} X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330))) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 10)} Z0.2 F{if is_nil(filament_multitool_ramming[initial_tool])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330))) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 40)} E9 F800 ; continue purging and wipe the nozzle\nG0 X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330))) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 40) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 3)} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330))) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 40) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 3 * 2)} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[initial_tool]} F2400 ; retract\n{e_retracted[initial_tool] = 1.5 * retract_length[initial_tool]}\nG92 E0 ; reset extruder position end_gcode = G4 ; wait\n\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+5, max_print_height)}{endif} ; Move bed down\n\nP0 S1 ; park tool\n\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+97, max_print_height)} F300{endif} ; Move bed further down\n\n; turn off extruder heaters\n{if is_extruder_used[0]} M104 T0 S0 {endif}\n{if is_extruder_used[1]} M104 T1 S0 {endif}\n{if is_extruder_used[2]} M104 T2 S0 {endif}\n{if is_extruder_used[3]} M104 T3 S0 {endif}\n{if is_extruder_used[4]} M104 T4 S0 {endif}\n\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM221 S100 ; reset flow percentage\nM84 ; disable motors\nM77 ; stop print timer\n; max_layer_z = [max_layer_z] toolchange_gcode = ; Change Tool[previous_extruder] -> Tool[next_extruder] (layer [layer_num])\n{\nlocal max_speed_toolchange = 350.0;\nlocal wait_for_extruder_temp = true;\nposition[2] = position[2] + 2.0;\n\nlocal speed_toolchange = max_speed_toolchange;\nif travel_speed < max_speed_toolchange then\n speed_toolchange = travel_speed;\nendif\n"G1 F" + (speed_toolchange * 60) + "\n";\nif wait_for_extruder_temp and not((layer_num < 0) and (next_extruder == initial_tool)) then\n "P0 S1 L2 D0\n";\n "; " + layer_num + "\n";\n if layer_num == 0 then\n "M109 S" + first_layer_temperature[next_extruder] + " T" + next_extruder + "\n";\n else\n "M109 S" + temperature[next_extruder] + " T" + next_extruder + "\n";\n endif\nendif\n"T" + next_extruder + " S1 L0 D0\n";\n} color_change_gcode = M600 @@ -21406,14 +20686,18 @@ travel_slope = 1,1,1,1,1 [printer:*XLMULTIIS*] inherits = *XLMULTI* -machine_max_acceleration_extruding = 4000 -machine_max_acceleration_travel = 5000 -machine_max_acceleration_x = 7000 -machine_max_acceleration_y = 7000 -machine_max_feedrate_x = 400 -machine_max_feedrate_y = 400 +machine_max_acceleration_e = 2500,2500 +machine_max_acceleration_extruding = 4000,2500 +machine_max_acceleration_retracting = 1200,1200 +machine_max_acceleration_travel = 5000,2500 +machine_max_acceleration_x = 7000,2500 +machine_max_acceleration_y = 7000,2500 +machine_max_acceleration_z = 200,200 +machine_max_feedrate_e = 100,100 +machine_max_feedrate_x = 400,140 +machine_max_feedrate_y = 400,140 printer_notes = Do not remove the keywords below.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_XLIS\nPG\nINPUT_SHAPER -start_gcode = M17 ; enable steppers\nM862.3 P "XL" ; printer model check\nM862.5 P2 ; g-code level check\nM862.6 P"Input shaper" ; FW feature check\nM115 U5.1.2+13478\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n; set print area\nM555 X{first_layer_print_min[0]} Y{first_layer_print_min[1]} W{(first_layer_print_max[0]) - (first_layer_print_min[0])} H{(first_layer_print_max[1]) - (first_layer_print_min[1])}\n; inform about nozzle diameter\n{if (is_extruder_used[0])}M862.1 T0 P{nozzle_diameter[0]}{endif}\n{if (is_extruder_used[1])}M862.1 T1 P{nozzle_diameter[1]}{endif}\n{if (is_extruder_used[2])}M862.1 T2 P{nozzle_diameter[2]}{endif}\n{if (is_extruder_used[3])}M862.1 T3 P{nozzle_diameter[3]}{endif}\n{if (is_extruder_used[4])}M862.1 T4 P{nozzle_diameter[4]}{endif}\n\n; turn off unused heaters\n{if ! is_extruder_used[0]} M104 T0 S0 {endif}\n{if ! is_extruder_used[1]} M104 T1 S0 {endif}\n{if num_extruders > 2 and ! is_extruder_used[2]} M104 T2 S0 {endif}\n{if num_extruders > 3 and ! is_extruder_used[3]} M104 T3 S0 {endif}\n{if num_extruders > 4 and ! is_extruder_used[4]} M104 T4 S0 {endif}\n\nM217 Z{max(zhop, 2.0)} ; set toolchange z hop to 2mm, or zhop variable from slicer if higher\n; set bed and extruder temp for MBL\nM140 S[first_layer_bed_temperature] ; set bed temp\nG0 Z5 ; add Z clearance\nM109 T{initial_tool} S{((filament_notes[initial_tool]=~/.*HT_MBL10.*/) ? (first_layer_temperature[initial_tool] - 10) : (filament_type[initial_tool] == "PC" or filament_type[initial_tool] == "PA") ? (first_layer_temperature[initial_tool] - 25) : (filament_type[initial_tool] == "FLEX") ? 210 : (filament_type[initial_tool]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n\n; Home XY\nG28 XY\n; try picking tools used in print\nG1 F{travel_speed * 60}\n{if (is_extruder_used[0]) and (initial_tool != 0)}T0 S1 L0 D0{endif}\n{if (is_extruder_used[1]) and (initial_tool != 1)}T1 S1 L0 D0{endif}\n{if (is_extruder_used[2]) and (initial_tool != 2)}T2 S1 L0 D0{endif}\n{if (is_extruder_used[3]) and (initial_tool != 3)}T3 S1 L0 D0{endif}\n{if (is_extruder_used[4]) and (initial_tool != 4)}T4 S1 L0 D0{endif}\n; select tool that will be used to home & MBL\nT{initial_tool} S1 L0 D0\n; home Z with MBL tool\nM84 E ; turn off E motor\nG28 Z\nG0 Z5 ; add Z clearance\n\nM104 T{initial_tool} S{if is_nil(idle_temperature[initial_tool])}70{else}{idle_temperature[initial_tool]}{endif} ; set idle temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nG29 G ; absorb heat\n\nM109 T{initial_tool} S{((filament_notes[initial_tool]=~/.*HT_MBL10.*/) ? (first_layer_temperature[initial_tool] - 10) : (filament_type[initial_tool] == "PC" or filament_type[initial_tool] == "PA") ? (first_layer_temperature[initial_tool] - 25) : (filament_type[initial_tool] == "FLEX") ? 210 : (filament_type[initial_tool]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n\n; move to the nozzle cleanup area\nG1 X{(min(((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))), first_layer_print_min[0])) + 32} Y{(min((first_layer_print_min[1] - 7), first_layer_print_min[1]))} Z{5} F{(travel_speed * 60)}\nM302 S160 ; lower cold extrusion limit to 160C\nG1 E{-(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; retraction for nozzle cleanup\n; nozzle cleanup\nM84 E ; turn off E motor\nG29 P9 X{((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)))} Y{(first_layer_print_min[1] - 7)} W{32} H{7}\nG0 Z5 F480 ; move away in Z\nM107 ; turn off the fan\n; MBL\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X30 Y0 W{(((is_extruder_used[4]) or ((is_extruder_used[3]) or (is_extruder_used[2]))) ? "300" : ((is_extruder_used[1]) ? "130" : "50"))} H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\nG1 Z10 F720 ; move away in Z\nG1 F{travel_speed * 60}\nP0 S1 L1 D0; park the tool\n; set extruder temp\n{if first_layer_temperature[0] > 0 and (is_extruder_used[0])}M104 T0 S{first_layer_temperature[0]}{endif}\n{if first_layer_temperature[1] > 0 and (is_extruder_used[1])}M104 T1 S{first_layer_temperature[1]}{endif}\n{if first_layer_temperature[2] > 0 and (is_extruder_used[2])}M104 T2 S{first_layer_temperature[2]}{endif}\n{if first_layer_temperature[3] > 0 and (is_extruder_used[3])}M104 T3 S{first_layer_temperature[3]}{endif}\n{if first_layer_temperature[4] > 0 and (is_extruder_used[4])}M104 T4 S{first_layer_temperature[4]}{endif}\n{if (is_extruder_used[0]) and initial_tool != 0}\n;\n; purge first tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T0 S{first_layer_temperature[0]}\nT0 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(0 == 0 ? 30 : (0 == 1 ? 150 : (0 == 2 ? 210 : 330)))} Y{(0 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[0])}10{else}30{endif} X40 Z0.2 F{if is_nil(filament_multitool_ramming[0])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X70 E9 F800 ; continue purging and wipe the nozzle\nG0 X{70 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{70 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[0]} F2400 ; retract\n{e_retracted[0] = 1.5 * retract_length[0]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(is_nil(idle_temperature[0]) ? (first_layer_temperature[0] + standby_temperature_delta) : (idle_temperature[0]))} T0\n{endif}\n{if (is_extruder_used[1]) and initial_tool != 1}\n;\n; purge second tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T1 S{first_layer_temperature[1]}\nT1 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(1 == 0 ? 30 : (1 == 1 ? 150 : (1 == 2 ? 210 : 330)))} Y{(1 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[1])}10{else}30{endif} X140 Z0.2 F{if is_nil(filament_multitool_ramming[1])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X110 E9 F800 ; continue purging and wipe the nozzle\nG0 X{110 - 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{110 - 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[1]} F2400 ; retract\n{e_retracted[1] = 1.5 * retract_length[1]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(is_nil(idle_temperature[1]) ? (first_layer_temperature[1] + standby_temperature_delta) : (idle_temperature[1]))} T1\n{endif}\n{if (is_extruder_used[2]) and initial_tool != 2}\n;\n; purge third tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T2 S{first_layer_temperature[2]}\nT2 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(2 == 0 ? 30 : (2 == 1 ? 150 : (2 == 2 ? 210 : 330)))} Y{(2 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[2])}10{else}30{endif} X220 Z0.2 F{if is_nil(filament_multitool_ramming[2])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X250 E9 F800 ; continue purging and wipe the nozzle\nG0 X{250 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{250 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[2]} F2400 ; retract\n{e_retracted[2] = 1.5 * retract_length[2]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(is_nil(idle_temperature[2]) ? (first_layer_temperature[2] + standby_temperature_delta) : (idle_temperature[2]))} T2\n{endif}\n{if (is_extruder_used[3]) and initial_tool != 3}\n;\n; purge fourth tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T3 S{first_layer_temperature[3]}\nT3 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(3 == 0 ? 30 : (3 == 1 ? 150 : (3 == 2 ? 210 : 330)))} Y{(3 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[3])}10{else}30{endif} X320 Z0.2 F{if is_nil(filament_multitool_ramming[3])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X290 E9 F800 ; continue purging and wipe the nozzle\nG0 X{290 - 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{290 - 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[3]} F2400 ; retract\n{e_retracted[3] = 1.5 * retract_length[3]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(is_nil(idle_temperature[3]) ? (first_layer_temperature[3] + standby_temperature_delta) : (idle_temperature[3]))} T3\n{endif}\n{if (is_extruder_used[4]) and initial_tool != 4}\n;\n; purge fifth tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T4 S{first_layer_temperature[4]}\nT4 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(4 == 0 ? 30 : (4 == 1 ? 150 : (4 == 2 ? 210 : 330)))} Y{(4 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[4])}10{else}30{endif} X320 Z0.2 F{if is_nil(filament_multitool_ramming[4])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X290 E9 F800 ; continue purging and wipe the nozzle\nG0 X{290 - 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{290 - 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[4]} F2400 ; retract\n{e_retracted[4] = 1.5 * retract_length[4]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(is_nil(idle_temperature[4]) ? (first_layer_temperature[4] + standby_temperature_delta) : (idle_temperature[4]))} T4\n{endif}\n;\n; purge initial tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T{initial_tool} S{first_layer_temperature[initial_tool]}\nT{initial_tool} S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330)))} Y{(initial_tool < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[initial_tool])}10{else}30{endif} X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330))) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 10)} Z0.2 F{if is_nil(filament_multitool_ramming[initial_tool])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330))) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 40)} E9 F800 ; continue purging and wipe the nozzle\nG0 X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330))) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 40) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 3)} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330))) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 40) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 3 * 2)} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[initial_tool]} F2400 ; retract\n{e_retracted[initial_tool] = 1.5 * retract_length[initial_tool]}\nG92 E0 ; reset extruder position\n\nM593 X T2 F35.8\nM593 Y T2 F35.4\n +start_gcode = M17 ; enable steppers\nM862.3 P "XL" ; printer model check\nM862.5 P2 ; g-code level check\nM862.6 P"Input shaper" ; FW feature check\nM115 U6.0.0+14794\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n; set print area\nM555 X{first_layer_print_min[0]} Y{first_layer_print_min[1]} W{(first_layer_print_max[0]) - (first_layer_print_min[0])} H{(first_layer_print_max[1]) - (first_layer_print_min[1])}\n; inform about nozzle diameter\n{if (is_extruder_used[0])}M862.1 T0 P{nozzle_diameter[0]}{endif}\n{if (is_extruder_used[1])}M862.1 T1 P{nozzle_diameter[1]}{endif}\n{if (is_extruder_used[2])}M862.1 T2 P{nozzle_diameter[2]}{endif}\n{if (is_extruder_used[3])}M862.1 T3 P{nozzle_diameter[3]}{endif}\n{if (is_extruder_used[4])}M862.1 T4 P{nozzle_diameter[4]}{endif}\n\n; turn off unused heaters\n{if ! is_extruder_used[0]} M104 T0 S0 {endif}\n{if ! is_extruder_used[1]} M104 T1 S0 {endif}\n{if num_extruders > 2 and ! is_extruder_used[2]} M104 T2 S0 {endif}\n{if num_extruders > 3 and ! is_extruder_used[3]} M104 T3 S0 {endif}\n{if num_extruders > 4 and ! is_extruder_used[4]} M104 T4 S0 {endif}\n\nM217 Z{max(zhop, 2.0)} ; set toolchange z hop to 2mm, or zhop variable from slicer if higher\n; set bed and extruder temp for MBL\nM140 S[first_layer_bed_temperature] ; set bed temp\nG0 Z5 ; add Z clearance\nM109 T{initial_tool} S{((filament_notes[initial_tool]=~/.*HT_MBL10.*/) ? (first_layer_temperature[initial_tool] - 10) : (filament_type[initial_tool] == "PC" or filament_type[initial_tool] == "PA") ? (first_layer_temperature[initial_tool] - 25) : (filament_type[initial_tool] == "FLEX") ? 210 : (filament_type[initial_tool]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n\n; Home XY\nG28 XY\n; try picking tools used in print\nG1 F{travel_speed * 60}\n{if (is_extruder_used[0]) and (initial_tool != 0)}T0 S1 L0 D0{endif}\n{if (is_extruder_used[1]) and (initial_tool != 1)}T1 S1 L0 D0{endif}\n{if (is_extruder_used[2]) and (initial_tool != 2)}T2 S1 L0 D0{endif}\n{if (is_extruder_used[3]) and (initial_tool != 3)}T3 S1 L0 D0{endif}\n{if (is_extruder_used[4]) and (initial_tool != 4)}T4 S1 L0 D0{endif}\n; select tool that will be used to home & MBL\nT{initial_tool} S1 L0 D0\n; home Z with MBL tool\nM84 E ; turn off E motor\nG28 Z\nG0 Z5 ; add Z clearance\n\nM104 T{initial_tool} S{if is_nil(idle_temperature[initial_tool])}70{else}{idle_temperature[initial_tool]}{endif} ; set idle temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nG29 G ; absorb heat\n\nM109 T{initial_tool} S{((filament_notes[initial_tool]=~/.*HT_MBL10.*/) ? (first_layer_temperature[initial_tool] - 10) : (filament_type[initial_tool] == "PC" or filament_type[initial_tool] == "PA") ? (first_layer_temperature[initial_tool] - 25) : (filament_type[initial_tool] == "FLEX") ? 210 : (filament_type[initial_tool]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n\n; move to the nozzle cleanup area\nG1 X{(min(((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))), first_layer_print_min[0])) + 32} Y{(min((first_layer_print_min[1] - 7), first_layer_print_min[1]))} Z{5} F{(travel_speed * 60)}\nM302 S160 ; lower cold extrusion limit to 160C\nG1 E{-(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; retraction for nozzle cleanup\n; nozzle cleanup\nM84 E ; turn off E motor\nG29 P9 X{((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)))} Y{(first_layer_print_min[1] - 7)} W{32} H{7}\nG0 Z5 F480 ; move away in Z\nM107 ; turn off the fan\n; MBL\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X30 Y0 W{(((is_extruder_used[4]) or ((is_extruder_used[3]) or (is_extruder_used[2]))) ? "300" : ((is_extruder_used[1]) ? "130" : "50"))} H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\nG1 Z10 F720 ; move away in Z\nG1 F{travel_speed * 60}\nP0 S1 L1 D0; park the tool\n; set extruder temp\n{if first_layer_temperature[0] > 0 and (is_extruder_used[0])}M104 T0 S{first_layer_temperature[0]}{endif}\n{if first_layer_temperature[1] > 0 and (is_extruder_used[1])}M104 T1 S{first_layer_temperature[1]}{endif}\n{if first_layer_temperature[2] > 0 and (is_extruder_used[2])}M104 T2 S{first_layer_temperature[2]}{endif}\n{if first_layer_temperature[3] > 0 and (is_extruder_used[3])}M104 T3 S{first_layer_temperature[3]}{endif}\n{if first_layer_temperature[4] > 0 and (is_extruder_used[4])}M104 T4 S{first_layer_temperature[4]}{endif}\n{if (is_extruder_used[0]) and initial_tool != 0}\n;\n; purge first tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T0 S{first_layer_temperature[0]}\nT0 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(0 == 0 ? 30 : (0 == 1 ? 150 : (0 == 2 ? 210 : 330)))} Y{(0 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[0])}10{else}30{endif} X40 Z0.2 F{if is_nil(filament_multitool_ramming[0])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X70 E9 F800 ; continue purging and wipe the nozzle\nG0 X{70 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{70 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[0]} F2400 ; retract\n{e_retracted[0] = 1.5 * retract_length[0]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(is_nil(idle_temperature[0]) ? (first_layer_temperature[0] + standby_temperature_delta) : (idle_temperature[0]))} T0\n{endif}\n{if (is_extruder_used[1]) and initial_tool != 1}\n;\n; purge second tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T1 S{first_layer_temperature[1]}\nT1 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(1 == 0 ? 30 : (1 == 1 ? 150 : (1 == 2 ? 210 : 330)))} Y{(1 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[1])}10{else}30{endif} X140 Z0.2 F{if is_nil(filament_multitool_ramming[1])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X110 E9 F800 ; continue purging and wipe the nozzle\nG0 X{110 - 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{110 - 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[1]} F2400 ; retract\n{e_retracted[1] = 1.5 * retract_length[1]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(is_nil(idle_temperature[1]) ? (first_layer_temperature[1] + standby_temperature_delta) : (idle_temperature[1]))} T1\n{endif}\n{if (is_extruder_used[2]) and initial_tool != 2}\n;\n; purge third tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T2 S{first_layer_temperature[2]}\nT2 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(2 == 0 ? 30 : (2 == 1 ? 150 : (2 == 2 ? 210 : 330)))} Y{(2 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[2])}10{else}30{endif} X220 Z0.2 F{if is_nil(filament_multitool_ramming[2])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X250 E9 F800 ; continue purging and wipe the nozzle\nG0 X{250 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{250 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[2]} F2400 ; retract\n{e_retracted[2] = 1.5 * retract_length[2]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(is_nil(idle_temperature[2]) ? (first_layer_temperature[2] + standby_temperature_delta) : (idle_temperature[2]))} T2\n{endif}\n{if (is_extruder_used[3]) and initial_tool != 3}\n;\n; purge fourth tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T3 S{first_layer_temperature[3]}\nT3 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(3 == 0 ? 30 : (3 == 1 ? 150 : (3 == 2 ? 210 : 330)))} Y{(3 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[3])}10{else}30{endif} X320 Z0.2 F{if is_nil(filament_multitool_ramming[3])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X290 E9 F800 ; continue purging and wipe the nozzle\nG0 X{290 - 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{290 - 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[3]} F2400 ; retract\n{e_retracted[3] = 1.5 * retract_length[3]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(is_nil(idle_temperature[3]) ? (first_layer_temperature[3] + standby_temperature_delta) : (idle_temperature[3]))} T3\n{endif}\n{if (is_extruder_used[4]) and initial_tool != 4}\n;\n; purge fifth tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T4 S{first_layer_temperature[4]}\nT4 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(4 == 0 ? 30 : (4 == 1 ? 150 : (4 == 2 ? 210 : 330)))} Y{(4 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[4])}10{else}30{endif} X320 Z0.2 F{if is_nil(filament_multitool_ramming[4])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X290 E9 F800 ; continue purging and wipe the nozzle\nG0 X{290 - 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{290 - 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[4]} F2400 ; retract\n{e_retracted[4] = 1.5 * retract_length[4]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(is_nil(idle_temperature[4]) ? (first_layer_temperature[4] + standby_temperature_delta) : (idle_temperature[4]))} T4\n{endif}\n;\n; purge initial tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T{initial_tool} S{first_layer_temperature[initial_tool]}\nT{initial_tool} S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330)))} Y{(initial_tool < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[initial_tool])}10{else}30{endif} X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330))) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 10)} Z0.2 F{if is_nil(filament_multitool_ramming[initial_tool])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330))) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 40)} E9 F800 ; continue purging and wipe the nozzle\nG0 X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330))) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 40) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 3)} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330))) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 40) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 3 * 2)} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[initial_tool]} F2400 ; retract\n{e_retracted[initial_tool] = 1.5 * retract_length[initial_tool]}\nG92 E0 ; reset extruder position\n\nM593 X T2 F35.8\nM593 Y T2 F35.4\n default_print_profile = 0.20mm SPEED @XLIS 0.4 default_filament_profile = "Prusament PLA @XLIS" @@ -21544,7 +20828,7 @@ retract_length = 0.7 max_layer_height = 0.22 min_layer_height = 0.05 default_print_profile = 0.16mm QUALITY @XL 0.3 -machine_max_acceleration_travel = 2500 +machine_max_acceleration_travel = 2500,2500 [printer:Original Prusa XL - 2T 0.3 nozzle] inherits = *XL2MULTI* @@ -21563,7 +20847,7 @@ retract_length_toolchange = 1.2,1.2 retract_lift_below = 359,359 wipe = 1,1 extruder_colour = #FF8000;#DB5182 -machine_max_acceleration_travel = 2500 +machine_max_acceleration_travel = 2500,2500 [printer:Original Prusa XL - 5T 0.3 nozzle] inherits = *XLMULTI* @@ -21573,7 +20857,7 @@ nozzle_diameter = 0.3,0.3,0.3,0.3,0.3 retract_lift = 0.3,0.3,0.3,0.3,0.3 min_layer_height = 0.05,0.05,0.05,0.05,0.05 max_layer_height = 0.22,0.22,0.22,0.22,0.22 -machine_max_acceleration_travel = 2500 +machine_max_acceleration_travel = 2500,2500 [printer:Original Prusa XL 0.25 nozzle] inherits = *commonXL* @@ -21584,7 +20868,7 @@ retract_lift = 0.15 max_layer_height = 0.15 min_layer_height = 0.05 default_print_profile = 0.12mm QUALITY @XL 0.25 -machine_max_acceleration_travel = 1500 +machine_max_acceleration_travel = 2500,2500 [printer:Original Prusa XL - 2T 0.25 nozzle] inherits = *XL2MULTI* @@ -21603,9 +20887,7 @@ retract_length_toolchange = 1.2,1.2 retract_lift_below = 359,359 wipe = 1,1 extruder_colour = #FF8000;#DB5182 -machine_max_acceleration_travel = 1500 -machine_max_feedrate_x = 400 -machine_max_feedrate_y = 400 +machine_max_acceleration_travel = 2500,2500 [printer:Original Prusa XL - 5T 0.25 nozzle] inherits = *XLMULTI* @@ -21616,9 +20898,7 @@ retract_lift = 0.15,0.15,0.15,0.15,0.15 min_layer_height = 0.05,0.05,0.05,0.05,0.05 max_layer_height = 0.15,0.15,0.15,0.15,0.15 retract_length = 0.8,0.8,0.8,0.8,0.8 -machine_max_acceleration_travel = 1500 -machine_max_feedrate_x = 400 -machine_max_feedrate_y = 400 +machine_max_acceleration_travel = 2500,2500 [printer:Original Prusa XL 0.8 nozzle] inherits = *commonXL* @@ -21793,7 +21073,7 @@ retract_length = 0.7 max_layer_height = 0.22 min_layer_height = 0.05 default_print_profile = 0.16mm SPEED @XLIS 0.3 -machine_max_acceleration_travel = 3000 +machine_max_acceleration_travel = 3000,2500 [printer:Original Prusa XL - 2T Input Shaper 0.3 nozzle] inherits = *XL2MULTIIS* @@ -21813,7 +21093,7 @@ retract_length_toolchange = 1.2,1.2 retract_lift_below = 359,359 wipe = 1,1 extruder_colour = #FF8000;#DB5182 -machine_max_acceleration_travel = 2500 +machine_max_acceleration_travel = 2500,2500 [printer:Original Prusa XL - 5T Input Shaper 0.3 nozzle] inherits = *XLMULTIIS* @@ -21824,7 +21104,7 @@ nozzle_diameter = 0.3,0.3,0.3,0.3,0.3 retract_lift = 0.3,0.3,0.3,0.3,0.3 min_layer_height = 0.05,0.05,0.05,0.05,0.05 max_layer_height = 0.22,0.22,0.22,0.22,0.22 -machine_max_acceleration_travel = 2500 +machine_max_acceleration_travel = 2500,2500 [printer:Original Prusa XL Input Shaper 0.25 nozzle] inherits = *commonXLIS* @@ -21836,9 +21116,7 @@ retract_lift = 0.15 max_layer_height = 0.15 min_layer_height = 0.05 default_print_profile = 0.12mm SPEED @XLIS 0.25 -machine_max_acceleration_travel = 2000 -machine_max_feedrate_x = 400 -machine_max_feedrate_y = 400 +machine_max_acceleration_travel = 2500,2500 [printer:Original Prusa XL - 2T Input Shaper 0.25 nozzle] inherits = *XL2MULTIIS* @@ -21858,9 +21136,7 @@ retract_length_toolchange = 1.2,1.2 retract_lift_below = 359,359 wipe = 1,1 extruder_colour = #FF8000;#DB5182 -machine_max_acceleration_travel = 1500 -machine_max_feedrate_x = 400 -machine_max_feedrate_y = 400 +machine_max_acceleration_travel = 2500,2500 [printer:Original Prusa XL - 5T Input Shaper 0.25 nozzle] inherits = *XLMULTIIS* @@ -21872,9 +21148,7 @@ retract_lift = 0.15,0.15,0.15,0.15,0.15 min_layer_height = 0.05,0.05,0.05,0.05,0.05 max_layer_height = 0.15,0.15,0.15,0.15,0.15 retract_length = 0.8,0.8,0.8,0.8,0.8 -machine_max_acceleration_travel = 1500 -machine_max_feedrate_x = 400 -machine_max_feedrate_y = 400 +machine_max_acceleration_travel = 2500,2500 [printer:Original Prusa XL Input Shaper 0.8 nozzle] inherits = *commonXLIS* @@ -21932,27 +21206,27 @@ printer_variant = 0.4 printer_model = MK4 nozzle_diameter = 0.4 end_gcode = {if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+1, max_print_height)} F720 ; Move print head up{endif}\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X241 Y170 F3600 ; park\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+23, max_print_height)} F300 ; Move print head up{endif}\nG4 ; wait\nM900 K0 ; reset LA\nM142 S36 ; reset heatbreak target temp\nM84 X Y E ; disable motors\n; max_layer_z = [max_layer_z] +silent_mode = 1 machine_limits_usage = emit_to_gcode -machine_max_acceleration_e = 2500 -machine_max_acceleration_extruding = 2000 -machine_max_acceleration_retracting = 1200 -machine_max_acceleration_travel = 2000 -machine_max_acceleration_x = 2500 -machine_max_acceleration_y = 2500 -machine_max_acceleration_z = 200 -machine_max_feedrate_e = 100 -machine_max_feedrate_x = 200 -machine_max_feedrate_y = 200 -machine_max_feedrate_z = 40 -machine_max_jerk_e = 10 -machine_max_jerk_x = 8 -machine_max_jerk_y = 8 -machine_max_jerk_z = 2 +machine_max_acceleration_e = 2500,2500 +machine_max_acceleration_extruding = 2000,2000 +machine_max_acceleration_retracting = 1200,1200 +machine_max_acceleration_travel = 2000,2000 +machine_max_acceleration_x = 2500,2500 +machine_max_acceleration_y = 2500,2500 +machine_max_acceleration_z = 200,200 +machine_max_feedrate_e = 100,100 +machine_max_feedrate_x = 200,160 +machine_max_feedrate_y = 200,160 +machine_max_feedrate_z = 40,40 +machine_max_jerk_e = 10,10 +machine_max_jerk_x = 8,8 +machine_max_jerk_y = 8,8 +machine_max_jerk_z = 2,2 machine_min_extruding_rate = 0 machine_min_travel_rate = 0 max_layer_height = 0.25 min_layer_height = 0.07 -silent_mode = 0 remaining_times = 1 printer_notes = Do not remove the keywords below.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_MK4\nPG retract_lift_below = 219 @@ -21962,7 +21236,7 @@ retract_before_travel = 1.5 retract_before_wipe = 80% retract_layer_change = 1 retract_length = 0.8 -start_gcode = M17 ; enable steppers\nM862.3 P "[printer_model]" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U5.1.2+13478\nM555 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} W{((min(print_bed_max[0], max(first_layer_print_min[0] + 32, first_layer_print_max[0])))) - ((min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))} H{((first_layer_print_max[1])) - ((max(0, first_layer_print_min[1]) - 4))}\n\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 T0 S{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == "PC" or filament_type[0] == "PA") ? (first_layer_temperature[0] - 25) : (filament_type[0] == "FLEX") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; set extruder temp for bed leveling\nM109 T0 R{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == "PC" or filament_type[0] == "PA") ? (first_layer_temperature[0] - 25) : (filament_type[0] == "FLEX") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n\nM84 E ; turn off E motor\n\nG28 ; home all without mesh bed level\n\nG1 X{10 + 32} Y-4 Z5 F4800\n\nM302 S160 ; lower cold extrusion limit to 160C\n\n{if filament_type[initial_tool]=="FLEX"}\nG1 E-4 F2400 ; retraction\n{else}\nG1 E-2 F2400 ; retraction\n{endif}\n\nM84 E ; turn off E motor\n\nG29 P9 X10 Y-4 W32 H4\n\n{if first_layer_bed_temperature[initial_tool]<=60}M106 S100{endif}\n\nG0 Z40 F10000\n\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nM107\n\n;\n; MBL\n;\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X0 Y0 W50 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\n\n; prepare for purge\nM104 S{first_layer_temperature[0]}\nG0 X0 Y-4 Z15 F4800 ; move away and ready for the purge\nM109 S{first_layer_temperature[0]}\n\nG92 E0\nM569 S0 E ; set spreadcycle mode for extruder\n\n;\n; Extrude purge line\n;\nG92 E0 ; reset extruder position\nG1 E{(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E7 X15 Z0.2 F500 ; purge\nG0 X25 E4 F500 ; purge\nG0 X35 E4 F650 ; purge\nG0 X45 E4 F800 ; purge\nG0 X{45 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{45 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\n\nG92 E0\nM221 S100 ; set flow to 100% +start_gcode = M17 ; enable steppers\nM862.3 P "[printer_model]" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U6.0.0+14794\nM555 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} W{((min(print_bed_max[0], max(first_layer_print_min[0] + 32, first_layer_print_max[0])))) - ((min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))} H{((first_layer_print_max[1])) - ((max(0, first_layer_print_min[1]) - 4))}\n\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 T0 S{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == "PC" or filament_type[0] == "PA") ? (first_layer_temperature[0] - 25) : (filament_type[0] == "FLEX") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; set extruder temp for bed leveling\nM109 T0 R{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == "PC" or filament_type[0] == "PA") ? (first_layer_temperature[0] - 25) : (filament_type[0] == "FLEX") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n\nM84 E ; turn off E motor\n\nG28 ; home all without mesh bed level\n\nG1 X{10 + 32} Y-4 Z5 F4800\n\nM302 S160 ; lower cold extrusion limit to 160C\n\n{if filament_type[initial_tool]=="FLEX"}\nG1 E-4 F2400 ; retraction\n{else}\nG1 E-2 F2400 ; retraction\n{endif}\n\nM84 E ; turn off E motor\n\nG29 P9 X10 Y-4 W32 H4\n\n{if first_layer_bed_temperature[initial_tool]<=60}M106 S100{endif}\n\nG0 Z40 F10000\n\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nM107\n\n;\n; MBL\n;\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X0 Y0 W50 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\n\n; prepare for purge\nM104 S{first_layer_temperature[0]}\nG0 X0 Y-4 Z15 F4800 ; move away and ready for the purge\nM109 S{first_layer_temperature[0]}\n\nG92 E0\nM569 S0 E ; set spreadcycle mode for extruder\n\n;\n; Extrude purge line\n;\nG92 E0 ; reset extruder position\nG1 E{(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E7 X15 Z0.2 F500 ; purge\nG0 X25 E4 F500 ; purge\nG0 X35 E4 F650 ; purge\nG0 X45 E4 F800 ; purge\nG0 X{45 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{45 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\n\nG92 E0\nM221 S100 ; set flow to 100% default_print_profile = 0.20mm QUALITY @MK4 0.4 default_filament_profile = "Prusament PLA @PG" thumbnails = 16x16/QOI, 313x173/QOI, 440x240/QOI, 480x240/QOI, 640x480/PNG @@ -22016,7 +21290,7 @@ retract_lift = 0.15 max_layer_height = 0.15 min_layer_height = 0.05 default_print_profile = 0.12mm QUALITY @MK4 0.25 -machine_max_acceleration_travel = 1500 +machine_max_acceleration_travel = 2500,2500 [printer:Original Prusa MK4 0.8 nozzle] inherits = *commonMK4* @@ -22038,22 +21312,23 @@ renamed_from = "Original Prusa MK4 Input Shaper (Alpha)" printer_model = MK4IS printer_variant = 0.4 max_layer_height = 0.30 +silent_mode = 1 machine_limits_usage = emit_to_gcode -machine_max_acceleration_e = 2500,5000 -machine_max_acceleration_extruding = 4000,2000 -machine_max_acceleration_retracting = 1200,2000 -machine_max_acceleration_travel = 4000,1250 -machine_max_acceleration_x = 4000,2000 -machine_max_acceleration_y = 4000,2000 -machine_max_acceleration_z = 200,2000 -machine_max_feedrate_e = 100,120 -machine_max_feedrate_x = 300,100 -machine_max_feedrate_y = 300,100 -machine_max_feedrate_z = 40,12 -machine_max_jerk_e = 10,1.5 +machine_max_acceleration_e = 2500,2500 +machine_max_acceleration_extruding = 4000,2500 +machine_max_acceleration_retracting = 1200,1200 +machine_max_acceleration_travel = 4000,2500 +machine_max_acceleration_x = 4000,2500 +machine_max_acceleration_y = 4000,2500 +machine_max_acceleration_z = 200,200 +machine_max_feedrate_e = 100,100 +machine_max_feedrate_x = 300,160 +machine_max_feedrate_y = 300,160 +machine_max_feedrate_z = 40,40 +machine_max_jerk_e = 10,10 machine_max_jerk_x = 8,8 machine_max_jerk_y = 8,8 -machine_max_jerk_z = 2,0.4 +machine_max_jerk_z = 2,2 machine_min_extruding_rate = 0,0 machine_min_travel_rate = 0,0 max_print_height = 220 @@ -22062,8 +21337,8 @@ retract_length = 0.7 wipe = 0 retract_before_wipe = 80 retract_speed = 35 -deretract_speed = 0 -start_gcode = M17 ; enable steppers\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM862.3 P "MK4" ; printer model check\nM862.5 P2 ; g-code level check\nM862.6 P"Input shaper" ; FW feature check\nM115 U5.1.2+13478\n\nM555 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} W{((min(print_bed_max[0], max(first_layer_print_min[0] + 32, first_layer_print_max[0])))) - ((min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))} H{((first_layer_print_max[1])) - ((max(0, first_layer_print_min[1]) - 4))}\n\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 T0 S{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == "PC" or filament_type[0] == "PA") ? (first_layer_temperature[0] - 25) : (filament_type[0] == "FLEX") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; set extruder temp for bed leveling\nM109 T0 R{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == "PC" or filament_type[0] == "PA") ? (first_layer_temperature[0] - 25) : (filament_type[0] == "FLEX") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n\nM84 E ; turn off E motor\n\nG28 ; home all without mesh bed level\n\nG1 X{10 + 32} Y-4 Z5 F4800\n\nM302 S160 ; lower cold extrusion limit to 160C\n\n{if filament_type[initial_tool]=="FLEX"}\nG1 E-4 F2400 ; retraction\n{else}\nG1 E-2 F2400 ; retraction\n{endif}\n\nM84 E ; turn off E motor\n\nG29 P9 X10 Y-4 W32 H4\n\n{if first_layer_bed_temperature[initial_tool]<=60}M106 S100{endif}\n\nG0 Z40 F10000\n\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nM107\n\n;\n; MBL\n;\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X0 Y0 W50 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\n\n; prepare for purge\nM104 S{first_layer_temperature[0]}\nG0 X0 Y-4 Z15 F4800 ; move away and ready for the purge\nM109 S{first_layer_temperature[0]}\n\nG92 E0\nM569 S0 E ; set spreadcycle mode for extruder\n\n;\n; Extrude purge line\n;\nG92 E0 ; reset extruder position\nG1 E{(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E7 X15 Z0.2 F500 ; purge\nG0 X25 E4 F500 ; purge\nG0 X35 E4 F650 ; purge\nG0 X45 E4 F800 ; purge\nG0 X{45 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{45 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\n\nG92 E0\nM221 S100 ; set flow to 100% +deretract_speed = 25 +start_gcode = M17 ; enable steppers\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM862.3 P "MK4" ; printer model check\nM862.5 P2 ; g-code level check\nM862.6 P"Input shaper" ; FW feature check\nM115 U6.0.0+14794\n\nM555 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} W{((min(print_bed_max[0], max(first_layer_print_min[0] + 32, first_layer_print_max[0])))) - ((min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))} H{((first_layer_print_max[1])) - ((max(0, first_layer_print_min[1]) - 4))}\n\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 T0 S{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == "PC" or filament_type[0] == "PA") ? (first_layer_temperature[0] - 25) : (filament_type[0] == "FLEX") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; set extruder temp for bed leveling\nM109 T0 R{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == "PC" or filament_type[0] == "PA") ? (first_layer_temperature[0] - 25) : (filament_type[0] == "FLEX") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n\nM84 E ; turn off E motor\n\nG28 ; home all without mesh bed level\n\nG1 X{10 + 32} Y-4 Z5 F4800\n\nM302 S160 ; lower cold extrusion limit to 160C\n\n{if filament_type[initial_tool]=="FLEX"}\nG1 E-4 F2400 ; retraction\n{else}\nG1 E-2 F2400 ; retraction\n{endif}\n\nM84 E ; turn off E motor\n\nG29 P9 X10 Y-4 W32 H4\n\n{if first_layer_bed_temperature[initial_tool]<=60}M106 S100{endif}\n\nG0 Z40 F10000\n\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nM107\n\n;\n; MBL\n;\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X0 Y0 W50 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\n\n; prepare for purge\nM104 S{first_layer_temperature[0]}\nG0 X0 Y-4 Z15 F4800 ; move away and ready for the purge\nM109 S{first_layer_temperature[0]}\n\nG92 E0\nM569 S0 E ; set spreadcycle mode for extruder\n\n;\n; Extrude purge line\n;\nG92 E0 ; reset extruder position\nG1 E{(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E7 X15 Z0.2 F500 ; purge\nG0 X25 E4 F500 ; purge\nG0 X35 E4 F650 ; purge\nG0 X45 E4 F800 ; purge\nG0 X{45 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{45 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\n\nG92 E0\nM221 S100 ; set flow to 100% end_gcode = {if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+1, max_print_height)} F720 ; Move print head up{endif}\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X241 Y170 F3600 ; park\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+23, max_print_height)} F300 ; Move print head up{endif}\nG4 ; wait\nM572 S0 ; reset PA\nM593 X T2 F0 ; disable IS\nM593 Y T2 F0 ; disable IS\nM84 X Y E ; disable motors\n; max_layer_z = [max_layer_z] before_layer_gcode = ;BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]\nM201 X{interpolate_table(extruded_weight_total, (0,4000), (1400,2500), (10000,2500))} Y{interpolate_table(extruded_weight_total, (0,4000), (1400,2500), (10000,2500))}\n{if ! spiral_vase}M74 W[extruded_weight_total]{endif}\n default_print_profile = 0.20mm SPEED @MK4IS 0.4 @@ -22088,9 +21363,9 @@ retract_length = 0.7,0.7,0.7,0.7,0.7 wipe = 0,0,0,0,0 retract_before_wipe = 80,80,80,80,80 retract_speed = 35,35,35,35,35 -deretract_speed = 0,0,0,0,0 +deretract_speed = 25,25,25,25,25 retract_length_toolchange = 0,0,0,0,0 -start_gcode = M17 ; enable steppers\nM862.1 P0.4 ; nozzle diameter check\nM862.3 P "MK4" ; printer model check\nM862.5 P2 ; g-code level check\nM862.6 P "Input shaper" ; FW feature check\nM862.6 P "MMU3" ; FW feature check\nM115 U5.1.0-BETA+13823\n\n; setup MMU\nM708 A0x0b X5 ; extra load distance\nM708 A0x0d X140 ; unload feeedrate\nM708 A0x11 X140 ; load feedrate\nM708 A0x14 X20 ; slow feedrate\nM708 A0x1e X12 ; Pulley current to ~200mA\n\nM555 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} W{((min(print_bed_max[0], max(first_layer_print_min[0] + 32, first_layer_print_max[0])))) - ((min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))} H{((first_layer_print_max[1])) - ((max(0, first_layer_print_min[1]) - 4))}\n\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 S{((filament_notes[initial_tool]=~/.*HT_MBL10.*/) ? (first_layer_temperature[initial_tool] - 10) : (filament_type[initial_tool] == "PC" or filament_type[initial_tool] == "PA") ? (first_layer_temperature[initial_tool] - 25) : (filament_type[initial_tool] == "FLEX") ? 210 : (filament_type[initial_tool]=~/.*PET.*/) ? 175 : 170)} ; set extruder temp for bed leveling\nM109 R{((filament_notes[initial_tool]=~/.*HT_MBL10.*/) ? (first_layer_temperature[initial_tool] - 10) : (filament_type[initial_tool] == "PC" or filament_type[initial_tool] == "PA") ? (first_layer_temperature[initial_tool] - 25) : (filament_type[initial_tool] == "FLEX") ? 210 : (filament_type[initial_tool]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n\nM84 E ; turn off E motor\n\nG28 ; home all without mesh bed level\n\nG1 X{10 + 32} Y-4 Z5 F4800\n\nM302 S160 ; lower cold extrusion limit to 160C\n\n{if filament_type[initial_tool]=="FLEX"}\nG1 E-4 F2400 ; retraction\n{else}\nG1 E-2 F2400 ; retraction\n{endif}\n\nM84 E ; turn off E motor\n\nG29 P9 X10 Y-4 W32 H4\n\n{if first_layer_bed_temperature[initial_tool]<=60}M106 S100{endif}\n\nG0 Z40 F10000\n\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nM107\n\n;\n; MBL\n;\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X0 Y0 W130 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\n\n; prepare for purge\nM104 S{first_layer_temperature[initial_tool]}\nG0 X0 Y-4 Z15 F4800 ; move away and ready for the purge\nM109 S{first_layer_temperature[initial_tool]}\n\nG92 E0\nM569 S0 E ; set spreadcycle mode for extruder\n\nT[initial_tool]\nG1 E{parking_pos_retraction + extra_loading_move - 15} F1000 ; load to the nozzle\n\n;\n; Extrude purge line\n;\nG92 E0 ; reset extruder position\nG1 E{(filament_type[initial_tool] == "FLEX" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E7 X15 Z0.2 F500 ; purge\nG0 X105 E36 F500 ; purge\nG0 X115 E4 F650 ; purge\nG0 X125 E4 F800 ; purge\nG0 X{125 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{125 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\n\nG92 E0\nM221 S100 ; set flow to 100% +start_gcode = M17 ; enable steppers\nM862.1 P0.4 ; nozzle diameter check\nM862.3 P "MK4" ; printer model check\nM862.5 P2 ; g-code level check\nM862.6 P "Input shaper" ; FW feature check\nM862.6 P "MMU3" ; FW feature check\nM115 U6.0.0+14794\n\n; setup MMU\nM708 A0x0b X5 ; extra load distance\nM708 A0x0d X140 ; unload feeedrate\nM708 A0x11 X140 ; load feedrate\nM708 A0x14 X20 ; slow feedrate\nM708 A0x1e X12 ; Pulley current to ~200mA\n\nM555 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} W{((min(print_bed_max[0], max(first_layer_print_min[0] + 32, first_layer_print_max[0])))) - ((min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))} H{((first_layer_print_max[1])) - ((max(0, first_layer_print_min[1]) - 4))}\n\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 S{((filament_notes[initial_tool]=~/.*HT_MBL10.*/) ? (first_layer_temperature[initial_tool] - 10) : (filament_type[initial_tool] == "PC" or filament_type[initial_tool] == "PA") ? (first_layer_temperature[initial_tool] - 25) : (filament_type[initial_tool] == "FLEX") ? 210 : (filament_type[initial_tool]=~/.*PET.*/) ? 175 : 170)} ; set extruder temp for bed leveling\nM109 R{((filament_notes[initial_tool]=~/.*HT_MBL10.*/) ? (first_layer_temperature[initial_tool] - 10) : (filament_type[initial_tool] == "PC" or filament_type[initial_tool] == "PA") ? (first_layer_temperature[initial_tool] - 25) : (filament_type[initial_tool] == "FLEX") ? 210 : (filament_type[initial_tool]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n\nM84 E ; turn off E motor\n\nG28 ; home all without mesh bed level\n\nG1 X{10 + 32} Y-4 Z5 F4800\n\nM302 S160 ; lower cold extrusion limit to 160C\n\n{if filament_type[initial_tool]=="FLEX"}\nG1 E-4 F2400 ; retraction\n{else}\nG1 E-2 F2400 ; retraction\n{endif}\n\nM84 E ; turn off E motor\n\nG29 P9 X10 Y-4 W32 H4\n\n{if first_layer_bed_temperature[initial_tool]<=60}M106 S100{endif}\n\nG0 Z40 F10000\n\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nM107\n\n;\n; MBL\n;\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X0 Y0 W130 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\n\n; prepare for purge\nM104 S{first_layer_temperature[initial_tool]}\nG0 X0 Y-4 Z15 F4800 ; move away and ready for the purge\nM109 S{first_layer_temperature[initial_tool]}\n\nG92 E0\nM569 S0 E ; set spreadcycle mode for extruder\n\nT[initial_tool]\nG1 E{parking_pos_retraction + extra_loading_move - 15} F1000 ; load to the nozzle\n\n;\n; Extrude purge line\n;\nG92 E0 ; reset extruder position\nG1 E{(filament_type[initial_tool] == "FLEX" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E7 X15 Z0.2 F500 ; purge\nG0 X105 E36 F500 ; purge\nG0 X115 E4 F650 ; purge\nG0 X125 E4 F800 ; purge\nG0 X{125 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{125 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\n\nG92 E0\nM221 S100 ; set flow to 100% end_gcode = {if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+1, max_print_height)} F720 ; Move print head up{endif}\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X241 Y170 F3600 ; park\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+23, max_print_height)} F300 ; Move print head up{endif}\nM702 ; unload the current filament\nG4 ; wait\nM572 S0 ; reset PA\nM593 X T2 F0 ; disable IS\nM593 Y T2 F0 ; disable IS\nM84 X Y E ; disable motors\n; max_layer_z = [max_layer_z] before_layer_gcode = ;BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]\nM201 X{interpolate_table(extruded_weight_total, (0,4000), (1400,2500), (10000,2500))} Y{interpolate_table(extruded_weight_total, (0,4000), (1400,2500), (10000,2500))}\n{if ! spiral_vase}M74 W[extruded_weight_total]{endif}\n default_print_profile = 0.20mm SPEED @MK4IS 0.4 @@ -22107,6 +21382,7 @@ retract_lift = 0.15 max_layer_height = 0.15 min_layer_height = 0.05 default_print_profile = 0.12mm STRUCTURAL @MK4IS 0.25 +machine_max_acceleration_travel = 2500,2500 [printer:Original Prusa MK4 Input Shaper 0.3 nozzle] inherits = Original Prusa MK4 Input Shaper 0.4 nozzle @@ -22165,22 +21441,23 @@ inherits = *commonMK4* printer_model = MK3.9 printer_variant = 0.4 max_layer_height = 0.30 +silent_mode = 1 machine_limits_usage = emit_to_gcode -machine_max_acceleration_e = 2500,5000 -machine_max_acceleration_extruding = 4000,2000 -machine_max_acceleration_retracting = 1200,2000 -machine_max_acceleration_travel = 4000,1250 -machine_max_acceleration_x = 4000,2000 -machine_max_acceleration_y = 4000,2000 -machine_max_acceleration_z = 200,2000 -machine_max_feedrate_e = 100,120 -machine_max_feedrate_x = 300,100 -machine_max_feedrate_y = 300,100 -machine_max_feedrate_z = 40,12 -machine_max_jerk_e = 10,1.5 +machine_max_acceleration_e = 2500,2500 +machine_max_acceleration_extruding = 4000,2500 +machine_max_acceleration_retracting = 1200,1200 +machine_max_acceleration_travel = 4000,2500 +machine_max_acceleration_x = 4000,2500 +machine_max_acceleration_y = 4000,2500 +machine_max_acceleration_z = 200,200 +machine_max_feedrate_e = 100,100 +machine_max_feedrate_x = 300,160 +machine_max_feedrate_y = 300,160 +machine_max_feedrate_z = 40,40 +machine_max_jerk_e = 10,10 machine_max_jerk_x = 8,8 machine_max_jerk_y = 8,8 -machine_max_jerk_z = 2,0.4 +machine_max_jerk_z = 2,2 machine_min_extruding_rate = 0,0 machine_min_travel_rate = 0,0 max_print_height = 220 @@ -22189,8 +21466,8 @@ retract_length = 0.7 wipe = 0 retract_before_wipe = 80 retract_speed = 35 -deretract_speed = 0 -start_gcode = M17 ; enable steppers\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM862.3 P "[printer_model]" ; printer model check\nM862.5 P2 ; g-code level check\nM862.6 P"Input shaper" ; FW feature check\nM115 U5.1.2+13478\n\nM555 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} W{((min(print_bed_max[0], max(first_layer_print_min[0] + 32, first_layer_print_max[0])))) - ((min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))} H{((first_layer_print_max[1])) - ((max(0, first_layer_print_min[1]) - 4))}\n\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 T0 S{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == "PC" or filament_type[0] == "PA") ? (first_layer_temperature[0] - 25) : (filament_type[0] == "FLEX") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; set extruder temp for bed leveling\nM109 T0 R{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == "PC" or filament_type[0] == "PA") ? (first_layer_temperature[0] - 25) : (filament_type[0] == "FLEX") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n\nM84 E ; turn off E motor\n\nG28 ; home all without mesh bed level\n\nG1 X{10 + 32} Y-4 Z5 F4800\n\nM302 S160 ; lower cold extrusion limit to 160C\n\n{if filament_type[initial_tool]=="FLEX"}\nG1 E-4 F2400 ; retraction\n{else}\nG1 E-2 F2400 ; retraction\n{endif}\n\nM84 E ; turn off E motor\n\nG29 P9 X10 Y-4 W32 H4\n\n{if first_layer_bed_temperature[initial_tool]<=60}M106 S100{endif}\n\nG0 Z40 F10000\n\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nM107\n\n;\n; MBL\n;\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X0 Y0 W130 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\n\n; prepare for purge\nM104 S{first_layer_temperature[0]}\nG0 X0 Y-4 Z15 F4800 ; move away and ready for the purge\nM109 S{first_layer_temperature[0]}\n\nG92 E0\nM569 S0 E ; set spreadcycle mode for extruder\n\n;\n; Extrude purge line\n;\nG92 E0 ; reset extruder position\nG1 E{(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E7 X15 Z0.2 F500 ; purge\nG0 X25 E4 F500 ; purge\nG0 X35 E4 F650 ; purge\nG0 X45 E4 F800 ; purge\nG0 X{45 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{45 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\n\nG92 E0\nM221 S100 ; set flow to 100% +deretract_speed = 25 +start_gcode = M17 ; enable steppers\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM862.3 P "[printer_model]" ; printer model check\nM862.5 P2 ; g-code level check\nM862.6 P"Input shaper" ; FW feature check\nM115 U6.0.0+14794\n\nM555 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} W{((min(print_bed_max[0], max(first_layer_print_min[0] + 32, first_layer_print_max[0])))) - ((min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))} H{((first_layer_print_max[1])) - ((max(0, first_layer_print_min[1]) - 4))}\n\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 T0 S{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == "PC" or filament_type[0] == "PA") ? (first_layer_temperature[0] - 25) : (filament_type[0] == "FLEX") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; set extruder temp for bed leveling\nM109 T0 R{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == "PC" or filament_type[0] == "PA") ? (first_layer_temperature[0] - 25) : (filament_type[0] == "FLEX") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n\nM84 E ; turn off E motor\n\nG28 ; home all without mesh bed level\n\nG1 X{10 + 32} Y-4 Z5 F4800\n\nM302 S160 ; lower cold extrusion limit to 160C\n\n{if filament_type[initial_tool]=="FLEX"}\nG1 E-4 F2400 ; retraction\n{else}\nG1 E-2 F2400 ; retraction\n{endif}\n\nM84 E ; turn off E motor\n\nG29 P9 X10 Y-4 W32 H4\n\n{if first_layer_bed_temperature[initial_tool]<=60}M106 S100{endif}\n\nG0 Z40 F10000\n\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nM107\n\n;\n; MBL\n;\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X0 Y0 W130 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\n\n; prepare for purge\nM104 S{first_layer_temperature[0]}\nG0 X0 Y-4 Z15 F4800 ; move away and ready for the purge\nM109 S{first_layer_temperature[0]}\n\nG92 E0\nM569 S0 E ; set spreadcycle mode for extruder\n\n;\n; Extrude purge line\n;\nG92 E0 ; reset extruder position\nG1 E{(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E7 X15 Z0.2 F500 ; purge\nG0 X25 E4 F500 ; purge\nG0 X35 E4 F650 ; purge\nG0 X45 E4 F800 ; purge\nG0 X{45 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{45 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\n\nG92 E0\nM221 S100 ; set flow to 100% end_gcode = {if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+1, max_print_height)} F720 ; Move print head up{endif}\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X241 Y170 F3600 ; park\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+23, max_print_height)} F300 ; Move print head up{endif}\nG4 ; wait\nM572 S0 ; reset PA\nM593 X T2 F0 ; disable IS\nM593 Y T2 F0 ; disable IS\nM84 X Y E ; disable motors\n; max_layer_z = [max_layer_z] before_layer_gcode = ;BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]\nM201 X{interpolate_table(extruded_weight_total, (0,4000), (1400,2500), (10000,2500))} Y{interpolate_table(extruded_weight_total, (0,4000), (1400,2500), (10000,2500))}\n{if ! spiral_vase}M74 W[extruded_weight_total]{endif}\n default_print_profile = 0.20mm SPEED @MK4IS 0.4 @@ -22202,7 +21479,7 @@ printer_model = MK3.9MMU3 multimaterial_purging = 80 printer_variant = 0.4 printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile. \n\nPRINTER_MODEL_MK3.9\nPRINTER_MODEL_MK4IS\nPRINTER_MODEL_MK3.9MMU3\nPG -start_gcode = M17 ; enable steppers\nM862.1 P0.4 ; nozzle diameter check\nM862.3 P "MK3.9" ; printer model check\nM862.5 P2 ; g-code level check\nM862.6 P "Input shaper" ; FW feature check\nM862.6 P "MMU3" ; FW feature check\nM115 U5.1.0-BETA+13823\n\n; setup MMU\nM708 A0x0b X5 ; extra load distance\nM708 A0x0d X140 ; unload feeedrate\nM708 A0x11 X140 ; load feedrate\nM708 A0x14 X20 ; slow feedrate\nM708 A0x1e X12 ; Pulley current to ~200mA\n\nM555 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} W{((min(print_bed_max[0], max(first_layer_print_min[0] + 32, first_layer_print_max[0])))) - ((min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))} H{((first_layer_print_max[1])) - ((max(0, first_layer_print_min[1]) - 4))}\n\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 S{((filament_notes[initial_tool]=~/.*HT_MBL10.*/) ? (first_layer_temperature[initial_tool] - 10) : (filament_type[initial_tool] == "PC" or filament_type[initial_tool] == "PA") ? (first_layer_temperature[initial_tool] - 25) : (filament_type[initial_tool] == "FLEX") ? 210 : (filament_type[initial_tool]=~/.*PET.*/) ? 175 : 170)} ; set extruder temp for bed leveling\nM109 R{((filament_notes[initial_tool]=~/.*HT_MBL10.*/) ? (first_layer_temperature[initial_tool] - 10) : (filament_type[initial_tool] == "PC" or filament_type[initial_tool] == "PA") ? (first_layer_temperature[initial_tool] - 25) : (filament_type[initial_tool] == "FLEX") ? 210 : (filament_type[initial_tool]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n\nM84 E ; turn off E motor\n\nG28 ; home all without mesh bed level\n\nG1 X{10 + 32} Y-4 Z5 F4800\n\nM302 S160 ; lower cold extrusion limit to 160C\n\n{if filament_type[initial_tool]=="FLEX"}\nG1 E-4 F2400 ; retraction\n{else}\nG1 E-2 F2400 ; retraction\n{endif}\n\nM84 E ; turn off E motor\n\nG29 P9 X10 Y-4 W32 H4\n\n{if first_layer_bed_temperature[initial_tool]<=60}M106 S100{endif}\n\nG0 Z40 F10000\n\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nM107\n\n;\n; MBL\n;\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X0 Y0 W50 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\n\n; prepare for purge\nM104 S{first_layer_temperature[initial_tool]}\nG0 X0 Y-4 Z15 F4800 ; move away and ready for the purge\nM109 S{first_layer_temperature[initial_tool]}\n\nG92 E0\nM569 S0 E ; set spreadcycle mode for extruder\n\nT[initial_tool]\nG1 E{parking_pos_retraction + extra_loading_move - 15} F1000 ; load to the nozzle\n\n;\n; Extrude purge line\n;\nG92 E0 ; reset extruder position\nG1 E{(filament_type[initial_tool] == "FLEX" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E7 X15 Z0.2 F500 ; purge\nG0 X105 E36 F500 ; purge\nG0 X115 E4 F650 ; purge\nG0 X125 E4 F800 ; purge\nG0 X{125 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{125 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\n\nG92 E0\nM221 S100 ; set flow to 100% +start_gcode = M17 ; enable steppers\nM862.1 P0.4 ; nozzle diameter check\nM862.3 P "MK3.9" ; printer model check\nM862.5 P2 ; g-code level check\nM862.6 P "Input shaper" ; FW feature check\nM862.6 P "MMU3" ; FW feature check\nM115 U6.0.0+14794\n\n; setup MMU\nM708 A0x0b X5 ; extra load distance\nM708 A0x0d X140 ; unload feeedrate\nM708 A0x11 X140 ; load feedrate\nM708 A0x14 X20 ; slow feedrate\nM708 A0x1e X12 ; Pulley current to ~200mA\n\nM555 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} W{((min(print_bed_max[0], max(first_layer_print_min[0] + 32, first_layer_print_max[0])))) - ((min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))} H{((first_layer_print_max[1])) - ((max(0, first_layer_print_min[1]) - 4))}\n\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 S{((filament_notes[initial_tool]=~/.*HT_MBL10.*/) ? (first_layer_temperature[initial_tool] - 10) : (filament_type[initial_tool] == "PC" or filament_type[initial_tool] == "PA") ? (first_layer_temperature[initial_tool] - 25) : (filament_type[initial_tool] == "FLEX") ? 210 : (filament_type[initial_tool]=~/.*PET.*/) ? 175 : 170)} ; set extruder temp for bed leveling\nM109 R{((filament_notes[initial_tool]=~/.*HT_MBL10.*/) ? (first_layer_temperature[initial_tool] - 10) : (filament_type[initial_tool] == "PC" or filament_type[initial_tool] == "PA") ? (first_layer_temperature[initial_tool] - 25) : (filament_type[initial_tool] == "FLEX") ? 210 : (filament_type[initial_tool]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n\nM84 E ; turn off E motor\n\nG28 ; home all without mesh bed level\n\nG1 X{10 + 32} Y-4 Z5 F4800\n\nM302 S160 ; lower cold extrusion limit to 160C\n\n{if filament_type[initial_tool]=="FLEX"}\nG1 E-4 F2400 ; retraction\n{else}\nG1 E-2 F2400 ; retraction\n{endif}\n\nM84 E ; turn off E motor\n\nG29 P9 X10 Y-4 W32 H4\n\n{if first_layer_bed_temperature[initial_tool]<=60}M106 S100{endif}\n\nG0 Z40 F10000\n\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nM107\n\n;\n; MBL\n;\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X0 Y0 W50 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\n\n; prepare for purge\nM104 S{first_layer_temperature[initial_tool]}\nG0 X0 Y-4 Z15 F4800 ; move away and ready for the purge\nM109 S{first_layer_temperature[initial_tool]}\n\nG92 E0\nM569 S0 E ; set spreadcycle mode for extruder\n\nT[initial_tool]\nG1 E{parking_pos_retraction + extra_loading_move - 15} F1000 ; load to the nozzle\n\n;\n; Extrude purge line\n;\nG92 E0 ; reset extruder position\nG1 E{(filament_type[initial_tool] == "FLEX" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E7 X15 Z0.2 F500 ; purge\nG0 X105 E36 F500 ; purge\nG0 X115 E4 F650 ; purge\nG0 X125 E4 F800 ; purge\nG0 X{125 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{125 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\n\nG92 E0\nM221 S100 ; set flow to 100% [printer:Original Prusa MK3.9 0.25 nozzle] inherits = Original Prusa MK3.9 0.4 nozzle @@ -22213,6 +21490,7 @@ retract_lift = 0.15 max_layer_height = 0.15 min_layer_height = 0.05 default_print_profile = 0.12mm STRUCTURAL @MK4IS 0.25 +machine_max_acceleration_travel = 2500,2500 [printer:Original Prusa MK3.9 0.3 nozzle] inherits = Original Prusa MK3.9 0.4 nozzle @@ -22269,21 +21547,22 @@ max_layer_height = 0.30 max_print_height = 210 retract_lift_below = 209 machine_limits_usage = emit_to_gcode -machine_max_acceleration_e = 2500,5000 -machine_max_acceleration_extruding = 4000,4000 +silent_mode = 1 +machine_max_acceleration_e = 2500,2500 +machine_max_acceleration_extruding = 4000,2500 machine_max_acceleration_retracting = 1250,1250 -machine_max_acceleration_travel = 4000,4000 -machine_max_acceleration_x = 4000,4000 -machine_max_acceleration_y = 4000,4000 +machine_max_acceleration_travel = 4000,2500 +machine_max_acceleration_x = 4000,2500 +machine_max_acceleration_y = 4000,2500 machine_max_acceleration_z = 200,200 machine_max_feedrate_e = 120,120 -machine_max_feedrate_x = 300,300 -machine_max_feedrate_y = 300,300 +machine_max_feedrate_x = 300,160 +machine_max_feedrate_y = 300,160 machine_max_feedrate_z = 12,12 machine_max_jerk_e = 5,5 machine_max_jerk_x = 8,8 machine_max_jerk_y = 8,8 -machine_max_jerk_z = 2,0.4 +machine_max_jerk_z = 2,2 machine_min_extruding_rate = 0,0 machine_min_travel_rate = 0,0 printer_notes = Don't remove the following keywords. \nPRINTER_MODEL_MK3.5\n @@ -22292,7 +21571,7 @@ wipe = 1 retract_before_wipe = 0 retract_speed = 35 deretract_speed = 0 -start_gcode = M17 ; enable steppers\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM862.3 P "MK3.5" ; printer model check\nM862.5 P2 ; g-code level check\nM862.6 P"Input shaper" ; FW feature check\nM115 U5.2.1+13903\n\nM555 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} W{((min(print_bed_max[0], max(first_layer_print_min[0] + 32, first_layer_print_max[0])))) - ((min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))} H{((first_layer_print_max[1])) - ((max(0, first_layer_print_min[1]) - 4))}\n\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 T0 S170 ; set extruder temp for bed leveling\nM109 T0 R170 ; wait for temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nG28 ; home all\n\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X23 Y5 W80 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\n\n; prepare for purge\nM104 S{first_layer_temperature[0]}\nG0 X0 Y-4 Z15 F4800 ; move away and ready for the purge\nM109 S{first_layer_temperature[0]}\n\n; Extrude purge line\n\nG92 E0 ; reset extruder position\nG0 E7 X15 Z0.2 F500 ; purge\nG0 X25 E4 F500 ; purge\nG0 X35 E4 F650 ; purge\nG0 X45 E4 F800 ; purge\nG0 X{45 + 3} Z0.05 F8000 ; wipe, move close to the bed\nG0 X{45 + 3 * 2} Z0.2 F8000 ; wipe, move quickly away from the bed\n\nG92 E0\nM221 S100 ; reset flow to 100%\n +start_gcode = M17 ; enable steppers\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM862.3 P "MK3.5" ; printer model check\nM862.5 P2 ; g-code level check\nM862.6 P"Input shaper" ; FW feature check\nM115 U6.0.0+14794\n\nM555 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} W{((min(print_bed_max[0], max(first_layer_print_min[0] + 32, first_layer_print_max[0])))) - ((min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))} H{((first_layer_print_max[1])) - ((max(0, first_layer_print_min[1]) - 4))}\n\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 T0 S170 ; set extruder temp for bed leveling\nM109 T0 R170 ; wait for temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nG28 ; home all\n\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X23 Y5 W80 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\n\n; prepare for purge\nM104 S{first_layer_temperature[0]}\nG0 X0 Y-4 Z15 F4800 ; move away and ready for the purge\nM109 S{first_layer_temperature[0]}\n\n; Extrude purge line\n\nG92 E0 ; reset extruder position\nG0 E7 X15 Z0.2 F500 ; purge\nG0 X25 E4 F500 ; purge\nG0 X35 E4 F650 ; purge\nG0 X45 E4 F800 ; purge\nG0 X{45 + 3} Z0.05 F8000 ; wipe, move close to the bed\nG0 X{45 + 3 * 2} Z0.2 F8000 ; wipe, move quickly away from the bed\n\nG92 E0\nM221 S100 ; reset flow to 100%\n end_gcode = {if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+1, max_print_height)} F720 ; Move print head up{endif}\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X241 Y201 F3600 ; park\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+23, max_print_height)} F300 ; Move print head up{endif}\nG4 ; wait\nM572 S0 ; reset PA\nM593 X T2 F0 ; disable IS\nM593 Y T2 F0 ; disable IS\nM84 X Y E ; disable motors\n; max_layer_z = [max_layer_z] before_layer_gcode = ;BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]\nM201 X{interpolate_table(extruded_weight_total, (0,4000), (1400,2500), (10000,2500))} Y{interpolate_table(extruded_weight_total, (0,4000), (1400,2500), (10000,2500))}\n{if ! spiral_vase}M74 W[extruded_weight_total]{endif}\n default_print_profile = 0.20mm SPEED @MK3.5 0.4 @@ -22308,6 +21587,7 @@ retract_lift = 0.15 max_layer_height = 0.15 min_layer_height = 0.05 default_print_profile = 0.12mm STRUCTURAL @MK3.5 0.25 +machine_max_acceleration_travel = 2500,2500 [printer:Original Prusa MK3.5 0.3 nozzle] inherits = Original Prusa MK3.5 0.4 nozzle @@ -22379,7 +21659,7 @@ retract_before_wipe = 0,0,0,0,0 retract_speed = 35,35,35,35,35 deretract_speed = 0,0,0,0,0 printer_notes = Don't remove the following keywords. \nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_MK3.5MMU\n -start_gcode = M17 ; enable steppers\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM862.3 P "MK3.5" ; printer model check\nM862.5 P2 ; g-code level check\nM862.6 P"Input shaper" ; FW feature check\nM862.6 P "MMU3" ; FW feature check\nM115 U5.2.1+13903\n; setup MMU\nM708 A0x1e X12 ; Pulley current to ~200mA\n\nM555 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} W{((min(print_bed_max[0], max(first_layer_print_min[0] + 32, first_layer_print_max[0])))) - ((min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))} H{((first_layer_print_max[1])) - ((max(0, first_layer_print_min[1]) - 4))}\n\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n\nM140 S{first_layer_bed_temperature[initial_tool]} ; set bed temp\nM104 S170 ; set extruder temp for bed leveling\nM109 R170 ; wait for temp\nM190 S{first_layer_bed_temperature[initial_tool]} ; wait for bed temp\n\n\nG28 ; home all\n\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X23 Y5 W160 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\n\n; prepare for purge\nM104 S{first_layer_temperature[initial_tool]}\nG0 X0 Y-4 Z15 F4800 ; move away and ready for the purge\nM109 S{first_layer_temperature[initial_tool]}\n\nT[initial_tool]\nG1 E{parking_pos_retraction + extra_loading_move} F1000 ; load to the nozzle\n\n; Extrude purge line\n\nG92 E0 ; reset extruder position\nG0 E7 X15 Z0.2 F500 ; purge\nG0 X105 E36 F500 ; purge\nG0 X115 E4 F650 ; purge\nG0 X125 E4 F800 ; purge\nG0 X{125 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{125 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\n\nG92 E0\nM221 S100 ; reset flow to 100%\n +start_gcode = M17 ; enable steppers\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM862.3 P "MK3.5" ; printer model check\nM862.5 P2 ; g-code level check\nM862.6 P"Input shaper" ; FW feature check\nM862.6 P "MMU3" ; FW feature check\nM115 U6.0.0+14794\n; setup MMU\nM708 A0x1e X12 ; Pulley current to ~200mA\n\nM555 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} W{((min(print_bed_max[0], max(first_layer_print_min[0] + 32, first_layer_print_max[0])))) - ((min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))} H{((first_layer_print_max[1])) - ((max(0, first_layer_print_min[1]) - 4))}\n\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n\nM140 S{first_layer_bed_temperature[initial_tool]} ; set bed temp\nM104 S170 ; set extruder temp for bed leveling\nM109 R170 ; wait for temp\nM190 S{first_layer_bed_temperature[initial_tool]} ; wait for bed temp\n\n\nG28 ; home all\n\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X23 Y5 W160 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\n\n; prepare for purge\nM104 S{first_layer_temperature[initial_tool]}\nG0 X0 Y-4 Z15 F4800 ; move away and ready for the purge\nM109 S{first_layer_temperature[initial_tool]}\n\nT[initial_tool]\nG1 E{parking_pos_retraction + extra_loading_move} F1000 ; load to the nozzle\n\n; Extrude purge line\n\nG92 E0 ; reset extruder position\nG0 E7 X15 Z0.2 F500 ; purge\nG0 X105 E36 F500 ; purge\nG0 X115 E4 F650 ; purge\nG0 X125 E4 F800 ; purge\nG0 X{125 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{125 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\n\nG92 E0\nM221 S100 ; reset flow to 100%\n end_gcode = {if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+1, max_print_height)} F720 ; Move print head up{endif}\nG1 X241 Y201 F7200 ; park\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+49, max_print_height)} F720 ; Move print head further up{endif}\n{if has_wipe_tower}\nG1 E-15 F3000\n{else}\nG1 E2 F5000\nG1 E2 F5500\nG1 E2 F6000\nG1 E-15 F5800\nG1 E-20 F5500\nG1 E10 F3000\nG1 E-10 F3100\nG1 E10 F3150\nG1 E-10 F3250\nG1 E10 F3300\n{endif}\n\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\n\n; Unload filament\nM702\n\nG4 ; wait\nM221 S100 ; reset flow\nM572 S0 ; reset LA\nM104 S0 ; turn off temperature\nM84 ; disable motors\n; max_layer_z = [max_layer_z] before_layer_gcode = ;BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]\nM201 X{interpolate_table(extruded_weight_total, (0,4000), (1400,2500), (10000,2500))} Y{interpolate_table(extruded_weight_total, (0,4000), (1400,2500), (10000,2500))}\n{if ! spiral_vase}M74 W[extruded_weight_total]{endif}\n default_print_profile = 0.20mm SPEED @MK3.5 0.4 @@ -22452,7 +21732,6 @@ min_initial_exposure_time = 1 max_initial_exposure_time = 300 printer_correction = 1,1,1 relative_correction = 1,1 -area_fill = 45 # The obsolete presets will be removed when upgrading from the legacy configuration structure (up to Slic3r 1.39.2) to 1.40.0 and newer. [obsolete_presets] From 55d820b82d7fe22a04032274b8960b02ae7cb4f4 Mon Sep 17 00:00:00 2001 From: Lukas Matena Date: Mon, 20 May 2024 11:53:22 +0200 Subject: [PATCH 12/25] Couple more improvements / fixes: - 'Tilt profiles' renamed to 'Profiles settings' - Area fill and delay before/after exposure are now showed in Normal mode - Fixed and refactored calculation of time estimates - Changed '+ / -' to the respective unicode character - Tolerance added into print statistics --- src/libslic3r/PrintConfig.cpp | 6 +- src/libslic3r/SLAPrint.hpp | 2 + src/libslic3r/SLAPrintSteps.cpp | 159 +++++++++++--------------------- src/slic3r/GUI/Sidebar.cpp | 12 +-- src/slic3r/GUI/Tab.cpp | 12 +-- 5 files changed, 68 insertions(+), 123 deletions(-) diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index c0fcb63fc2..bd74e3e77e 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -3990,7 +3990,7 @@ void PrintConfigDef::init_sla_params() "Otherwise 'Above area fill parameters are used."); def->sidetext = L("%"); def->min = 0; - def->mode = comExpert; + def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(35.)); def = this->add("relative_correction", coFloats); @@ -4515,7 +4515,7 @@ void PrintConfigDef::init_sla_tilt_params() def->sidetext = L("s"); def->min = 0; def->max = 30; - def->mode = comExpert; + def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloats({ 3., 3.})); def = this->add("delay_after_exposure", coFloats); @@ -4524,7 +4524,7 @@ void PrintConfigDef::init_sla_tilt_params() def->sidetext = L("s"); def->min = 0; def->max = 30; - def->mode = comExpert; + def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloats({ 0., 0.})); def = this->add("tower_hop_height", coInts); diff --git a/src/libslic3r/SLAPrint.hpp b/src/libslic3r/SLAPrint.hpp index 93d94b016c..aebfe7b8aa 100644 --- a/src/libslic3r/SLAPrint.hpp +++ b/src/libslic3r/SLAPrint.hpp @@ -406,6 +406,7 @@ struct SLAPrintStatistics { SLAPrintStatistics() { clear(); } double estimated_print_time; + double estimated_print_time_tolerance; double objects_used_material; double support_used_material; size_t slow_layers_count; @@ -424,6 +425,7 @@ struct SLAPrintStatistics void clear() { estimated_print_time = 0.; + estimated_print_time_tolerance = 0.; objects_used_material = 0.; support_used_material = 0.; slow_layers_count = 0; diff --git a/src/libslic3r/SLAPrintSteps.cpp b/src/libslic3r/SLAPrintSteps.cpp index dd6141faf8..420887bb28 100644 --- a/src/libslic3r/SLAPrintSteps.cpp +++ b/src/libslic3r/SLAPrintSteps.cpp @@ -1130,20 +1130,10 @@ void SLAPrint::Steps::merge_slices_and_eval_stats() { double supports_volume(0.0); double models_volume(0.0); - double estim_time(0.0); - std::vector> layers_times; // level and time - std::vector> layers_areas; // level and area - layers_times.reserve(printer_input.size()); - layers_areas.reserve(printer_input.size()); - - size_t slow_layers = 0; - size_t fast_layers = 0; + std::vector> layers_info; // time, area, is_fast, models_volume, supports_volume + layers_info.resize(printer_input.size()); const double delta_fade_time = (init_exp_time - exp_time) / (fade_layers_cnt + 1); - double fade_layer_time = init_exp_time; - - execution::SpinningMutex mutex; - using Lock = std::lock_guard; // Going to parallel: auto printlayerfn = [this, @@ -1151,8 +1141,7 @@ void SLAPrint::Steps::merge_slices_and_eval_stats() { area_fill, display_area, exp_time, init_exp_time, fast_tilt, slow_tilt, hv_tilt, material_config, delta_fade_time, is_prusa_print, first_slow_layers, below, above, // write vars - &mutex, &models_volume, &supports_volume, &estim_time, &slow_layers, - &fast_layers, &fade_layer_time, &layers_times, &layers_areas](size_t sliced_layer_cnt) + &layers_info](size_t sliced_layer_cnt) { PrintLayer &layer = m_print->m_printer_input[sliced_layer_cnt]; @@ -1202,9 +1191,7 @@ void SLAPrint::Steps::merge_slices_and_eval_stats() { for (const ExPolygon& polygon : model_polygons) layer_model_area += area(polygon); - if (layer_model_area < 0 || layer_model_area > 0) { - Lock lck(mutex); models_volume += layer_model_area * l_height; - } + const double models_volume = (layer_model_area < 0 || layer_model_area > 0) ? layer_model_area * l_height : 0.; if(!supports_polygons.empty()) { if(model_polygons.empty()) supports_polygons = union_ex(supports_polygons); @@ -1216,11 +1203,8 @@ void SLAPrint::Steps::merge_slices_and_eval_stats() { for (const ExPolygon& polygon : supports_polygons) layer_support_area += area(polygon); - if (layer_support_area < 0 || layer_support_area > 0) { - Lock lck(mutex); supports_volume += layer_support_area * l_height; - } - - double layer_area = layer_model_area + layer_support_area; + const double supports_volume = (layer_support_area < 0 || layer_support_area > 0) ? layer_support_area * l_height : 0.; + const double layer_area = layer_model_area + layer_support_area; // Here we can save the expensively calculated polygons for printing ExPolygons trslices; @@ -1233,86 +1217,52 @@ void SLAPrint::Steps::merge_slices_and_eval_stats() { // Calculation of the printing time // + Calculation of the slow and fast layers to the future controlling those values on FW double layer_times = 0.0; + bool is_fast_layer = false; if (is_prusa_print) { - const bool is_fast_layer = sliced_layer_cnt < first_slow_layers || layer_area <= display_area * area_fill; + is_fast_layer = sliced_layer_cnt < first_slow_layers || layer_area <= display_area * area_fill; + const int l_height_nm = 1000000 * l_height; - { Lock lck(mutex); - - const int l_height_nm = 1000000 * l_height; - - if (is_fast_layer) { - fast_layers++; - layer_times = layer_peel_move_time(l_height_nm, below) + - below.delay_before_exposure_ms + - below.delay_after_exposure_ms + - refresh_delay_ms * 5 + // ~ 5x frame display wait - 124; // Magical constant to compensate remaining computation delay in exposure thread - } - else { - slow_layers++; - layer_times = layer_peel_move_time(l_height_nm, above) + - above.delay_before_exposure_ms + - above.delay_after_exposure_ms + - refresh_delay_ms * 5 + // ~ 5x frame display wait - 124; // Magical constant to compensate remaining computation delay in exposure thread - } - - // All before calculations are made in ms, but we need it in s - layer_times *= 0.001; - - layers_times.emplace_back(layer.level(), layer_times); - estim_time += layer_times; - layers_areas.emplace_back(layer.level(), layer_area * SCALING_FACTOR * SCALING_FACTOR); - } + layer_times = layer_peel_move_time(l_height_nm, is_fast_layer ? below : above) + + (is_fast_layer ? below : above).delay_before_exposure_ms + + (is_fast_layer ? below : above).delay_after_exposure_ms + + refresh_delay_ms * 5 + // ~ 5x frame display wait + 124; // Magical constant to compensate remaining computation delay in exposure thread + layer_times *= 0.001; // All before calculations are made in ms, but we need it in s } else { - const bool is_fast_layer = layer_area <= display_area*area_fill; + is_fast_layer = layer_area <= display_area*area_fill; const double tilt_time = material_config.material_print_speed == slamsSlow ? slow_tilt : material_config.material_print_speed == slamsHighViscosity ? hv_tilt : is_fast_layer ? fast_tilt : slow_tilt; - { Lock lck(mutex); - if (is_fast_layer) - fast_layers++; - else - slow_layers++; - if (sliced_layer_cnt < 3) - layer_times += init_exp_time; - else if (fade_layer_time > exp_time) { - fade_layer_time -= delta_fade_time; - layer_times += fade_layer_time; - } - else - layer_times += exp_time; - layer_times += tilt_time; + layer_times += tilt_time; - //// Per layer times (magical constants cuclulated from FW) + //// Per layer times (magical constants cuclulated from FW) + static double exposure_safe_delay_before{ 3.0 }; + static double exposure_high_viscosity_delay_before{ 3.5 }; + static double exposure_slow_move_delay_before{ 1.0 }; - static double exposure_safe_delay_before{ 3.0 }; - static double exposure_high_viscosity_delay_before{ 3.5 }; - static double exposure_slow_move_delay_before{ 1.0 }; - - if (material_config.material_print_speed == slamsSlow) - layer_times += exposure_safe_delay_before; - else if (material_config.material_print_speed == slamsHighViscosity) - layer_times += exposure_high_viscosity_delay_before; - else if (!is_fast_layer) - layer_times += exposure_slow_move_delay_before; - - // Increase layer time for "magic constants" from FW - layer_times += ( - l_height * 5 // tower move - + 120 / 1000 // Magical constant to compensate remaining computation delay in exposure thread - ); - - layers_times.emplace_back(layer.level(), layer_times); - estim_time += layer_times; - layers_areas.emplace_back(layer.level(), layer_area * SCALING_FACTOR * SCALING_FACTOR); - } + if (material_config.material_print_speed == slamsSlow) + layer_times += exposure_safe_delay_before; + else if (material_config.material_print_speed == slamsHighViscosity) + layer_times += exposure_high_viscosity_delay_before; + else if (!is_fast_layer) + layer_times += exposure_slow_move_delay_before; + // Increase layer time for "magic constants" from FW + layer_times += ( + l_height * 5 // tower move + + 120 / 1000 // Magical constant to compensate remaining computation delay in exposure thread + ); } + + // We are done with tilt time, but we haven't added the exposure time yet. + layer_times += std::max(exp_time, init_exp_time - sliced_layer_cnt * delta_fade_time); + + // Collect values for this layer. + layers_info[sliced_layer_cnt] = std::make_tuple(layer_times, layer_area * SCALING_FACTOR * SCALING_FACTOR, is_fast_layer, models_volume, supports_volume); }; // sequential version for debugging: @@ -1320,32 +1270,27 @@ void SLAPrint::Steps::merge_slices_and_eval_stats() { execution::for_each(ex_tbb, size_t(0), printer_input.size(), printlayerfn, execution::max_concurrency(ex_tbb)); - auto SCALING2 = SCALING_FACTOR * SCALING_FACTOR; - print_statistics.support_used_material = supports_volume * SCALING2; - print_statistics.objects_used_material = models_volume * SCALING2; + print_statistics.clear(); - // Estimated printing time - // A layers count o the highest object if (printer_input.size() == 0) print_statistics.estimated_print_time = NaNd; else { - print_statistics.estimated_print_time = estim_time; - - // Times and areas vectors were filled in parallel, they need to be sorted first. - // The print statistics will contain only the values (in the correct order). - std::sort(layers_times.begin(), layers_times.end(), [](const auto& a, const auto& b) { return a.first < b.first; }); - std::sort(layers_areas.begin(), layers_areas.end(), [](const auto& a, const auto& b) { return a.first < b.first; }); - print_statistics.layers_times_running_total.clear(); - for (size_t i=0; iSetTextAndShow(siCost, str_total_cost, "Cost"); - wxString t_est = std::isnan(ps.estimated_print_time) ? "N/A" : from_u8(short_time_ui(get_time_dhms(float(ps.estimated_print_time)))); - // For Prusa SLA printer we add +/- 3% ration for estimated time - if (std::string printer_model = wxGetApp().preset_bundle->printers.get_edited_preset().config.opt_string("printer_model"); - t_est != "N/A" && (printer_model == "SL1" || printer_model == "SL1S" || printer_model == "M1")) { - const double ratio = 0.03 * ps.estimated_print_time; - const wxString ratio_str = from_u8(short_time_ui(get_time_dhms(float(ratio)))); - t_est += " +/- " + ratio_str; + wxString t_est = "N/A"; + if (! std::isnan(ps.estimated_print_time)) { + t_est = from_u8(short_time_ui(get_time_dhms(float(ps.estimated_print_time)))); + if (ps.estimated_print_time_tolerance > 0.) + t_est += from_u8(" \u00B1 ") + from_u8(short_time_ui(get_time_dhms(float(ps.estimated_print_time_tolerance)))); } m_sliced_info->SetTextAndShow(siEstimatedTime, t_est, _L("Estimated printing time") + ":"); diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index ebaceccefd..1b9e2c13c0 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -5413,12 +5413,12 @@ void TabSLAMaterial::build_tilt_group(Slic3r::GUI::PageShp page) { // Legend std::vector> legend_columns = { - {L("Below"), L("Values in this column are for ???")}, - {L("Above"), L("Values in this column are for ???")}, + {L("Below"), L("Values in this column are applied when layer area is smaller than area_fill.")}, + {L("Above"), L("Values in this column are applied when layer area is larger than area_fill.")}, }; create_legend(page, legend_columns, comExpert/*, true*/); - auto optgroup = page->new_optgroup(L("Tilt profiles")); + auto optgroup = page->new_optgroup(L("Profile settings")); optgroup->on_change = [this, optgroup](const t_config_option_key& key, boost::any value) { if (key.find_first_of("use_tilt") == 0) @@ -5482,7 +5482,7 @@ void TabSLAMaterial::toggle_tilt_options(bool is_above) if (m_active_page && m_active_page->title() == "Material printing profile") { int column_id = is_above ? 0 : 1; - auto optgroup = m_active_page->get_optgroup("Tilt profiles"); + auto optgroup = m_active_page->get_optgroup("Profile settings"); bool use_tilt = boost::any_cast(optgroup->get_config_value(*m_config, "use_tilt", column_id)); for (const std::string& opt_key : disable_tilt_options) { @@ -5540,11 +5540,11 @@ void TabSLAMaterial::sys_color_changed() void TabSLAMaterial::update_sla_prusa_specific_visibility() { if (m_active_page && m_active_page->title() == "Material printing profile") { - for (auto& title : { "", "Tilt profiles" }) { + for (auto& title : { "", "Profile settings" }) { auto og_it = std::find_if(m_active_page->m_optgroups.begin(), m_active_page->m_optgroups.end(), [title](const ConfigOptionsGroupShp og) { return og->title == title; }); if (og_it != m_active_page->m_optgroups.end()) - og_it->get()->Show(m_mode == comExpert && is_prusa_printer()); + og_it->get()->Show(m_mode >= comAdvanced && is_prusa_printer()); } auto og_it = std::find_if(m_active_page->m_optgroups.begin(), m_active_page->m_optgroups.end(), From a19c60eb2af646909e900864b756c37583e46267 Mon Sep 17 00:00:00 2001 From: Lukas Matena Date: Mon, 20 May 2024 20:00:24 +0200 Subject: [PATCH 13/25] Little changes in phrases --- src/libslic3r/PrintConfig.cpp | 8 ++++---- src/slic3r/GUI/Tab.cpp | 10 ++++++++-- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index bd74e3e77e..8d6e5ef603 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -3985,9 +3985,9 @@ void PrintConfigDef::init_sla_params() def = this->add("area_fill", coFloat); def->label = L("Area fill"); - def->tooltip = L("The percentage of the bed area.\nIf the area of a particular layer is smaller than 'area_fill', " - "then 'Below area fill' parameters are used to determine the layer separation (tearing) procedure. " - "Otherwise 'Above area fill parameters are used."); + def->tooltip = L("The value is expressed as a percentage of the bed area. If the area of a particular layer " + "is smaller than 'area_fill', then 'Below area fill' parameters are used to determine the " + "layer separation (tearing) procedure. Otherwise 'Above area fill' parameters are used."); def->sidetext = L("%"); def->min = 0; def->mode = comAdvanced; @@ -4613,7 +4613,7 @@ void PrintConfigDef::init_sla_tilt_params() def = this->add("tilt_down_offset_steps", coInts); def->full_label = L("Tilt down offset steps"); - def->tooltip = L("Number of steps to move down from the calibrated (horizontal) position with 'tilt_down_initial_profile'."); + def->tooltip = L("Number of steps to move down from the calibrated (horizontal) position with 'tilt_down_initial_speed'."); def->sidetext = L("μ-steps"); def->min = 0; def->max = 10000; diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 1b9e2c13c0..726f9e4a1b 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -5413,11 +5413,17 @@ void TabSLAMaterial::build_tilt_group(Slic3r::GUI::PageShp page) { // Legend std::vector> legend_columns = { - {L("Below"), L("Values in this column are applied when layer area is smaller than area_fill.")}, - {L("Above"), L("Values in this column are applied when layer area is larger than area_fill.")}, + // TRN: This is a label of a column of parameters in settings to be used when the area is below certain threshold. + {L("Below"), + L("Values in this column are applied when layer area is smaller than area_fill.")}, + // TRN: This is a label of a column of parameters in settings to be used when the area is above certain threshold. + {L("Above"), + L("Values in this column are applied when layer area is larger than area_fill.")}, }; create_legend(page, legend_columns, comExpert/*, true*/); + // TRN: 'Profile' in this context denotes a group of parameters used to configure + // layer separation procedure for SLA printers. auto optgroup = page->new_optgroup(L("Profile settings")); optgroup->on_change = [this, optgroup](const t_config_option_key& key, boost::any value) { From 84370eb6b47a645e3062c317ef13654910dc4f2e Mon Sep 17 00:00:00 2001 From: Lukas Matena Date: Tue, 21 May 2024 18:09:21 +0200 Subject: [PATCH 14/25] Fix for error message, when "Use tilt" is off. + All tilt parameters are moved to section "steps_rasterize" --- src/libslic3r/SLAPrint.cpp | 40 +++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/src/libslic3r/SLAPrint.cpp b/src/libslic3r/SLAPrint.cpp index 236d4d219f..3a751d7746 100644 --- a/src/libslic3r/SLAPrint.cpp +++ b/src/libslic3r/SLAPrint.cpp @@ -689,7 +689,7 @@ std::string SLAPrint::validate(std::vector*) const || !m_material_config.use_tilt.get_at(1) && m_material_config.tower_hop_height.get_at(1) == 0) return _u8L("Disabling the 'Use tilt' function causes the object to separate away from the film in the " "vertical direction only. Therefore, it is necessary to set the 'Tower hop height' parameter " - " to a reasonable minimum value."); + "to reasonable value. The recommended value is 5 mm."); return ""; } @@ -845,24 +845,6 @@ bool SLAPrint::invalidate_state_by_config_options(const std::vector Date: Tue, 21 May 2024 18:54:18 +0200 Subject: [PATCH 15/25] Fixup of previous commit --- src/libslic3r/SLAPrint.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libslic3r/SLAPrint.cpp b/src/libslic3r/SLAPrint.cpp index 3a751d7746..da1ea920af 100644 --- a/src/libslic3r/SLAPrint.cpp +++ b/src/libslic3r/SLAPrint.cpp @@ -864,7 +864,7 @@ bool SLAPrint::invalidate_state_by_config_options(const std::vector Date: Wed, 22 May 2024 11:02:33 +0200 Subject: [PATCH 16/25] Fixed couple of compiler warnings --- src/libslic3r/SLAPrint.cpp | 4 ++-- src/libslic3r/SLAPrintSteps.cpp | 5 +---- src/slic3r/GUI/GLCanvas3D.cpp | 15 ++++++++++----- src/slic3r/GUI/Tab.cpp | 30 ------------------------------ 4 files changed, 13 insertions(+), 41 deletions(-) diff --git a/src/libslic3r/SLAPrint.cpp b/src/libslic3r/SLAPrint.cpp index da1ea920af..c2caec24e1 100644 --- a/src/libslic3r/SLAPrint.cpp +++ b/src/libslic3r/SLAPrint.cpp @@ -685,8 +685,8 @@ std::string SLAPrint::validate(std::vector*) const } } - if (!m_material_config.use_tilt.get_at(0) && m_material_config.tower_hop_height.get_at(0) == 0 - || !m_material_config.use_tilt.get_at(1) && m_material_config.tower_hop_height.get_at(1) == 0) + if ((!m_material_config.use_tilt.get_at(0) && m_material_config.tower_hop_height.get_at(0) == 0) + || (!m_material_config.use_tilt.get_at(1) && m_material_config.tower_hop_height.get_at(1) == 0)) return _u8L("Disabling the 'Use tilt' function causes the object to separate away from the film in the " "vertical direction only. Therefore, it is necessary to set the 'Tower hop height' parameter " "to reasonable value. The recommended value is 5 mm."); diff --git a/src/libslic3r/SLAPrintSteps.cpp b/src/libslic3r/SLAPrintSteps.cpp index 420887bb28..326d6992a1 100644 --- a/src/libslic3r/SLAPrintSteps.cpp +++ b/src/libslic3r/SLAPrintSteps.cpp @@ -1127,9 +1127,6 @@ void SLAPrint::Steps::merge_slices_and_eval_stats() { const auto height = scaled(printer_config.display_height.getFloat()); const double display_area = width*height; - double supports_volume(0.0); - double models_volume(0.0); - std::vector> layers_info; // time, area, is_fast, models_volume, supports_volume layers_info.resize(printer_input.size()); @@ -1220,7 +1217,7 @@ void SLAPrint::Steps::merge_slices_and_eval_stats() { bool is_fast_layer = false; if (is_prusa_print) { - is_fast_layer = sliced_layer_cnt < first_slow_layers || layer_area <= display_area * area_fill; + is_fast_layer = int(sliced_layer_cnt) < first_slow_layers || layer_area <= display_area * area_fill; const int l_height_nm = 1000000 * l_height; layer_times = layer_peel_move_time(l_height_nm, is_fast_layer ? below : above) + diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index d08ec08d79..4088b44137 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -6257,7 +6257,7 @@ static void render_sla_layer_legend(const SLAPrint& print, int layer_idx, int cn const std::vector& areas = print.print_statistics().layers_areas; const std::vector& times = print.print_statistics().layers_times_running_total; const double display_area = print.printer_config().display_height * print.printer_config().display_width; - if (layer_idx >= 0 && layer_idx < areas.size()) { + if (layer_idx >= 0 && layer_idx < int(areas.size())) { const double area = areas[layer_idx]; const double time = times[layer_idx] - (layer_idx == 0 ? 0. : times[layer_idx-1]); const double time_until_layer = times[layer_idx]; @@ -6267,13 +6267,18 @@ static void render_sla_layer_legend(const SLAPrint& print, int layer_idx, int cn ImGui::SetNextWindowBgAlpha(0.6f); ImGuiPureWrap::begin(_u8L("Layer statistics"), ImGuiWindowFlags_NoNav | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoFocusOnAppearing); - ImGui::Text(_u8L("Layer area: %.0f mm²").c_str(), area); + // FIXME: The snprintf would better be replaced by GUI::format, but I don't want to + // touch translated strings before the release. + char text[50]; + snprintf(text, 50, _u8L("Layer area: %.0f mm²").c_str(), area); + ImGui::Text("%s", text); int area_percent_int = int(std::round(100. * area/display_area)); - ImGui::Text(GUI::format(_u8L("Area fill: %1% %%%%"), area_percent_int == 0 ? "<1" : std::to_string(area_percent_int)).c_str()); + snprintf(text, 50, GUI::format(_u8L("Area fill: %1% %%%%"), area_percent_int == 0 ? "<1" : std::to_string(area_percent_int)).c_str()); + ImGui::Text("%s", text); ImGui::Separator(); - ImGui::Text(GUI::format(_u8L("Layer time: %1%"), get_time_dhms(time)).c_str()); + ImGui::Text("%s", GUI::format(_u8L("Layer time: %1%"), get_time_dhms(time)).c_str()); std::string buffer_str = _u8L("Time since start: %1%"); - ImGui::Text(GUI::format(buffer_str, get_time_dhms(time_until_layer)).c_str()); + ImGui::Text("%s", GUI::format(buffer_str, get_time_dhms(time_until_layer)).c_str()); // The dummy control below uses the assumption that the total time string will be the longest // and forces the width of the window large enough so it does not resize depending on the current value. diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 726f9e4a1b..09cdd93273 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -5438,36 +5438,6 @@ void TabSLAMaterial::build_tilt_group(Slic3r::GUI::PageShp page) append_tilt_options_line(optgroup, opt_key); } -static boost::any get_def_config_value(const DynamicPrintConfig& config, const std::string& opt_key, int idx) -{ - boost::any ret; - - const ConfigOptionDef* opt = config.def()->get(opt_key); - auto def_values = opt->default_value; - if (def_values) { - switch (def_values->type()) { - case coFloats: { - double val = static_cast(def_values.get())->get_at(idx); - ret = double_to_string(val); - } - break; - case coInts: - ret = static_cast(def_values.get())->get_at(idx); - break; - case coBools: - ret = static_cast(def_values.get())->get_at(idx); - break; - case coEnums: - ret = static_cast(def_values.get())->get_at(idx); - break; - case coNone: - default: - break; - } - } - return ret; -} - std::vector disable_tilt_options = { "tilt_down_initial_speed" ,"tilt_down_offset_steps" From ebd76383f4f59ebc29b3b73bc1980932118ac386 Mon Sep 17 00:00:00 2001 From: YuSanka Date: Wed, 22 May 2024 10:58:31 +0200 Subject: [PATCH 17/25] "Area fill" is changed to "Area fill threshold" --- src/libslic3r/PrintConfig.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 8d6e5ef603..3be7a795c9 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -3984,10 +3984,10 @@ void PrintConfigDef::init_sla_params() def->set_default_value(new ConfigOptionFloat(10.)); def = this->add("area_fill", coFloat); - def->label = L("Area fill"); + def->label = L("Area fill threshold"); def->tooltip = L("The value is expressed as a percentage of the bed area. If the area of a particular layer " - "is smaller than 'area_fill', then 'Below area fill' parameters are used to determine the " - "layer separation (tearing) procedure. Otherwise 'Above area fill' parameters are used."); + "is smaller than 'area_fill', then 'Below area fill threshold' parameters are used to determine the " + "layer separation (tearing) procedure. Otherwise 'Above area fill threshold' parameters are used."); def->sidetext = L("%"); def->min = 0; def->mode = comAdvanced; From ae84f190c012aa860c1634fafa69406fa451916a Mon Sep 17 00:00:00 2001 From: Lukas Matena Date: Wed, 22 May 2024 12:32:38 +0200 Subject: [PATCH 18/25] Fixed some more compiler warnings --- src/slic3r/GUI/GLCanvas3D.cpp | 9 ++------- src/slic3r/GUI/Tab.cpp | 4 ++-- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 4088b44137..378c886843 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -6267,14 +6267,9 @@ static void render_sla_layer_legend(const SLAPrint& print, int layer_idx, int cn ImGui::SetNextWindowBgAlpha(0.6f); ImGuiPureWrap::begin(_u8L("Layer statistics"), ImGuiWindowFlags_NoNav | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoFocusOnAppearing); - // FIXME: The snprintf would better be replaced by GUI::format, but I don't want to - // touch translated strings before the release. - char text[50]; - snprintf(text, 50, _u8L("Layer area: %.0f mm²").c_str(), area); - ImGui::Text("%s", text); + ImGui::Text("%s", GUI::format(_u8L("Layer area: %1% mm²"), int(0.1 + std::round(area))).c_str()); int area_percent_int = int(std::round(100. * area/display_area)); - snprintf(text, 50, GUI::format(_u8L("Area fill: %1% %%%%"), area_percent_int == 0 ? "<1" : std::to_string(area_percent_int)).c_str()); - ImGui::Text("%s", text); + ImGui::Text("%s", GUI::format(_u8L("Area fill: %1% %%"), area_percent_int == 0 ? "<1" : std::to_string(area_percent_int)).c_str()); ImGui::Separator(); ImGui::Text("%s", GUI::format(_u8L("Layer time: %1%"), get_time_dhms(time)).c_str()); std::string buffer_str = _u8L("Time since start: %1%"); diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 09cdd93273..d7f5fed916 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -5430,8 +5430,8 @@ void TabSLAMaterial::build_tilt_group(Slic3r::GUI::PageShp page) if (key.find_first_of("use_tilt") == 0) toggle_tilt_options(key == "use_tilt#0"); - update_dirty(); - update(); + update_dirty(); + update(); }; for (const std::string& opt_key : tilt_options()) From b376919d83e3f5febed21093ce653f4744e2fe98 Mon Sep 17 00:00:00 2001 From: YuSanka Date: Thu, 23 May 2024 16:18:15 +0200 Subject: [PATCH 19/25] DSForLayers: Fixed a preview of estimated printer times + Fixed position of the "Layer statistics" window --- src/slic3r/GUI/DoubleSliderForLayers.cpp | 3 +-- src/slic3r/GUI/GLCanvas3D.cpp | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/slic3r/GUI/DoubleSliderForLayers.cpp b/src/slic3r/GUI/DoubleSliderForLayers.cpp index d27a5ac435..15fa59b462 100644 --- a/src/slic3r/GUI/DoubleSliderForLayers.cpp +++ b/src/slic3r/GUI/DoubleSliderForLayers.cpp @@ -117,8 +117,7 @@ void DSForLayers::SetLayersTimes(const std::vector& layers_times) { m_ticks.is_wipe_tower = false; m_layers_times = layers_times; - for (size_t i = 1; i < m_layers_times.size(); i++) - m_layers_times[i] += m_layers_times[i - 1]; + std::copy(layers_times.begin(), layers_times.end(), m_layers_times.begin()); } void DSForLayers::SetDrawMode(bool is_sla_print, bool is_sequential_print) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 378c886843..fff19f2d84 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -6263,7 +6263,7 @@ static void render_sla_layer_legend(const SLAPrint& print, int layer_idx, int cn const double time_until_layer = times[layer_idx]; ImGuiWrapper& imgui = *wxGetApp().imgui(); - ImGuiPureWrap::set_next_window_pos(float(cnv_width) - imgui.get_style_scaling() * 5.f, imgui.get_style_scaling() * 55.f, ImGuiCond_Always, 1.0f, 0.0f); + ImGuiPureWrap::set_next_window_pos(float(cnv_width) - imgui.get_style_scaling() * 5.f, 5.f, ImGuiCond_Always, 1.0f, 0.0f); ImGui::SetNextWindowBgAlpha(0.6f); ImGuiPureWrap::begin(_u8L("Layer statistics"), ImGuiWindowFlags_NoNav | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoFocusOnAppearing); From 20e4cef12e0c004d8a6daa691327329a309d3a2e Mon Sep 17 00:00:00 2001 From: Lukas Matena Date: Wed, 22 May 2024 13:05:27 +0200 Subject: [PATCH 20/25] Added new SLA material override for absolute correction (SPE-2262) --- src/libslic3r/Preset.cpp | 2 +- src/libslic3r/PrintConfig.cpp | 2 +- src/libslic3r/PrintConfig.hpp | 1 + src/libslic3r/SLAPrint.cpp | 2 ++ src/slic3r/GUI/Tab.cpp | 1 + 5 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index d1e9e7dc65..e508ad94ea 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -624,7 +624,7 @@ static std::vector s_Preset_sla_material_options { "material_ow_branchingsupport_pillar_diameter", "material_ow_support_points_density_relative", - + "material_ow_absolute_correction", "material_ow_relative_correction_x", "material_ow_relative_correction_y", "material_ow_relative_correction_z", diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 3be7a795c9..1c8e13dc3d 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -4482,7 +4482,7 @@ void PrintConfigDef::init_sla_params() "support_head_width", "branchingsupport_head_width", "support_pillar_diameter", "branchingsupport_pillar_diameter", "relative_correction_x", "relative_correction_y", "relative_correction_z", - "elefant_foot_compensation", + "elefant_foot_compensation", "absolute_correction", // int "support_points_density_relative" }) { diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index 30dade6990..331f58a348 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -1184,6 +1184,7 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionFloatNullable, material_ow_branchingsupport_head_width)) ((ConfigOptionIntNullable, material_ow_support_points_density_relative)) ((ConfigOptionFloatNullable, material_ow_elefant_foot_compensation)) + ((ConfigOptionFloatNullable, material_ow_absolute_correction)) ((ConfigOptionFloatNullable, material_ow_relative_correction_x)) ((ConfigOptionFloatNullable, material_ow_relative_correction_y)) ((ConfigOptionFloatNullable, material_ow_relative_correction_z)) diff --git a/src/libslic3r/SLAPrint.cpp b/src/libslic3r/SLAPrint.cpp index c2caec24e1..00b8261ed2 100644 --- a/src/libslic3r/SLAPrint.cpp +++ b/src/libslic3r/SLAPrint.cpp @@ -223,6 +223,7 @@ static t_config_option_keys print_config_diffs(const StaticPrintConfig &curr "relative_correction_y"sv, "relative_correction_z"sv, "elefant_foot_compensation"sv, + "absolute_correction"sv, }; static constexpr auto material_ow_prefix = "material_ow_"; @@ -908,6 +909,7 @@ bool SLAPrint::invalidate_state_by_config_options(const std::vector>> material_overrides "support_points_density_relative" }}, {"Corrections", { + "absolute_correction", "relative_correction", "elefant_foot_compensation" }} From 839343f1ecbe24672e4472b10c50d18927a9366c Mon Sep 17 00:00:00 2001 From: Lukas Matena Date: Wed, 22 May 2024 13:36:07 +0200 Subject: [PATCH 21/25] Removed printer scaling correction from material overrides --- src/libslic3r/Preset.cpp | 3 --- src/libslic3r/PrintConfig.cpp | 1 - src/libslic3r/PrintConfig.hpp | 3 --- src/libslic3r/SLAPrint.cpp | 6 ------ src/slic3r/GUI/Tab.cpp | 17 +---------------- 5 files changed, 1 insertion(+), 29 deletions(-) diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index e508ad94ea..735e77f11f 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -625,9 +625,6 @@ static std::vector s_Preset_sla_material_options { "material_ow_support_points_density_relative", "material_ow_absolute_correction", - "material_ow_relative_correction_x", - "material_ow_relative_correction_y", - "material_ow_relative_correction_z", "material_ow_elefant_foot_compensation" }; diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 1c8e13dc3d..132c5682d1 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -4481,7 +4481,6 @@ void PrintConfigDef::init_sla_params() "support_head_penetration", "branchingsupport_head_penetration", "support_head_width", "branchingsupport_head_width", "support_pillar_diameter", "branchingsupport_pillar_diameter", - "relative_correction_x", "relative_correction_y", "relative_correction_z", "elefant_foot_compensation", "absolute_correction", // int "support_points_density_relative" diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index 331f58a348..9cf6ae8038 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -1185,9 +1185,6 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionIntNullable, material_ow_support_points_density_relative)) ((ConfigOptionFloatNullable, material_ow_elefant_foot_compensation)) ((ConfigOptionFloatNullable, material_ow_absolute_correction)) - ((ConfigOptionFloatNullable, material_ow_relative_correction_x)) - ((ConfigOptionFloatNullable, material_ow_relative_correction_y)) - ((ConfigOptionFloatNullable, material_ow_relative_correction_z)) ((ConfigOptionFloat, area_fill)) //tilt params diff --git a/src/libslic3r/SLAPrint.cpp b/src/libslic3r/SLAPrint.cpp index 00b8261ed2..8116cae2ce 100644 --- a/src/libslic3r/SLAPrint.cpp +++ b/src/libslic3r/SLAPrint.cpp @@ -219,9 +219,6 @@ static t_config_option_keys print_config_diffs(const StaticPrintConfig &curr "branchingsupport_head_width"sv, "branchingsupport_pillar_diameter"sv, "support_points_density_relative"sv, - "relative_correction_x"sv, - "relative_correction_y"sv, - "relative_correction_z"sv, "elefant_foot_compensation"sv, "absolute_correction"sv, }; @@ -910,9 +907,6 @@ bool SLAPrint::invalidate_state_by_config_options(const std::vector get_override_opt_kyes_for_line(const std::string for (auto& prefix : { "", "branching" }) opt_keys.push_back(preprefix + prefix + key); } - else if (key == "relative_correction") { - for (auto& axis : { "x", "y", "z" }) - opt_keys.push_back(preprefix + key + "_" + char(axis[0])); - } else opt_keys.push_back(preprefix + key); @@ -5614,17 +5610,7 @@ void TabSLAMaterial::create_line_with_near_label_widget(ConfigOptionsGroupShp op add_options_into_line(optgroup, { {"", L("Default")}, {"branching", L("Branching")} }, key, "material_ow_"); else { const std::string opt_key = std::string("material_ow_") + key; - if (key == "relative_correction") { - Line line = Line{ m_preset_bundle->printers.get_edited_preset().config.def()->get("relative_correction")->full_label, "" }; - for (auto& axis : { "X", "Y", "Z" }) { - auto opt = optgroup->get_option(opt_key + "_" + char(std::tolower(axis[0]))); - opt.opt.label = axis; - line.append_option(opt); - } - optgroup->append_line(line); - } - else - optgroup->append_single_option_line(opt_key); + optgroup->append_single_option_line(opt_key); } Line* line = optgroup->get_last_line(); @@ -5671,7 +5657,6 @@ std::vector>> material_overrides }}, {"Corrections", { "absolute_correction", - "relative_correction", "elefant_foot_compensation" }} }; From b6fc5c6c40a151ff045d8ed9f3764e9142d4eaf2 Mon Sep 17 00:00:00 2001 From: Lukas Matena Date: Mon, 27 May 2024 11:41:23 +0200 Subject: [PATCH 22/25] Added sidetext 'mm' to absolute_correction parameter --- src/libslic3r/PrintConfig.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 132c5682d1..2a25e765e8 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -4030,6 +4030,7 @@ void PrintConfigDef::init_sla_params() def->full_label = L("Printer absolute correction"); def->tooltip = L("Will inflate or deflate the sliced 2D polygons according " "to the sign of the correction."); + def->sidetext = L("mm"); def->mode = comExpert; def->set_default_value(new ConfigOptionFloat(0.0)); From 2d87c5a9b36fdc0eb4f16d0ba29214733bacde86 Mon Sep 17 00:00:00 2001 From: YuSanka Date: Tue, 28 May 2024 14:13:57 +0200 Subject: [PATCH 23/25] Tilt settings: Fixed a typo in detection, if a printer is "SL1". + OSX specific: Fixed a crash on start. (s_Preset_sla_tilt_options is moved to the same file as s_Preset_sla_material_options) --- src/libslic3r/Preset.cpp | 23 ++++++++++++++++++++++- src/libslic3r/PrintConfig.cpp | 26 ++------------------------ 2 files changed, 24 insertions(+), 25 deletions(-) diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index 735e77f11f..ea1024101b 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -628,7 +628,28 @@ static std::vector s_Preset_sla_material_options { "material_ow_elefant_foot_compensation" }; -static std::vector s_Preset_sla_material_options_all = boost::copy_range>(boost::join(s_Preset_sla_material_options, tilt_options())); +static std::vector s_Preset_sla_tilt_options{ + "delay_before_exposure" + ,"delay_after_exposure" + ,"tower_hop_height" + ,"tower_speed" + ,"use_tilt" + ,"tilt_down_initial_speed" + ,"tilt_down_offset_steps" + ,"tilt_down_offset_delay" + ,"tilt_down_finish_speed" + ,"tilt_down_cycles" + ,"tilt_down_delay" + ,"tilt_up_initial_speed" + ,"tilt_up_offset_steps" + ,"tilt_up_offset_delay" + ,"tilt_up_finish_speed" + ,"tilt_up_cycles" + ,"tilt_up_delay" +}; +const std::vector& tilt_options() { return s_Preset_sla_tilt_options; } + +static std::vector s_Preset_sla_material_options_all = boost::copy_range>(boost::join(s_Preset_sla_material_options, s_Preset_sla_tilt_options)); static std::vector s_Preset_sla_printer_options { "printer_technology", diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 2a25e765e8..22a3101b75 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -4958,28 +4958,6 @@ void DynamicPrintConfig::normalize_fdm() opt_wall_transition_length->value = std::max(opt_wall_transition_length->value, 0.001); } -static std::vector s_Preset_sla_tilt_options{ - "delay_before_exposure" - ,"delay_after_exposure" - ,"tower_hop_height" - ,"tower_speed" - ,"use_tilt" - ,"tilt_down_initial_speed" - ,"tilt_down_offset_steps" - ,"tilt_down_offset_delay" - ,"tilt_down_finish_speed" - ,"tilt_down_cycles" - ,"tilt_down_delay" - ,"tilt_up_initial_speed" - ,"tilt_up_offset_steps" - ,"tilt_up_offset_delay" - ,"tilt_up_finish_speed" - ,"tilt_up_cycles" - ,"tilt_up_delay" -}; - -const std::vector& tilt_options() { return s_Preset_sla_tilt_options; } - // Default values containe option pair of values (Below and Above) for each titl modes // (Slow, Fast, HighViscosity and NoTilt) -> used for SL1S and other vendors printers @@ -5089,7 +5067,7 @@ void handle_legacy_sla(DynamicPrintConfig &config) ) { int tilt_mode = config.option("material_print_speed")->getInt(); - const bool is_sl1_model = config.opt_string("printer_model") != "SL1"; + const bool is_sl1_model = config.opt_string("printer_model") == "SL1"; const std::map floats_defs = is_sl1_model ? tilt_options_floats_sl1_defs : tilt_options_floats_defs; const std::map ints_defs = is_sl1_model ? tilt_options_ints_sl1_defs : tilt_options_ints_defs; @@ -5097,7 +5075,7 @@ void handle_legacy_sla(DynamicPrintConfig &config) const std::map> tower_enums_defs = is_sl1_model ? tower_tilt_options_enums_sl1_defs : tower_tilt_options_enums_defs; const std::map> tilt_enums_defs = is_sl1_model ? tilt_options_enums_sl1_defs : tilt_options_enums_defs; - for (const std::string& opt_key : s_Preset_sla_tilt_options) { + for (const std::string& opt_key : tilt_options()) { switch (config.def()->get(opt_key)->type) { case coFloats: { ConfigOptionFloats values = floats_defs.at(opt_key); From d8e04cfd68e6858546a27eb845e78ad8794b52a5 Mon Sep 17 00:00:00 2001 From: YuSanka Date: Tue, 28 May 2024 14:38:35 +0200 Subject: [PATCH 24/25] TabSLAMaterial: Overridden clear_pages() to avoid a crash on re-scaling (SPE-2322, comments) --- src/slic3r/GUI/Tab.cpp | 46 +++++++++++++++++++++++++----------------- src/slic3r/GUI/Tab.hpp | 1 + 2 files changed, 28 insertions(+), 19 deletions(-) diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 6933e0c3ca..657123fd3c 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -5494,25 +5494,6 @@ void TabSLAMaterial::update() wxGetApp().mainframe->on_config_changed(m_config); } -void TabSLAMaterial::msw_rescale() -{ - for (const auto& over_opt : m_overrides_options) - if (wxWindow* win = over_opt.second) - win->SetInitialSize(win->GetBestSize()); - Tab::msw_rescale(); -} - -void TabSLAMaterial::sys_color_changed() -{ - Tab::sys_color_changed(); - - for (const auto& over_opt : m_overrides_options) - if (wxWindow* check_box = over_opt.second) { - wxGetApp().UpdateDarkUI(check_box); - CheckBox::SysColorChanged(check_box); - } -} - void TabSLAMaterial::update_sla_prusa_specific_visibility() { if (m_active_page && m_active_page->title() == "Material printing profile") { @@ -5532,6 +5513,33 @@ void TabSLAMaterial::update_sla_prusa_specific_visibility() } } +void TabSLAMaterial::clear_pages() +{ + Tab::clear_pages(); + + for (auto& over_opt : m_overrides_options) + over_opt.second = nullptr; +} + +void TabSLAMaterial::msw_rescale() +{ + for (const auto& over_opt : m_overrides_options) + if (wxWindow* win = over_opt.second) + win->SetInitialSize(win->GetBestSize()); + Tab::msw_rescale(); +} + +void TabSLAMaterial::sys_color_changed() +{ + Tab::sys_color_changed(); + + for (const auto& over_opt : m_overrides_options) + if (wxWindow* check_box = over_opt.second) { + wxGetApp().UpdateDarkUI(check_box); + CheckBox::SysColorChanged(check_box); + } +} + static void add_options_into_line(ConfigOptionsGroupShp &optgroup, const std::vector> &prefixes, const std::string &optkey, diff --git a/src/slic3r/GUI/Tab.hpp b/src/slic3r/GUI/Tab.hpp index a577f845f8..277c72cb85 100644 --- a/src/slic3r/GUI/Tab.hpp +++ b/src/slic3r/GUI/Tab.hpp @@ -581,6 +581,7 @@ public: void toggle_tilt_options(bool is_above); void toggle_options() override; void update() override; + void clear_pages() override; void msw_rescale() override; void sys_color_changed() override; bool supports_printer_technology(const PrinterTechnology tech) const override { return tech == ptSLA; } From 27bcb590e82ffa7d8dfb3d6c093df24bf0c7b9ea Mon Sep 17 00:00:00 2001 From: Roman Tyr <36745189+rtyr@users.noreply.github.com> Date: Mon, 3 Jun 2024 15:46:25 +0200 Subject: [PATCH 25/25] Added new settings for SLA material profiles. --- resources/profiles/PrusaResearch.idx | 5 +- resources/profiles/PrusaResearch.ini | 237 +++++++++++++++++++++------ 2 files changed, 192 insertions(+), 50 deletions(-) diff --git a/resources/profiles/PrusaResearch.idx b/resources/profiles/PrusaResearch.idx index 875e91094b..f1053366cb 100644 --- a/resources/profiles/PrusaResearch.idx +++ b/resources/profiles/PrusaResearch.idx @@ -1,6 +1,7 @@ -min_slic3r_version = 2.8.0-alpha0 -1.14.0-alpha0 Added values for SLA material profiles. +min_slic3r_version = 2.7.5-rc +1.14.0 Added new settings for SLA material profiles. min_slic3r_version = 2.7.3-beta1 +1.13.4 Updated FW version notification (6.0.1). Added ROSA3D filaments. Updated print profiles for 0.6 nozzle. Updated perimeter speeds in "0.10mm FAST DETAIL" profile (MK4/XL). Slightly increased nozzle temperature for Generic PETG/Prusa PETG/Prusament PETG (0.6n). 1.13.3 Updated FW version notification. 1.13.2 Added material profiles for Prusament Resin Flex Anatomic Red and Prusament Resin Flex Gingiva Mask. 1.13.1 Added material profile for Prusament Resin Model Transparent Clear. Enabled stealth mode support for MINI, XL, MK3.5, MK3.9, MK4 (this mode will be available in FW 6.0.0). diff --git a/resources/profiles/PrusaResearch.ini b/resources/profiles/PrusaResearch.ini index 67465079cd..5e3a8e9570 100644 --- a/resources/profiles/PrusaResearch.ini +++ b/resources/profiles/PrusaResearch.ini @@ -5,7 +5,7 @@ name = Prusa Research # Configuration version of this file. Config file will only be installed, if the config_version differs. # This means, the server may force the PrusaSlicer configuration to be downgraded. -config_version = 1.14.0-alpha0 +config_version = 1.14.0 # Where to get the updates from? config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/PrusaResearch/ changelog_url = https://files.prusa3d.com/?latest=slicer-profiles&lng=%1% @@ -4089,6 +4089,7 @@ bottom_solid_min_thickness = 0.6 infill_anchor = 2.5 infill_anchor_max = 20 support_material_speed = 90 +fill_density = 20% [print:*MK4IS_common08*] inherits = *MK4IS_common* @@ -4150,6 +4151,7 @@ perimeter_speed = 80 external_perimeter_speed = 45 small_perimeter_speed = 45 infill_speed = 120 +solid_infill_speed = 140 gap_fill_speed = 60 top_solid_infill_speed = 80 support_material_speed = 120 @@ -4179,6 +4181,7 @@ solid_infill_acceleration = 3500 top_solid_infill_acceleration = 1500 default_acceleration = 3000 overhang_speed_3 = 80% +bridge_speed = 45 [print:0.15mm STRUCTURAL @MK4IS 0.4] inherits = 0.20mm STRUCTURAL @MK4IS 0.4 @@ -4188,12 +4191,16 @@ bottom_solid_layers = 5 support_material_contact_distance = 0.17 raft_contact_distance = 0.15 infill_speed = 110 +bridge_speed = 45 [print:0.10mm FAST DETAIL @MK4IS 0.4] inherits = 0.15mm SPEED @MK4IS 0.4 layer_height = 0.1 top_solid_layers = 8 bottom_solid_layers = 7 +perimeter_speed = 140 +external_perimeter_speed = 140 +small_perimeter_speed = 140 support_material_contact_distance = 0.17 raft_contact_distance = 0.15 external_perimeter_acceleration = 2000 @@ -4528,10 +4535,10 @@ top_solid_layers = 6 perimeter_speed = 70 external_perimeter_speed = 45 small_perimeter_speed = 45 -solid_infill_speed = 165 -infill_speed = 130 +solid_infill_speed = 160 +infill_speed = 100 top_solid_infill_speed = 70 -bridge_speed = 40 +bridge_speed = 30 gap_fill_speed = 80 external_perimeter_acceleration = 1500 perimeter_acceleration = 2500 @@ -4557,8 +4564,8 @@ top_solid_layers = 5 perimeter_speed = 125 external_perimeter_speed = 125 small_perimeter_speed = 125 -solid_infill_speed = 125 -infill_speed = 200 +solid_infill_speed = 110 +infill_speed = 110 top_solid_infill_speed = 70 bridge_speed = 40 gap_fill_speed = 80 @@ -4584,8 +4591,8 @@ top_solid_layers = 5 perimeter_speed = 80 external_perimeter_speed = 45 small_perimeter_speed = 45 -infill_speed = 120 -solid_infill_speed = 120 +infill_speed = 100 +solid_infill_speed = 110 top_solid_infill_speed = 70 bridge_speed = 30 gap_fill_speed = 80 @@ -4601,7 +4608,7 @@ layer_height = 0.25 perimeter_speed = 90 external_perimeter_speed = 80 small_perimeter_speed = 80 -infill_speed = 200 +infill_speed = 100 solid_infill_speed = 90 top_solid_infill_speed = 60 support_material_speed = 80 @@ -4622,7 +4629,7 @@ perimeter_speed = 80 external_perimeter_speed = 45 small_perimeter_speed = 45 top_solid_infill_speed = 60 -bridge_speed = 40 +bridge_speed = 30 external_perimeter_acceleration = 1500 perimeter_acceleration = 2500 top_solid_infill_acceleration = 1500 @@ -4638,7 +4645,7 @@ top_solid_layers = 4 perimeter_speed = 70 external_perimeter_speed = 70 small_perimeter_speed = 70 -infill_speed = 200 +infill_speed = 100 solid_infill_speed = 70 top_solid_infill_speed = 60 bridge_speed = 40 @@ -4655,6 +4662,8 @@ support_material_contact_distance = 0.25 [print:0.32mm STRUCTURAL @MK4IS 0.6] inherits = 0.32mm SPEED @MK4IS 0.6 +bottom_solid_layers = 4 +top_solid_layers = 5 perimeter_speed = 70 external_perimeter_speed = 45 small_perimeter_speed = 45 @@ -5010,6 +5019,7 @@ infill_anchor_max = 20 bridge_speed = 40 support_tree_angle_slow = 25 support_tree_branch_diameter_double_wall = 5 +fill_density = 20% [print:*XLIS_common08*] inherits = *XLIS_common* @@ -5061,6 +5071,7 @@ perimeter_speed = 80 external_perimeter_speed = 45 small_perimeter_speed = 45 infill_speed = 120 +solid_infill_speed = 140 gap_fill_speed = 65 top_solid_infill_speed = 75 support_material_speed = 120 @@ -5106,6 +5117,7 @@ solid_infill_acceleration = 3500 top_solid_infill_acceleration = 1500 default_acceleration = 2500 overhang_speed_3 = 80% +bridge_speed = 45 [print:0.15mm STRUCTURAL @XLIS 0.4] inherits = 0.20mm STRUCTURAL @XLIS 0.4 @@ -5115,18 +5127,21 @@ bottom_solid_layers = 5 support_material_contact_distance = 0.17 raft_contact_distance = 0.15 infill_speed = 110 +bridge_speed = 45 [print:0.10mm FAST DETAIL @XLIS 0.4] inherits = 0.15mm SPEED @XLIS 0.4 layer_height = 0.1 top_solid_layers = 8 bottom_solid_layers = 7 +perimeter_speed = 140 +external_perimeter_speed = 140 +small_perimeter_speed = 140 support_material_contact_distance = 0.17 raft_contact_distance = 0.15 external_perimeter_acceleration = 2000 perimeter_acceleration = 2000 solid_infill_acceleration = 2500 -small_perimeter_speed = 150 infill_speed = 140 perimeters = 3 top_infill_extrusion_width = 0.4 @@ -5402,8 +5417,8 @@ top_solid_layers = 6 perimeter_speed = 80 external_perimeter_speed = 45 small_perimeter_speed = 45 -solid_infill_speed = 165 -infill_speed = 120 +solid_infill_speed = 160 +infill_speed = 105 top_solid_infill_speed = 70 gap_fill_speed = 75 external_perimeter_acceleration = 1500 @@ -5430,8 +5445,8 @@ top_solid_layers = 5 perimeter_speed = 120 external_perimeter_speed = 120 small_perimeter_speed = 120 -solid_infill_speed = 125 -infill_speed = 200 +solid_infill_speed = 110 +infill_speed = 120 top_solid_infill_speed = 70 gap_fill_speed = 75 external_perimeter_acceleration = 2500 @@ -5455,7 +5470,7 @@ layer_height = 0.2 bottom_solid_layers = 4 top_solid_layers = 5 infill_speed = 120 -solid_infill_speed = 120 +solid_infill_speed = 110 [print:0.25mm SPEED @XLIS 0.6] inherits = *XLIS_common06* @@ -5463,8 +5478,8 @@ layer_height = 0.25 perimeter_speed = 80 external_perimeter_speed = 80 small_perimeter_speed = 80 -infill_speed = 200 -solid_infill_speed = 95 +infill_speed = 100 +solid_infill_speed = 90 top_solid_infill_speed = 60 support_material_speed = 80 gap_fill_speed = 70 @@ -5518,9 +5533,9 @@ top_solid_layers = 4 perimeter_speed = 70 external_perimeter_speed = 70 small_perimeter_speed = 70 -infill_speed = 200 +infill_speed = 100 solid_infill_speed = 70 -top_solid_infill_speed = 65 +top_solid_infill_speed = 60 gap_fill_speed = 65 support_material_speed = 70 external_perimeter_acceleration = 2500 @@ -5535,8 +5550,8 @@ support_material_contact_distance = 0.25 [print:0.32mm STRUCTURAL @XLIS 0.6] inherits = 0.25mm STRUCTURAL @XLIS 0.6 layer_height = 0.32 -bottom_solid_layers = 3 -top_solid_layers = 4 +bottom_solid_layers = 4 +top_solid_layers = 5 perimeter_speed = 70 solid_infill_speed = 70 infill_speed = 70 @@ -5691,6 +5706,7 @@ small_perimeter_speed = 45 gap_fill_speed = 60 top_solid_infill_speed = 80 infill_speed = 115 +solid_infill_speed = 120 support_material_speed = 100 support_material_interface_speed = 50 external_perimeter_acceleration = 1500 @@ -5824,7 +5840,7 @@ perimeter_speed = 70 external_perimeter_speed = 45 small_perimeter_speed = 45 solid_infill_speed = 140 -infill_speed = 140 +infill_speed = 100 top_solid_infill_speed = 70 bridge_speed = 40 gap_fill_speed = 80 @@ -5853,7 +5869,7 @@ perimeter_speed = 115 external_perimeter_speed = 115 small_perimeter_speed = 115 solid_infill_speed = 100 -infill_speed = 120 +infill_speed = 110 top_solid_infill_speed = 70 bridge_speed = 40 gap_fill_speed = 80 @@ -5916,7 +5932,7 @@ external_perimeter_speed = 45 small_perimeter_speed = 45 infill_speed = 70 solid_infill_speed = 60 -top_solid_infill_speed = 55 +top_solid_infill_speed = 50 bridge_speed = 30 gap_fill_speed = 45 support_material_speed = 60 @@ -6066,6 +6082,7 @@ compatible_printers_condition = printer_notes=~/.*MK3.5.*/ and nozzle_diameter[0 [print:0.20mm STRUCTURAL @MK3.5 0.4] inherits = 0.20mm STRUCTURAL @MK4IS 0.4; *MK3.5_common* +solid_infill_speed = 120 compatible_printers_condition = printer_notes=~/.*MK3.5.*/ and nozzle_diameter[0]==0.4 and ! single_extruder_multi_material [print:0.15mm SPEED @MK3.5 0.4] @@ -6080,6 +6097,7 @@ compatible_printers_condition = printer_notes=~/.*MK3.5.*/ and nozzle_diameter[0 [print:0.15mm STRUCTURAL @MK3.5 0.4] inherits = 0.15mm STRUCTURAL @MK4IS 0.4; *MK3.5_common* +solid_infill_speed = 120 compatible_printers_condition = printer_notes=~/.*MK3.5.*/ and nozzle_diameter[0]==0.4 and ! single_extruder_multi_material [print:0.10mm FAST DETAIL @MK3.5 0.4] @@ -6390,7 +6408,7 @@ filament_max_volumetric_speed = 15 [filament:*PETPG*] compatible_printers_condition = printer_notes=~/.*MK4.*/ and nozzle_diameter[0]!=0.6 and nozzle_diameter[0]!=0.8 filament_max_volumetric_speed = 9.5 -start_filament_gcode = "M900 K{if nozzle_diameter[filament_extruder_id]==0.4}0.07{elsif nozzle_diameter[filament_extruder_id]==0.25}0.12{elsif nozzle_diameter[filament_extruder_id]==0.3}0.09{elsif nozzle_diameter[filament_extruder_id]==0.35}0.08{elsif nozzle_diameter[filament_extruder_id]==0.6}0.04{elsif nozzle_diameter[filament_extruder_id]==0.5}0.05{elsif nozzle_diameter[filament_extruder_id]==0.8}0.02{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*(MK4IS|XLIS).*/}\nM572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.055{elsif nozzle_diameter[filament_extruder_id]==0.5}0.042{elsif nozzle_diameter[filament_extruder_id]==0.6}0.032{elsif nozzle_diameter[filament_extruder_id]==0.8}0.018{elsif nozzle_diameter[filament_extruder_id]==0.25}0.18{elsif nozzle_diameter[filament_extruder_id]==0.3}0.1{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp" +start_filament_gcode = "M900 K{if nozzle_diameter[filament_extruder_id]==0.4}0.07{elsif nozzle_diameter[filament_extruder_id]==0.25}0.12{elsif nozzle_diameter[filament_extruder_id]==0.3}0.09{elsif nozzle_diameter[filament_extruder_id]==0.35}0.08{elsif nozzle_diameter[filament_extruder_id]==0.6}0.04{elsif nozzle_diameter[filament_extruder_id]==0.5}0.05{elsif nozzle_diameter[filament_extruder_id]==0.8}0.02{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*(MK4IS|XLIS).*/}\nM572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.053{elsif nozzle_diameter[filament_extruder_id]==0.5}0.042{elsif nozzle_diameter[filament_extruder_id]==0.6}0.032{elsif nozzle_diameter[filament_extruder_id]==0.8}0.018{elsif nozzle_diameter[filament_extruder_id]==0.25}0.18{elsif nozzle_diameter[filament_extruder_id]==0.3}0.1{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp" idle_temperature = 70 filament_retract_length = 0.8 filament_wipe = 1 @@ -7277,7 +7295,7 @@ renamed_from = "Kimya ABS Carbon @PG 0.8" filament_max_volumetric_speed = 14 [filament:Kimya ABS Carbon @MK4] -inherits = Kimya ABS Carbon; *ABSPG* +inherits = Kimya ABS Carbon; *ABSPG*; *04PLUSPG* filament_max_volumetric_speed = 6 [filament:Kimya ABS Carbon @MK4 0.6] @@ -7984,6 +8002,7 @@ inherits = Generic PETG filament_max_volumetric_speed = 14 slowdown_below_layer_time = 17 max_fan_speed = 60 +bridge_fan_speed = 60 compatible_printers_condition = nozzle_diameter[0]==0.6 and printer_model=="MK3.5" [filament:Generic PETG @PG] @@ -7993,7 +8012,9 @@ compatible_printers_condition = printer_notes=~/.*MK4.*/ and printer_notes!~/.*M [filament:Generic PETG @PG 0.6] inherits = Generic PETG; *PET06PG* filament_max_volumetric_speed = 17 -temperature = 235 +temperature = 240 +max_fan_speed = 60 +bridge_fan_speed = 60 compatible_printers_condition = printer_notes=~/.*MK4.*/ and printer_notes!~/.*MK4IS.*/ and nozzle_diameter[0]==0.6 [filament:Generic PETG @PG 0.8] @@ -8008,7 +8029,6 @@ filament_max_volumetric_speed = 9 [filament:Generic PETG @XL 0.6] inherits = Generic PETG @PG 0.6; *PET06XL* -temperature = 235 [filament:Generic PETG @XL 0.8] inherits = Generic PETG @PG 0.8; *PET08XL* @@ -12081,12 +12101,16 @@ compatible_printers_condition = printer_notes=~/.*MK4.*/ and printer_notes!~/.*M [filament:Prusa PETG @PG 0.6] inherits = Prusa PETG; *PET06PG* +temperature = 240 +max_fan_speed = 60 +bridge_fan_speed = 60 compatible_printers_condition = printer_notes=~/.*MK4.*/ and printer_notes!~/.*MK4IS.*/ and nozzle_diameter[0]==0.6 -temperature = 235 [filament:Prusa PETG @PG 0.8] inherits = Prusa PETG; *PET08PG* temperature = 250 +max_fan_speed = 60 +bridge_fan_speed = 60 compatible_printers_condition = printer_notes=~/.*MK4.*/ and printer_notes!~/.*MK4IS.*/ and nozzle_diameter[0]==0.8 [filament:Prusa PETG @XL] @@ -12094,7 +12118,7 @@ inherits = Prusa PETG @PG; *PETXL* [filament:Prusa PETG @XL 0.6] inherits = Prusa PETG @PG 0.6; *PET06XL* -temperature = 235 +temperature = 240 [filament:Prusa PETG @XL 0.8] inherits = Prusa PETG @PG 0.8; *PET08XL* @@ -12115,7 +12139,7 @@ compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_notes=~/.*MK [filament:Prusa PETG @PGIS 0.6] inherits = Generic PETG @PG 0.6 first_layer_temperature = 240 -temperature = 235 +temperature = 240 filament_retract_length = 0.8 filament_wipe = 1 filament_retract_before_wipe = 20 @@ -12177,11 +12201,15 @@ compatible_printers_condition = printer_notes=~/.*MK4.*/ and printer_notes!~/.*M [filament:Prusament PETG @PG 0.6] inherits = Prusament PETG; *PET06PG* -temperature = 240 +temperature = 245 +max_fan_speed = 60 +bridge_fan_speed = 60 compatible_printers_condition = printer_notes=~/.*MK4.*/ and printer_notes!~/.*MK4IS.*/ and nozzle_diameter[0]==0.6 [filament:Prusament PETG @PG 0.8] inherits = Prusament PETG; *PET08PG* +max_fan_speed = 60 +bridge_fan_speed = 60 compatible_printers_condition = printer_notes=~/.*MK4.*/ and printer_notes!~/.*MK4IS.*/ and nozzle_diameter[0]==0.8 [filament:Prusament PETG @XL] @@ -12189,7 +12217,6 @@ inherits = Prusament PETG @PG; *PETXL* [filament:Prusament PETG @XL 0.6] inherits = Prusament PETG @PG 0.6; *PET06XL* -temperature = 240 [filament:Prusament PETG @XL 0.8] inherits = Prusament PETG @PG 0.8; *PET08XL* @@ -13772,6 +13799,120 @@ temperature = 240 [filament:Fiberlogy PP @XL 0.8] inherits = Fiberlogy PP @PG 0.8; *ABS08XL* +[filament:ROSA3D PLA Starter] +inherits = *PLA* +filament_vendor = ROSA3D Filaments +temperature = 215 +filament_cost = 74.90 +filament_density = 1.24 +filament_spool_weight = 250 + +[filament:ROSA3D PLA Starter @PG] +inherits = ROSA3D PLA Starter; *PLAPG* +first_layer_temperature = 220 +temperature = 220 +slowdown_below_layer_time = 8 + +[filament:ROSA3D PLA Starter @PG 0.6] +inherits = ROSA3D PLA Starter; *PLA06PG* +first_layer_temperature = 225 +temperature = 225 + +[filament:ROSA3D PLA Starter @PG 0.8] +inherits = ROSA3D PLA Starter; *PLA08PG* +first_layer_temperature = 225 +temperature = 225 + +[filament:ROSA3D PLA Starter @XL] +inherits = ROSA3D PLA Starter @PG; *PLAXL* + +[filament:ROSA3D PLA Starter @XL 0.6] +inherits = ROSA3D PLA Starter @PG 0.6; *PLA06XL* +filament_max_volumetric_speed = 15.5 + +[filament:ROSA3D PLA Starter @XL 0.8] +inherits = ROSA3D PLA Starter @PG 0.8; *PLA08XL* + +[filament:ROSA3D PLA Silk] +inherits = *PLA* +filament_vendor = ROSA3D Filaments +temperature = 215 +filament_max_volumetric_speed = 7 +filament_cost = 109.90 +filament_density = 1.24 +filament_spool_weight = 250 +start_filament_gcode = "M900 K{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.07{elsif nozzle_diameter[0]==0.35}0.06{elsif nozzle_diameter[0]==0.6}0.03{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.8}0.015{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*(MK4IS|XLIS).*/}\nM572 S{if nozzle_diameter[0]==0.4}0.03{elsif nozzle_diameter[0]==0.5}0.022{elsif nozzle_diameter[0]==0.6}0.018{elsif nozzle_diameter[0]==0.8}0.012{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.075{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp" + +[filament:ROSA3D PLA Silk @PG] +inherits = ROSA3D PLA Silk; *PLAPG* +filament_max_volumetric_speed = 7 +slowdown_below_layer_time = 10 +first_layer_temperature = 225 +temperature = 225 + +[filament:ROSA3D PLA Silk @PG 0.6] +inherits = ROSA3D PLA Silk; *PLA06PG* +filament_max_volumetric_speed = 9 +temperature = 225 + +[filament:ROSA3D PLA Silk @PG 0.8] +inherits = ROSA3D PLA Silk; *PLA08PG* +first_layer_temperature = 225 +temperature = 225 + +[filament:ROSA3D PLA Silk @XL] +inherits = ROSA3D PLA Silk @PG; *PLAXL* +filament_max_volumetric_speed = 7 + +[filament:ROSA3D PLA Silk @XL 0.6] +inherits = ROSA3D PLA Silk @PG 0.6; *PLA06XL* +filament_max_volumetric_speed = 9 +first_layer_temperature = 225 +temperature = 225 + +[filament:ROSA3D PLA Silk @XL 0.8] +inherits = ROSA3D PLA Silk @PG 0.8; *PLA08XL* +filament_max_volumetric_speed = 12 + +[filament:ROSA3D PETG Standard] +inherits = *PET* +filament_vendor = ROSA3D Filaments +first_layer_temperature = 235 +temperature = 235 +filament_cost = 89.90 +filament_density = 1.29 +filament_spool_weight = 250 +filament_type = PETG + +[filament:ROSA3D PETG Standard @PG] +inherits = ROSA3D PETG Standard; *PETPG* + +[filament:ROSA3D PETG Standard @PG 0.6] +inherits = ROSA3D PETG Standard; *PET06PG* +filament_max_volumetric_speed = 15 + +[filament:ROSA3D PETG Standard @PG 0.8] +inherits = ROSA3D PETG Standard; *PET08PG* + +[filament:ROSA3D PETG Standard @XL] +inherits = ROSA3D PETG Standard @PG; *PETXL* + +[filament:ROSA3D PETG Standard @XL 0.6] +inherits = ROSA3D PETG Standard @PG 0.6; *PET06XL* +filament_max_volumetric_speed = 15 + +[filament:ROSA3D PETG Standard @XL 0.8] +inherits = ROSA3D PETG Standard @PG 0.8; *PET08XL* + +[filament:ROSA3D PETG Standard @MINI] +inherits = ROSA3D PETG Standard; *PETMINI* +filament_vendor = ROSA3D Filaments +first_layer_temperature = 240 +temperature = 240 +filament_cost = 89.90 +filament_density = 1.27 +filament_spool_weight = 250 + [filament:Filament PM PLA] inherits = *PLA* renamed_from = "Plasty Mladec PLA" @@ -14506,7 +14647,7 @@ first_layer_temperature = 230 temperature = 225 filament_max_volumetric_speed = 7.5 slowdown_below_layer_time = 8 -start_filament_gcode = "M900 K{if nozzle_diameter[0]==0.4}0.05{elsif nozzle_diameter[0]==0.25}0.14{elsif nozzle_diameter[0]==0.3}0.07{elsif nozzle_diameter[0]==0.35}0.06{elsif nozzle_diameter[0]==0.6}0.03{elsif nozzle_diameter[0]==0.5}0.035{elsif nozzle_diameter[0]==0.8}0.015{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*(MK4IS|XLIS).*/}\nM572 S{if nozzle_diameter[0]==0.4}0.033{elsif nozzle_diameter[0]==0.5}0.022{elsif nozzle_diameter[0]==0.6}0.018{elsif nozzle_diameter[0]==0.8}0.012{elsif nozzle_diameter[0]==0.25}0.12{elsif nozzle_diameter[0]==0.3}0.075{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp" +start_filament_gcode = "M900 K{if nozzle_diameter[filament_extruder_id]==0.4}0.05{elsif nozzle_diameter[filament_extruder_id]==0.25}0.14{elsif nozzle_diameter[filament_extruder_id]==0.3}0.07{elsif nozzle_diameter[filament_extruder_id]==0.35}0.06{elsif nozzle_diameter[filament_extruder_id]==0.6}0.03{elsif nozzle_diameter[filament_extruder_id]==0.5}0.035{elsif nozzle_diameter[filament_extruder_id]==0.8}0.015{else}0{endif} ; Filament gcode\n\n{if printer_notes=~/.*(MK4IS|XLIS).*/}\nM572 S{if nozzle_diameter[filament_extruder_id]==0.4}0.033{elsif nozzle_diameter[filament_extruder_id]==0.5}0.022{elsif nozzle_diameter[filament_extruder_id]==0.6}0.018{elsif nozzle_diameter[filament_extruder_id]==0.8}0.012{elsif nozzle_diameter[filament_extruder_id]==0.25}0.12{elsif nozzle_diameter[filament_extruder_id]==0.3}0.075{else}0{endif} ; Filament gcode\n{endif}\n\nM142 S36 ; set heatbreak target temp" compatible_printers_condition = printer_notes=~/.*PG.*/ and printer_notes=~/.*MK4IS.*/ and nozzle_diameter[0]!=0.8 and nozzle_diameter[0]!=0.6 [filament:Prusament PLA Blend @PGIS 0.6] @@ -20545,7 +20686,7 @@ machine_max_feedrate_y = 400,180 retract_length = 2.5 retract_lift = 0.2 wipe = 0 -start_gcode = M862.3 P "MINI" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM862.5 P2 ; g-code level check\nM862.6 P"Input shaper" ; FW feature check\nM115 U6.0.0+14794\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S170 ; set extruder temp for bed leveling\nM140 S[first_layer_bed_temperature] ; set bed temp\nM109 R170 ; wait for bed leveling temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM569 S1 X Y ; set stealthchop for X Y\nM204 T1250 ; set travel acceleration\nG28 ; home all without mesh bed level\nG29 ; mesh bed leveling \nM104 S[first_layer_temperature] ; set extruder temp\nG92 E0\n\nG1 X0 Y-2 Z3 F2400\n\nM109 S[first_layer_temperature] ; wait for extruder temp\n\n; intro line\nG1 X10 Z0.2 F1000\nG1 X70 E8 F900\nG1 X140 E10 F700\nG92 E0\n\nM569 S0 X Y ; set spreadcycle for X Y\nM204 T[machine_max_acceleration_travel] ; restore travel acceleration\nM572 W0.06 ; set smooth time\nM221 S95 ; set flow\n +start_gcode = M862.3 P "MINI" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM862.5 P2 ; g-code level check\nM862.6 P"Input shaper" ; FW feature check\nM115 U6.0.1+14848\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\nM104 S170 ; set extruder temp for bed leveling\nM140 S[first_layer_bed_temperature] ; set bed temp\nM109 R170 ; wait for bed leveling temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nM569 S1 X Y ; set stealthchop for X Y\nM204 T1250 ; set travel acceleration\nG28 ; home all without mesh bed level\nG29 ; mesh bed leveling \nM104 S[first_layer_temperature] ; set extruder temp\nG92 E0\n\nG1 X0 Y-2 Z3 F2400\n\nM109 S[first_layer_temperature] ; wait for extruder temp\n\n; intro line\nG1 X10 Z0.2 F1000\nG1 X70 E8 F900\nG1 X140 E10 F700\nG92 E0\n\nM569 S0 X Y ; set spreadcycle for X Y\nM204 T[machine_max_acceleration_travel] ; restore travel acceleration\nM572 W0.06 ; set smooth time\nM221 S95 ; set flow\n end_gcode = {if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+2, max_print_height)} F720 ; Move print head up{endif}\nG1 X170 Y170 F4200 ; park print head\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+50, max_print_height)} F720 ; Move print head further up{endif}\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM221 S100 ; reset flow\nM572 S0 ; reset PA\nM569 S1 X Y ; reset to stealthchop for X Y\nM84 ; disable motors\n; max_layer_z = [max_layer_z] printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_MINIIS\nNO_TEMPLATES\n before_layer_gcode = ;BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]\nM201 X{interpolate_table(extruded_weight_total, (0,4000), (1000,1700), (10000,1700))} Y{interpolate_table(extruded_weight_total, (0,4000), (1000,1700), (10000,1700))}\n{if ! spiral_vase}M74 W[extruded_weight_total]{endif}\n @@ -20625,7 +20766,7 @@ retract_before_travel = 1.5 retract_before_wipe = 80% retract_layer_change = 1 retract_length = 0.8 -start_gcode = M17 ; enable steppers\nM862.3 P "XL" ; printer model check\nM115 U6.0.0+14794\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n; set print area\nM555 X{first_layer_print_min[0]} Y{first_layer_print_min[1]} W{(first_layer_print_max[0]) - (first_layer_print_min[0])} H{(first_layer_print_max[1]) - (first_layer_print_min[1])}\n; inform about nozzle diameter\nM862.1 P[nozzle_diameter]\n; set & wait for bed and extruder temp for MBL\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 T0 S{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == "PC" or filament_type[0] == "PA") ? (first_layer_temperature[0] - 25) : (filament_type[0] == "FLEX") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; set extruder temp for bed leveling\nM109 T0 R{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == "PC" or filament_type[0] == "PA") ? (first_layer_temperature[0] - 25) : (filament_type[0] == "FLEX") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n; home carriage, pick tool, home all\nG28 XY\nM84 E ; turn off E motor\nG28 Z\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nG29 G ; absorb heat\n; move to the nozzle cleanup area\nG1 X{(min(((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))), first_layer_print_min[0])) + 32} Y{(min((first_layer_print_min[1] - 7), first_layer_print_min[1]))} Z{5} F4800\nM302 S160 ; lower cold extrusion limit to 160C\nG1 E{-(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; retraction for nozzle cleanup\n; nozzle cleanup\nM84 E ; turn off E motor\nG29 P9 X{((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)))} Y{(first_layer_print_min[1] - 7)} W{32} H{7}\nG0 Z10 F480 ; move away in Z\n{if first_layer_bed_temperature[0] > 60}\nG0 Z70 F480 ; move away (a bit more) in Z\nG0 X30 Y{print_bed_min[1]} F6000 ; move away in X/Y for higher bed temperatures\n{endif}\nM106 S100 ; cool off the nozzle\nM107 ; stop cooling off the nozzle - turn off the fan\n; MBL\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X30 Y0 W50 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\nM104 S[first_layer_temperature] ; set extruder temp\nG1 Z10 F720 ; move away in Z\nG0 X30 Y-8 F6000 ; move next to the sheet\n; wait for extruder temp\nM109 T0 S{first_layer_temperature[0]}\n;\n; purge\n;\nG92 E0 ; reset extruder position\nG0 X{(0 == 0 ? 30 : (0 == 1 ? 150 : (0 == 2 ? 210 : 330)))} Y{(0 < 4 ? -8 : -5.5)} ; move close to the sheet's edge\nG1 E{(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E10 X40 Z0.2 F500 ; purge\nG0 X70 E9 F800 ; purge\nG0 X{70 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{70 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG92 E0 ; reset extruder position\n +start_gcode = M17 ; enable steppers\nM862.3 P "XL" ; printer model check\nM115 U6.0.1+14848\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n; set print area\nM555 X{first_layer_print_min[0]} Y{first_layer_print_min[1]} W{(first_layer_print_max[0]) - (first_layer_print_min[0])} H{(first_layer_print_max[1]) - (first_layer_print_min[1])}\n; inform about nozzle diameter\nM862.1 P[nozzle_diameter]\n; set & wait for bed and extruder temp for MBL\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 T0 S{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == "PC" or filament_type[0] == "PA") ? (first_layer_temperature[0] - 25) : (filament_type[0] == "FLEX") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; set extruder temp for bed leveling\nM109 T0 R{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == "PC" or filament_type[0] == "PA") ? (first_layer_temperature[0] - 25) : (filament_type[0] == "FLEX") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n; home carriage, pick tool, home all\nG28 XY\nM84 E ; turn off E motor\nG28 Z\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nG29 G ; absorb heat\n; move to the nozzle cleanup area\nG1 X{(min(((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))), first_layer_print_min[0])) + 32} Y{(min((first_layer_print_min[1] - 7), first_layer_print_min[1]))} Z{5} F4800\nM302 S160 ; lower cold extrusion limit to 160C\nG1 E{-(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; retraction for nozzle cleanup\n; nozzle cleanup\nM84 E ; turn off E motor\nG29 P9 X{((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)))} Y{(first_layer_print_min[1] - 7)} W{32} H{7}\nG0 Z10 F480 ; move away in Z\n{if first_layer_bed_temperature[0] > 60}\nG0 Z70 F480 ; move away (a bit more) in Z\nG0 X30 Y{print_bed_min[1]} F6000 ; move away in X/Y for higher bed temperatures\n{endif}\nM106 S100 ; cool off the nozzle\nM107 ; stop cooling off the nozzle - turn off the fan\n; MBL\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X30 Y0 W50 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\nM104 S[first_layer_temperature] ; set extruder temp\nG1 Z10 F720 ; move away in Z\nG0 X30 Y-8 F6000 ; move next to the sheet\n; wait for extruder temp\nM109 T0 S{first_layer_temperature[0]}\n;\n; purge\n;\nG92 E0 ; reset extruder position\nG0 X{(0 == 0 ? 30 : (0 == 1 ? 150 : (0 == 2 ? 210 : 330)))} Y{(0 < 4 ? -8 : -5.5)} ; move close to the sheet's edge\nG1 E{(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E10 X40 Z0.2 F500 ; purge\nG0 X70 E9 F800 ; purge\nG0 X{70 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{70 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG92 E0 ; reset extruder position\n default_print_profile = 0.20mm QUALITY @XL 0.4 default_filament_profile = "Prusament PLA @PG" thumbnails = 16x16/QOI, 313x173/QOI, 440x240/QOI, 480x240/QOI, 640x480/PNG @@ -20653,7 +20794,7 @@ machine_max_feedrate_e = 100,100 machine_max_feedrate_x = 400,140 machine_max_feedrate_y = 400,140 printer_notes = Do not remove the keywords below.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_XLIS\nPG\nINPUT_SHAPER -start_gcode = M17 ; enable steppers\nM862.3 P "XL" ; printer model check\nM862.5 P2 ; g-code level check\nM862.6 P"Input shaper" ; FW feature check\nM115 U6.0.0+14794\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n; set print area\nM555 X{first_layer_print_min[0]} Y{first_layer_print_min[1]} W{(first_layer_print_max[0]) - (first_layer_print_min[0])} H{(first_layer_print_max[1]) - (first_layer_print_min[1])}\n; inform about nozzle diameter\nM862.1 P[nozzle_diameter]\n; set & wait for bed and extruder temp for MBL\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 T0 S{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == "PC" or filament_type[0] == "PA") ? (first_layer_temperature[0] - 25) : (filament_type[0] == "FLEX") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; set extruder temp for bed leveling\nM109 T0 R{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == "PC" or filament_type[0] == "PA") ? (first_layer_temperature[0] - 25) : (filament_type[0] == "FLEX") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n; home carriage, pick tool, home all\nG28 XY\nM84 E ; turn off E motor\nG28 Z\n\nM104 T{initial_tool} S{if is_nil(idle_temperature[initial_tool])}70{else}{idle_temperature[initial_tool]}{endif}\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nG29 G ; absorb heat\n\nM109 T0 R{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == "PC" or filament_type[0] == "PA") ? (first_layer_temperature[0] - 25) : (filament_type[0] == "FLEX") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} \n; wait for temp\n\n; move to the nozzle cleanup area\nG1 X{(min(((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))), first_layer_print_min[0])) + 32} Y{(min((first_layer_print_min[1] - 7), first_layer_print_min[1]))} Z{5} F4800\nM302 S160 ; lower cold extrusion limit to 160C\nG1 E{-(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; retraction for nozzle cleanup\n; nozzle cleanup\nM84 E ; turn off E motor\nG29 P9 X{((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)))} Y{(first_layer_print_min[1] - 7)} W{32} H{7}\nG0 Z10 F480 ; move away in Z\n{if first_layer_bed_temperature[0] > 60}\nG0 Z70 F480 ; move away (a bit more) in Z\nG0 X30 Y{print_bed_min[1]} F6000 ; move away in X/Y for higher bed temperatures\n{endif}\nM106 S100 ; cool off the nozzle\nM107 ; stop cooling off the nozzle - turn off the fan\n; MBL\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X30 Y0 W50 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\nM104 S[first_layer_temperature] ; set extruder temp\nG1 Z10 F720 ; move away in Z\nG0 X30 Y-8 F6000 ; move next to the sheet\n; wait for extruder temp\nM109 T0 S{first_layer_temperature[0]}\n;\n; purge\n;\nG92 E0 ; reset extruder position\nG0 X{(0 == 0 ? 30 : (0 == 1 ? 150 : (0 == 2 ? 210 : 330)))} Y{(0 < 4 ? -8 : -5.5)} ; move close to the sheet's edge\nG1 E{(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E10 X40 Z0.2 F500 ; purge\nG0 X70 E9 F800 ; purge\nG0 X{70 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{70 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG92 E0 ; reset extruder position\n\nM593 X T2 F38.4\nM593 Y T2 F39.2\n +start_gcode = M17 ; enable steppers\nM862.3 P "XL" ; printer model check\nM862.5 P2 ; g-code level check\nM862.6 P"Input shaper" ; FW feature check\nM115 U6.0.1+14848\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n; set print area\nM555 X{first_layer_print_min[0]} Y{first_layer_print_min[1]} W{(first_layer_print_max[0]) - (first_layer_print_min[0])} H{(first_layer_print_max[1]) - (first_layer_print_min[1])}\n; inform about nozzle diameter\nM862.1 P[nozzle_diameter]\n; set & wait for bed and extruder temp for MBL\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 T0 S{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == "PC" or filament_type[0] == "PA") ? (first_layer_temperature[0] - 25) : (filament_type[0] == "FLEX") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; set extruder temp for bed leveling\nM109 T0 R{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == "PC" or filament_type[0] == "PA") ? (first_layer_temperature[0] - 25) : (filament_type[0] == "FLEX") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n; home carriage, pick tool, home all\nG28 XY\nM84 E ; turn off E motor\nG28 Z\n\nM104 T{initial_tool} S{if is_nil(idle_temperature[initial_tool])}70{else}{idle_temperature[initial_tool]}{endif}\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nG29 G ; absorb heat\n\nM109 T0 R{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == "PC" or filament_type[0] == "PA") ? (first_layer_temperature[0] - 25) : (filament_type[0] == "FLEX") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} \n; wait for temp\n\n; move to the nozzle cleanup area\nG1 X{(min(((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))), first_layer_print_min[0])) + 32} Y{(min((first_layer_print_min[1] - 7), first_layer_print_min[1]))} Z{5} F4800\nM302 S160 ; lower cold extrusion limit to 160C\nG1 E{-(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; retraction for nozzle cleanup\n; nozzle cleanup\nM84 E ; turn off E motor\nG29 P9 X{((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)))} Y{(first_layer_print_min[1] - 7)} W{32} H{7}\nG0 Z10 F480 ; move away in Z\n{if first_layer_bed_temperature[0] > 60}\nG0 Z70 F480 ; move away (a bit more) in Z\nG0 X30 Y{print_bed_min[1]} F6000 ; move away in X/Y for higher bed temperatures\n{endif}\nM106 S100 ; cool off the nozzle\nM107 ; stop cooling off the nozzle - turn off the fan\n; MBL\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X30 Y0 W50 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\nM104 S[first_layer_temperature] ; set extruder temp\nG1 Z10 F720 ; move away in Z\nG0 X30 Y-8 F6000 ; move next to the sheet\n; wait for extruder temp\nM109 T0 S{first_layer_temperature[0]}\n;\n; purge\n;\nG92 E0 ; reset extruder position\nG0 X{(0 == 0 ? 30 : (0 == 1 ? 150 : (0 == 2 ? 210 : 330)))} Y{(0 < 4 ? -8 : -5.5)} ; move close to the sheet's edge\nG1 E{(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E10 X40 Z0.2 F500 ; purge\nG0 X70 E9 F800 ; purge\nG0 X{70 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{70 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG92 E0 ; reset extruder position\n default_print_profile = 0.20mm SPEED @XLIS 0.4 default_filament_profile = "Prusament PLA @XLIS" @@ -20676,7 +20817,7 @@ retract_restart_extra = 0,0,0,0,0 retract_restart_extra_toolchange = 0,0,0,0,0 wipe = 1,1,1,1,1 extruder_colour = #FF8000;#DB5182;#3EC0FF;#FF4F4F;#FBEB7D -start_gcode = M17 ; enable steppers\nM862.3 P "XL" ; printer model check\nM115 U6.0.0+14794\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n; set print area\nM555 X{first_layer_print_min[0]} Y{first_layer_print_min[1]} W{(first_layer_print_max[0]) - (first_layer_print_min[0])} H{(first_layer_print_max[1]) - (first_layer_print_min[1])}\n; inform about nozzle diameter\n{if (is_extruder_used[0])}M862.1 T0 P{nozzle_diameter[0]}{endif}\n{if (is_extruder_used[1])}M862.1 T1 P{nozzle_diameter[1]}{endif}\n{if (is_extruder_used[2])}M862.1 T2 P{nozzle_diameter[2]}{endif}\n{if (is_extruder_used[3])}M862.1 T3 P{nozzle_diameter[3]}{endif}\n{if (is_extruder_used[4])}M862.1 T4 P{nozzle_diameter[4]}{endif}\n\n; turn off unused heaters\n{if ! is_extruder_used[0]} M104 T0 S0 {endif}\n{if ! is_extruder_used[1]} M104 T1 S0 {endif}\n{if num_extruders > 2 and ! is_extruder_used[2]} M104 T2 S0 {endif}\n{if num_extruders > 3 and ! is_extruder_used[3]} M104 T3 S0 {endif}\n{if num_extruders > 4 and ! is_extruder_used[4]} M104 T4 S0 {endif}\n\nM217 Z{max(zhop, 2.0)} ; set toolchange z hop to 2mm, or zhop variable from slicer if higher\n; set bed and extruder temp for MBL\nM140 S[first_layer_bed_temperature] ; set bed temp\nG0 Z5 ; add Z clearance\nM109 T{initial_tool} S{((filament_notes[initial_tool]=~/.*HT_MBL10.*/) ? (first_layer_temperature[initial_tool] - 10) : (filament_type[initial_tool] == "PC" or filament_type[initial_tool] == "PA") ? (first_layer_temperature[initial_tool] - 25) : (filament_type[initial_tool] == "FLEX") ? 210 : (filament_type[initial_tool]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n\n; Home XY\nG28 XY\n; try picking tools used in print\nG1 F{travel_speed * 60}\n{if (is_extruder_used[0]) and (initial_tool != 0)}T0 S1 L0 D0{endif}\n{if (is_extruder_used[1]) and (initial_tool != 1)}T1 S1 L0 D0{endif}\n{if (is_extruder_used[2]) and (initial_tool != 2)}T2 S1 L0 D0{endif}\n{if (is_extruder_used[3]) and (initial_tool != 3)}T3 S1 L0 D0{endif}\n{if (is_extruder_used[4]) and (initial_tool != 4)}T4 S1 L0 D0{endif}\n; select tool that will be used to home & MBL\nT{initial_tool} S1 L0 D0\n; home Z with MBL tool\nM84 E ; turn off E motor\nG28 Z\nG0 Z5 ; add Z clearance\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nG29 G ; absorb heat\n; move to the nozzle cleanup area\nG1 X{(min(((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))), first_layer_print_min[0])) + 32} Y{(min((first_layer_print_min[1] - 7), first_layer_print_min[1]))} Z{5} F{(travel_speed * 60)}\nM302 S160 ; lower cold extrusion limit to 160C\nG1 E{-(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; retraction for nozzle cleanup\n; nozzle cleanup\nM84 E ; turn off E motor\nG29 P9 X{((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)))} Y{(first_layer_print_min[1] - 7)} W{32} H{7}\nG0 Z5 F480 ; move away in Z\nM107 ; turn off the fan\n; MBL\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X30 Y0 W{(((is_extruder_used[4]) or ((is_extruder_used[3]) or (is_extruder_used[2]))) ? "300" : ((is_extruder_used[1]) ? "130" : "50"))} H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\nG1 Z10 F720 ; move away in Z\nG1 F{travel_speed * 60}\nP0 S1 L1 D0; park the tool\n; set extruder temp\n{if first_layer_temperature[0] > 0 and (is_extruder_used[0])}M104 T0 S{first_layer_temperature[0]}{endif}\n{if first_layer_temperature[1] > 0 and (is_extruder_used[1])}M104 T1 S{first_layer_temperature[1]}{endif}\n{if first_layer_temperature[2] > 0 and (is_extruder_used[2])}M104 T2 S{first_layer_temperature[2]}{endif}\n{if first_layer_temperature[3] > 0 and (is_extruder_used[3])}M104 T3 S{first_layer_temperature[3]}{endif}\n{if first_layer_temperature[4] > 0 and (is_extruder_used[4])}M104 T4 S{first_layer_temperature[4]}{endif}\n{if (is_extruder_used[0]) and initial_tool != 0}\n;\n; purge first tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T0 S{first_layer_temperature[0]}\nT0 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(0 == 0 ? 30 : (0 == 1 ? 150 : (0 == 2 ? 210 : 330)))} Y{(0 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[0])}10{else}30{endif} X40 Z0.2 F{if is_nil(filament_multitool_ramming[0])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X70 E9 F800 ; continue purging and wipe the nozzle\nG0 X{70 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{70 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[0]} F2400 ; retract\n{e_retracted[0] = 1.5 * retract_length[0]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(is_nil(idle_temperature[0]) ? (first_layer_temperature[0] + standby_temperature_delta) : (idle_temperature[0]))} T0\n{endif}\n{if (is_extruder_used[1]) and initial_tool != 1}\n;\n; purge second tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T1 S{first_layer_temperature[1]}\nT1 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(1 == 0 ? 30 : (1 == 1 ? 150 : (1 == 2 ? 210 : 330)))} Y{(1 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[1])}10{else}30{endif} X140 Z0.2 F{if is_nil(filament_multitool_ramming[1])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X110 E9 F800 ; continue purging and wipe the nozzle\nG0 X{110 - 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{110 - 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[1]} F2400 ; retract\n{e_retracted[1] = 1.5 * retract_length[1]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(is_nil(idle_temperature[1]) ? (first_layer_temperature[1] + standby_temperature_delta) : (idle_temperature[1]))} T1\n{endif}\n{if (is_extruder_used[2]) and initial_tool != 2}\n;\n; purge third tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T2 S{first_layer_temperature[2]}\nT2 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(2 == 0 ? 30 : (2 == 1 ? 150 : (2 == 2 ? 210 : 330)))} Y{(2 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[2])}10{else}30{endif} X220 Z0.2 F{if is_nil(filament_multitool_ramming[2])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X250 E9 F800 ; continue purging and wipe the nozzle\nG0 X{250 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{250 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[2]} F2400 ; retract\n{e_retracted[2] = 1.5 * retract_length[2]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(is_nil(idle_temperature[2]) ? (first_layer_temperature[2] + standby_temperature_delta) : (idle_temperature[2]))} T2\n{endif}\n{if (is_extruder_used[3]) and initial_tool != 3}\n;\n; purge fourth tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T3 S{first_layer_temperature[3]}\nT3 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(3 == 0 ? 30 : (3 == 1 ? 150 : (3 == 2 ? 210 : 330)))} Y{(3 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[3])}10{else}30{endif} X320 Z0.2 F{if is_nil(filament_multitool_ramming[3])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X290 E9 F800 ; continue purging and wipe the nozzle\nG0 X{290 - 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{290 - 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[3]} F2400 ; retract\n{e_retracted[3] = 1.5 * retract_length[3]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(is_nil(idle_temperature[3]) ? (first_layer_temperature[3] + standby_temperature_delta) : (idle_temperature[3]))} T3\n{endif}\n{if (is_extruder_used[4]) and initial_tool != 4}\n;\n; purge fifth tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T4 S{first_layer_temperature[4]}\nT4 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(4 == 0 ? 30 : (4 == 1 ? 150 : (4 == 2 ? 210 : 330)))} Y{(4 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[4])}10{else}30{endif} X320 Z0.2 F{if is_nil(filament_multitool_ramming[4])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X290 E9 F800 ; continue purging and wipe the nozzle\nG0 X{290 - 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{290 - 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[4]} F2400 ; retract\n{e_retracted[4] = 1.5 * retract_length[4]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(is_nil(idle_temperature[4]) ? (first_layer_temperature[4] + standby_temperature_delta) : (idle_temperature[4]))} T4\n{endif}\n;\n; purge initial tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T{initial_tool} S{first_layer_temperature[initial_tool]}\nT{initial_tool} S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330)))} Y{(initial_tool < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[initial_tool])}10{else}30{endif} X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330))) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 10)} Z0.2 F{if is_nil(filament_multitool_ramming[initial_tool])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330))) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 40)} E9 F800 ; continue purging and wipe the nozzle\nG0 X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330))) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 40) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 3)} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330))) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 40) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 3 * 2)} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[initial_tool]} F2400 ; retract\n{e_retracted[initial_tool] = 1.5 * retract_length[initial_tool]}\nG92 E0 ; reset extruder position +start_gcode = M17 ; enable steppers\nM862.3 P "XL" ; printer model check\nM115 U6.0.1+14848\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n; set print area\nM555 X{first_layer_print_min[0]} Y{first_layer_print_min[1]} W{(first_layer_print_max[0]) - (first_layer_print_min[0])} H{(first_layer_print_max[1]) - (first_layer_print_min[1])}\n; inform about nozzle diameter\n{if (is_extruder_used[0])}M862.1 T0 P{nozzle_diameter[0]}{endif}\n{if (is_extruder_used[1])}M862.1 T1 P{nozzle_diameter[1]}{endif}\n{if (is_extruder_used[2])}M862.1 T2 P{nozzle_diameter[2]}{endif}\n{if (is_extruder_used[3])}M862.1 T3 P{nozzle_diameter[3]}{endif}\n{if (is_extruder_used[4])}M862.1 T4 P{nozzle_diameter[4]}{endif}\n\n; turn off unused heaters\n{if ! is_extruder_used[0]} M104 T0 S0 {endif}\n{if ! is_extruder_used[1]} M104 T1 S0 {endif}\n{if num_extruders > 2 and ! is_extruder_used[2]} M104 T2 S0 {endif}\n{if num_extruders > 3 and ! is_extruder_used[3]} M104 T3 S0 {endif}\n{if num_extruders > 4 and ! is_extruder_used[4]} M104 T4 S0 {endif}\n\nM217 Z{max(zhop, 2.0)} ; set toolchange z hop to 2mm, or zhop variable from slicer if higher\n; set bed and extruder temp for MBL\nM140 S[first_layer_bed_temperature] ; set bed temp\nG0 Z5 ; add Z clearance\nM109 T{initial_tool} S{((filament_notes[initial_tool]=~/.*HT_MBL10.*/) ? (first_layer_temperature[initial_tool] - 10) : (filament_type[initial_tool] == "PC" or filament_type[initial_tool] == "PA") ? (first_layer_temperature[initial_tool] - 25) : (filament_type[initial_tool] == "FLEX") ? 210 : (filament_type[initial_tool]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n\n; Home XY\nG28 XY\n; try picking tools used in print\nG1 F{travel_speed * 60}\n{if (is_extruder_used[0]) and (initial_tool != 0)}T0 S1 L0 D0{endif}\n{if (is_extruder_used[1]) and (initial_tool != 1)}T1 S1 L0 D0{endif}\n{if (is_extruder_used[2]) and (initial_tool != 2)}T2 S1 L0 D0{endif}\n{if (is_extruder_used[3]) and (initial_tool != 3)}T3 S1 L0 D0{endif}\n{if (is_extruder_used[4]) and (initial_tool != 4)}T4 S1 L0 D0{endif}\n; select tool that will be used to home & MBL\nT{initial_tool} S1 L0 D0\n; home Z with MBL tool\nM84 E ; turn off E motor\nG28 Z\nG0 Z5 ; add Z clearance\nM190 S[first_layer_bed_temperature] ; wait for bed temp\nG29 G ; absorb heat\n; move to the nozzle cleanup area\nG1 X{(min(((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))), first_layer_print_min[0])) + 32} Y{(min((first_layer_print_min[1] - 7), first_layer_print_min[1]))} Z{5} F{(travel_speed * 60)}\nM302 S160 ; lower cold extrusion limit to 160C\nG1 E{-(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; retraction for nozzle cleanup\n; nozzle cleanup\nM84 E ; turn off E motor\nG29 P9 X{((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)))} Y{(first_layer_print_min[1] - 7)} W{32} H{7}\nG0 Z5 F480 ; move away in Z\nM107 ; turn off the fan\n; MBL\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X30 Y0 W{(((is_extruder_used[4]) or ((is_extruder_used[3]) or (is_extruder_used[2]))) ? "300" : ((is_extruder_used[1]) ? "130" : "50"))} H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\nG1 Z10 F720 ; move away in Z\nG1 F{travel_speed * 60}\nP0 S1 L1 D0; park the tool\n; set extruder temp\n{if first_layer_temperature[0] > 0 and (is_extruder_used[0])}M104 T0 S{first_layer_temperature[0]}{endif}\n{if first_layer_temperature[1] > 0 and (is_extruder_used[1])}M104 T1 S{first_layer_temperature[1]}{endif}\n{if first_layer_temperature[2] > 0 and (is_extruder_used[2])}M104 T2 S{first_layer_temperature[2]}{endif}\n{if first_layer_temperature[3] > 0 and (is_extruder_used[3])}M104 T3 S{first_layer_temperature[3]}{endif}\n{if first_layer_temperature[4] > 0 and (is_extruder_used[4])}M104 T4 S{first_layer_temperature[4]}{endif}\n{if (is_extruder_used[0]) and initial_tool != 0}\n;\n; purge first tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T0 S{first_layer_temperature[0]}\nT0 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(0 == 0 ? 30 : (0 == 1 ? 150 : (0 == 2 ? 210 : 330)))} Y{(0 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[0])}10{else}30{endif} X40 Z0.2 F{if is_nil(filament_multitool_ramming[0])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X70 E9 F800 ; continue purging and wipe the nozzle\nG0 X{70 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{70 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[0]} F2400 ; retract\n{e_retracted[0] = 1.5 * retract_length[0]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(is_nil(idle_temperature[0]) ? (first_layer_temperature[0] + standby_temperature_delta) : (idle_temperature[0]))} T0\n{endif}\n{if (is_extruder_used[1]) and initial_tool != 1}\n;\n; purge second tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T1 S{first_layer_temperature[1]}\nT1 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(1 == 0 ? 30 : (1 == 1 ? 150 : (1 == 2 ? 210 : 330)))} Y{(1 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[1])}10{else}30{endif} X140 Z0.2 F{if is_nil(filament_multitool_ramming[1])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X110 E9 F800 ; continue purging and wipe the nozzle\nG0 X{110 - 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{110 - 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[1]} F2400 ; retract\n{e_retracted[1] = 1.5 * retract_length[1]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(is_nil(idle_temperature[1]) ? (first_layer_temperature[1] + standby_temperature_delta) : (idle_temperature[1]))} T1\n{endif}\n{if (is_extruder_used[2]) and initial_tool != 2}\n;\n; purge third tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T2 S{first_layer_temperature[2]}\nT2 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(2 == 0 ? 30 : (2 == 1 ? 150 : (2 == 2 ? 210 : 330)))} Y{(2 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[2])}10{else}30{endif} X220 Z0.2 F{if is_nil(filament_multitool_ramming[2])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X250 E9 F800 ; continue purging and wipe the nozzle\nG0 X{250 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{250 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[2]} F2400 ; retract\n{e_retracted[2] = 1.5 * retract_length[2]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(is_nil(idle_temperature[2]) ? (first_layer_temperature[2] + standby_temperature_delta) : (idle_temperature[2]))} T2\n{endif}\n{if (is_extruder_used[3]) and initial_tool != 3}\n;\n; purge fourth tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T3 S{first_layer_temperature[3]}\nT3 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(3 == 0 ? 30 : (3 == 1 ? 150 : (3 == 2 ? 210 : 330)))} Y{(3 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[3])}10{else}30{endif} X320 Z0.2 F{if is_nil(filament_multitool_ramming[3])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X290 E9 F800 ; continue purging and wipe the nozzle\nG0 X{290 - 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{290 - 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[3]} F2400 ; retract\n{e_retracted[3] = 1.5 * retract_length[3]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(is_nil(idle_temperature[3]) ? (first_layer_temperature[3] + standby_temperature_delta) : (idle_temperature[3]))} T3\n{endif}\n{if (is_extruder_used[4]) and initial_tool != 4}\n;\n; purge fifth tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T4 S{first_layer_temperature[4]}\nT4 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(4 == 0 ? 30 : (4 == 1 ? 150 : (4 == 2 ? 210 : 330)))} Y{(4 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[4])}10{else}30{endif} X320 Z0.2 F{if is_nil(filament_multitool_ramming[4])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X290 E9 F800 ; continue purging and wipe the nozzle\nG0 X{290 - 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{290 - 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[4]} F2400 ; retract\n{e_retracted[4] = 1.5 * retract_length[4]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(is_nil(idle_temperature[4]) ? (first_layer_temperature[4] + standby_temperature_delta) : (idle_temperature[4]))} T4\n{endif}\n;\n; purge initial tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T{initial_tool} S{first_layer_temperature[initial_tool]}\nT{initial_tool} S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330)))} Y{(initial_tool < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[initial_tool])}10{else}30{endif} X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330))) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 10)} Z0.2 F{if is_nil(filament_multitool_ramming[initial_tool])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330))) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 40)} E9 F800 ; continue purging and wipe the nozzle\nG0 X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330))) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 40) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 3)} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330))) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 40) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 3 * 2)} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[initial_tool]} F2400 ; retract\n{e_retracted[initial_tool] = 1.5 * retract_length[initial_tool]}\nG92 E0 ; reset extruder position end_gcode = G4 ; wait\n\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+5, max_print_height)}{endif} ; Move bed down\n\nP0 S1 ; park tool\n\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+97, max_print_height)} F300{endif} ; Move bed further down\n\n; turn off extruder heaters\n{if is_extruder_used[0]} M104 T0 S0 {endif}\n{if is_extruder_used[1]} M104 T1 S0 {endif}\n{if is_extruder_used[2]} M104 T2 S0 {endif}\n{if is_extruder_used[3]} M104 T3 S0 {endif}\n{if is_extruder_used[4]} M104 T4 S0 {endif}\n\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nM221 S100 ; reset flow percentage\nM84 ; disable motors\nM77 ; stop print timer\n; max_layer_z = [max_layer_z] toolchange_gcode = ; Change Tool[previous_extruder] -> Tool[next_extruder] (layer [layer_num])\n{\nlocal max_speed_toolchange = 350.0;\nlocal wait_for_extruder_temp = true;\nposition[2] = position[2] + 2.0;\n\nlocal speed_toolchange = max_speed_toolchange;\nif travel_speed < max_speed_toolchange then\n speed_toolchange = travel_speed;\nendif\n"G1 F" + (speed_toolchange * 60) + "\n";\nif wait_for_extruder_temp and not((layer_num < 0) and (next_extruder == initial_tool)) then\n "P0 S1 L2 D0\n";\n "; " + layer_num + "\n";\n if layer_num == 0 then\n "M109 S" + first_layer_temperature[next_extruder] + " T" + next_extruder + "\n";\n else\n "M109 S" + temperature[next_extruder] + " T" + next_extruder + "\n";\n endif\nendif\n"T" + next_extruder + " S1 L0 D0\n";\n} color_change_gcode = M600 @@ -20697,7 +20838,7 @@ machine_max_feedrate_e = 100,100 machine_max_feedrate_x = 400,140 machine_max_feedrate_y = 400,140 printer_notes = Do not remove the keywords below.\nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_XLIS\nPG\nINPUT_SHAPER -start_gcode = M17 ; enable steppers\nM862.3 P "XL" ; printer model check\nM862.5 P2 ; g-code level check\nM862.6 P"Input shaper" ; FW feature check\nM115 U6.0.0+14794\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n; set print area\nM555 X{first_layer_print_min[0]} Y{first_layer_print_min[1]} W{(first_layer_print_max[0]) - (first_layer_print_min[0])} H{(first_layer_print_max[1]) - (first_layer_print_min[1])}\n; inform about nozzle diameter\n{if (is_extruder_used[0])}M862.1 T0 P{nozzle_diameter[0]}{endif}\n{if (is_extruder_used[1])}M862.1 T1 P{nozzle_diameter[1]}{endif}\n{if (is_extruder_used[2])}M862.1 T2 P{nozzle_diameter[2]}{endif}\n{if (is_extruder_used[3])}M862.1 T3 P{nozzle_diameter[3]}{endif}\n{if (is_extruder_used[4])}M862.1 T4 P{nozzle_diameter[4]}{endif}\n\n; turn off unused heaters\n{if ! is_extruder_used[0]} M104 T0 S0 {endif}\n{if ! is_extruder_used[1]} M104 T1 S0 {endif}\n{if num_extruders > 2 and ! is_extruder_used[2]} M104 T2 S0 {endif}\n{if num_extruders > 3 and ! is_extruder_used[3]} M104 T3 S0 {endif}\n{if num_extruders > 4 and ! is_extruder_used[4]} M104 T4 S0 {endif}\n\nM217 Z{max(zhop, 2.0)} ; set toolchange z hop to 2mm, or zhop variable from slicer if higher\n; set bed and extruder temp for MBL\nM140 S[first_layer_bed_temperature] ; set bed temp\nG0 Z5 ; add Z clearance\nM109 T{initial_tool} S{((filament_notes[initial_tool]=~/.*HT_MBL10.*/) ? (first_layer_temperature[initial_tool] - 10) : (filament_type[initial_tool] == "PC" or filament_type[initial_tool] == "PA") ? (first_layer_temperature[initial_tool] - 25) : (filament_type[initial_tool] == "FLEX") ? 210 : (filament_type[initial_tool]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n\n; Home XY\nG28 XY\n; try picking tools used in print\nG1 F{travel_speed * 60}\n{if (is_extruder_used[0]) and (initial_tool != 0)}T0 S1 L0 D0{endif}\n{if (is_extruder_used[1]) and (initial_tool != 1)}T1 S1 L0 D0{endif}\n{if (is_extruder_used[2]) and (initial_tool != 2)}T2 S1 L0 D0{endif}\n{if (is_extruder_used[3]) and (initial_tool != 3)}T3 S1 L0 D0{endif}\n{if (is_extruder_used[4]) and (initial_tool != 4)}T4 S1 L0 D0{endif}\n; select tool that will be used to home & MBL\nT{initial_tool} S1 L0 D0\n; home Z with MBL tool\nM84 E ; turn off E motor\nG28 Z\nG0 Z5 ; add Z clearance\n\nM104 T{initial_tool} S{if is_nil(idle_temperature[initial_tool])}70{else}{idle_temperature[initial_tool]}{endif} ; set idle temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nG29 G ; absorb heat\n\nM109 T{initial_tool} S{((filament_notes[initial_tool]=~/.*HT_MBL10.*/) ? (first_layer_temperature[initial_tool] - 10) : (filament_type[initial_tool] == "PC" or filament_type[initial_tool] == "PA") ? (first_layer_temperature[initial_tool] - 25) : (filament_type[initial_tool] == "FLEX") ? 210 : (filament_type[initial_tool]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n\n; move to the nozzle cleanup area\nG1 X{(min(((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))), first_layer_print_min[0])) + 32} Y{(min((first_layer_print_min[1] - 7), first_layer_print_min[1]))} Z{5} F{(travel_speed * 60)}\nM302 S160 ; lower cold extrusion limit to 160C\nG1 E{-(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; retraction for nozzle cleanup\n; nozzle cleanup\nM84 E ; turn off E motor\nG29 P9 X{((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)))} Y{(first_layer_print_min[1] - 7)} W{32} H{7}\nG0 Z5 F480 ; move away in Z\nM107 ; turn off the fan\n; MBL\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X30 Y0 W{(((is_extruder_used[4]) or ((is_extruder_used[3]) or (is_extruder_used[2]))) ? "300" : ((is_extruder_used[1]) ? "130" : "50"))} H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\nG1 Z10 F720 ; move away in Z\nG1 F{travel_speed * 60}\nP0 S1 L1 D0; park the tool\n; set extruder temp\n{if first_layer_temperature[0] > 0 and (is_extruder_used[0])}M104 T0 S{first_layer_temperature[0]}{endif}\n{if first_layer_temperature[1] > 0 and (is_extruder_used[1])}M104 T1 S{first_layer_temperature[1]}{endif}\n{if first_layer_temperature[2] > 0 and (is_extruder_used[2])}M104 T2 S{first_layer_temperature[2]}{endif}\n{if first_layer_temperature[3] > 0 and (is_extruder_used[3])}M104 T3 S{first_layer_temperature[3]}{endif}\n{if first_layer_temperature[4] > 0 and (is_extruder_used[4])}M104 T4 S{first_layer_temperature[4]}{endif}\n{if (is_extruder_used[0]) and initial_tool != 0}\n;\n; purge first tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T0 S{first_layer_temperature[0]}\nT0 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(0 == 0 ? 30 : (0 == 1 ? 150 : (0 == 2 ? 210 : 330)))} Y{(0 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[0])}10{else}30{endif} X40 Z0.2 F{if is_nil(filament_multitool_ramming[0])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X70 E9 F800 ; continue purging and wipe the nozzle\nG0 X{70 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{70 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[0]} F2400 ; retract\n{e_retracted[0] = 1.5 * retract_length[0]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(is_nil(idle_temperature[0]) ? (first_layer_temperature[0] + standby_temperature_delta) : (idle_temperature[0]))} T0\n{endif}\n{if (is_extruder_used[1]) and initial_tool != 1}\n;\n; purge second tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T1 S{first_layer_temperature[1]}\nT1 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(1 == 0 ? 30 : (1 == 1 ? 150 : (1 == 2 ? 210 : 330)))} Y{(1 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[1])}10{else}30{endif} X140 Z0.2 F{if is_nil(filament_multitool_ramming[1])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X110 E9 F800 ; continue purging and wipe the nozzle\nG0 X{110 - 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{110 - 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[1]} F2400 ; retract\n{e_retracted[1] = 1.5 * retract_length[1]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(is_nil(idle_temperature[1]) ? (first_layer_temperature[1] + standby_temperature_delta) : (idle_temperature[1]))} T1\n{endif}\n{if (is_extruder_used[2]) and initial_tool != 2}\n;\n; purge third tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T2 S{first_layer_temperature[2]}\nT2 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(2 == 0 ? 30 : (2 == 1 ? 150 : (2 == 2 ? 210 : 330)))} Y{(2 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[2])}10{else}30{endif} X220 Z0.2 F{if is_nil(filament_multitool_ramming[2])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X250 E9 F800 ; continue purging and wipe the nozzle\nG0 X{250 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{250 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[2]} F2400 ; retract\n{e_retracted[2] = 1.5 * retract_length[2]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(is_nil(idle_temperature[2]) ? (first_layer_temperature[2] + standby_temperature_delta) : (idle_temperature[2]))} T2\n{endif}\n{if (is_extruder_used[3]) and initial_tool != 3}\n;\n; purge fourth tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T3 S{first_layer_temperature[3]}\nT3 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(3 == 0 ? 30 : (3 == 1 ? 150 : (3 == 2 ? 210 : 330)))} Y{(3 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[3])}10{else}30{endif} X320 Z0.2 F{if is_nil(filament_multitool_ramming[3])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X290 E9 F800 ; continue purging and wipe the nozzle\nG0 X{290 - 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{290 - 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[3]} F2400 ; retract\n{e_retracted[3] = 1.5 * retract_length[3]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(is_nil(idle_temperature[3]) ? (first_layer_temperature[3] + standby_temperature_delta) : (idle_temperature[3]))} T3\n{endif}\n{if (is_extruder_used[4]) and initial_tool != 4}\n;\n; purge fifth tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T4 S{first_layer_temperature[4]}\nT4 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(4 == 0 ? 30 : (4 == 1 ? 150 : (4 == 2 ? 210 : 330)))} Y{(4 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[4])}10{else}30{endif} X320 Z0.2 F{if is_nil(filament_multitool_ramming[4])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X290 E9 F800 ; continue purging and wipe the nozzle\nG0 X{290 - 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{290 - 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[4]} F2400 ; retract\n{e_retracted[4] = 1.5 * retract_length[4]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(is_nil(idle_temperature[4]) ? (first_layer_temperature[4] + standby_temperature_delta) : (idle_temperature[4]))} T4\n{endif}\n;\n; purge initial tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T{initial_tool} S{first_layer_temperature[initial_tool]}\nT{initial_tool} S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330)))} Y{(initial_tool < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[initial_tool])}10{else}30{endif} X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330))) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 10)} Z0.2 F{if is_nil(filament_multitool_ramming[initial_tool])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330))) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 40)} E9 F800 ; continue purging and wipe the nozzle\nG0 X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330))) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 40) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 3)} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330))) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 40) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 3 * 2)} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[initial_tool]} F2400 ; retract\n{e_retracted[initial_tool] = 1.5 * retract_length[initial_tool]}\nG92 E0 ; reset extruder position\n\nM593 X T2 F35.8\nM593 Y T2 F35.4\n +start_gcode = M17 ; enable steppers\nM862.3 P "XL" ; printer model check\nM862.5 P2 ; g-code level check\nM862.6 P"Input shaper" ; FW feature check\nM115 U6.0.1+14848\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n; set print area\nM555 X{first_layer_print_min[0]} Y{first_layer_print_min[1]} W{(first_layer_print_max[0]) - (first_layer_print_min[0])} H{(first_layer_print_max[1]) - (first_layer_print_min[1])}\n; inform about nozzle diameter\n{if (is_extruder_used[0])}M862.1 T0 P{nozzle_diameter[0]}{endif}\n{if (is_extruder_used[1])}M862.1 T1 P{nozzle_diameter[1]}{endif}\n{if (is_extruder_used[2])}M862.1 T2 P{nozzle_diameter[2]}{endif}\n{if (is_extruder_used[3])}M862.1 T3 P{nozzle_diameter[3]}{endif}\n{if (is_extruder_used[4])}M862.1 T4 P{nozzle_diameter[4]}{endif}\n\n; turn off unused heaters\n{if ! is_extruder_used[0]} M104 T0 S0 {endif}\n{if ! is_extruder_used[1]} M104 T1 S0 {endif}\n{if num_extruders > 2 and ! is_extruder_used[2]} M104 T2 S0 {endif}\n{if num_extruders > 3 and ! is_extruder_used[3]} M104 T3 S0 {endif}\n{if num_extruders > 4 and ! is_extruder_used[4]} M104 T4 S0 {endif}\n\nM217 Z{max(zhop, 2.0)} ; set toolchange z hop to 2mm, or zhop variable from slicer if higher\n; set bed and extruder temp for MBL\nM140 S[first_layer_bed_temperature] ; set bed temp\nG0 Z5 ; add Z clearance\nM109 T{initial_tool} S{((filament_notes[initial_tool]=~/.*HT_MBL10.*/) ? (first_layer_temperature[initial_tool] - 10) : (filament_type[initial_tool] == "PC" or filament_type[initial_tool] == "PA") ? (first_layer_temperature[initial_tool] - 25) : (filament_type[initial_tool] == "FLEX") ? 210 : (filament_type[initial_tool]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n\n; Home XY\nG28 XY\n; try picking tools used in print\nG1 F{travel_speed * 60}\n{if (is_extruder_used[0]) and (initial_tool != 0)}T0 S1 L0 D0{endif}\n{if (is_extruder_used[1]) and (initial_tool != 1)}T1 S1 L0 D0{endif}\n{if (is_extruder_used[2]) and (initial_tool != 2)}T2 S1 L0 D0{endif}\n{if (is_extruder_used[3]) and (initial_tool != 3)}T3 S1 L0 D0{endif}\n{if (is_extruder_used[4]) and (initial_tool != 4)}T4 S1 L0 D0{endif}\n; select tool that will be used to home & MBL\nT{initial_tool} S1 L0 D0\n; home Z with MBL tool\nM84 E ; turn off E motor\nG28 Z\nG0 Z5 ; add Z clearance\n\nM104 T{initial_tool} S{if is_nil(idle_temperature[initial_tool])}70{else}{idle_temperature[initial_tool]}{endif} ; set idle temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nG29 G ; absorb heat\n\nM109 T{initial_tool} S{((filament_notes[initial_tool]=~/.*HT_MBL10.*/) ? (first_layer_temperature[initial_tool] - 10) : (filament_type[initial_tool] == "PC" or filament_type[initial_tool] == "PA") ? (first_layer_temperature[initial_tool] - 25) : (filament_type[initial_tool] == "FLEX") ? 210 : (filament_type[initial_tool]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n\n; move to the nozzle cleanup area\nG1 X{(min(((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))), first_layer_print_min[0])) + 32} Y{(min((first_layer_print_min[1] - 7), first_layer_print_min[1]))} Z{5} F{(travel_speed * 60)}\nM302 S160 ; lower cold extrusion limit to 160C\nG1 E{-(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; retraction for nozzle cleanup\n; nozzle cleanup\nM84 E ; turn off E motor\nG29 P9 X{((((first_layer_print_min[0] + first_layer_print_max[0]) / 2) < ((print_bed_min[0] + print_bed_max[0]) / 2)) ? (((first_layer_print_min[1] - 7) < -2) ? 70 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)) : (((first_layer_print_min[1] - 7) < -2) ? 260 : (min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)))} Y{(first_layer_print_min[1] - 7)} W{32} H{7}\nG0 Z5 F480 ; move away in Z\nM107 ; turn off the fan\n; MBL\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X30 Y0 W{(((is_extruder_used[4]) or ((is_extruder_used[3]) or (is_extruder_used[2]))) ? "300" : ((is_extruder_used[1]) ? "130" : "50"))} H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\nG1 Z10 F720 ; move away in Z\nG1 F{travel_speed * 60}\nP0 S1 L1 D0; park the tool\n; set extruder temp\n{if first_layer_temperature[0] > 0 and (is_extruder_used[0])}M104 T0 S{first_layer_temperature[0]}{endif}\n{if first_layer_temperature[1] > 0 and (is_extruder_used[1])}M104 T1 S{first_layer_temperature[1]}{endif}\n{if first_layer_temperature[2] > 0 and (is_extruder_used[2])}M104 T2 S{first_layer_temperature[2]}{endif}\n{if first_layer_temperature[3] > 0 and (is_extruder_used[3])}M104 T3 S{first_layer_temperature[3]}{endif}\n{if first_layer_temperature[4] > 0 and (is_extruder_used[4])}M104 T4 S{first_layer_temperature[4]}{endif}\n{if (is_extruder_used[0]) and initial_tool != 0}\n;\n; purge first tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T0 S{first_layer_temperature[0]}\nT0 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(0 == 0 ? 30 : (0 == 1 ? 150 : (0 == 2 ? 210 : 330)))} Y{(0 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[0])}10{else}30{endif} X40 Z0.2 F{if is_nil(filament_multitool_ramming[0])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X70 E9 F800 ; continue purging and wipe the nozzle\nG0 X{70 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{70 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[0]} F2400 ; retract\n{e_retracted[0] = 1.5 * retract_length[0]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(is_nil(idle_temperature[0]) ? (first_layer_temperature[0] + standby_temperature_delta) : (idle_temperature[0]))} T0\n{endif}\n{if (is_extruder_used[1]) and initial_tool != 1}\n;\n; purge second tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T1 S{first_layer_temperature[1]}\nT1 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(1 == 0 ? 30 : (1 == 1 ? 150 : (1 == 2 ? 210 : 330)))} Y{(1 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[1])}10{else}30{endif} X140 Z0.2 F{if is_nil(filament_multitool_ramming[1])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X110 E9 F800 ; continue purging and wipe the nozzle\nG0 X{110 - 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{110 - 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[1]} F2400 ; retract\n{e_retracted[1] = 1.5 * retract_length[1]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(is_nil(idle_temperature[1]) ? (first_layer_temperature[1] + standby_temperature_delta) : (idle_temperature[1]))} T1\n{endif}\n{if (is_extruder_used[2]) and initial_tool != 2}\n;\n; purge third tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T2 S{first_layer_temperature[2]}\nT2 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(2 == 0 ? 30 : (2 == 1 ? 150 : (2 == 2 ? 210 : 330)))} Y{(2 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[2])}10{else}30{endif} X220 Z0.2 F{if is_nil(filament_multitool_ramming[2])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X250 E9 F800 ; continue purging and wipe the nozzle\nG0 X{250 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{250 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[2]} F2400 ; retract\n{e_retracted[2] = 1.5 * retract_length[2]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(is_nil(idle_temperature[2]) ? (first_layer_temperature[2] + standby_temperature_delta) : (idle_temperature[2]))} T2\n{endif}\n{if (is_extruder_used[3]) and initial_tool != 3}\n;\n; purge fourth tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T3 S{first_layer_temperature[3]}\nT3 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(3 == 0 ? 30 : (3 == 1 ? 150 : (3 == 2 ? 210 : 330)))} Y{(3 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[3])}10{else}30{endif} X320 Z0.2 F{if is_nil(filament_multitool_ramming[3])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X290 E9 F800 ; continue purging and wipe the nozzle\nG0 X{290 - 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{290 - 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[3]} F2400 ; retract\n{e_retracted[3] = 1.5 * retract_length[3]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(is_nil(idle_temperature[3]) ? (first_layer_temperature[3] + standby_temperature_delta) : (idle_temperature[3]))} T3\n{endif}\n{if (is_extruder_used[4]) and initial_tool != 4}\n;\n; purge fifth tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T4 S{first_layer_temperature[4]}\nT4 S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(4 == 0 ? 30 : (4 == 1 ? 150 : (4 == 2 ? 210 : 330)))} Y{(4 < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[4])}10{else}30{endif} X320 Z0.2 F{if is_nil(filament_multitool_ramming[4])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X290 E9 F800 ; continue purging and wipe the nozzle\nG0 X{290 - 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{290 - 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[4]} F2400 ; retract\n{e_retracted[4] = 1.5 * retract_length[4]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(is_nil(idle_temperature[4]) ? (first_layer_temperature[4] + standby_temperature_delta) : (idle_temperature[4]))} T4\n{endif}\n;\n; purge initial tool\n;\nG1 F{travel_speed * 60}\nP0 S1 L2 D0; park the tool\nM109 T{initial_tool} S{first_layer_temperature[initial_tool]}\nT{initial_tool} S1 L0 D0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330)))} Y{(initial_tool < 4 ? -7 : -4.5)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if is_nil(filament_multitool_ramming[initial_tool])}10{else}30{endif} X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330))) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 10)} Z0.2 F{if is_nil(filament_multitool_ramming[initial_tool])}500{else}170{endif} ; purge while moving towards the sheet\nG0 X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330))) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 40)} E9 F800 ; continue purging and wipe the nozzle\nG0 X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330))) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 40) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 3)} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{(initial_tool == 0 ? 30 : (initial_tool == 1 ? 150 : (initial_tool == 2 ? 210 : 330))) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 40) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 3 * 2)} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[initial_tool]} F2400 ; retract\n{e_retracted[initial_tool] = 1.5 * retract_length[initial_tool]}\nG92 E0 ; reset extruder position\n default_print_profile = 0.20mm SPEED @XLIS 0.4 default_filament_profile = "Prusament PLA @XLIS" @@ -21236,7 +21377,7 @@ retract_before_travel = 1.5 retract_before_wipe = 80% retract_layer_change = 1 retract_length = 0.8 -start_gcode = M17 ; enable steppers\nM862.3 P "[printer_model]" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U6.0.0+14794\nM555 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} W{((min(print_bed_max[0], max(first_layer_print_min[0] + 32, first_layer_print_max[0])))) - ((min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))} H{((first_layer_print_max[1])) - ((max(0, first_layer_print_min[1]) - 4))}\n\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 T0 S{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == "PC" or filament_type[0] == "PA") ? (first_layer_temperature[0] - 25) : (filament_type[0] == "FLEX") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; set extruder temp for bed leveling\nM109 T0 R{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == "PC" or filament_type[0] == "PA") ? (first_layer_temperature[0] - 25) : (filament_type[0] == "FLEX") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n\nM84 E ; turn off E motor\n\nG28 ; home all without mesh bed level\n\nG1 X{10 + 32} Y-4 Z5 F4800\n\nM302 S160 ; lower cold extrusion limit to 160C\n\n{if filament_type[initial_tool]=="FLEX"}\nG1 E-4 F2400 ; retraction\n{else}\nG1 E-2 F2400 ; retraction\n{endif}\n\nM84 E ; turn off E motor\n\nG29 P9 X10 Y-4 W32 H4\n\n{if first_layer_bed_temperature[initial_tool]<=60}M106 S100{endif}\n\nG0 Z40 F10000\n\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nM107\n\n;\n; MBL\n;\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X0 Y0 W50 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\n\n; prepare for purge\nM104 S{first_layer_temperature[0]}\nG0 X0 Y-4 Z15 F4800 ; move away and ready for the purge\nM109 S{first_layer_temperature[0]}\n\nG92 E0\nM569 S0 E ; set spreadcycle mode for extruder\n\n;\n; Extrude purge line\n;\nG92 E0 ; reset extruder position\nG1 E{(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E7 X15 Z0.2 F500 ; purge\nG0 X25 E4 F500 ; purge\nG0 X35 E4 F650 ; purge\nG0 X45 E4 F800 ; purge\nG0 X{45 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{45 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\n\nG92 E0\nM221 S100 ; set flow to 100% +start_gcode = M17 ; enable steppers\nM862.3 P "[printer_model]" ; printer model check\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM115 U6.0.1+14848\nM555 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} W{((min(print_bed_max[0], max(first_layer_print_min[0] + 32, first_layer_print_max[0])))) - ((min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))} H{((first_layer_print_max[1])) - ((max(0, first_layer_print_min[1]) - 4))}\n\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 T0 S{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == "PC" or filament_type[0] == "PA") ? (first_layer_temperature[0] - 25) : (filament_type[0] == "FLEX") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; set extruder temp for bed leveling\nM109 T0 R{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == "PC" or filament_type[0] == "PA") ? (first_layer_temperature[0] - 25) : (filament_type[0] == "FLEX") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n\nM84 E ; turn off E motor\n\nG28 ; home all without mesh bed level\n\nG1 X{10 + 32} Y-4 Z5 F4800\n\nM302 S160 ; lower cold extrusion limit to 160C\n\n{if filament_type[initial_tool]=="FLEX"}\nG1 E-4 F2400 ; retraction\n{else}\nG1 E-2 F2400 ; retraction\n{endif}\n\nM84 E ; turn off E motor\n\nG29 P9 X10 Y-4 W32 H4\n\n{if first_layer_bed_temperature[initial_tool]<=60}M106 S100{endif}\n\nG0 Z40 F10000\n\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nM107\n\n;\n; MBL\n;\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X0 Y0 W50 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\n\n; prepare for purge\nM104 S{first_layer_temperature[0]}\nG0 X0 Y-4 Z15 F4800 ; move away and ready for the purge\nM109 S{first_layer_temperature[0]}\n\nG92 E0\nM569 S0 E ; set spreadcycle mode for extruder\n\n;\n; Extrude purge line\n;\nG92 E0 ; reset extruder position\nG1 E{(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E7 X15 Z0.2 F500 ; purge\nG0 X25 E4 F500 ; purge\nG0 X35 E4 F650 ; purge\nG0 X45 E4 F800 ; purge\nG0 X{45 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{45 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\n\nG92 E0\nM221 S100 ; set flow to 100% default_print_profile = 0.20mm QUALITY @MK4 0.4 default_filament_profile = "Prusament PLA @PG" thumbnails = 16x16/QOI, 313x173/QOI, 440x240/QOI, 480x240/QOI, 640x480/PNG @@ -21338,7 +21479,7 @@ wipe = 0 retract_before_wipe = 80 retract_speed = 35 deretract_speed = 25 -start_gcode = M17 ; enable steppers\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM862.3 P "MK4" ; printer model check\nM862.5 P2 ; g-code level check\nM862.6 P"Input shaper" ; FW feature check\nM115 U6.0.0+14794\n\nM555 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} W{((min(print_bed_max[0], max(first_layer_print_min[0] + 32, first_layer_print_max[0])))) - ((min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))} H{((first_layer_print_max[1])) - ((max(0, first_layer_print_min[1]) - 4))}\n\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 T0 S{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == "PC" or filament_type[0] == "PA") ? (first_layer_temperature[0] - 25) : (filament_type[0] == "FLEX") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; set extruder temp for bed leveling\nM109 T0 R{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == "PC" or filament_type[0] == "PA") ? (first_layer_temperature[0] - 25) : (filament_type[0] == "FLEX") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n\nM84 E ; turn off E motor\n\nG28 ; home all without mesh bed level\n\nG1 X{10 + 32} Y-4 Z5 F4800\n\nM302 S160 ; lower cold extrusion limit to 160C\n\n{if filament_type[initial_tool]=="FLEX"}\nG1 E-4 F2400 ; retraction\n{else}\nG1 E-2 F2400 ; retraction\n{endif}\n\nM84 E ; turn off E motor\n\nG29 P9 X10 Y-4 W32 H4\n\n{if first_layer_bed_temperature[initial_tool]<=60}M106 S100{endif}\n\nG0 Z40 F10000\n\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nM107\n\n;\n; MBL\n;\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X0 Y0 W50 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\n\n; prepare for purge\nM104 S{first_layer_temperature[0]}\nG0 X0 Y-4 Z15 F4800 ; move away and ready for the purge\nM109 S{first_layer_temperature[0]}\n\nG92 E0\nM569 S0 E ; set spreadcycle mode for extruder\n\n;\n; Extrude purge line\n;\nG92 E0 ; reset extruder position\nG1 E{(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E7 X15 Z0.2 F500 ; purge\nG0 X25 E4 F500 ; purge\nG0 X35 E4 F650 ; purge\nG0 X45 E4 F800 ; purge\nG0 X{45 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{45 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\n\nG92 E0\nM221 S100 ; set flow to 100% +start_gcode = M17 ; enable steppers\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM862.3 P "MK4" ; printer model check\nM862.5 P2 ; g-code level check\nM862.6 P"Input shaper" ; FW feature check\nM115 U6.0.1+14848\n\nM555 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} W{((min(print_bed_max[0], max(first_layer_print_min[0] + 32, first_layer_print_max[0])))) - ((min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))} H{((first_layer_print_max[1])) - ((max(0, first_layer_print_min[1]) - 4))}\n\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 T0 S{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == "PC" or filament_type[0] == "PA") ? (first_layer_temperature[0] - 25) : (filament_type[0] == "FLEX") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; set extruder temp for bed leveling\nM109 T0 R{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == "PC" or filament_type[0] == "PA") ? (first_layer_temperature[0] - 25) : (filament_type[0] == "FLEX") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n\nM84 E ; turn off E motor\n\nG28 ; home all without mesh bed level\n\nG1 X{10 + 32} Y-4 Z5 F4800\n\nM302 S160 ; lower cold extrusion limit to 160C\n\n{if filament_type[initial_tool]=="FLEX"}\nG1 E-4 F2400 ; retraction\n{else}\nG1 E-2 F2400 ; retraction\n{endif}\n\nM84 E ; turn off E motor\n\nG29 P9 X10 Y-4 W32 H4\n\n{if first_layer_bed_temperature[initial_tool]<=60}M106 S100{endif}\n\nG0 Z40 F10000\n\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nM107\n\n;\n; MBL\n;\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X0 Y0 W50 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\n\n; prepare for purge\nM104 S{first_layer_temperature[0]}\nG0 X0 Y-4 Z15 F4800 ; move away and ready for the purge\nM109 S{first_layer_temperature[0]}\n\nG92 E0\nM569 S0 E ; set spreadcycle mode for extruder\n\n;\n; Extrude purge line\n;\nG92 E0 ; reset extruder position\nG1 E{(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E7 X15 Z0.2 F500 ; purge\nG0 X25 E4 F500 ; purge\nG0 X35 E4 F650 ; purge\nG0 X45 E4 F800 ; purge\nG0 X{45 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{45 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\n\nG92 E0\nM221 S100 ; set flow to 100% end_gcode = {if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+1, max_print_height)} F720 ; Move print head up{endif}\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X241 Y170 F3600 ; park\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+23, max_print_height)} F300 ; Move print head up{endif}\nG4 ; wait\nM572 S0 ; reset PA\nM593 X T2 F0 ; disable IS\nM593 Y T2 F0 ; disable IS\nM84 X Y E ; disable motors\n; max_layer_z = [max_layer_z] before_layer_gcode = ;BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]\nM201 X{interpolate_table(extruded_weight_total, (0,4000), (1400,2500), (10000,2500))} Y{interpolate_table(extruded_weight_total, (0,4000), (1400,2500), (10000,2500))}\n{if ! spiral_vase}M74 W[extruded_weight_total]{endif}\n default_print_profile = 0.20mm SPEED @MK4IS 0.4 @@ -21365,7 +21506,7 @@ retract_before_wipe = 80,80,80,80,80 retract_speed = 35,35,35,35,35 deretract_speed = 25,25,25,25,25 retract_length_toolchange = 0,0,0,0,0 -start_gcode = M17 ; enable steppers\nM862.1 P0.4 ; nozzle diameter check\nM862.3 P "MK4" ; printer model check\nM862.5 P2 ; g-code level check\nM862.6 P "Input shaper" ; FW feature check\nM862.6 P "MMU3" ; FW feature check\nM115 U6.0.0+14794\n\n; setup MMU\nM708 A0x0b X5 ; extra load distance\nM708 A0x0d X140 ; unload feeedrate\nM708 A0x11 X140 ; load feedrate\nM708 A0x14 X20 ; slow feedrate\nM708 A0x1e X12 ; Pulley current to ~200mA\n\nM555 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} W{((min(print_bed_max[0], max(first_layer_print_min[0] + 32, first_layer_print_max[0])))) - ((min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))} H{((first_layer_print_max[1])) - ((max(0, first_layer_print_min[1]) - 4))}\n\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 S{((filament_notes[initial_tool]=~/.*HT_MBL10.*/) ? (first_layer_temperature[initial_tool] - 10) : (filament_type[initial_tool] == "PC" or filament_type[initial_tool] == "PA") ? (first_layer_temperature[initial_tool] - 25) : (filament_type[initial_tool] == "FLEX") ? 210 : (filament_type[initial_tool]=~/.*PET.*/) ? 175 : 170)} ; set extruder temp for bed leveling\nM109 R{((filament_notes[initial_tool]=~/.*HT_MBL10.*/) ? (first_layer_temperature[initial_tool] - 10) : (filament_type[initial_tool] == "PC" or filament_type[initial_tool] == "PA") ? (first_layer_temperature[initial_tool] - 25) : (filament_type[initial_tool] == "FLEX") ? 210 : (filament_type[initial_tool]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n\nM84 E ; turn off E motor\n\nG28 ; home all without mesh bed level\n\nG1 X{10 + 32} Y-4 Z5 F4800\n\nM302 S160 ; lower cold extrusion limit to 160C\n\n{if filament_type[initial_tool]=="FLEX"}\nG1 E-4 F2400 ; retraction\n{else}\nG1 E-2 F2400 ; retraction\n{endif}\n\nM84 E ; turn off E motor\n\nG29 P9 X10 Y-4 W32 H4\n\n{if first_layer_bed_temperature[initial_tool]<=60}M106 S100{endif}\n\nG0 Z40 F10000\n\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nM107\n\n;\n; MBL\n;\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X0 Y0 W130 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\n\n; prepare for purge\nM104 S{first_layer_temperature[initial_tool]}\nG0 X0 Y-4 Z15 F4800 ; move away and ready for the purge\nM109 S{first_layer_temperature[initial_tool]}\n\nG92 E0\nM569 S0 E ; set spreadcycle mode for extruder\n\nT[initial_tool]\nG1 E{parking_pos_retraction + extra_loading_move - 15} F1000 ; load to the nozzle\n\n;\n; Extrude purge line\n;\nG92 E0 ; reset extruder position\nG1 E{(filament_type[initial_tool] == "FLEX" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E7 X15 Z0.2 F500 ; purge\nG0 X105 E36 F500 ; purge\nG0 X115 E4 F650 ; purge\nG0 X125 E4 F800 ; purge\nG0 X{125 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{125 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\n\nG92 E0\nM221 S100 ; set flow to 100% +start_gcode = M17 ; enable steppers\nM862.1 P0.4 ; nozzle diameter check\nM862.3 P "MK4" ; printer model check\nM862.5 P2 ; g-code level check\nM862.6 P "Input shaper" ; FW feature check\nM862.6 P "MMU3" ; FW feature check\nM115 U6.0.1+14848\n\n; setup MMU\nM708 A0x0b X5 ; extra load distance\nM708 A0x0d X140 ; unload feeedrate\nM708 A0x11 X140 ; load feedrate\nM708 A0x14 X20 ; slow feedrate\nM708 A0x1e X12 ; Pulley current to ~200mA\n\nM555 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} W{((min(print_bed_max[0], max(first_layer_print_min[0] + 32, first_layer_print_max[0])))) - ((min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))} H{((first_layer_print_max[1])) - ((max(0, first_layer_print_min[1]) - 4))}\n\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 S{((filament_notes[initial_tool]=~/.*HT_MBL10.*/) ? (first_layer_temperature[initial_tool] - 10) : (filament_type[initial_tool] == "PC" or filament_type[initial_tool] == "PA") ? (first_layer_temperature[initial_tool] - 25) : (filament_type[initial_tool] == "FLEX") ? 210 : (filament_type[initial_tool]=~/.*PET.*/) ? 175 : 170)} ; set extruder temp for bed leveling\nM109 R{((filament_notes[initial_tool]=~/.*HT_MBL10.*/) ? (first_layer_temperature[initial_tool] - 10) : (filament_type[initial_tool] == "PC" or filament_type[initial_tool] == "PA") ? (first_layer_temperature[initial_tool] - 25) : (filament_type[initial_tool] == "FLEX") ? 210 : (filament_type[initial_tool]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n\nM84 E ; turn off E motor\n\nG28 ; home all without mesh bed level\n\nG1 X{10 + 32} Y-4 Z5 F4800\n\nM302 S160 ; lower cold extrusion limit to 160C\n\n{if filament_type[initial_tool]=="FLEX"}\nG1 E-4 F2400 ; retraction\n{else}\nG1 E-2 F2400 ; retraction\n{endif}\n\nM84 E ; turn off E motor\n\nG29 P9 X10 Y-4 W32 H4\n\n{if first_layer_bed_temperature[initial_tool]<=60}M106 S100{endif}\n\nG0 Z40 F10000\n\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nM107\n\n;\n; MBL\n;\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X0 Y0 W130 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\n\n; prepare for purge\nM104 S{first_layer_temperature[initial_tool]}\nG0 X0 Y-4 Z15 F4800 ; move away and ready for the purge\nM109 S{first_layer_temperature[initial_tool]}\n\nG92 E0\nM569 S0 E ; set spreadcycle mode for extruder\n\nT[initial_tool]\nG1 E{parking_pos_retraction + extra_loading_move - 15} F1000 ; load to the nozzle\n\n;\n; Extrude purge line\n;\nG92 E0 ; reset extruder position\nG1 E{(filament_type[initial_tool] == "FLEX" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E7 X15 Z0.2 F500 ; purge\nG0 X105 E36 F500 ; purge\nG0 X115 E4 F650 ; purge\nG0 X125 E4 F800 ; purge\nG0 X{125 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{125 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\n\nG92 E0\nM221 S100 ; set flow to 100% end_gcode = {if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+1, max_print_height)} F720 ; Move print head up{endif}\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X241 Y170 F3600 ; park\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+23, max_print_height)} F300 ; Move print head up{endif}\nM702 ; unload the current filament\nG4 ; wait\nM572 S0 ; reset PA\nM593 X T2 F0 ; disable IS\nM593 Y T2 F0 ; disable IS\nM84 X Y E ; disable motors\n; max_layer_z = [max_layer_z] before_layer_gcode = ;BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]\nM201 X{interpolate_table(extruded_weight_total, (0,4000), (1400,2500), (10000,2500))} Y{interpolate_table(extruded_weight_total, (0,4000), (1400,2500), (10000,2500))}\n{if ! spiral_vase}M74 W[extruded_weight_total]{endif}\n default_print_profile = 0.20mm SPEED @MK4IS 0.4 @@ -21467,7 +21608,7 @@ wipe = 0 retract_before_wipe = 80 retract_speed = 35 deretract_speed = 25 -start_gcode = M17 ; enable steppers\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM862.3 P "[printer_model]" ; printer model check\nM862.5 P2 ; g-code level check\nM862.6 P"Input shaper" ; FW feature check\nM115 U6.0.0+14794\n\nM555 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} W{((min(print_bed_max[0], max(first_layer_print_min[0] + 32, first_layer_print_max[0])))) - ((min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))} H{((first_layer_print_max[1])) - ((max(0, first_layer_print_min[1]) - 4))}\n\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 T0 S{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == "PC" or filament_type[0] == "PA") ? (first_layer_temperature[0] - 25) : (filament_type[0] == "FLEX") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; set extruder temp for bed leveling\nM109 T0 R{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == "PC" or filament_type[0] == "PA") ? (first_layer_temperature[0] - 25) : (filament_type[0] == "FLEX") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n\nM84 E ; turn off E motor\n\nG28 ; home all without mesh bed level\n\nG1 X{10 + 32} Y-4 Z5 F4800\n\nM302 S160 ; lower cold extrusion limit to 160C\n\n{if filament_type[initial_tool]=="FLEX"}\nG1 E-4 F2400 ; retraction\n{else}\nG1 E-2 F2400 ; retraction\n{endif}\n\nM84 E ; turn off E motor\n\nG29 P9 X10 Y-4 W32 H4\n\n{if first_layer_bed_temperature[initial_tool]<=60}M106 S100{endif}\n\nG0 Z40 F10000\n\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nM107\n\n;\n; MBL\n;\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X0 Y0 W130 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\n\n; prepare for purge\nM104 S{first_layer_temperature[0]}\nG0 X0 Y-4 Z15 F4800 ; move away and ready for the purge\nM109 S{first_layer_temperature[0]}\n\nG92 E0\nM569 S0 E ; set spreadcycle mode for extruder\n\n;\n; Extrude purge line\n;\nG92 E0 ; reset extruder position\nG1 E{(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E7 X15 Z0.2 F500 ; purge\nG0 X25 E4 F500 ; purge\nG0 X35 E4 F650 ; purge\nG0 X45 E4 F800 ; purge\nG0 X{45 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{45 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\n\nG92 E0\nM221 S100 ; set flow to 100% +start_gcode = M17 ; enable steppers\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM862.3 P "[printer_model]" ; printer model check\nM862.5 P2 ; g-code level check\nM862.6 P"Input shaper" ; FW feature check\nM115 U6.0.1+14848\n\nM555 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} W{((min(print_bed_max[0], max(first_layer_print_min[0] + 32, first_layer_print_max[0])))) - ((min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))} H{((first_layer_print_max[1])) - ((max(0, first_layer_print_min[1]) - 4))}\n\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 T0 S{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == "PC" or filament_type[0] == "PA") ? (first_layer_temperature[0] - 25) : (filament_type[0] == "FLEX") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; set extruder temp for bed leveling\nM109 T0 R{((filament_notes[0]=~/.*HT_MBL10.*/) ? (first_layer_temperature[0] - 10) : (filament_type[0] == "PC" or filament_type[0] == "PA") ? (first_layer_temperature[0] - 25) : (filament_type[0] == "FLEX") ? 210 : (filament_type[0]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n\nM84 E ; turn off E motor\n\nG28 ; home all without mesh bed level\n\nG1 X{10 + 32} Y-4 Z5 F4800\n\nM302 S160 ; lower cold extrusion limit to 160C\n\n{if filament_type[initial_tool]=="FLEX"}\nG1 E-4 F2400 ; retraction\n{else}\nG1 E-2 F2400 ; retraction\n{endif}\n\nM84 E ; turn off E motor\n\nG29 P9 X10 Y-4 W32 H4\n\n{if first_layer_bed_temperature[initial_tool]<=60}M106 S100{endif}\n\nG0 Z40 F10000\n\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nM107\n\n;\n; MBL\n;\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X0 Y0 W130 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\n\n; prepare for purge\nM104 S{first_layer_temperature[0]}\nG0 X0 Y-4 Z15 F4800 ; move away and ready for the purge\nM109 S{first_layer_temperature[0]}\n\nG92 E0\nM569 S0 E ; set spreadcycle mode for extruder\n\n;\n; Extrude purge line\n;\nG92 E0 ; reset extruder position\nG1 E{(filament_type[0] == "FLEX" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E7 X15 Z0.2 F500 ; purge\nG0 X25 E4 F500 ; purge\nG0 X35 E4 F650 ; purge\nG0 X45 E4 F800 ; purge\nG0 X{45 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{45 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\n\nG92 E0\nM221 S100 ; set flow to 100% end_gcode = {if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+1, max_print_height)} F720 ; Move print head up{endif}\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X241 Y170 F3600 ; park\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+23, max_print_height)} F300 ; Move print head up{endif}\nG4 ; wait\nM572 S0 ; reset PA\nM593 X T2 F0 ; disable IS\nM593 Y T2 F0 ; disable IS\nM84 X Y E ; disable motors\n; max_layer_z = [max_layer_z] before_layer_gcode = ;BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]\nM201 X{interpolate_table(extruded_weight_total, (0,4000), (1400,2500), (10000,2500))} Y{interpolate_table(extruded_weight_total, (0,4000), (1400,2500), (10000,2500))}\n{if ! spiral_vase}M74 W[extruded_weight_total]{endif}\n default_print_profile = 0.20mm SPEED @MK4IS 0.4 @@ -21479,7 +21620,7 @@ printer_model = MK3.9MMU3 multimaterial_purging = 80 printer_variant = 0.4 printer_notes = Don't remove the following keywords! These keywords are used in the "compatible printer" condition of the print and filament profiles to link the particular print and filament profiles to this printer profile. \n\nPRINTER_MODEL_MK3.9\nPRINTER_MODEL_MK4IS\nPRINTER_MODEL_MK3.9MMU3\nPG -start_gcode = M17 ; enable steppers\nM862.1 P0.4 ; nozzle diameter check\nM862.3 P "MK3.9" ; printer model check\nM862.5 P2 ; g-code level check\nM862.6 P "Input shaper" ; FW feature check\nM862.6 P "MMU3" ; FW feature check\nM115 U6.0.0+14794\n\n; setup MMU\nM708 A0x0b X5 ; extra load distance\nM708 A0x0d X140 ; unload feeedrate\nM708 A0x11 X140 ; load feedrate\nM708 A0x14 X20 ; slow feedrate\nM708 A0x1e X12 ; Pulley current to ~200mA\n\nM555 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} W{((min(print_bed_max[0], max(first_layer_print_min[0] + 32, first_layer_print_max[0])))) - ((min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))} H{((first_layer_print_max[1])) - ((max(0, first_layer_print_min[1]) - 4))}\n\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 S{((filament_notes[initial_tool]=~/.*HT_MBL10.*/) ? (first_layer_temperature[initial_tool] - 10) : (filament_type[initial_tool] == "PC" or filament_type[initial_tool] == "PA") ? (first_layer_temperature[initial_tool] - 25) : (filament_type[initial_tool] == "FLEX") ? 210 : (filament_type[initial_tool]=~/.*PET.*/) ? 175 : 170)} ; set extruder temp for bed leveling\nM109 R{((filament_notes[initial_tool]=~/.*HT_MBL10.*/) ? (first_layer_temperature[initial_tool] - 10) : (filament_type[initial_tool] == "PC" or filament_type[initial_tool] == "PA") ? (first_layer_temperature[initial_tool] - 25) : (filament_type[initial_tool] == "FLEX") ? 210 : (filament_type[initial_tool]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n\nM84 E ; turn off E motor\n\nG28 ; home all without mesh bed level\n\nG1 X{10 + 32} Y-4 Z5 F4800\n\nM302 S160 ; lower cold extrusion limit to 160C\n\n{if filament_type[initial_tool]=="FLEX"}\nG1 E-4 F2400 ; retraction\n{else}\nG1 E-2 F2400 ; retraction\n{endif}\n\nM84 E ; turn off E motor\n\nG29 P9 X10 Y-4 W32 H4\n\n{if first_layer_bed_temperature[initial_tool]<=60}M106 S100{endif}\n\nG0 Z40 F10000\n\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nM107\n\n;\n; MBL\n;\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X0 Y0 W50 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\n\n; prepare for purge\nM104 S{first_layer_temperature[initial_tool]}\nG0 X0 Y-4 Z15 F4800 ; move away and ready for the purge\nM109 S{first_layer_temperature[initial_tool]}\n\nG92 E0\nM569 S0 E ; set spreadcycle mode for extruder\n\nT[initial_tool]\nG1 E{parking_pos_retraction + extra_loading_move - 15} F1000 ; load to the nozzle\n\n;\n; Extrude purge line\n;\nG92 E0 ; reset extruder position\nG1 E{(filament_type[initial_tool] == "FLEX" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E7 X15 Z0.2 F500 ; purge\nG0 X105 E36 F500 ; purge\nG0 X115 E4 F650 ; purge\nG0 X125 E4 F800 ; purge\nG0 X{125 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{125 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\n\nG92 E0\nM221 S100 ; set flow to 100% +start_gcode = M17 ; enable steppers\nM862.1 P0.4 ; nozzle diameter check\nM862.3 P "MK3.9" ; printer model check\nM862.5 P2 ; g-code level check\nM862.6 P "Input shaper" ; FW feature check\nM862.6 P "MMU3" ; FW feature check\nM115 U6.0.1+14848\n\n; setup MMU\nM708 A0x0b X5 ; extra load distance\nM708 A0x0d X140 ; unload feeedrate\nM708 A0x11 X140 ; load feedrate\nM708 A0x14 X20 ; slow feedrate\nM708 A0x1e X12 ; Pulley current to ~200mA\n\nM555 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} W{((min(print_bed_max[0], max(first_layer_print_min[0] + 32, first_layer_print_max[0])))) - ((min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))} H{((first_layer_print_max[1])) - ((max(0, first_layer_print_min[1]) - 4))}\n\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 S{((filament_notes[initial_tool]=~/.*HT_MBL10.*/) ? (first_layer_temperature[initial_tool] - 10) : (filament_type[initial_tool] == "PC" or filament_type[initial_tool] == "PA") ? (first_layer_temperature[initial_tool] - 25) : (filament_type[initial_tool] == "FLEX") ? 210 : (filament_type[initial_tool]=~/.*PET.*/) ? 175 : 170)} ; set extruder temp for bed leveling\nM109 R{((filament_notes[initial_tool]=~/.*HT_MBL10.*/) ? (first_layer_temperature[initial_tool] - 10) : (filament_type[initial_tool] == "PC" or filament_type[initial_tool] == "PA") ? (first_layer_temperature[initial_tool] - 25) : (filament_type[initial_tool] == "FLEX") ? 210 : (filament_type[initial_tool]=~/.*PET.*/) ? 175 : 170)} ; wait for temp\n\nM84 E ; turn off E motor\n\nG28 ; home all without mesh bed level\n\nG1 X{10 + 32} Y-4 Z5 F4800\n\nM302 S160 ; lower cold extrusion limit to 160C\n\n{if filament_type[initial_tool]=="FLEX"}\nG1 E-4 F2400 ; retraction\n{else}\nG1 E-2 F2400 ; retraction\n{endif}\n\nM84 E ; turn off E motor\n\nG29 P9 X10 Y-4 W32 H4\n\n{if first_layer_bed_temperature[initial_tool]<=60}M106 S100{endif}\n\nG0 Z40 F10000\n\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nM107\n\n;\n; MBL\n;\nM84 E ; turn off E motor\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X0 Y0 W50 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\n\n; prepare for purge\nM104 S{first_layer_temperature[initial_tool]}\nG0 X0 Y-4 Z15 F4800 ; move away and ready for the purge\nM109 S{first_layer_temperature[initial_tool]}\n\nG92 E0\nM569 S0 E ; set spreadcycle mode for extruder\n\nT[initial_tool]\nG1 E{parking_pos_retraction + extra_loading_move - 15} F1000 ; load to the nozzle\n\n;\n; Extrude purge line\n;\nG92 E0 ; reset extruder position\nG1 E{(filament_type[initial_tool] == "FLEX" ? 4 : 2)} F2400 ; deretraction after the initial one before nozzle cleaning\nG0 E7 X15 Z0.2 F500 ; purge\nG0 X105 E36 F500 ; purge\nG0 X115 E4 F650 ; purge\nG0 X125 E4 F800 ; purge\nG0 X{125 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{125 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\n\nG92 E0\nM221 S100 ; set flow to 100% [printer:Original Prusa MK3.9 0.25 nozzle] inherits = Original Prusa MK3.9 0.4 nozzle @@ -21571,7 +21712,7 @@ wipe = 1 retract_before_wipe = 0 retract_speed = 35 deretract_speed = 0 -start_gcode = M17 ; enable steppers\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM862.3 P "MK3.5" ; printer model check\nM862.5 P2 ; g-code level check\nM862.6 P"Input shaper" ; FW feature check\nM115 U6.0.0+14794\n\nM555 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} W{((min(print_bed_max[0], max(first_layer_print_min[0] + 32, first_layer_print_max[0])))) - ((min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))} H{((first_layer_print_max[1])) - ((max(0, first_layer_print_min[1]) - 4))}\n\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 T0 S170 ; set extruder temp for bed leveling\nM109 T0 R170 ; wait for temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nG28 ; home all\n\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X23 Y5 W80 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\n\n; prepare for purge\nM104 S{first_layer_temperature[0]}\nG0 X0 Y-4 Z15 F4800 ; move away and ready for the purge\nM109 S{first_layer_temperature[0]}\n\n; Extrude purge line\n\nG92 E0 ; reset extruder position\nG0 E7 X15 Z0.2 F500 ; purge\nG0 X25 E4 F500 ; purge\nG0 X35 E4 F650 ; purge\nG0 X45 E4 F800 ; purge\nG0 X{45 + 3} Z0.05 F8000 ; wipe, move close to the bed\nG0 X{45 + 3 * 2} Z0.2 F8000 ; wipe, move quickly away from the bed\n\nG92 E0\nM221 S100 ; reset flow to 100%\n +start_gcode = M17 ; enable steppers\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM862.3 P "MK3.5" ; printer model check\nM862.5 P2 ; g-code level check\nM862.6 P"Input shaper" ; FW feature check\nM115 U6.0.1+14848\n\nM555 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} W{((min(print_bed_max[0], max(first_layer_print_min[0] + 32, first_layer_print_max[0])))) - ((min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))} H{((first_layer_print_max[1])) - ((max(0, first_layer_print_min[1]) - 4))}\n\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n\nM140 S[first_layer_bed_temperature] ; set bed temp\nM104 T0 S170 ; set extruder temp for bed leveling\nM109 T0 R170 ; wait for temp\nM190 S[first_layer_bed_temperature] ; wait for bed temp\n\nG28 ; home all\n\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X23 Y5 W80 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\n\n; prepare for purge\nM104 S{first_layer_temperature[0]}\nG0 X0 Y-4 Z15 F4800 ; move away and ready for the purge\nM109 S{first_layer_temperature[0]}\n\n; Extrude purge line\n\nG92 E0 ; reset extruder position\nG0 E7 X15 Z0.2 F500 ; purge\nG0 X25 E4 F500 ; purge\nG0 X35 E4 F650 ; purge\nG0 X45 E4 F800 ; purge\nG0 X{45 + 3} Z0.05 F8000 ; wipe, move close to the bed\nG0 X{45 + 3 * 2} Z0.2 F8000 ; wipe, move quickly away from the bed\n\nG92 E0\nM221 S100 ; reset flow to 100%\n end_gcode = {if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+1, max_print_height)} F720 ; Move print head up{endif}\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X241 Y201 F3600 ; park\n{if layer_z < max_print_height}G1 Z{z_offset+min(layer_z+23, max_print_height)} F300 ; Move print head up{endif}\nG4 ; wait\nM572 S0 ; reset PA\nM593 X T2 F0 ; disable IS\nM593 Y T2 F0 ; disable IS\nM84 X Y E ; disable motors\n; max_layer_z = [max_layer_z] before_layer_gcode = ;BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]\nM201 X{interpolate_table(extruded_weight_total, (0,4000), (1400,2500), (10000,2500))} Y{interpolate_table(extruded_weight_total, (0,4000), (1400,2500), (10000,2500))}\n{if ! spiral_vase}M74 W[extruded_weight_total]{endif}\n default_print_profile = 0.20mm SPEED @MK3.5 0.4 @@ -21659,7 +21800,7 @@ retract_before_wipe = 0,0,0,0,0 retract_speed = 35,35,35,35,35 deretract_speed = 0,0,0,0,0 printer_notes = Don't remove the following keywords. \nPRINTER_VENDOR_PRUSA3D\nPRINTER_MODEL_MK3.5MMU\n -start_gcode = M17 ; enable steppers\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM862.3 P "MK3.5" ; printer model check\nM862.5 P2 ; g-code level check\nM862.6 P"Input shaper" ; FW feature check\nM862.6 P "MMU3" ; FW feature check\nM115 U6.0.0+14794\n; setup MMU\nM708 A0x1e X12 ; Pulley current to ~200mA\n\nM555 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} W{((min(print_bed_max[0], max(first_layer_print_min[0] + 32, first_layer_print_max[0])))) - ((min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))} H{((first_layer_print_max[1])) - ((max(0, first_layer_print_min[1]) - 4))}\n\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n\nM140 S{first_layer_bed_temperature[initial_tool]} ; set bed temp\nM104 S170 ; set extruder temp for bed leveling\nM109 R170 ; wait for temp\nM190 S{first_layer_bed_temperature[initial_tool]} ; wait for bed temp\n\n\nG28 ; home all\n\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X23 Y5 W160 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\n\n; prepare for purge\nM104 S{first_layer_temperature[initial_tool]}\nG0 X0 Y-4 Z15 F4800 ; move away and ready for the purge\nM109 S{first_layer_temperature[initial_tool]}\n\nT[initial_tool]\nG1 E{parking_pos_retraction + extra_loading_move} F1000 ; load to the nozzle\n\n; Extrude purge line\n\nG92 E0 ; reset extruder position\nG0 E7 X15 Z0.2 F500 ; purge\nG0 X105 E36 F500 ; purge\nG0 X115 E4 F650 ; purge\nG0 X125 E4 F800 ; purge\nG0 X{125 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{125 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\n\nG92 E0\nM221 S100 ; reset flow to 100%\n +start_gcode = M17 ; enable steppers\nM862.1 P[nozzle_diameter] ; nozzle diameter check\nM862.3 P "MK3.5" ; printer model check\nM862.5 P2 ; g-code level check\nM862.6 P"Input shaper" ; FW feature check\nM862.6 P "MMU3" ; FW feature check\nM115 U6.0.1+14848\n; setup MMU\nM708 A0x1e X12 ; Pulley current to ~200mA\n\nM555 X{(min(print_bed_max[0], first_layer_print_min[0] + 32) - 32)} Y{(max(0, first_layer_print_min[1]) - 4)} W{((min(print_bed_max[0], max(first_layer_print_min[0] + 32, first_layer_print_max[0])))) - ((min(print_bed_max[0], first_layer_print_min[0] + 32) - 32))} H{((first_layer_print_max[1])) - ((max(0, first_layer_print_min[1]) - 4))}\n\nG90 ; use absolute coordinates\nM83 ; extruder relative mode\n\nM140 S{first_layer_bed_temperature[initial_tool]} ; set bed temp\nM104 S170 ; set extruder temp for bed leveling\nM109 R170 ; wait for temp\nM190 S{first_layer_bed_temperature[initial_tool]} ; wait for bed temp\n\n\nG28 ; home all\n\nG29 P1 ; invalidate mbl & probe print area\nG29 P1 X23 Y5 W160 H20 C ; probe near purge place\nG29 P3.2 ; interpolate mbl probes\nG29 P3.13 ; extrapolate mbl outside probe area\nG29 A ; activate mbl\n\n; prepare for purge\nM104 S{first_layer_temperature[initial_tool]}\nG0 X0 Y-4 Z15 F4800 ; move away and ready for the purge\nM109 S{first_layer_temperature[initial_tool]}\n\nT[initial_tool]\nG1 E{parking_pos_retraction + extra_loading_move} F1000 ; load to the nozzle\n\n; Extrude purge line\n\nG92 E0 ; reset extruder position\nG0 E7 X15 Z0.2 F500 ; purge\nG0 X105 E36 F500 ; purge\nG0 X115 E4 F650 ; purge\nG0 X125 E4 F800 ; purge\nG0 X{125 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{125 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\n\nG92 E0\nM221 S100 ; reset flow to 100%\n end_gcode = {if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+1, max_print_height)} F720 ; Move print head up{endif}\nG1 X241 Y201 F7200 ; park\n{if max_layer_z < max_print_height}G1 Z{z_offset+min(max_layer_z+49, max_print_height)} F720 ; Move print head further up{endif}\n{if has_wipe_tower}\nG1 E-15 F3000\n{else}\nG1 E2 F5000\nG1 E2 F5500\nG1 E2 F6000\nG1 E-15 F5800\nG1 E-20 F5500\nG1 E10 F3000\nG1 E-10 F3100\nG1 E10 F3150\nG1 E-10 F3250\nG1 E10 F3300\n{endif}\n\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\n\n; Unload filament\nM702\n\nG4 ; wait\nM221 S100 ; reset flow\nM572 S0 ; reset LA\nM104 S0 ; turn off temperature\nM84 ; disable motors\n; max_layer_z = [max_layer_z] before_layer_gcode = ;BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]\nM201 X{interpolate_table(extruded_weight_total, (0,4000), (1400,2500), (10000,2500))} Y{interpolate_table(extruded_weight_total, (0,4000), (1400,2500), (10000,2500))}\n{if ! spiral_vase}M74 W[extruded_weight_total]{endif}\n default_print_profile = 0.20mm SPEED @MK3.5 0.4