ENH: sync voron profile from orca
Thanks OrcaSlicer. Signed-off-by: salt.wei <salt.wei@bambulab.com> Change-Id: I02f6b712cc07907ae7cae4284fb75ddef053dfea
							
								
								
									
										
											BIN
										
									
								
								resources/profiles/Voron/Voron 0.1_cover.png
									
										
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 52 KiB | 
							
								
								
									
										
											BIN
										
									
								
								resources/profiles/Voron/Voron 2.4 250_cover.png
									
										
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 34 KiB | 
							
								
								
									
										
											BIN
										
									
								
								resources/profiles/Voron/Voron 2.4 300_cover.png
									
										
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 34 KiB | 
							
								
								
									
										
											BIN
										
									
								
								resources/profiles/Voron/Voron 2.4 350_cover.png
									
										
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 34 KiB | 
							
								
								
									
										
											BIN
										
									
								
								resources/profiles/Voron/Voron Trident 250_cover.png
									
										
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 39 KiB | 
							
								
								
									
										
											BIN
										
									
								
								resources/profiles/Voron/Voron Trident 300_cover.png
									
										
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 39 KiB | 
							
								
								
									
										
											BIN
										
									
								
								resources/profiles/Voron/Voron Trident 350_cover.png
									
										
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 39 KiB | 
|  | @ -28,7 +28,7 @@ | |||
|         "40" | ||||
|     ], | ||||
|     "slow_down_min_speed": [ | ||||
|         "20" | ||||
|         "10" | ||||
|     ], | ||||
|     "slow_down_layer_time": [ | ||||
|         "8" | ||||
|  |  | |||
|  | @ -16,7 +16,7 @@ | |||
|         "7" | ||||
|     ], | ||||
|     "slow_down_min_speed": [ | ||||
|         "20" | ||||
|         "10" | ||||
|     ], | ||||
|     "compatible_printers": [ | ||||
|       "Voron 2.4 250 0.4 nozzle", | ||||
|  |  | |||
|  | @ -80,7 +80,7 @@ | |||
|         "270" | ||||
|     ], | ||||
|     "slow_down_min_speed": [ | ||||
|         "20" | ||||
|         "10" | ||||
|     ], | ||||
|     "slow_down_layer_time": [ | ||||
|         "3" | ||||
|  |  | |||
|  | @ -80,7 +80,7 @@ | |||
|         "270" | ||||
|     ], | ||||
|     "slow_down_min_speed": [ | ||||
|         "20" | ||||
|         "10" | ||||
|     ], | ||||
|     "slow_down_layer_time": [ | ||||
|         "3" | ||||
|  |  | |||
|  | @ -77,7 +77,7 @@ | |||
|         "300" | ||||
|     ], | ||||
|     "slow_down_min_speed": [ | ||||
|         "20" | ||||
|         "10" | ||||
|     ], | ||||
|     "slow_down_layer_time": [ | ||||
|         "2" | ||||
|  |  | |||
|  | @ -80,7 +80,7 @@ | |||
|         "280" | ||||
|     ], | ||||
|     "slow_down_min_speed": [ | ||||
|         "20" | ||||
|         "10" | ||||
|     ], | ||||
|     "slow_down_layer_time": [ | ||||
|         "2" | ||||
|  |  | |||
|  | @ -80,7 +80,7 @@ | |||
|         "230" | ||||
|     ], | ||||
|     "slow_down_min_speed": [ | ||||
|         "20" | ||||
|         "10" | ||||
|     ], | ||||
|     "slow_down_layer_time": [ | ||||
|         "4" | ||||
|  |  | |||
|  | @ -86,7 +86,7 @@ | |||
|         "250" | ||||
|     ], | ||||
|     "slow_down_min_speed": [ | ||||
|         "50" | ||||
|         "10" | ||||
|     ], | ||||
|     "slow_down_layer_time": [ | ||||
|         "4" | ||||
|  |  | |||
|  | @ -7,6 +7,6 @@ | |||
|     "family": "VoronDesign", | ||||
|     "bed_model": "", | ||||
|     "bed_texture": "voron_v0_logo.png", | ||||
|     "hotend_model": "hotend.stl", | ||||
|     "hotend_model": "", | ||||
|     "default_materials": "Voron Generic ABS;Voron Generic PLA;Voron Generic PLA-CF;Voron Generic PETG;Voron Generic TPU;Voron Generic ASA;Voron Generic PC;Voron Generic PVA;Voron Generic PA;Voron Generic PA-CF" | ||||
| } | ||||
|  |  | |||
|  | @ -7,6 +7,6 @@ | |||
|     "family": "VoronDesign", | ||||
|     "bed_model": "", | ||||
|     "bed_texture": "voron_logo.png", | ||||
|     "hotend_model": "hotend.stl", | ||||
|     "hotend_model": "", | ||||
|     "default_materials": "Voron Generic ABS;Voron Generic PLA;Voron Generic PLA-CF;Voron Generic PETG;Voron Generic TPU;Voron Generic ASA;Voron Generic PC;Voron Generic PVA;Voron Generic PA;Voron Generic PA-CF" | ||||
| } | ||||
|  |  | |||
|  | @ -7,6 +7,6 @@ | |||
|     "family": "VoronDesign", | ||||
|     "bed_model": "", | ||||
|     "bed_texture": "voron_logo.png", | ||||
|     "hotend_model": "hotend.stl", | ||||
|     "hotend_model": "", | ||||
|     "default_materials": "Voron Generic ABS;Voron Generic PLA;Voron Generic PLA-CF;Voron Generic PETG;Voron Generic TPU;Voron Generic ASA;Voron Generic PC;Voron Generic PVA;Voron Generic PA;Voron Generic PA-CF" | ||||
| } | ||||
|  |  | |||
|  | @ -7,6 +7,6 @@ | |||
|     "family": "VoronDesign", | ||||
|     "bed_model": "", | ||||
|     "bed_texture": "voron_logo.png", | ||||
|     "hotend_model": "hotend.stl", | ||||
|     "hotend_model": "", | ||||
|     "default_materials": "Voron Generic ABS;Voron Generic PLA;Voron Generic PLA-CF;Voron Generic PETG;Voron Generic TPU;Voron Generic ASA;Voron Generic PC;Voron Generic PVA;Voron Generic PA;Voron Generic PA-CF" | ||||
| } | ||||
|  |  | |||
|  | @ -7,6 +7,6 @@ | |||
|     "family": "VoronDesign", | ||||
|     "bed_model": "", | ||||
|     "bed_texture": "voron_logo.png", | ||||
|     "hotend_model": "hotend.stl", | ||||
|     "hotend_model": "", | ||||
|     "default_materials": "Voron Generic ABS;Voron Generic PLA;Voron Generic PLA-CF;Voron Generic PETG;Voron Generic TPU;Voron Generic ASA;Voron Generic PC;Voron Generic PVA;Voron Generic PA;Voron Generic PA-CF" | ||||
| } | ||||
|  |  | |||
|  | @ -7,6 +7,6 @@ | |||
|     "family": "VoronDesign", | ||||
|     "bed_model": "", | ||||
|     "bed_texture": "voron_logo.png", | ||||
|     "hotend_model": "hotend.stl", | ||||
|     "hotend_model": "", | ||||
|     "default_materials": "Voron Generic ABS;Voron Generic PLA;Voron Generic PLA-CF;Voron Generic PETG;Voron Generic TPU;Voron Generic ASA;Voron Generic PC;Voron Generic PVA;Voron Generic PA;Voron Generic PA-CF" | ||||
| } | ||||
|  |  | |||
|  | @ -7,6 +7,6 @@ | |||
|     "family": "VoronDesign", | ||||
|     "bed_model": "", | ||||
|     "bed_texture": "voron_logo.png", | ||||
|     "hotend_model": "hotend.stl", | ||||
|     "hotend_model": "", | ||||
|     "default_materials": "Voron Generic ABS;Voron Generic PLA;Voron Generic PLA-CF;Voron Generic PETG;Voron Generic TPU;Voron Generic ASA;Voron Generic PC;Voron Generic PVA;Voron Generic PA;Voron Generic PA-CF" | ||||
| } | ||||
|  |  | |||
|  | @ -4,7 +4,7 @@ | |||
|   "from": "system", | ||||
|   "instantiation": "false", | ||||
|   "inherits": "fdm_machine_common", | ||||
|   "gcode_flavor": "marlin", | ||||
|   "gcode_flavor": "klipper", | ||||
|   "machine_max_acceleration_e": [ | ||||
|     "5000", | ||||
|     "5000" | ||||
|  | @ -116,6 +116,7 @@ | |||
|   "deretraction_speed": [ | ||||
|     "30" | ||||
|   ], | ||||
|   "z_hop_types": "Normal Lift", | ||||
|   "silent_mode": "0", | ||||
|   "single_extruder_multi_material": "1", | ||||
|   "change_filament_gcode": "", | ||||
|  | @ -130,9 +131,10 @@ | |||
|   "bed_exclude_area": [ | ||||
|     "0x0" | ||||
|   ], | ||||
|   "machine_start_gcode": "; M190 S0\n; M104 S0\nPRINT_START EXTRUDER=[nozzle_temperature_initial_layer] BED=[bed_temperature_initial_layer_single]\n; You can use following code instead if your PRINT_START macro support Chamber and print area bedmesh\n; PRINT_START EXTRUDER=[nozzle_temperature_initial_layer] BED=[bed_temperature_initial_layer_single] PRINT_MIN={first_layer_print_min[0]},{first_layer_print_min[1]} PRINT_MAX={first_layer_print_max[0]},{first_layer_print_max[1]}", | ||||
|   "machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\nM109 S[nozzle_temperature_initial_layer]\nPRINT_START EXTRUDER=[nozzle_temperature_initial_layer] BED=[bed_temperature_initial_layer_single]\n; You can use following code instead if your PRINT_START macro support Chamber and print area bedmesh\n; PRINT_START EXTRUDER=[nozzle_temperature_initial_layer] BED=[bed_temperature_initial_layer_single] Chamber=[chamber_temperature] PRINT_MIN={first_layer_print_min[0]},{first_layer_print_min[1]} PRINT_MAX={first_layer_print_max[0]},{first_layer_print_max[1]}", | ||||
|   "machine_end_gcode": "PRINT_END", | ||||
|   "layer_change_gcode": "", | ||||
|   "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", | ||||
|   "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n", | ||||
|   "scan_first_layer": "0", | ||||
|   "nozzle_type": "undefine", | ||||
|   "auxiliary_fan": "0" | ||||
|  |  | |||
|  | @ -31,7 +31,7 @@ | |||
|     "detect_overhang_wall": "0", | ||||
|     "reduce_infill_retraction": "0", | ||||
|     "filename_format": "{input_filename_base}.gcode", | ||||
|     "wall_loops": "2", | ||||
|     "wall_loops": "3", | ||||
|     "inner_wall_line_width": "0.45", | ||||
|     "inner_wall_speed": "40", | ||||
|     "print_settings_id": "", | ||||
|  |  | |||
|  | @ -16,12 +16,14 @@ | |||
|     "brim_object_gap": "0.1", | ||||
|     "compatible_printers_condition": "", | ||||
|     "print_sequence": "by layer", | ||||
|     "default_acceleration": "7000", | ||||
|     "default_acceleration": "5000", | ||||
|     "top_surface_acceleration": "3000", | ||||
|     "travel_acceleration": "7000", | ||||
|     "inner_wall_acceleration": "5000", | ||||
|     "outer_wall_acceleration": "3000", | ||||
|     "bridge_no_support": "0", | ||||
|     "draft_shield": "disabled", | ||||
|     "elefant_foot_compensation": "0", | ||||
|     "enable_arc_fitting": "1", | ||||
|     "outer_wall_line_width": "0.4", | ||||
|     "wall_infill_order": "inner wall/outer wall/infill", | ||||
|     "line_width": "0.4", | ||||
|  | @ -48,7 +50,7 @@ | |||
|     "overhang_3_4_speed": "30", | ||||
|     "overhang_4_4_speed": "10", | ||||
|     "inner_wall_line_width": "0.45", | ||||
|     "wall_loops": "2", | ||||
|     "wall_loops": "3", | ||||
|     "print_settings_id": "", | ||||
|     "raft_layers": "0", | ||||
|     "seam_position": "aligned", | ||||
|  | @ -81,7 +83,7 @@ | |||
|     "tree_support_branch_angle": "45", | ||||
|     "tree_support_wall_count": "0", | ||||
|     "detect_thin_wall": "0", | ||||
|     "top_surface_pattern": "monotonicline", | ||||
|     "top_surface_pattern": "monotonic", | ||||
|     "top_surface_line_width": "0.4", | ||||
|     "top_shell_layers": "3", | ||||
|     "top_shell_thickness": "0.8", | ||||
|  | @ -99,6 +101,7 @@ | |||
|     "prime_tower_width": "35", | ||||
|     "xy_hole_compensation": "0", | ||||
|     "xy_contour_compensation": "0", | ||||
|     "enable_arc_fitting": "0", | ||||
|     "compatible_printers": [ | ||||
|       "Voron 2.4 250 0.4 nozzle", | ||||
|       "Voron 2.4 300 0.4 nozzle", | ||||
|  |  | |||
| Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 39 KiB | 
| Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 18 KiB | 
| Before Width: | Height: | Size: 1.2 MiB | 
| Before Width: | Height: | Size: 514 KiB | 
| Before Width: | Height: | Size: 514 KiB | 
| Before Width: | Height: | Size: 514 KiB | 
| Before Width: | Height: | Size: 914 KiB | 
| Before Width: | Height: | Size: 914 KiB | 
| Before Width: | Height: | Size: 914 KiB | 
|  | @ -1759,6 +1759,7 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato | |||
|         m_placeholder_parser.set("bed_temperature", new ConfigOptionInts(*bed_temp_opt)); | ||||
|         m_placeholder_parser.set("bed_temperature_initial_layer_single", new ConfigOptionInt(first_bed_temp_opt->get_at(initial_extruder_id))); | ||||
|         m_placeholder_parser.set("bed_temperature_initial_layer_vector", new ConfigOptionString("")); | ||||
|         m_placeholder_parser.set("chamber_temperature", new ConfigOptionInt(m_config.chamber_temperature)); | ||||
| 
 | ||||
|          //support variables `first_layer_temperature` and `first_layer_bed_temperature`
 | ||||
|         m_placeholder_parser.set("first_layer_bed_temperature", new ConfigOptionInts(*first_bed_temp_opt)); | ||||
|  | @ -1784,11 +1785,12 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato | |||
| 
 | ||||
|     } | ||||
|     std::string machine_start_gcode = this->placeholder_parser_process("machine_start_gcode", print.config().machine_start_gcode.value, initial_extruder_id); | ||||
|     // Set bed temperature if the start G-code does not contain any bed temp control G-codes.
 | ||||
|     this->_print_first_layer_bed_temperature(file, print, machine_start_gcode, initial_extruder_id, true); | ||||
|     // Set extruder(s) temperature before and after start G-code.
 | ||||
|     this->_print_first_layer_extruder_temperatures(file, print, machine_start_gcode, initial_extruder_id, false); | ||||
| 
 | ||||
|     if (print.config().gcode_flavor != gcfKlipper) { | ||||
|         // Set bed temperature if the start G-code does not contain any bed temp control G-codes.
 | ||||
|         this->_print_first_layer_bed_temperature(file, print, machine_start_gcode, initial_extruder_id, true); | ||||
|         // Set extruder(s) temperature before and after start G-code.
 | ||||
|         this->_print_first_layer_extruder_temperatures(file, print, machine_start_gcode, initial_extruder_id, false); | ||||
|     } | ||||
|     // adds tag for processor
 | ||||
|     file.write_format(";%s%s\n", GCodeProcessor::reserved_tag(GCodeProcessor::ETags::Role).c_str(), ExtrusionEntity::role_to_string(erCustom).c_str()); | ||||
| 
 | ||||
|  |  | |||
|  | @ -921,7 +921,7 @@ void GCodeProcessor::apply_config(const PrintConfig& config) | |||
|         m_result.filament_vitrification_temperature[i] = static_cast<float>(config.temperature_vitrification.get_at(i)); | ||||
|     } | ||||
| 
 | ||||
|     if (m_flavor == gcfMarlinLegacy || m_flavor == gcfMarlinFirmware) { | ||||
|     if (m_flavor == gcfMarlinLegacy || m_flavor == gcfMarlinFirmware || m_flavor == gcfKlipper) { | ||||
|         m_time_processor.machine_limits = reinterpret_cast<const MachineEnvelopeConfig&>(config); | ||||
|         if (m_flavor == gcfMarlinLegacy) { | ||||
|             // Legacy Marlin does not have separate travel acceleration, it uses the 'extruding' value instead.
 | ||||
|  | @ -1116,7 +1116,7 @@ void GCodeProcessor::apply_config(const DynamicPrintConfig& config) | |||
|     if (machine_unload_filament_time != nullptr) | ||||
|         m_time_processor.filament_unload_times = static_cast<float>(machine_unload_filament_time->value); | ||||
| 
 | ||||
|     if (m_flavor == gcfMarlinLegacy || m_flavor == gcfMarlinFirmware) { | ||||
|     if (m_flavor == gcfMarlinLegacy || m_flavor == gcfMarlinFirmware || m_flavor == gcfKlipper) { | ||||
|         const ConfigOptionFloats* machine_max_acceleration_x = config.option<ConfigOptionFloats>("machine_max_acceleration_x"); | ||||
|         if (machine_max_acceleration_x != nullptr) | ||||
|             m_time_processor.machine_limits.machine_max_acceleration_x.values = machine_max_acceleration_x->values; | ||||
|  | @ -1659,6 +1659,16 @@ void GCodeProcessor::process_gcode_line(const GCodeReader::GCodeLine& line, bool | |||
|     m_start_position = m_end_position; | ||||
| 
 | ||||
|     const std::string_view cmd = line.cmd(); | ||||
|     //softfever
 | ||||
|     if (m_flavor == gcfKlipper) | ||||
|     { | ||||
|         if (boost::iequals(cmd, "SET_VELOCITY_LIMIT")) | ||||
|         { | ||||
|             process_SET_VELOCITY_LIMIT(line); | ||||
|             return; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     if (cmd.length() > 1) { | ||||
|         // process command lines
 | ||||
|         switch (cmd[0]) | ||||
|  | @ -3719,7 +3729,7 @@ void GCodeProcessor::process_M203(const GCodeReader::GCodeLine& line) | |||
| 
 | ||||
|     // see http://reprap.org/wiki/G-code#M203:_Set_maximum_feedrate
 | ||||
|     // http://smoothieware.org/supported-g-codes
 | ||||
|     float factor = (m_flavor == gcfMarlinLegacy || m_flavor == gcfMarlinFirmware || m_flavor == gcfSmoothie) ? 1.0f : MMMIN_TO_MMSEC; | ||||
|     float factor = (m_flavor == gcfMarlinLegacy || m_flavor == gcfMarlinFirmware || m_flavor == gcfSmoothie || m_flavor == gcfKlipper) ? 1.0f : MMMIN_TO_MMSEC; | ||||
| 
 | ||||
|     for (size_t i = 0; i < static_cast<size_t>(PrintEstimatedStatistics::ETimeMode::Count); ++i) { | ||||
|         if (static_cast<PrintEstimatedStatistics::ETimeMode>(i) == PrintEstimatedStatistics::ETimeMode::Normal || | ||||
|  | @ -3798,6 +3808,54 @@ void GCodeProcessor::process_M205(const GCodeReader::GCodeLine& line) | |||
|     } | ||||
| } | ||||
| 
 | ||||
| void GCodeProcessor::process_SET_VELOCITY_LIMIT(const GCodeReader::GCodeLine& line) | ||||
| { | ||||
|     // handle SQUARE_CORNER_VELOCITY
 | ||||
|     std::regex pattern("\\sSQUARE_CORNER_VELOCITY\\s*=\\s*([0-9]*\\.*[0-9]*)"); | ||||
|     std::smatch matches; | ||||
|     if (std::regex_search(line.raw(), matches, pattern) && matches.size() == 2) { | ||||
|         float _jerk = 0; | ||||
|         try | ||||
|         { | ||||
|             _jerk = std::stof(matches[1]); | ||||
|         } | ||||
|         catch (...) {} | ||||
|         for (size_t i = 0; i < static_cast<size_t>(PrintEstimatedStatistics::ETimeMode::Count); ++i) { | ||||
|             set_option_value(m_time_processor.machine_limits.machine_max_jerk_x, i, _jerk); | ||||
|             set_option_value(m_time_processor.machine_limits.machine_max_jerk_y, i, _jerk); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     pattern = std::regex("\\sACCEL\\s*=\\s*([0-9]*\\.*[0-9]*)"); | ||||
|     if (std::regex_search(line.raw(), matches, pattern) && matches.size() == 2) { | ||||
|         float _accl = 0; | ||||
|         try | ||||
|         { | ||||
|             _accl = std::stof(matches[1]); | ||||
|         } | ||||
|         catch (...) {} | ||||
|         for (size_t i = 0; i < static_cast<size_t>(PrintEstimatedStatistics::ETimeMode::Count); ++i) { | ||||
|             set_acceleration(static_cast<PrintEstimatedStatistics::ETimeMode>(i), _accl); | ||||
|             set_travel_acceleration(static_cast<PrintEstimatedStatistics::ETimeMode>(i), _accl); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     pattern = std::regex("\\sVELOCITY\\s*=\\s*([0-9]*\\.*[0-9]*)"); | ||||
|     if (std::regex_search(line.raw(), matches, pattern) && matches.size() == 2) { | ||||
|         float _speed = 0; | ||||
|         try | ||||
|         { | ||||
|             _speed = std::stof(matches[1]); | ||||
|         } | ||||
|         catch (...) {} | ||||
|         for (size_t i = 0; i < static_cast<size_t>(PrintEstimatedStatistics::ETimeMode::Count); ++i) { | ||||
|             set_option_value(m_time_processor.machine_limits.machine_max_speed_x, i, _speed); | ||||
|             set_option_value(m_time_processor.machine_limits.machine_max_speed_y, i, _speed); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| void GCodeProcessor::process_M221(const GCodeReader::GCodeLine& line) | ||||
| { | ||||
|     float value_s; | ||||
|  |  | |||
|  | @ -837,6 +837,9 @@ namespace Slic3r { | |||
|         // Advanced settings
 | ||||
|         void process_M205(const GCodeReader::GCodeLine& line); | ||||
| 
 | ||||
|         // Klipper SET_VELOCITY_LIMIT
 | ||||
|         void process_SET_VELOCITY_LIMIT(const GCodeReader::GCodeLine& line); | ||||
| 
 | ||||
|         // Set extrude factor override percentage
 | ||||
|         void process_M221(const GCodeReader::GCodeLine& line); | ||||
| 
 | ||||
|  |  | |||
|  | @ -128,9 +128,13 @@ public: | |||
|     } | ||||
| 
 | ||||
|     WipeTowerWriter&            disable_linear_advance() { | ||||
|         m_gcode += (m_gcode_flavor == gcfRepRapSprinter || m_gcode_flavor == gcfRepRapFirmware | ||||
|                         ? (std::string("M572 D") + std::to_string(m_current_tool) + " S0\n") | ||||
|                         : std::string("M900 K0\n")); | ||||
|         if (m_gcode_flavor == gcfKlipper) | ||||
|             m_gcode += "SET_PRESSURE_ADVANCE ADVANCE=0\n"; | ||||
|         else if (m_gcode_flavor == gcfRepRapFirmware) | ||||
|             m_gcode += std::string("M572 D") + std::to_string(m_current_tool) + " S0\n"; | ||||
|         else | ||||
|             m_gcode += "M900 K0\n"; | ||||
| 
 | ||||
|         return *this; | ||||
|     } | ||||
| 
 | ||||
|  |  | |||
|  | @ -22,7 +22,9 @@ void GCodeWriter::apply_print_config(const PrintConfig &print_config) | |||
| { | ||||
|     this->config.apply(print_config, true); | ||||
|     m_single_extruder_multi_material = print_config.single_extruder_multi_material.value; | ||||
|     bool is_marlin = print_config.gcode_flavor.value == gcfMarlinLegacy || print_config.gcode_flavor.value == gcfMarlinFirmware; | ||||
|     bool is_marlin = print_config.gcode_flavor.value == gcfMarlinLegacy | ||||
|                   || print_config.gcode_flavor.value == gcfMarlinFirmware | ||||
|                   || print_config.gcode_flavor.value == gcfKlipper; | ||||
|     m_max_acceleration = std::lrint(is_marlin ? print_config.machine_max_acceleration_extruding.values.front() : 0); | ||||
| } | ||||
| 
 | ||||
|  | @ -54,7 +56,8 @@ std::string GCodeWriter::preamble() | |||
|         FLAVOR_IS(gcfMarlinFirmware) || | ||||
|         FLAVOR_IS(gcfTeacup) || | ||||
|         FLAVOR_IS(gcfRepetier) || | ||||
|         FLAVOR_IS(gcfSmoothie)) | ||||
|         FLAVOR_IS(gcfSmoothie) || | ||||
|         FLAVOR_IS(gcfKlipper)) | ||||
|     { | ||||
|         if (RELATIVE_E_AXIS) { | ||||
|             gcode << "M83 ; only support relative e\n"; | ||||
|  |  | |||
|  | @ -781,7 +781,9 @@ static std::vector<std::string> s_Preset_filament_options { | |||
|     "filament_vendor", "compatible_prints", "compatible_prints_condition", "compatible_printers", "compatible_printers_condition", "inherits", | ||||
|     //BBS
 | ||||
|     "filament_wipe_distance", "additional_cooling_fan_speed", | ||||
|     "bed_temperature_difference", "nozzle_temperature_range_low", "nozzle_temperature_range_high" | ||||
|     "bed_temperature_difference", "nozzle_temperature_range_low", "nozzle_temperature_range_high", | ||||
|     //softfever
 | ||||
|     "chamber_temperature" | ||||
| }; | ||||
| 
 | ||||
| static std::vector<std::string> s_Preset_machine_limits_options { | ||||
|  |  | |||
|  | @ -141,6 +141,7 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n | |||
|         "wipe_distance", | ||||
|         "curr_bed_type", | ||||
|         "nozzle_volume", | ||||
|         "chamber_temperature", | ||||
|         "nozzle_hrc", | ||||
|         "required_nozzle_HRC", | ||||
|         "upward_compatible_machine" | ||||
|  | @ -180,6 +181,7 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n | |||
|             osteps.emplace_back(posSlice); | ||||
|         } else if ( | ||||
|                opt_key == "print_sequence" | ||||
|             || opt_key == "chamber_temperature" | ||||
|             || opt_key == "filament_type" | ||||
|             || opt_key == "nozzle_temperature_initial_layer" | ||||
|             || opt_key == "filament_minimal_purge_on_wipe_tower" | ||||
|  |  | |||
|  | @ -91,6 +91,7 @@ CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(AuthorizationType) | |||
| 
 | ||||
| static t_config_enum_values s_keys_map_GCodeFlavor { | ||||
|     { "marlin",         gcfMarlinLegacy }, | ||||
|     { "klipper",        gcfKlipper }, | ||||
|     { "reprap",         gcfRepRapSprinter }, | ||||
|     { "reprapfirmware", gcfRepRapFirmware }, | ||||
|     { "repetier",       gcfRepetier }, | ||||
|  | @ -1551,29 +1552,31 @@ void PrintConfigDef::init_fff_params() | |||
|     def->tooltip = L("What kind of gcode the printer is compatible with"); | ||||
|     def->enum_keys_map = &ConfigOptionEnum<GCodeFlavor>::get_enum_values(); | ||||
|     def->enum_values.push_back("marlin"); | ||||
|     /*def->enum_values.push_back("reprap");
 | ||||
|     def->enum_values.push_back("reprapfirmware"); | ||||
|     def->enum_values.push_back("repetier"); | ||||
|     def->enum_values.push_back("teacup"); | ||||
|     def->enum_values.push_back("makerware"); | ||||
|     def->enum_values.push_back("marlin2"); | ||||
|     def->enum_values.push_back("sailfish"); | ||||
|     def->enum_values.push_back("mach3"); | ||||
|     def->enum_values.push_back("machinekit"); | ||||
|     def->enum_values.push_back("smoothie"); | ||||
|     def->enum_values.push_back("no-extrusion");*/ | ||||
|     def->enum_values.push_back("klipper"); | ||||
|     //def->enum_values.push_back("reprap");
 | ||||
|     //def->enum_values.push_back("reprapfirmware");
 | ||||
|     //def->enum_values.push_back("repetier");
 | ||||
|     //def->enum_values.push_back("teacup");
 | ||||
|     //def->enum_values.push_back("makerware");
 | ||||
|     //def->enum_values.push_back("marlin2");
 | ||||
|     //def->enum_values.push_back("sailfish");
 | ||||
|     //def->enum_values.push_back("mach3");
 | ||||
|     //def->enum_values.push_back("machinekit");
 | ||||
|     //def->enum_values.push_back("smoothie");
 | ||||
|     //def->enum_values.push_back("no-extrusion");
 | ||||
|     def->enum_labels.push_back("Marlin(legacy)"); | ||||
|     /*def->enum_labels.push_back("RepRap/Sprinter");
 | ||||
|     def->enum_labels.push_back("RepRapFirmware"); | ||||
|     def->enum_labels.push_back("Repetier"); | ||||
|     def->enum_labels.push_back("Teacup"); | ||||
|     def->enum_labels.push_back("MakerWare (MakerBot)"); | ||||
|     def->enum_labels.push_back("Marlin 2"); | ||||
|     def->enum_labels.push_back("Sailfish (MakerBot)"); | ||||
|     def->enum_labels.push_back("Mach3/LinuxCNC"); | ||||
|     def->enum_labels.push_back("Machinekit"); | ||||
|     def->enum_labels.push_back("Smoothie"); | ||||
|     def->enum_labels.push_back(L("No extrusion"));*/ | ||||
|     def->enum_labels.push_back("Klipper"); | ||||
|     //def->enum_labels.push_back("RepRap/Sprinter");
 | ||||
|     //def->enum_labels.push_back("RepRapFirmware");
 | ||||
|     //def->enum_labels.push_back("Repetier");
 | ||||
|     //def->enum_labels.push_back("Teacup");
 | ||||
|     //def->enum_labels.push_back("MakerWare (MakerBot)");
 | ||||
|     //def->enum_labels.push_back("Marlin 2");
 | ||||
|     //def->enum_labels.push_back("Sailfish (MakerBot)");
 | ||||
|     //def->enum_labels.push_back("Mach3/LinuxCNC");
 | ||||
|     //def->enum_labels.push_back("Machinekit");
 | ||||
|     //def->enum_labels.push_back("Smoothie");
 | ||||
|     //def->enum_labels.push_back(L("No extrusion"));
 | ||||
|     def->mode = comAdvanced; | ||||
|     def->readonly = false; | ||||
|     def->set_default_value(new ConfigOptionEnum<GCodeFlavor>(gcfMarlinLegacy)); | ||||
|  | @ -2879,6 +2882,15 @@ void PrintConfigDef::init_fff_params() | |||
|     def->mode = comAdvanced; | ||||
|     def->set_default_value(new ConfigOptionFloat(0)); | ||||
| 
 | ||||
|     def = this->add("chamber_temperature", coInt); | ||||
|     def->label = L("Chamber temperature"); | ||||
|     def->tooltip = L("Target chamber temperature"); | ||||
|     def->sidetext = L("°C"); | ||||
|     def->full_label = L("Chamber temperature"); | ||||
|     def->min = 0; | ||||
|     def->max = max_temp; | ||||
|     def->set_default_value(new ConfigOptionInt(0)); | ||||
| 
 | ||||
|     def = this->add("nozzle_temperature", coInts); | ||||
|     def->label = L("Other layers"); | ||||
|     def->tooltip = L("Nozzle temperature for layers after the initial one"); | ||||
|  |  | |||
|  | @ -32,8 +32,8 @@ | |||
| namespace Slic3r { | ||||
| 
 | ||||
| enum GCodeFlavor : unsigned char { | ||||
|     gcfMarlinLegacy, gcfRepRapSprinter, gcfRepRapFirmware, gcfRepetier, gcfTeacup, gcfMakerWare, gcfMarlinFirmware, gcfSailfish, gcfMach3, gcfMachinekit, | ||||
|     gcfSmoothie, gcfNoExtrusion, gcfKlipper | ||||
|     gcfMarlinLegacy, gcfKlipper, gcfRepRapSprinter, gcfRepRapFirmware, gcfRepetier, gcfTeacup, gcfMakerWare, gcfMarlinFirmware, gcfSailfish, gcfMach3, gcfMachinekit, | ||||
|     gcfSmoothie, gcfNoExtrusion | ||||
| }; | ||||
| 
 | ||||
| enum class FuzzySkinType { | ||||
|  | @ -925,6 +925,7 @@ PRINT_CONFIG_CLASS_DERIVED_DEFINE( | |||
|     ((ConfigOptionBool,               spiral_mode)) | ||||
|     ((ConfigOptionInt,                standby_temperature_delta)) | ||||
|     ((ConfigOptionInts,               nozzle_temperature)) | ||||
|     ((ConfigOptionInt,                chamber_temperature)) | ||||
|     ((ConfigOptionBools,              wipe)) | ||||
|     // BBS
 | ||||
|     ((ConfigOptionInts,               bed_temperature_difference)) | ||||
|  |  | |||
|  | @ -2617,6 +2617,8 @@ void TabFilament::build() | |||
|         optgroup->append_single_option_line("bed_temperature_difference"); | ||||
| 
 | ||||
|         optgroup = page->new_optgroup(L("Print temperature"), L"param_temperature"); | ||||
|         optgroup->append_single_option_line("chamber_temperature"); | ||||
| 
 | ||||
|         line = { L("Nozzle"), L("Nozzle temperature when printing") }; | ||||
|         line.append_option(optgroup->get_option("nozzle_temperature_initial_layer")); | ||||
|         line.append_option(optgroup->get_option("nozzle_temperature")); | ||||
|  | @ -2806,6 +2808,13 @@ void TabFilament::toggle_options() | |||
|     if (!m_active_page) | ||||
|         return; | ||||
| 
 | ||||
|     bool is_BBL_printer = false; | ||||
|     if (m_preset_bundle) { | ||||
|         is_BBL_printer = | ||||
|             m_preset_bundle->printers.get_edited_preset().is_bbl_vendor_preset( | ||||
|                 m_preset_bundle); | ||||
|     } | ||||
| 
 | ||||
|     if (m_active_page->title() == "Cooling") | ||||
|     { | ||||
|         bool cooling = m_config->opt_bool("slow_down_for_layer_cooling", 0); | ||||
|  | @ -2815,6 +2824,10 @@ void TabFilament::toggle_options() | |||
|         for (auto el : { "overhang_fan_speed", "overhang_fan_threshold" }) | ||||
|             toggle_option(el, has_enable_overhang_bridge_fan); | ||||
|     } | ||||
|     if (m_active_page->title() == "Filament") | ||||
|     { | ||||
|         toggle_line("chamber_temperature", !is_BBL_printer); | ||||
|     } | ||||
| 
 | ||||
|     if (m_active_page->title() == "Setting Overrides") | ||||
|         update_filament_overrides_page(); | ||||
|  | @ -3281,7 +3294,7 @@ void TabPrinter::build_unregular_pages(bool from_initial_build/* = false*/) | |||
| { | ||||
|     size_t		n_before_extruders = 2;			//	Count of pages before Extruder pages
 | ||||
|     auto        flavor = m_config->option<ConfigOptionEnum<GCodeFlavor>>("gcode_flavor")->value; | ||||
|     bool		is_marlin_flavor = (flavor == gcfMarlinLegacy || flavor == gcfMarlinFirmware); | ||||
|     bool		is_marlin_flavor = (flavor == gcfMarlinLegacy || flavor == gcfMarlinFirmware || flavor == gcfKlipper); | ||||
| 
 | ||||
|     /* ! Freeze/Thaw in this function is needed to avoid call OnPaint() for erased pages
 | ||||
|      * and be cause of application crash, when try to change Preset in moment, | ||||
|  | @ -3632,7 +3645,8 @@ void TabPrinter::toggle_options() | |||
| 
 | ||||
|     if (m_active_page->title() == "Motion ability") { | ||||
|         assert(m_config->option<ConfigOptionEnum<GCodeFlavor>>("gcode_flavor")->value == gcfMarlinLegacy | ||||
|             || m_config->option<ConfigOptionEnum<GCodeFlavor>>("gcode_flavor")->value == gcfMarlinFirmware); | ||||
|             || m_config->option<ConfigOptionEnum<GCodeFlavor>>("gcode_flavor")->value == gcfMarlinFirmware | ||||
|             || m_config->option<ConfigOptionEnum<GCodeFlavor>>("gcode_flavor")->value == gcfKlipper); | ||||
|         bool silent_mode = m_config->opt_bool("silent_mode"); | ||||
|         int  max_field = silent_mode ? 2 : 1; | ||||
|         //BBS: limits of BBL printer can't be edited, except jerk.
 | ||||
|  | @ -3667,7 +3681,8 @@ void TabPrinter::update_fff() | |||
|         m_use_silent_mode = m_config->opt_bool("silent_mode"); | ||||
|     } | ||||
| 
 | ||||
|     bool supports_travel_acceleration = (m_config->option<ConfigOptionEnum<GCodeFlavor>>("gcode_flavor")->value == gcfMarlinFirmware); | ||||
|     auto gcf_ = m_config->option<ConfigOptionEnum<GCodeFlavor>>("gcode_flavor")->value; | ||||
|     bool supports_travel_acceleration = (gcf_ == gcfMarlinFirmware || gcf_ == gcfMarlinLegacy || gcf_ == gcfKlipper); | ||||
|     if (m_supports_travel_acceleration != supports_travel_acceleration) { | ||||
|         m_rebuild_kinematics_page = true; | ||||
|         m_supports_travel_acceleration = supports_travel_acceleration; | ||||
|  |  | |||
 salt.wei
						salt.wei