diff --git a/cmake/modules/MacOSXBundleInfo.plist.in b/cmake/modules/MacOSXBundleInfo.plist.in
index 13e53179cf9..f453a8a8449 100644
--- a/cmake/modules/MacOSXBundleInfo.plist.in
+++ b/cmake/modules/MacOSXBundleInfo.plist.in
@@ -26,6 +26,17 @@
????
CFBundleVersion
${MACOSX_BUNDLE_BUNDLE_VERSION}
+ CFBundleURLTypes
+
+
+ CFBundleURLName
+ orcasliceropen url
+ CFBundleURLSchemes
+
+ orcasliceropen
+
+
+
CFBundleDocumentTypes
@@ -35,7 +46,7 @@
STL
CFBundleTypeIconFile
- stl.icns
+ images/stl.icns
CFBundleTypeName
STL
CFBundleTypeRole
@@ -52,7 +63,7 @@
OBJ
CFBundleTypeIconFile
- OrcaSlicer.icns
+ images/OrcaSlicer.icns
CFBundleTypeName
STL
CFBundleTypeRole
@@ -69,7 +80,7 @@
AMF
CFBundleTypeIconFile
- OrcaSlicer.icns
+ images/OrcaSlicer.icns
CFBundleTypeName
AMF
CFBundleTypeRole
@@ -86,7 +97,7 @@
3MF
CFBundleTypeIconFile
- OrcaSlicer.icns
+ images/OrcaSlicer.icns
CFBundleTypeName
3MF
CFBundleTypeRole
@@ -103,7 +114,7 @@
GCODE
CFBundleTypeIconFile
- gcode.icns
+ images/gcode.icns
CFBundleTypeName
GCODE
CFBundleTypeRole
diff --git a/resources/images/transparent_ams_lib.svg b/resources/images/transparent_ams_lib.svg
index fa2a0b65f22..404028e0709 100644
--- a/resources/images/transparent_ams_lib.svg
+++ b/resources/images/transparent_ams_lib.svg
@@ -1,4 +1,4 @@
diff --git a/resources/images/transparent_color_picker.svg b/resources/images/transparent_color_picker.svg
index 5a41befa3f4..e0918cda1f2 100644
--- a/resources/images/transparent_color_picker.svg
+++ b/resources/images/transparent_color_picker.svg
@@ -1,4 +1,4 @@
diff --git a/resources/printers/N1.json b/resources/printers/N1.json
index 85da862315c..8bcd035a5ef 100644
--- a/resources/printers/N1.json
+++ b/resources/printers/N1.json
@@ -28,7 +28,6 @@
"support_print_all":false,
"support_print_without_sd":false,
"support_flow_calibration":true,
- "support_build_plate_marker_detect":false,
"support_lidar_calibration":false,
"support_ai_monitoring":false,
"support_first_layer_inspect":false,
diff --git a/resources/printers/N2S.json b/resources/printers/N2S.json
index e287cd1fab9..2857bb17ebe 100644
--- a/resources/printers/N2S.json
+++ b/resources/printers/N2S.json
@@ -28,7 +28,6 @@
"support_print_all":false,
"support_print_without_sd":false,
"support_flow_calibration":true,
- "support_build_plate_marker_detect":false,
"support_lidar_calibration":false,
"support_ai_monitoring":false,
"support_first_layer_inspect":false,
diff --git a/resources/printers/version.txt b/resources/printers/version.txt
index 5db99ab5409..0ba31624a9b 100644
--- a/resources/printers/version.txt
+++ b/resources/printers/version.txt
@@ -1 +1 @@
-01.08.02.01
\ No newline at end of file
+01.08.03.01
\ No newline at end of file
diff --git a/resources/profiles/BBL.json b/resources/profiles/BBL.json
index 21e4ba68939..68b86183479 100644
--- a/resources/profiles/BBL.json
+++ b/resources/profiles/BBL.json
@@ -1,7 +1,7 @@
{
"name": "Bambulab",
"url": "http://www.bambulab.com/Parameters/vendor/BBL.json",
- "version": "01.08.00.13",
+ "version": "01.08.00.18",
"force_update": "0",
"description": "the initial version of BBL configurations",
"machine_model_list": [
@@ -143,6 +143,22 @@
"name": "0.08mm Extra Fine @BBL A1",
"sub_path": "process/0.08mm Extra Fine @BBL A1.json"
},
+ {
+ "name": "0.08mm High Quality @BBL X1C",
+ "sub_path": "process/0.08mm High Quality @BBL X1C.json"
+ },
+ {
+ "name": "0.08mm High Quality @BBL P1P",
+ "sub_path": "process/0.08mm High Quality @BBL P1P.json"
+ },
+ {
+ "name": "0.08mm High Quality @BBL A1M",
+ "sub_path": "process/0.08mm High Quality @BBL A1M.json"
+ },
+ {
+ "name": "0.08mm High Quality @BBL A1",
+ "sub_path": "process/0.08mm High Quality @BBL A1.json"
+ },
{
"name": "0.10mm Standard @BBL X1C 0.2 nozzle",
"sub_path": "process/0.10mm Standard @BBL X1C 0.2 nozzle.json"
@@ -155,6 +171,22 @@
"name": "0.10mm Standard @BBL A1 0.2 nozzle",
"sub_path": "process/0.10mm Standard @BBL A1 0.2 nozzle.json"
},
+ {
+ "name": "0.10mm High Quality @BBL X1C 0.2 nozzle",
+ "sub_path": "process/0.10mm High Quality @BBL X1C 0.2 nozzle.json"
+ },
+ {
+ "name": "0.10mm High Quality @BBL P1P 0.2 nozzle",
+ "sub_path": "process/0.10mm High Quality @BBL P1P 0.2 nozzle.json"
+ },
+ {
+ "name": "0.10mm High Quality @BBL A1M 0.2 nozzle",
+ "sub_path": "process/0.10mm High Quality @BBL A1M 0.2 nozzle.json"
+ },
+ {
+ "name": "0.10mm High Quality @BBL A1 0.2 nozzle",
+ "sub_path": "process/0.10mm High Quality @BBL A1 0.2 nozzle.json"
+ },
{
"name": "0.40mm Standard @BBL X1C 0.8 nozzle",
"sub_path": "process/0.40mm Standard @BBL X1C 0.8 nozzle.json"
@@ -219,6 +251,22 @@
"name": "0.12mm Fine @BBL A1",
"sub_path": "process/0.12mm Fine @BBL A1.json"
},
+ {
+ "name": "0.12mm High Quality @BBL X1C",
+ "sub_path": "process/0.12mm High Quality @BBL X1C.json"
+ },
+ {
+ "name": "0.12mm High Quality @BBL P1P",
+ "sub_path": "process/0.12mm High Quality @BBL P1P.json"
+ },
+ {
+ "name": "0.12mm High Quality @BBL A1M",
+ "sub_path": "process/0.12mm High Quality @BBL A1M.json"
+ },
+ {
+ "name": "0.12mm High Quality @BBL A1",
+ "sub_path": "process/0.12mm High Quality @BBL A1.json"
+ },
{
"name": "0.16mm Optimal @BBL X1C",
"sub_path": "process/0.16mm Optimal @BBL X1C.json"
@@ -235,6 +283,22 @@
"name": "0.16mm Optimal @BBL A1",
"sub_path": "process/0.16mm Optimal @BBL A1.json"
},
+ {
+ "name": "0.16mm High Quality @BBL X1C",
+ "sub_path": "process/0.16mm High Quality @BBL X1C.json"
+ },
+ {
+ "name": "0.16mm High Quality @BBL P1P",
+ "sub_path": "process/0.16mm High Quality @BBL P1P.json"
+ },
+ {
+ "name": "0.16mm High Quality @BBL A1M",
+ "sub_path": "process/0.16mm High Quality @BBL A1M.json"
+ },
+ {
+ "name": "0.16mm High Quality @BBL A1",
+ "sub_path": "process/0.16mm High Quality @BBL A1.json"
+ },
{
"name": "0.20mm Standard @BBL X1C",
"sub_path": "process/0.20mm Standard @BBL X1C.json"
@@ -307,6 +371,22 @@
"name": "0.06mm Fine @BBL A1 0.2 nozzle",
"sub_path": "process/0.06mm Fine @BBL A1 0.2 nozzle.json"
},
+ {
+ "name": "0.06mm High Quality @BBL X1C 0.2 nozzle",
+ "sub_path": "process/0.06mm High Quality @BBL X1C 0.2 nozzle.json"
+ },
+ {
+ "name": "0.06mm High Quality @BBL P1P 0.2 nozzle",
+ "sub_path": "process/0.06mm High Quality @BBL P1P 0.2 nozzle.json"
+ },
+ {
+ "name": "0.06mm High Quality @BBL A1M 0.2 nozzle",
+ "sub_path": "process/0.06mm High Quality @BBL A1M 0.2 nozzle.json"
+ },
+ {
+ "name": "0.06mm High Quality @BBL A1 0.2 nozzle",
+ "sub_path": "process/0.06mm High Quality @BBL A1 0.2 nozzle.json"
+ },
{
"name": "0.08mm Standard @BBL X1C 0.2 nozzle",
"sub_path": "process/0.08mm Standard @BBL X1C 0.2 nozzle.json"
@@ -323,6 +403,22 @@
"name": "0.08mm Optimal @BBL A1 0.2 nozzle",
"sub_path": "process/0.08mm Optimal @BBL A1 0.2 nozzle.json"
},
+ {
+ "name": "0.08mm High Quality @BBL A1 0.2 nozzle",
+ "sub_path": "process/0.08mm High Quality @BBL A1 0.2 nozzle.json"
+ },
+ {
+ "name": "0.08mm High Quality @BBL A1M 0.2 nozzle",
+ "sub_path": "process/0.08mm High Quality @BBL A1M 0.2 nozzle.json"
+ },
+ {
+ "name": "0.08mm High Quality @BBL P1P 0.2 nozzle",
+ "sub_path": "process/0.08mm High Quality @BBL P1P 0.2 nozzle.json"
+ },
+ {
+ "name": "0.08mm High Quality @BBL X1C 0.2 nozzle",
+ "sub_path": "process/0.08mm High Quality @BBL X1C 0.2 nozzle.json"
+ },
{
"name": "0.12mm Standard @BBL X1C 0.2 nozzle",
"sub_path": "process/0.12mm Standard @BBL X1C 0.2 nozzle.json"
@@ -681,6 +777,10 @@
"name": "PolyLite PETG @base",
"sub_path": "filament/PolyLite PETG @base.json"
},
+ {
+ "name": "Bambu PETG Translucent @base",
+ "sub_path": "filament/Bambu PETG Translucent @base.json"
+ },
{
"name": "Bambu ABS @base",
"sub_path": "filament/Bambu ABS @base.json"
@@ -1553,6 +1653,30 @@
"name": "PolyLite PETG @BBL A1 0.2 nozzle",
"sub_path": "filament/PolyLite PETG @BBL A1 0.2 nozzle.json"
},
+ {
+ "name": "Bambu PETG Translucent @BBL X1C",
+ "sub_path": "filament/Bambu PETG Translucent @BBL X1C.json"
+ },
+ {
+ "name": "Bambu PETG Translucent @BBL X1C 0.8 nozzle",
+ "sub_path": "filament/Bambu PETG Translucent @BBL X1C 0.8 nozzle.json"
+ },
+ {
+ "name": "Bambu PETG Translucent @BBL A1M",
+ "sub_path": "filament/Bambu PETG Translucent @BBL A1M.json"
+ },
+ {
+ "name": "Bambu PETG Translucent @BBL A1M 0.8 nozzle",
+ "sub_path": "filament/Bambu PETG Translucent @BBL A1M 0.8 nozzle.json"
+ },
+ {
+ "name": "Bambu PETG Translucent @BBL A1 0.8 nozzle",
+ "sub_path": "filament/Bambu PETG Translucent @BBL A1 0.8 nozzle.json"
+ },
+ {
+ "name": "Bambu PETG Translucent @BBL A1",
+ "sub_path": "filament/Bambu PETG Translucent @BBL A1.json"
+ },
{
"name": "Bambu ABS @BBL X1C",
"sub_path": "filament/Bambu ABS @BBL X1C.json"
diff --git a/resources/profiles/BBL/filament/Bambu PETG Basic @base.json b/resources/profiles/BBL/filament/Bambu PETG Basic @base.json
index 02ca4846f8c..b187cac1922 100644
--- a/resources/profiles/BBL/filament/Bambu PETG Basic @base.json
+++ b/resources/profiles/BBL/filament/Bambu PETG Basic @base.json
@@ -51,7 +51,7 @@
"270"
],
"nozzle_temperature_range_low": [
- "240"
+ "230"
],
"overhang_fan_speed": [
"90"
@@ -59,6 +59,9 @@
"overhang_fan_threshold": [
"10%"
],
+ "slow_down_layer_time": [
+ "12"
+ ],
"textured_plate_temp": [
"70"
],
diff --git a/resources/profiles/BBL/filament/Bambu PETG Translucent @BBL A1 0.8 nozzle.json b/resources/profiles/BBL/filament/Bambu PETG Translucent @BBL A1 0.8 nozzle.json
new file mode 100644
index 00000000000..fc6643dfc6c
--- /dev/null
+++ b/resources/profiles/BBL/filament/Bambu PETG Translucent @BBL A1 0.8 nozzle.json
@@ -0,0 +1,27 @@
+{
+ "type": "filament",
+ "name": "Bambu PETG Translucent @BBL A1 0.8 nozzle",
+ "inherits": "Bambu PETG Translucent @base",
+ "from": "system",
+ "setting_id": "GFSG01_04",
+ "instantiation": "true",
+ "fan_max_speed": [
+ "60"
+ ],
+ "fan_min_speed": [
+ "20"
+ ],
+ "filament_max_volumetric_speed": [
+ "16"
+ ],
+ "filament_retraction_length": [
+ "0.2"
+ ],
+ "slow_down_layer_time": [
+ "8"
+ ],
+ "compatible_printers": [
+ "Bambu Lab A1 0.8 nozzle",
+ "Bambu Lab A1 0.6 nozzle"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/BBL/filament/Bambu PETG Translucent @BBL A1.json b/resources/profiles/BBL/filament/Bambu PETG Translucent @BBL A1.json
new file mode 100644
index 00000000000..fd65b8f27af
--- /dev/null
+++ b/resources/profiles/BBL/filament/Bambu PETG Translucent @BBL A1.json
@@ -0,0 +1,17 @@
+{
+ "type": "filament",
+ "name": "Bambu PETG Translucent @BBL A1",
+ "inherits": "Bambu PETG Translucent @base",
+ "from": "system",
+ "setting_id": "GFSG01_05",
+ "instantiation": "true",
+ "filament_retraction_length": [
+ "0.3"
+ ],
+ "slow_down_layer_time": [
+ "8"
+ ],
+ "compatible_printers": [
+ "Bambu Lab A1 0.4 nozzle"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/BBL/filament/Bambu PETG Translucent @BBL A1M 0.8 nozzle.json b/resources/profiles/BBL/filament/Bambu PETG Translucent @BBL A1M 0.8 nozzle.json
new file mode 100644
index 00000000000..5785e725ca1
--- /dev/null
+++ b/resources/profiles/BBL/filament/Bambu PETG Translucent @BBL A1M 0.8 nozzle.json
@@ -0,0 +1,27 @@
+{
+ "type": "filament",
+ "name": "Bambu PETG Translucent @BBL A1M 0.8 nozzle",
+ "inherits": "Bambu PETG Translucent @base",
+ "from": "system",
+ "setting_id": "GFSG01_03",
+ "instantiation": "true",
+ "fan_max_speed": [
+ "60"
+ ],
+ "fan_min_speed": [
+ "20"
+ ],
+ "filament_max_volumetric_speed": [
+ "16"
+ ],
+ "filament_retraction_length": [
+ "0.2"
+ ],
+ "slow_down_layer_time": [
+ "8"
+ ],
+ "compatible_printers": [
+ "Bambu Lab A1 mini 0.6 nozzle",
+ "Bambu Lab A1 mini 0.8 nozzle"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/BBL/filament/Bambu PETG Translucent @BBL A1M.json b/resources/profiles/BBL/filament/Bambu PETG Translucent @BBL A1M.json
new file mode 100644
index 00000000000..fc1271284b0
--- /dev/null
+++ b/resources/profiles/BBL/filament/Bambu PETG Translucent @BBL A1M.json
@@ -0,0 +1,17 @@
+{
+ "type": "filament",
+ "name": "Bambu PETG Translucent @BBL A1M",
+ "inherits": "Bambu PETG Translucent @base",
+ "from": "system",
+ "setting_id": "GFSG01_02",
+ "instantiation": "true",
+ "filament_retraction_length": [
+ "0.3"
+ ],
+ "slow_down_layer_time": [
+ "8"
+ ],
+ "compatible_printers": [
+ "Bambu Lab A1 mini 0.4 nozzle"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/BBL/filament/Bambu PETG Translucent @BBL X1C 0.8 nozzle.json b/resources/profiles/BBL/filament/Bambu PETG Translucent @BBL X1C 0.8 nozzle.json
new file mode 100644
index 00000000000..39a4bfb3f8c
--- /dev/null
+++ b/resources/profiles/BBL/filament/Bambu PETG Translucent @BBL X1C 0.8 nozzle.json
@@ -0,0 +1,35 @@
+{
+ "type": "filament",
+ "name": "Bambu PETG Translucent @BBL X1C 0.8 nozzle",
+ "inherits": "Bambu PETG Translucent @base",
+ "from": "system",
+ "setting_id": "GFSG01_01",
+ "instantiation": "true",
+ "fan_max_speed": [
+ "60"
+ ],
+ "fan_min_speed": [
+ "20"
+ ],
+ "filament_max_volumetric_speed": [
+ "16"
+ ],
+ "filament_retraction_length": [
+ "0.2"
+ ],
+ "slow_down_layer_time": [
+ "8"
+ ],
+ "compatible_printers": [
+ "Bambu Lab X1 Carbon 0.6 nozzle",
+ "Bambu Lab X1 Carbon 0.8 nozzle",
+ "Bambu Lab X1 0.6 nozzle",
+ "Bambu Lab X1 0.8 nozzle",
+ "Bambu Lab P1P 0.6 nozzle",
+ "Bambu Lab P1P 0.8 nozzle",
+ "Bambu Lab P1S 0.6 nozzle",
+ "Bambu Lab P1S 0.8 nozzle",
+ "Bambu Lab X1E 0.6 nozzle",
+ "Bambu Lab X1E 0.8 nozzle"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/BBL/filament/Bambu PETG Translucent @BBL X1C.json b/resources/profiles/BBL/filament/Bambu PETG Translucent @BBL X1C.json
new file mode 100644
index 00000000000..386ef5eab80
--- /dev/null
+++ b/resources/profiles/BBL/filament/Bambu PETG Translucent @BBL X1C.json
@@ -0,0 +1,21 @@
+{
+ "type": "filament",
+ "name": "Bambu PETG Translucent @BBL X1C",
+ "inherits": "Bambu PETG Translucent @base",
+ "from": "system",
+ "setting_id": "GFSG01_00",
+ "instantiation": "true",
+ "filament_retraction_length": [
+ "0.3"
+ ],
+ "slow_down_layer_time": [
+ "8"
+ ],
+ "compatible_printers": [
+ "Bambu Lab X1 Carbon 0.4 nozzle",
+ "Bambu Lab X1 0.4 nozzle",
+ "Bambu Lab P1P 0.4 nozzle",
+ "Bambu Lab P1S 0.4 nozzle",
+ "Bambu Lab X1E 0.4 nozzle"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/BBL/filament/Bambu PETG Translucent @base.json b/resources/profiles/BBL/filament/Bambu PETG Translucent @base.json
new file mode 100644
index 00000000000..174052635cd
--- /dev/null
+++ b/resources/profiles/BBL/filament/Bambu PETG Translucent @base.json
@@ -0,0 +1,80 @@
+{
+ "type": "filament",
+ "name": "Bambu PETG Translucent @base",
+ "inherits": "fdm_filament_pet",
+ "from": "system",
+ "filament_id": "GFG01",
+ "instantiation": "false",
+ "cool_plate_temp": [
+ "0"
+ ],
+ "cool_plate_temp_initial_layer": [
+ "0"
+ ],
+ "eng_plate_temp": [
+ "70"
+ ],
+ "eng_plate_temp_initial_layer": [
+ "70"
+ ],
+ "fan_cooling_layer_time": [
+ "30"
+ ],
+ "fan_max_speed": [
+ "30"
+ ],
+ "fan_min_speed": [
+ "10"
+ ],
+ "filament_cost": [
+ "24.99"
+ ],
+ "filament_density": [
+ "1.25"
+ ],
+ "filament_flow_ratio": [
+ "0.95"
+ ],
+ "filament_max_volumetric_speed": [
+ "6"
+ ],
+ "filament_vendor": [
+ "Bambu Lab"
+ ],
+ "hot_plate_temp": [
+ "70"
+ ],
+ "hot_plate_temp_initial_layer": [
+ "70"
+ ],
+ "nozzle_temperature": [
+ "245"
+ ],
+ "nozzle_temperature_initial_layer": [
+ "250"
+ ],
+ "nozzle_temperature_range_high": [
+ "270"
+ ],
+ "nozzle_temperature_range_low": [
+ "230"
+ ],
+ "overhang_fan_speed": [
+ "90"
+ ],
+ "overhang_fan_threshold": [
+ "10%"
+ ],
+ "slow_down_layer_time": [
+ "12"
+ ],
+ "textured_plate_temp": [
+ "70"
+ ],
+ "textured_plate_temp_initial_layer": [
+ "70"
+ ],
+ "filament_start_gcode": [
+ "; filament start gcode\n{if (bed_temperature[current_extruder] >80)||(bed_temperature_initial_layer[current_extruder] >80)}M106 P3 S255\n{elsif (bed_temperature[current_extruder] >60)||(bed_temperature_initial_layer[current_extruder] >60)}M106 P3 S180\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/BBL/filament/Bambu TPU 95A HF @base.json b/resources/profiles/BBL/filament/Bambu TPU 95A HF @base.json
index 8e012b89dc6..0445791bfc6 100644
--- a/resources/profiles/BBL/filament/Bambu TPU 95A HF @base.json
+++ b/resources/profiles/BBL/filament/Bambu TPU 95A HF @base.json
@@ -14,6 +14,9 @@
"filament_max_volumetric_speed": [
"12"
],
+ "filament_retraction_length": [
+ "0.8"
+ ],
"filament_vendor": [
"Bambu Lab"
],
diff --git a/resources/profiles/BBL/filament/Generic PETG @base.json b/resources/profiles/BBL/filament/Generic PETG @base.json
index 6e25c129fc6..29734e7a95b 100644
--- a/resources/profiles/BBL/filament/Generic PETG @base.json
+++ b/resources/profiles/BBL/filament/Generic PETG @base.json
@@ -47,6 +47,9 @@
"overhang_fan_threshold": [
"10%"
],
+ "slow_down_layer_time": [
+ "12"
+ ],
"slow_down_min_speed": [
"20"
],
diff --git a/resources/profiles/BBL/filament/Generic PLA @0.2 nozzle.json b/resources/profiles/BBL/filament/Generic PLA @0.2 nozzle.json
index d80a580773b..e904863bd08 100644
--- a/resources/profiles/BBL/filament/Generic PLA @0.2 nozzle.json
+++ b/resources/profiles/BBL/filament/Generic PLA @0.2 nozzle.json
@@ -6,7 +6,7 @@
"setting_id": "GFSL99_00",
"instantiation": "true",
"filament_max_volumetric_speed": [
- "2"
+ "1.6"
],
"compatible_printers": [
"Bambu Lab X1 Carbon 0.2 nozzle",
diff --git a/resources/profiles/BBL/filament/Generic PLA @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/filament/Generic PLA @BBL A1 0.2 nozzle.json
index 09fcf5e6adf..b8a5916bc36 100644
--- a/resources/profiles/BBL/filament/Generic PLA @BBL A1 0.2 nozzle.json
+++ b/resources/profiles/BBL/filament/Generic PLA @BBL A1 0.2 nozzle.json
@@ -15,7 +15,7 @@
"60"
],
"filament_max_volumetric_speed": [
- "2"
+ "1.6"
],
"hot_plate_temp": [
"65"
diff --git a/resources/profiles/BBL/filament/Generic PLA @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/filament/Generic PLA @BBL A1M 0.2 nozzle.json
index 16f0ee48606..5d3c65d9061 100644
--- a/resources/profiles/BBL/filament/Generic PLA @BBL A1M 0.2 nozzle.json
+++ b/resources/profiles/BBL/filament/Generic PLA @BBL A1M 0.2 nozzle.json
@@ -15,7 +15,7 @@
"60"
],
"filament_max_volumetric_speed": [
- "2"
+ "1.6"
],
"hot_plate_temp": [
"60"
diff --git a/resources/profiles/BBL/filament/Overture Matte PLA @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/filament/Overture Matte PLA @BBL A1 0.2 nozzle.json
index 58472767d2f..a5f3c4665ce 100644
--- a/resources/profiles/BBL/filament/Overture Matte PLA @BBL A1 0.2 nozzle.json
+++ b/resources/profiles/BBL/filament/Overture Matte PLA @BBL A1 0.2 nozzle.json
@@ -15,7 +15,7 @@
"60"
],
"filament_max_volumetric_speed": [
- "1"
+ "1.8"
],
"hot_plate_temp": [
"65"
diff --git a/resources/profiles/BBL/filament/Overture Matte PLA @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/filament/Overture Matte PLA @BBL A1M 0.2 nozzle.json
index dd372d83b21..ba57483ccb2 100644
--- a/resources/profiles/BBL/filament/Overture Matte PLA @BBL A1M 0.2 nozzle.json
+++ b/resources/profiles/BBL/filament/Overture Matte PLA @BBL A1M 0.2 nozzle.json
@@ -6,7 +6,7 @@
"setting_id": "GFSL05_06",
"instantiation": "true",
"filament_max_volumetric_speed": [
- "1"
+ "1.8"
],
"compatible_printers": [
"Bambu Lab P1P 0.2 nozzle"
diff --git a/resources/profiles/BBL/filament/Overture Matte PLA @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/filament/Overture Matte PLA @BBL P1P 0.2 nozzle.json
index 8b51a32b048..796db32d7ca 100644
--- a/resources/profiles/BBL/filament/Overture Matte PLA @BBL P1P 0.2 nozzle.json
+++ b/resources/profiles/BBL/filament/Overture Matte PLA @BBL P1P 0.2 nozzle.json
@@ -6,7 +6,7 @@
"setting_id": "GFSL05_04",
"instantiation": "true",
"filament_max_volumetric_speed": [
- "1"
+ "1.8"
],
"compatible_printers": [
"Bambu Lab P1P 0.2 nozzle"
diff --git a/resources/profiles/BBL/filament/Overture Matte PLA @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/Overture Matte PLA @BBL X1C 0.2 nozzle.json
index 4ffd147c385..2fb98ad95b2 100644
--- a/resources/profiles/BBL/filament/Overture Matte PLA @BBL X1C 0.2 nozzle.json
+++ b/resources/profiles/BBL/filament/Overture Matte PLA @BBL X1C 0.2 nozzle.json
@@ -6,7 +6,7 @@
"setting_id": "GFSL05_01",
"instantiation": "true",
"filament_max_volumetric_speed": [
- "1"
+ "1.8"
],
"compatible_printers": [
"Bambu Lab X1 0.2 nozzle",
diff --git a/resources/profiles/BBL/filament/Overture PLA @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/filament/Overture PLA @BBL A1 0.2 nozzle.json
index b04b23e3468..de9052fdb2b 100644
--- a/resources/profiles/BBL/filament/Overture PLA @BBL A1 0.2 nozzle.json
+++ b/resources/profiles/BBL/filament/Overture PLA @BBL A1 0.2 nozzle.json
@@ -15,7 +15,7 @@
"60"
],
"filament_max_volumetric_speed": [
- "1"
+ "1.6"
],
"slow_down_layer_time": [
"8"
diff --git a/resources/profiles/BBL/filament/Overture PLA @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/filament/Overture PLA @BBL A1M 0.2 nozzle.json
index cfc3357e355..0c5657ceb52 100644
--- a/resources/profiles/BBL/filament/Overture PLA @BBL A1M 0.2 nozzle.json
+++ b/resources/profiles/BBL/filament/Overture PLA @BBL A1M 0.2 nozzle.json
@@ -6,13 +6,7 @@
"setting_id": "GFSL04_06",
"instantiation": "true",
"filament_max_volumetric_speed": [
- "1"
- ],
- "textured_plate_temp": [
- "65"
- ],
- "textured_plate_temp_initial_layer": [
- "65"
+ "1.6"
],
"compatible_printers": [
"Bambu Lab A1 mini 0.2 nozzle"
diff --git a/resources/profiles/BBL/filament/Overture PLA @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/filament/Overture PLA @BBL P1P 0.2 nozzle.json
index f8de6aa1994..4731f4ad127 100644
--- a/resources/profiles/BBL/filament/Overture PLA @BBL P1P 0.2 nozzle.json
+++ b/resources/profiles/BBL/filament/Overture PLA @BBL P1P 0.2 nozzle.json
@@ -6,7 +6,7 @@
"setting_id": "GFSL04_04",
"instantiation": "true",
"filament_max_volumetric_speed": [
- "1"
+ "1.6"
],
"compatible_printers": [
"Bambu Lab P1P 0.2 nozzle"
diff --git a/resources/profiles/BBL/filament/Overture PLA @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/Overture PLA @BBL X1C 0.2 nozzle.json
index 80f5acd18e5..4148df18ae8 100644
--- a/resources/profiles/BBL/filament/Overture PLA @BBL X1C 0.2 nozzle.json
+++ b/resources/profiles/BBL/filament/Overture PLA @BBL X1C 0.2 nozzle.json
@@ -6,7 +6,7 @@
"setting_id": "GFSL04_02",
"instantiation": "true",
"filament_max_volumetric_speed": [
- "1"
+ "1.6"
],
"compatible_printers": [
"Bambu Lab X1 Carbon 0.2 nozzle",
diff --git a/resources/profiles/BBL/filament/P1P/Generic PLA @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/filament/P1P/Generic PLA @BBL P1P 0.2 nozzle.json
index 7e5aa202ae2..463dcb0cbf2 100644
--- a/resources/profiles/BBL/filament/P1P/Generic PLA @BBL P1P 0.2 nozzle.json
+++ b/resources/profiles/BBL/filament/P1P/Generic PLA @BBL P1P 0.2 nozzle.json
@@ -12,7 +12,7 @@
"50"
],
"filament_max_volumetric_speed": [
- "2"
+ "1.6"
],
"hot_plate_temp": [
"65"
diff --git a/resources/profiles/BBL/filament/P1P/PolyLite PLA @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/filament/P1P/PolyLite PLA @BBL P1P 0.2 nozzle.json
index 70619f52840..8e45c3ef8e0 100644
--- a/resources/profiles/BBL/filament/P1P/PolyLite PLA @BBL P1P 0.2 nozzle.json
+++ b/resources/profiles/BBL/filament/P1P/PolyLite PLA @BBL P1P 0.2 nozzle.json
@@ -12,7 +12,7 @@
"50"
],
"filament_max_volumetric_speed": [
- "1"
+ "1.6"
],
"hot_plate_temp": [
"65"
diff --git a/resources/profiles/BBL/filament/P1P/PolyTerra PLA @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/filament/P1P/PolyTerra PLA @BBL P1P 0.2 nozzle.json
index 789062def6b..a81f9a94628 100644
--- a/resources/profiles/BBL/filament/P1P/PolyTerra PLA @BBL P1P 0.2 nozzle.json
+++ b/resources/profiles/BBL/filament/P1P/PolyTerra PLA @BBL P1P 0.2 nozzle.json
@@ -12,7 +12,7 @@
"50"
],
"filament_max_volumetric_speed": [
- "1"
+ "1.8"
],
"hot_plate_temp": [
"65"
diff --git a/resources/profiles/BBL/filament/P1P/eSUN PLA+ @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/filament/P1P/eSUN PLA+ @BBL P1P 0.2 nozzle.json
index 154a347fd13..04a2322723d 100644
--- a/resources/profiles/BBL/filament/P1P/eSUN PLA+ @BBL P1P 0.2 nozzle.json
+++ b/resources/profiles/BBL/filament/P1P/eSUN PLA+ @BBL P1P 0.2 nozzle.json
@@ -12,7 +12,7 @@
"50"
],
"filament_max_volumetric_speed": [
- "1"
+ "1.8"
],
"hot_plate_temp": [
"65"
diff --git a/resources/profiles/BBL/filament/PolyLite PETG @base.json b/resources/profiles/BBL/filament/PolyLite PETG @base.json
index 60c9451a576..d93701f41d0 100644
--- a/resources/profiles/BBL/filament/PolyLite PETG @base.json
+++ b/resources/profiles/BBL/filament/PolyLite PETG @base.json
@@ -44,6 +44,9 @@
"overhang_fan_threshold": [
"10%"
],
+ "slow_down_layer_time": [
+ "12"
+ ],
"slow_down_min_speed": [
"20"
],
diff --git a/resources/profiles/BBL/filament/PolyLite PLA @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/filament/PolyLite PLA @BBL A1 0.2 nozzle.json
index e1a0176f398..8f74b11f71f 100644
--- a/resources/profiles/BBL/filament/PolyLite PLA @BBL A1 0.2 nozzle.json
+++ b/resources/profiles/BBL/filament/PolyLite PLA @BBL A1 0.2 nozzle.json
@@ -15,7 +15,7 @@
"60"
],
"filament_max_volumetric_speed": [
- "1"
+ "1.6"
],
"hot_plate_temp": [
"65"
diff --git a/resources/profiles/BBL/filament/PolyLite PLA @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/filament/PolyLite PLA @BBL A1M 0.2 nozzle.json
index b3d0a8bb8a7..e4370afe239 100644
--- a/resources/profiles/BBL/filament/PolyLite PLA @BBL A1M 0.2 nozzle.json
+++ b/resources/profiles/BBL/filament/PolyLite PLA @BBL A1M 0.2 nozzle.json
@@ -15,7 +15,7 @@
"60"
],
"filament_max_volumetric_speed": [
- "1"
+ "1.6"
],
"hot_plate_temp": [
"60"
diff --git a/resources/profiles/BBL/filament/PolyLite PLA @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/PolyLite PLA @BBL X1C 0.2 nozzle.json
index e8a41572287..c9bec6b3eb4 100644
--- a/resources/profiles/BBL/filament/PolyLite PLA @BBL X1C 0.2 nozzle.json
+++ b/resources/profiles/BBL/filament/PolyLite PLA @BBL X1C 0.2 nozzle.json
@@ -6,7 +6,7 @@
"setting_id": "GFSL25",
"instantiation": "true",
"filament_max_volumetric_speed": [
- "1"
+ "1.6"
],
"compatible_printers": [
"Bambu Lab X1 Carbon 0.2 nozzle",
diff --git a/resources/profiles/BBL/filament/PolyTerra PLA @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/filament/PolyTerra PLA @BBL A1 0.2 nozzle.json
index f92353d7992..8d2f7468e5c 100644
--- a/resources/profiles/BBL/filament/PolyTerra PLA @BBL A1 0.2 nozzle.json
+++ b/resources/profiles/BBL/filament/PolyTerra PLA @BBL A1 0.2 nozzle.json
@@ -15,7 +15,7 @@
"60"
],
"filament_max_volumetric_speed": [
- "1"
+ "1.8"
],
"hot_plate_temp": [
"65"
diff --git a/resources/profiles/BBL/filament/PolyTerra PLA @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/filament/PolyTerra PLA @BBL A1M 0.2 nozzle.json
index f37463b1a5f..e0d6699dfc9 100644
--- a/resources/profiles/BBL/filament/PolyTerra PLA @BBL A1M 0.2 nozzle.json
+++ b/resources/profiles/BBL/filament/PolyTerra PLA @BBL A1M 0.2 nozzle.json
@@ -15,7 +15,7 @@
"60"
],
"filament_max_volumetric_speed": [
- "1"
+ "1.8"
],
"hot_plate_temp": [
"60"
diff --git a/resources/profiles/BBL/filament/PolyTerra PLA @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/PolyTerra PLA @BBL X1C 0.2 nozzle.json
index ed5b54fb101..bcbf2c8af94 100644
--- a/resources/profiles/BBL/filament/PolyTerra PLA @BBL X1C 0.2 nozzle.json
+++ b/resources/profiles/BBL/filament/PolyTerra PLA @BBL X1C 0.2 nozzle.json
@@ -6,7 +6,7 @@
"setting_id": "GFSL24",
"instantiation": "true",
"filament_max_volumetric_speed": [
- "1"
+ "1.8"
],
"compatible_printers": [
"Bambu Lab X1 Carbon 0.2 nozzle",
diff --git a/resources/profiles/BBL/filament/eSUN PLA+ @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/filament/eSUN PLA+ @BBL A1 0.2 nozzle.json
index e8455eef5cb..d6e8e925bdc 100644
--- a/resources/profiles/BBL/filament/eSUN PLA+ @BBL A1 0.2 nozzle.json
+++ b/resources/profiles/BBL/filament/eSUN PLA+ @BBL A1 0.2 nozzle.json
@@ -15,7 +15,7 @@
"60"
],
"filament_max_volumetric_speed": [
- "1"
+ "1.8"
],
"hot_plate_temp": [
"65"
diff --git a/resources/profiles/BBL/filament/eSUN PLA+ @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/filament/eSUN PLA+ @BBL A1M 0.2 nozzle.json
index ee4e65d4241..ced8418038a 100644
--- a/resources/profiles/BBL/filament/eSUN PLA+ @BBL A1M 0.2 nozzle.json
+++ b/resources/profiles/BBL/filament/eSUN PLA+ @BBL A1M 0.2 nozzle.json
@@ -15,7 +15,7 @@
"60"
],
"filament_max_volumetric_speed": [
- "1"
+ "1.8"
],
"hot_plate_temp": [
"60"
diff --git a/resources/profiles/BBL/filament/eSUN PLA+ @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/filament/eSUN PLA+ @BBL X1C 0.2 nozzle.json
index b05b011f21b..8e11933f41d 100644
--- a/resources/profiles/BBL/filament/eSUN PLA+ @BBL X1C 0.2 nozzle.json
+++ b/resources/profiles/BBL/filament/eSUN PLA+ @BBL X1C 0.2 nozzle.json
@@ -6,7 +6,7 @@
"setting_id": "GFSL03_01",
"instantiation": "true",
"filament_max_volumetric_speed": [
- "1"
+ "1.8"
],
"compatible_printers": [
"Bambu Lab X1 Carbon 0.2 nozzle",
diff --git a/resources/profiles/BBL/machine/Bambu Lab A1 0.4 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab A1 0.4 nozzle.json
index 0e156db2f3d..7feaa0a6a35 100644
--- a/resources/profiles/BBL/machine/Bambu Lab A1 0.4 nozzle.json
+++ b/resources/profiles/BBL/machine/Bambu Lab A1 0.4 nozzle.json
@@ -60,10 +60,9 @@
"255"
],
"scan_first_layer": "0",
- "upward_compatible_machine": [],
- "machine_start_gcode": ";===== machine: A1 =========================\n;===== date: 20231211 =====================\nG392 S0\n;M400\n;M73 P1.717\n\n;===== start to heat heatbead&hotend==========\nM1002 gcode_claim_action : 2\nM1002 set_filament_type:{filament_type[initial_no_support_extruder]}\nM104 S140\nM140 S[bed_temperature_initial_layer_single]\n\n;=====start printer sound ===================\nM17\nM400 S1\nM1006 S1\nM1006 A0 B10 L100 C37 D10 M60 E37 F10 N60\nM1006 A0 B10 L100 C41 D10 M60 E41 F10 N60\nM1006 A0 B10 L100 C44 D10 M60 E44 F10 N60\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N60\nM1006 A43 B10 L100 C46 D10 M70 E39 F10 N80\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N80\nM1006 A0 B10 L100 C43 D10 M60 E39 F10 N80\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N80\nM1006 A0 B10 L100 C41 D10 M80 E41 F10 N80\nM1006 A0 B10 L100 C44 D10 M80 E44 F10 N80\nM1006 A0 B10 L100 C49 D10 M80 E49 F10 N80\nM1006 A0 B10 L100 C0 D10 M80 E0 F10 N80\nM1006 A44 B10 L100 C48 D10 M60 E39 F10 N80\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N80\nM1006 A0 B10 L100 C44 D10 M80 E39 F10 N80\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N80\nM1006 A43 B10 L100 C46 D10 M60 E39 F10 N80\nM1006 W\nM18\n;=====start printer sound ===================\n\n;=====avoid end stop =================\nG91\nG380 S2 Z40 F1200\nG380 S2 Z-15 F1200\nG90\n\n;===== reset machine status =================\n;M290 X39 Y39 Z8\nM204 S6000\n\nM630 S0 P0\nG91\nM17 Z0.3 ; lower the z-motor current\n\nG90\nM17 X0.65 Y1.2 Z0.6 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\n;M211 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\n\n;====== cog noise reduction=================\nM982.2 S1 ; turn on cog noise reduction\n\nM1002 gcode_claim_action : 13\n\nG28 X\nG91\nG1 Z5 F1200\nG90\nG0 X128 Y0 F30000\nG91\nG1 Z-5 F1200\n\nM109 S10 H140\n\nM17 E0.3\nM83\nG1 E10 F1200\nG1 E-0.5 F30\nM17 D\n\nG28 Z P0 T140; home z with low precision,permit 300deg temperature\nM104 S{nozzle_temperature_initial_layer[initial_extruder]}\n\n;M400\n;M73 P1.717\n\n;===== prepare print temperature and material ==========\nM1002 gcode_claim_action : 24\n\nM400\n;G392 S1\nM211 X0 Y0 Z0 ;turn off soft endstop\nM975 S1 ; turn on\n\nG90\nG1 X-28.5 F30000\nG1 X-48.2 F3000\n\nM620 M ;enable remap\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M1002 gcode_claim_action : 4\n M400\n M1002 set_filament_type:UNKNOWN\n M109 S[nozzle_temperature_initial_layer]\n M104 S250\n M400\n T[initial_no_support_extruder]\n G1 X-48.2 F3000\n M400\n\n M620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n M109 S250 ;set nozzle to common flush temp\n M106 P1 S0\n G92 E0\n G1 E50 F200\n M400\n M1002 set_filament_type:{filament_type[initial_no_support_extruder]}\nM621 S[initial_no_support_extruder]A\n\nM109 S{nozzle_temperature_range_high[initial_no_support_extruder]} H300\nG92 E0\nG1 E50 F200 ; lower extrusion speed to avoid clog\nM400\nM106 P1 S178\nG92 E0\nG1 E5 F200\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG92 E0\nG1 E-0.5 F300\n\nG1 X-28.5 F30000\nG1 X-48.2 F3000\nG1 X-28.5 F30000 ;wipe and shake\nG1 X-48.2 F3000\nG1 X-28.5 F30000 ;wipe and shake\nG1 X-48.2 F3000\n\n;G392 S0\n\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n;M400\n;M73 P1.717\n\n;===== auto extrude cali start =========================\nM975 S1\n;G392 S1\n\nG90\nM83\nT1000\nG1 X-48.2 Y0 Z10 F10000\nM400\nM1002 set_filament_type:UNKNOWN\n\nM412 S1 ; ===turn on filament runout detection===\nM400 P10\nM620.3 W1; === turn on filament tangle detection===\nM400 S2\n\nM1002 set_filament_type:{filament_type[initial_no_support_extruder]}\n\n;M1002 set_flag extrude_cali_flag=1\nM1002 judge_flag extrude_cali_flag\n\nM622 J1\n M1002 gcode_claim_action : 8\n\n M109 S{nozzle_temperature[initial_extruder]}\n G1 E10 F{outer_wall_volumetric_speed/2.4*60}\n M983 F{outer_wall_volumetric_speed/2.4} A0.3 ; cali dynamic extrusion compensation\n\n M106 P1 S255\n M400 S5\n G1 X-28.5 F18000\n G1 X-48.2 F3000\n G1 X-28.5 F18000 ;wipe and shake\n G1 X-48.2 F3000\n G1 X-28.5 F12000 ;wipe and shake\n G1 X-48.2 F3000\n M400\n M106 P1 S0\n\n M1002 judge_last_extrude_cali_success\n M622 J0\n M983 F{outer_wall_volumetric_speed/2.4} A0.3 ; cali dynamic extrusion compensation\n M106 P1 S255\n M400 S5\n G1 X-28.5 F18000\n G1 X-48.2 F3000\n G1 X-28.5 F18000 ;wipe and shake\n G1 X-48.2 F3000\n G1 X-28.5 F12000 ;wipe and shake\n M400\n M106 P1 S0\n M623\nM623 ; end of \"draw extrinsic para cali paint\"\n\n;G392 S0\n;===== auto extrude cali end ========================\n\n;M400\n;M73 P1.717\n\nM104 S170 ; prepare to wipe nozzle\nM106 S255 ; turn on fan\n\n;===== mech mode fast check start =====================\nM1002 gcode_claim_action : 3\n\nG1 X128 Y128 F20000\nG1 Z5 F1200\nM400 P200\nM970.3 Q1 A5 K0 O3\nM974 Q1 S2 P0\n\nM970.2 Q1 K1 W58 Z0.11\nM974 S2\n\nG1 X128 Y128 F20000\nG1 Z5 F1200\nM400 P200\nM970.3 Q0 A10 K0 O1\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X0 Y5\nG28 X ; re-home XY\n\n;===== mech mode fast check end =======================\n\n;M400\n;M73 P1.717\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\n\nM975 S1\nM106 S255 ; turn on fan (G28 has turn off fan)\nM211 S; push soft endstop status\nM211 X0 Y0 Z0 ;turn off Z axis endstop\n\n;===== remove waste by touching start =====\n\nM104 S170 ; set temp down to heatbed acceptable\n\nM83\nG1 E-1 F500\nG90\nM83\n\nM109 S170\nG0 X108 Y-0.5 F30000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X110 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X112 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X114 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X116 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X118 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X120 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X122 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X124 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X126 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X128 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X130 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X132 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X134 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X136 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X138 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X140 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X142 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X144 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X146 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X148 F10000\nG380 S3 Z-5 F1200\n\nG1 Z5 F30000\n;===== remove waste by touching end =====\n\nG1 Z10 F1200\nG0 X118 Y261 F30000\nG1 Z5 F1200\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-50}\n\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nM104 S140 ; prepare to abl\nG0 Z5 F20000\n\nG0 X128 Y261 F20000 ; move to exposed steel surface\nG0 Z-1.01 F1200 ; stop the nozzle\n\nG91\nG2 I1 J0 X2 Y0 F2000.1\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\n\nG90\nG1 Z10 F1200\n\n;===== brush material wipe nozzle =====\n\nG90\nG1 Y250 F30000\nG1 X55\nG1 Z1.300 F1200\nG1 Y262.5 F6000\nG91\nG1 X-35 F30000\nG1 Y-0.5\nG1 X45\nG1 Y-0.5\nG1 X-45\nG1 Y-0.5\nG1 X45\nG1 Y-0.5\nG1 X-45\nG1 Y-0.5\nG1 X45\nG1 Z5.000 F1200\n\nG90\nG1 X30 Y250.000 F30000\nG1 Z1.300 F1200\nG1 Y262.5 F6000\nG91\nG1 X35 F30000\nG1 Y-0.5\nG1 X-45\nG1 Y-0.5\nG1 X45\nG1 Y-0.5\nG1 X-45\nG1 Y-0.5\nG1 X45\nG1 Y-0.5\nG1 X-45\nG1 Z10.000 F1200\n\n;===== brush material wipe nozzle end =====\n\nG90\n;G0 X128 Y261 F20000 ; move to exposed steel surface\nG1 Y250 F30000\nG1 X138\nG1 Y261\nG0 Z-1.01 F1200 ; stop the nozzle\n\nG91\nG2 I1 J0 X2 Y0 F2000.1\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\n\nM109 S140\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM211 R; pop softend status\n\n;===== wipe nozzle end ================================\n\n;M400\n;M73 P1.717\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\n\nG90\nG1 Z5 F1200\nG1 X0 Y0 F30000\nG29.2 S1 ; turn on ABL\n\nM190 S[bed_temperature_initial_layer_single]; ensure bed temp\nM109 S140\nM106 S0 ; turn off fan , too noisy\n\nM622 J1\n M1002 gcode_claim_action : 1\n G29 A\n M400\n M500 ; save cali data\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n\n;===== home after wipe mouth end =======================\n\n;M400\n;M73 P1.717\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; prepare to print\n\n;===== nozzle load line ===============================\n;G90\n;M83\n;G1 Z5 F1200\n;G1 X88 Y-0.5 F20000\n;G1 Z0.3 F1200\n\n;M109 S{nozzle_temperature_initial_layer[initial_extruder]}\n\n;G1 E2 F300\n;G1 X168 E4.989 F6000\n;G1 Z1 F1200\n;===== noozle load line end ===========================\n\n;===== extrude cali test ===============================\n\nM400\n M900 S\n\n M900 C\n G90\n M83\n G1 X78.000 Y-0.500 F30000\n G1 Z0.300 F1200\n\n M109 S{nozzle_temperature_initial_layer[initial_extruder]}\n G1 E3 F300\n\n G1 X83.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X88.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X93.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X98.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X103.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X108.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X113.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X118.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X123.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X128.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X133.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X138.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X143.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X148.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X153.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X158.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X163.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X168.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X173.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X178.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X179 Z0\n G1 X183\n G1 Z1\n M400\n\n M900 R\n G90\n M83\n G1 X78.000 Y4.500 F30000\n G1 Z0.300 F1200\n G1 E0.5 F300\n G1 X83.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X88.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X93.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X98.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X103.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X108.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X113.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X118.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X123.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X128.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X133.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X138.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X143.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X148.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X153.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X158.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X163.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X168.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X173.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X178.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X179 Z0\n G1 X183\n G1 Z1\n M400\n\nG1 Z0.2\n\n;M400\n;M73 P1.717\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.02} ; for Textured PEI Plate\n{endif}\n\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\n\nM211 X0 Y0 Z0 ;turn off soft endstop\n;G392 S1 ; turn on clog detection\nG29.4\n",
- "machine_end_gcode": ";===== date: 20230922 =====================\n;turn off nozzle clog detect\nG392 S0\n\nM400 ; wait for buffer to clear\nG92 E0 ; zero the extruder\nG1 E-0.8 F1800 ; retract\nG1 Z{max_layer_z + 0.5} F900 ; lower z a little\nG1 X0 Y{first_layer_center_no_wipe_tower[1]} F18000 ; move to safe pos\nG1 X-13.0 F3000 ; move to safe pos\n{if !spiral_mode && print_sequence != \"by object\"}\nM1002 judge_flag timelapse_record_flag\nM622 J1\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM991 S0 P-1 ;end timelapse at safe pos\nM623\n{endif}\n\nM140 S0 ; turn off bed\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off remote part cooling fan\nM106 P3 S0 ; turn off chamber cooling fan\n\n;G1 X27 F15000 ; wipe\n\n; pull back filament to AMS\nM620 S255\nG1 X267 F15000\nT255\nG1 X-28.5 F18000\nG1 X-48.5 F3000\nG1 X-28.5 F18000\nG1 X-48.5 F3000\nM621 S255\n\nM104 S0 ; turn off hotend\n\nM400 ; wait all motion done\nM17 S\nM17 Z0.4 ; lower z motor current to reduce impact if there is something in the bottom\n{if (max_layer_z + 100.0) < 256}\n G1 Z{max_layer_z + 100.0} F600\n G1 Z{max_layer_z +98.0}\n{else}\n G1 Z256 F600\n G1 Z256\n{endif}\nM400 P100\nM17 R ; restore z current\n\nG90\nG1 X-48 Y180 F3600\n\nM220 S100 ; Reset feedrate magnitude\nM201.2 K1.0 ; Reset acc magnitude\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 0\n\n;=====printer finish sound=========\nM17\nM400 S1\nM1006 S1\nM1006 A0 B20 L100 C37 D20 M40 E42 F20 N60\nM1006 A0 B10 L100 C44 D10 M60 E44 F10 N60\nM1006 A0 B10 L100 C46 D10 M80 E46 F10 N80\nM1006 A44 B20 L100 C39 D20 M60 E48 F20 N60\nM1006 A0 B10 L100 C44 D10 M60 E44 F10 N60\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N60\nM1006 A0 B10 L100 C39 D10 M60 E39 F10 N60\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N60\nM1006 A0 B10 L100 C44 D10 M60 E44 F10 N60\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N60\nM1006 A0 B10 L100 C39 D10 M60 E39 F10 N60\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N60\nM1006 A0 B10 L100 C48 D10 M60 E44 F10 N80\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N80\nM1006 A44 B20 L100 C49 D20 M80 E41 F20 N80\nM1006 A0 B20 L100 C0 D20 M60 E0 F20 N80\nM1006 A0 B20 L100 C37 D20 M30 E37 F20 N60\nM1006 W\n;=====printer finish sound=========\n\n;M17 X0.8 Y0.8 Z0.5 ; lower motor current to 45% power\nM400\nM18\n",
+ "machine_start_gcode": ";===== machine: A1 =========================\n;===== date: 20240104 =====================\nG392 S0\n;M400\n;M73 P1.717\n\n;===== start to heat heatbead&hotend==========\nM1002 gcode_claim_action : 2\nM1002 set_filament_type:{filament_type[initial_no_support_extruder]}\nM104 S140\nM140 S[bed_temperature_initial_layer_single]\n\n;=====start printer sound ===================\nM17\nM400 S1\nM1006 S1\nM1006 A0 B10 L100 C37 D10 M60 E37 F10 N60\nM1006 A0 B10 L100 C41 D10 M60 E41 F10 N60\nM1006 A0 B10 L100 C44 D10 M60 E44 F10 N60\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N60\nM1006 A43 B10 L100 C46 D10 M70 E39 F10 N80\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N80\nM1006 A0 B10 L100 C43 D10 M60 E39 F10 N80\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N80\nM1006 A0 B10 L100 C41 D10 M80 E41 F10 N80\nM1006 A0 B10 L100 C44 D10 M80 E44 F10 N80\nM1006 A0 B10 L100 C49 D10 M80 E49 F10 N80\nM1006 A0 B10 L100 C0 D10 M80 E0 F10 N80\nM1006 A44 B10 L100 C48 D10 M60 E39 F10 N80\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N80\nM1006 A0 B10 L100 C44 D10 M80 E39 F10 N80\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N80\nM1006 A43 B10 L100 C46 D10 M60 E39 F10 N80\nM1006 W\nM18\n;=====start printer sound ===================\n\n;=====avoid end stop =================\nG91\nG380 S2 Z40 F1200\nG380 S2 Z-15 F1200\nG90\n\n;===== reset machine status =================\n;M290 X39 Y39 Z8\nM204 S6000\n\nM630 S0 P0\nG91\nM17 Z0.3 ; lower the z-motor current\n\nG90\nM17 X0.65 Y1.2 Z0.6 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\n;M211 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\n\n;====== cog noise reduction=================\nM982.2 S1 ; turn on cog noise reduction\n\nM1002 gcode_claim_action : 13\n\nG28 X\nG91\nG1 Z5 F1200\nG90\nG0 X128 F30000\nG0 Y254 F3000\nG91\nG1 Z-5 F1200\n\nM109 S10 H140\n\nM17 E0.3\nM83\nG1 E10 F1200\nG1 E-0.5 F30\nM17 D\n\nG28 Z P0 T140; home z with low precision,permit 300deg temperature\nM104 S{nozzle_temperature_initial_layer[initial_extruder]}\n\nM1002 judge_flag build_plate_detect_flag\nM622 S1\n G39.4\n G90\n G1 Z5 F1200\nM623\n\n;M400\n;M73 P1.717\n\n;===== prepare print temperature and material ==========\nM1002 gcode_claim_action : 24\n\nM400\n;G392 S1\nM211 X0 Y0 Z0 ;turn off soft endstop\nM975 S1 ; turn on\n\nG90\nG1 X-28.5 F30000\nG1 X-48.2 F3000\n\nM620 M ;enable remap\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n M1002 gcode_claim_action : 4\n M400\n M1002 set_filament_type:UNKNOWN\n M109 S[nozzle_temperature_initial_layer]\n M104 S250\n M400\n T[initial_no_support_extruder]\n G1 X-48.2 F3000\n M400\n\n M620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n M109 S250 ;set nozzle to common flush temp\n M106 P1 S0\n G92 E0\n G1 E50 F200\n M400\n M1002 set_filament_type:{filament_type[initial_no_support_extruder]}\nM621 S[initial_no_support_extruder]A\n\nM109 S{nozzle_temperature_range_high[initial_no_support_extruder]} H300\nG92 E0\nG1 E50 F200 ; lower extrusion speed to avoid clog\nM400\nM106 P1 S178\nG92 E0\nG1 E5 F200\nM104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]}\nG92 E0\nG1 E-0.5 F300\n\nG1 X-28.5 F30000\nG1 X-48.2 F3000\nG1 X-28.5 F30000 ;wipe and shake\nG1 X-48.2 F3000\nG1 X-28.5 F30000 ;wipe and shake\nG1 X-48.2 F3000\n\n;G392 S0\n\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n;M400\n;M73 P1.717\n\n;===== auto extrude cali start =========================\nM975 S1\n;G392 S1\n\nG90\nM83\nT1000\nG1 X-48.2 Y0 Z10 F10000\nM400\nM1002 set_filament_type:UNKNOWN\n\nM412 S1 ; ===turn on filament runout detection===\nM400 P10\nM620.3 W1; === turn on filament tangle detection===\nM400 S2\n\nM1002 set_filament_type:{filament_type[initial_no_support_extruder]}\n\n;M1002 set_flag extrude_cali_flag=1\nM1002 judge_flag extrude_cali_flag\n\nM622 J1\n M1002 gcode_claim_action : 8\n\n M109 S{nozzle_temperature[initial_extruder]}\n G1 E10 F{outer_wall_volumetric_speed/2.4*60}\n M983 F{outer_wall_volumetric_speed/2.4} A0.3 H[nozzle_diameter]; cali dynamic extrusion compensation\n\n M106 P1 S255\n M400 S5\n G1 X-28.5 F18000\n G1 X-48.2 F3000\n G1 X-28.5 F18000 ;wipe and shake\n G1 X-48.2 F3000\n G1 X-28.5 F12000 ;wipe and shake\n G1 X-48.2 F3000\n M400\n M106 P1 S0\n\n M1002 judge_last_extrude_cali_success\n M622 J0\n M983 F{outer_wall_volumetric_speed/2.4} A0.3 H[nozzle_diameter]; cali dynamic extrusion compensation\n M106 P1 S255\n M400 S5\n G1 X-28.5 F18000\n G1 X-48.2 F3000\n G1 X-28.5 F18000 ;wipe and shake\n G1 X-48.2 F3000\n G1 X-28.5 F12000 ;wipe and shake\n M400\n M106 P1 S0\n M623\n \n G1 X-48.2 F3000\n M400\n M984 A0.1 E1 S1 F{outer_wall_volumetric_speed/2.4}\n M106 P1 S178\n M400 S5\n G1 X-28.5 F18000\n G1 X-48.2 F3000\n G1 X-28.5 F18000\n G1 X-48.2 F3000\n G1 X-28.5 F18000\n M400\n M106 P1 S0\nM623 ; end of \"draw extrinsic para cali paint\"\n\n;G392 S0\n;===== auto extrude cali end ========================\n\n;M400\n;M73 P1.717\n\nM104 S170 ; prepare to wipe nozzle\nM106 S255 ; turn on fan\n\n;===== mech mode fast check start =====================\nM1002 gcode_claim_action : 3\n\nG1 X128 Y128 F20000\nG1 Z5 F1200\nM400 P200\nM970.3 Q1 A5 K0 O3\nM974 Q1 S2 P0\n\nM970.2 Q1 K1 W58 Z0.11\nM974 S2\n\nG1 X128 Y128 F20000\nG1 Z5 F1200\nM400 P200\nM970.3 Q0 A10 K0 O1\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X0 Y5\nG28 X ; re-home XY\n\n;===== mech mode fast check end =======================\n\n;M400\n;M73 P1.717\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\n\nM975 S1\nM106 S255 ; turn on fan (G28 has turn off fan)\nM211 S; push soft endstop status\nM211 X0 Y0 Z0 ;turn off Z axis endstop\n\n;===== remove waste by touching start =====\n\nM104 S170 ; set temp down to heatbed acceptable\n\nM83\nG1 E-1 F500\nG90\nM83\n\nM109 S170\nG0 X108 Y-0.5 F30000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X110 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X112 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X114 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X116 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X118 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X120 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X122 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X124 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X126 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X128 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X130 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X132 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X134 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X136 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X138 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X140 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X142 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X144 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X146 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X148 F10000\nG380 S3 Z-5 F1200\n\nG1 Z5 F30000\n;===== remove waste by touching end =====\n\nG1 Z10 F1200\nG0 X118 Y261 F30000\nG1 Z5 F1200\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-50}\n\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nM104 S140 ; prepare to abl\nG0 Z5 F20000\n\nG0 X128 Y261 F20000 ; move to exposed steel surface\nG0 Z-1.01 F1200 ; stop the nozzle\n\nG91\nG2 I1 J0 X2 Y0 F2000.1\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\n\nG90\nG1 Z10 F1200\n\n;===== brush material wipe nozzle =====\n\nG90\nG1 Y250 F30000\nG1 X55\nG1 Z1.300 F1200\nG1 Y262.5 F6000\nG91\nG1 X-35 F30000\nG1 Y-0.5\nG1 X45\nG1 Y-0.5\nG1 X-45\nG1 Y-0.5\nG1 X45\nG1 Y-0.5\nG1 X-45\nG1 Y-0.5\nG1 X45\nG1 Z5.000 F1200\n\nG90\nG1 X30 Y250.000 F30000\nG1 Z1.300 F1200\nG1 Y262.5 F6000\nG91\nG1 X35 F30000\nG1 Y-0.5\nG1 X-45\nG1 Y-0.5\nG1 X45\nG1 Y-0.5\nG1 X-45\nG1 Y-0.5\nG1 X45\nG1 Y-0.5\nG1 X-45\nG1 Z10.000 F1200\n\n;===== brush material wipe nozzle end =====\n\nG90\n;G0 X128 Y261 F20000 ; move to exposed steel surface\nG1 Y250 F30000\nG1 X138\nG1 Y261\nG0 Z-1.01 F1200 ; stop the nozzle\n\nG91\nG2 I1 J0 X2 Y0 F2000.1\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\n\nM109 S140\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM211 R; pop softend status\n\n;===== wipe nozzle end ================================\n\n;M400\n;M73 P1.717\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\n\nG90\nG1 Z5 F1200\nG1 X0 Y0 F30000\nG29.2 S1 ; turn on ABL\n\nM190 S[bed_temperature_initial_layer_single]; ensure bed temp\nM109 S140\nM106 S0 ; turn off fan , too noisy\n\nM622 J1\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28\n\nM623\n\n;===== home after wipe mouth end =======================\n\n;M400\n;M73 P1.717\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; prepare to print\n\n;===== nozzle load line ===============================\n;G90\n;M83\n;G1 Z5 F1200\n;G1 X88 Y-0.5 F20000\n;G1 Z0.3 F1200\n\n;M109 S{nozzle_temperature_initial_layer[initial_extruder]}\n\n;G1 E2 F300\n;G1 X168 E4.989 F6000\n;G1 Z1 F1200\n;===== noozle load line end ===========================\n\n;===== extrude cali test ===============================\n\nM400\n M900 S\n\n M900 C\n G90\n M83\n G1 X78.000 Y-0.500 F30000\n G1 Z0.300 F1200\n\n M109 S{nozzle_temperature_initial_layer[initial_extruder]}\n G1 E3 F300\n\n G1 X83.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X88.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X93.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X98.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X103.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X108.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X113.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X118.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X123.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X128.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X133.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X138.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X143.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X148.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X153.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X158.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X163.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X168.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X173.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X178.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X179 Z0\n G1 X183\n G1 Z1\n M400\n\n M900 R\n G90\n M83\n G1 X78.000 Y4.500 F30000\n G1 Z0.300 F1200\n G1 E0.5 F300\n G1 X83.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X88.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X93.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X98.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X103.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X108.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X113.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X118.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X123.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X128.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X133.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X138.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X143.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X148.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X153.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X158.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X163.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X168.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X173.000 E0.3118 F{outer_wall_volumetric_speed*0.4 /(0.3*0.5) * 60}\n G1 X178.000 E0.3118 F{outer_wall_volumetric_speed*1.0 /(0.3*0.5) * 60}\n G1 X179 Z0\n G1 X183\n G1 Z1\n M400\n\nG1 Z0.2\n\n;M400\n;M73 P1.717\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM400\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.02} ; for Textured PEI Plate\n{endif}\n\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\n\nM211 X0 Y0 Z0 ;turn off soft endstop\n;G392 S1 ; turn on clog detection\nM1007 S1 ; turn on mass estimation\nG29.4\n",
+ "machine_end_gcode": ";===== date: 20231229 =====================\nG392 S0 ;turn off nozzle clog detect\n\nM400 ; wait for buffer to clear\nG92 E0 ; zero the extruder\nG1 E-0.8 F1800 ; retract\nG1 Z{max_layer_z + 0.5} F900 ; lower z a little\nG1 X0 Y{first_layer_center_no_wipe_tower[1]} F18000 ; move to safe pos\nG1 X-13.0 F3000 ; move to safe pos\n{if !spiral_mode && print_sequence != \"by object\"}\nM1002 judge_flag timelapse_record_flag\nM622 J1\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM991 S0 P-1 ;end timelapse at safe pos\nM623\n{endif}\n\nM140 S0 ; turn off bed\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off remote part cooling fan\nM106 P3 S0 ; turn off chamber cooling fan\n\n;G1 X27 F15000 ; wipe\n\n; pull back filament to AMS\nM620 S255\nG1 X267 F15000\nT255\nG1 X-28.5 F18000\nG1 X-48.2 F3000\nG1 X-28.5 F18000\nG1 X-48.2 F3000\nM621 S255\n\nM104 S0 ; turn off hotend\n\nM400 ; wait all motion done\nM17 S\nM17 Z0.4 ; lower z motor current to reduce impact if there is something in the bottom\n{if (max_layer_z + 100.0) < 256}\n G1 Z{max_layer_z + 100.0} F600\n G1 Z{max_layer_z +98.0}\n{else}\n G1 Z256 F600\n G1 Z256\n{endif}\nM400 P100\nM17 R ; restore z current\n\nG90\nG1 X-48 Y180 F3600\n\nM220 S100 ; Reset feedrate magnitude\nM201.2 K1.0 ; Reset acc magnitude\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 0\n\n;=====printer finish sound=========\nM17\nM400 S1\nM1006 S1\nM1006 A0 B20 L100 C37 D20 M40 E42 F20 N60\nM1006 A0 B10 L100 C44 D10 M60 E44 F10 N60\nM1006 A0 B10 L100 C46 D10 M80 E46 F10 N80\nM1006 A44 B20 L100 C39 D20 M60 E48 F20 N60\nM1006 A0 B10 L100 C44 D10 M60 E44 F10 N60\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N60\nM1006 A0 B10 L100 C39 D10 M60 E39 F10 N60\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N60\nM1006 A0 B10 L100 C44 D10 M60 E44 F10 N60\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N60\nM1006 A0 B10 L100 C39 D10 M60 E39 F10 N60\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N60\nM1006 A0 B10 L100 C48 D10 M60 E44 F10 N80\nM1006 A0 B10 L100 C0 D10 M60 E0 F10 N80\nM1006 A44 B20 L100 C49 D20 M80 E41 F20 N80\nM1006 A0 B20 L100 C0 D20 M60 E0 F20 N80\nM1006 A0 B20 L100 C37 D20 M30 E37 F20 N60\nM1006 W\n;=====printer finish sound=========\n\n;M17 X0.8 Y0.8 Z0.5 ; lower motor current to 45% power\nM400\nM18 X Y Z\n\n",
"layer_change_gcode": "; layer num/total_layer_count: {layer_num+1}/[total_layer_count]\n; update layer progress\nM73 L{layer_num+1}\nM991 S0 P{layer_num} ;notify layer change",
"time_lapse_gcode": ";===================== date: 20231107 =====================\n{if !spiral_mode && print_sequence != \"by object\"}\n; don't support timelapse gcode in spiral_mode and by object sequence for I3 structure printer\nM622.1 S1 ; for prev firware, default turned on\nM1002 judge_flag timelapse_record_flag\nM622 J1\nG92 E0\nG17\nG2 Z{layer_z + 0.4} I0.86 J0.86 P1 F20000 ; spiral lift a little\nG1 Z{max_layer_z + 0.4}\nG1 X0 Y{first_layer_center_no_wipe_tower[1]} F18000 ; move to safe pos\nG1 X-48.2 F3000 ; move to safe pos\nM400 P300\nM971 S11 C11 O0\nG92 E0\nG1 X0 F18000\nM623\n\n; enable nozzle clog detect at 3rd layer\n{if layer_num == 2}\n M400\n G90\n M83\n M204 S5000\n G0 Z2 F4000\n G0 X-4.2 Y240 F20000\n M400 P200\n G39 S1\n G0 Z2 F4000\n G0 X128 Y128 F30000\n{endif}\n{endif}",
- "change_filament_gcode": ";===== machine: A1 =========================\n;===== date: 20231012 =======================\nG392 S0\nM620 S[next_extruder]A\nM204 S9000\n{if toolchange_count > 1}\nG17\nG2 Z{max_layer_z + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\n{endif}\nG1 Z{max_layer_z + 3.0} F1200\n\nM400\nM106 P1 S0\nM106 P2 S0\n{if old_filament_temp > 142 && next_extruder < 255}\nM104 S[old_filament_temp]\n{endif}\n\nG1 X267 F18000\n;{if toolchange_count == 2}\n; get travel path for change filament\n;M620.1 X[travel_point_1_x] Y[travel_point_1_y] F21000 P0\n;M620.1 X[travel_point_2_x] Y[travel_point_2_y] F21000 P1\n;M620.1 X[travel_point_3_x] Y[travel_point_3_y] F21000 P2\n;{endif}\nM620.1 E F[old_filament_e_feedrate] T{nozzle_temperature_range_high[previous_extruder]}\nT[next_extruder]\nM620.1 E F[new_filament_e_feedrate] T{nozzle_temperature_range_high[next_extruder]}\n\nG1 Y128 F9000\n\n{if next_extruder < 255}\nM400\n\nG92 E0\n{if flush_length_1 > 1}\n; FLUSH_START\n; always use highest temperature to flush\nM400\nM1002 set_filament_type:UNKNOWN\nM109 S[nozzle_temperature_range_high]\nM106 P1 S60\n{if flush_length_1 > 23.7}\nG1 E23.7 F{old_filament_e_feedrate} ; do not need pulsatile flushing for start part\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\n{else}\nG1 E{flush_length_1} F{old_filament_e_feedrate}\n{endif}\n; FLUSH_END\nG1 E-[old_retract_length_toolchange] F1800\nG1 E[old_retract_length_toolchange] F300\nM400\nM1002 set_filament_type:{filament_type[next_extruder]}\n{endif}\n\n{if flush_length_1 > 45 && flush_length_2 > 1}\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-38.5 F18000\nG1 X-48.5 F3000\nG1 X-38.5 F18000\nG1 X-48.5 F3000\nG1 X-38.5 F18000\nG1 X-48.5 F3000\nM400\nM106 P1 S0\n{endif}\n\n{if flush_length_2 > 1}\nM106 P1 S60\n; FLUSH_START\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_2 > 45 && flush_length_3 > 1}\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-38.5 F18000\nG1 X-48.5 F3000\nG1 X-38.5 F18000\nG1 X-48.5 F3000\nG1 X-38.5 F18000\nG1 X-48.5 F3000\nM400\nM106 P1 S0\n{endif}\n\n{if flush_length_3 > 1}\nM106 P1 S60\n; FLUSH_START\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_3 > 45 && flush_length_4 > 1}\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-38.5 F18000\nG1 X-48.5 F3000\nG1 X-38.5 F18000\nG1 X-48.5 F3000\nG1 X-38.5 F18000\nG1 X-48.5 F3000\nM400\nM106 P1 S0\n{endif}\n\n{if flush_length_4 > 1}\nM106 P1 S60\n; FLUSH_START\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\n; FLUSH_END\n{endif}\n\nM400\nM106 P1 S60\nM109 S[new_filament_temp]\nG1 E6 F{new_filament_e_feedrate} ;Compensate for filament spillage during waiting temperature\nM400\nG92 E0\nG1 E-[new_retract_length_toolchange] F1800\nM400\nM106 P1 S178\nM400 S3\nG1 X-38.5 F18000\nG1 X-48.5 F3000\nG1 X-38.5 F18000\nG1 X-48.5 F3000\nG1 X-38.5 F18000\nG1 X-48.5 F3000\nG1 X-38.5 F18000\nM400\nG1 Z{max_layer_z + 3.0} F3000\nM106 P1 S0\n{if layer_z <= (initial_layer_print_height + 0.001)}\nM204 S[initial_layer_acceleration]\n{else}\nM204 S[default_acceleration]\n{endif}\n{else}\nG1 X[x_after_toolchange] Y[y_after_toolchange] Z[z_after_toolchange] F12000\n{endif}\nM621 S[next_extruder]A\nG392 S1\n"
+ "change_filament_gcode": ";===== machine: A1 =========================\n;===== date: 20231225 =======================\nM1007 S0 ; turn off mass estimation\nG392 S0\nM620 S[next_extruder]A\nM204 S9000\n{if toolchange_count > 1}\nG17\nG2 Z{max_layer_z + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\n{endif}\nG1 Z{max_layer_z + 3.0} F1200\n\nM400\nM106 P1 S0\nM106 P2 S0\n{if old_filament_temp > 142 && next_extruder < 255}\nM104 S[old_filament_temp]\n{endif}\n\nG1 X267 F18000\nM620.1 E F[old_filament_e_feedrate] T{nozzle_temperature_range_high[previous_extruder]}\nM620.10 A0 F[old_filament_e_feedrate]\nT[next_extruder]\nM620.1 E F[new_filament_e_feedrate] T{nozzle_temperature_range_high[next_extruder]}\nM620.10 A1 F[new_filament_e_feedrate] L[flush_length] H[nozzle_diameter] T[nozzle_temperature_range_high]\n\nG1 Y128 F9000\n\n{if next_extruder < 255}\nM400\n\nG92 E0\nM628 S0\n\n{if flush_length_1 > 1}\n; FLUSH_START\n; always use highest temperature to flush\nM400\nM1002 set_filament_type:UNKNOWN\nM109 S[nozzle_temperature_range_high]\nM106 P1 S60\n{if flush_length_1 > 23.7}\nG1 E23.7 F{old_filament_e_feedrate} ; do not need pulsatile flushing for start part\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\n{else}\nG1 E{flush_length_1} F{old_filament_e_feedrate}\n{endif}\n; FLUSH_END\nG1 E-[old_retract_length_toolchange] F1800\nG1 E[old_retract_length_toolchange] F300\nM400\nM1002 set_filament_type:{filament_type[next_extruder]}\n{endif}\n\n{if flush_length_1 > 45 && flush_length_2 > 1}\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nM400\nM106 P1 S0\n{endif}\n\n{if flush_length_2 > 1}\nM106 P1 S60\n; FLUSH_START\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_2 > 45 && flush_length_3 > 1}\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nM400\nM106 P1 S0\n{endif}\n\n{if flush_length_3 > 1}\nM106 P1 S60\n; FLUSH_START\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_3 > 45 && flush_length_4 > 1}\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nM400\nM106 P1 S0\n{endif}\n\n{if flush_length_4 > 1}\nM106 P1 S60\n; FLUSH_START\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\n; FLUSH_END\n{endif}\n\nM629\n\nM400\nM106 P1 S60\nM109 S[new_filament_temp]\nG1 E6 F{new_filament_e_feedrate} ;Compensate for filament spillage during waiting temperature\nM400\nG92 E0\nG1 E-[new_retract_length_toolchange] F1800\nM400\nM106 P1 S178\nM400 S3\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nG1 X-48.2 F3000\nG1 X-38.2 F18000\nM400\nG1 Z{max_layer_z + 3.0} F3000\nM106 P1 S0\n{if layer_z <= (initial_layer_print_height + 0.001)}\nM204 S[initial_layer_acceleration]\n{else}\nM204 S[default_acceleration]\n{endif}\n{else}\nG1 X[x_after_toolchange] Y[y_after_toolchange] Z[z_after_toolchange] F12000\n{endif}\nM621 S[next_extruder]A\nG392 S0\n\nM1007 S1\n"
}
\ No newline at end of file
diff --git a/resources/profiles/BBL/machine/Bambu Lab A1 mini 0.4 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab A1 mini 0.4 nozzle.json
index 31110b928c1..56737732675 100644
--- a/resources/profiles/BBL/machine/Bambu Lab A1 mini 0.4 nozzle.json
+++ b/resources/profiles/BBL/machine/Bambu Lab A1 mini 0.4 nozzle.json
@@ -10,7 +10,7 @@
],
"printer_model": "Bambu Lab A1 mini",
"printer_variant": "0.4",
- "auxiliary_fan": "1",
+ "auxiliary_fan": "0",
"bed_exclude_area": [],
"best_object_pos": "0.7x0.5",
"default_filament_profile": [
@@ -66,9 +66,9 @@
"Bambu Lab X1E 0.4 nozzle",
"Bambu Lab A1 0.4 nozzle"
],
- "machine_start_gcode": ";===== machine: A1 mini =========================\n;===== date: 20231201 =====================\n\n;===== start to heat heatbead&hotend==========\nM1002 gcode_claim_action : 2\nM1002 set_filament_type:{filament_type[initial_no_support_extruder]}\nM104 S170\nM140 S[bed_temperature_initial_layer_single]\nG392 S0 ;turn off clog detect\n;=====start printer sound ===================\nM17\nM400 S1\nM1006 S1\nM1006 A0 B0 L100 C37 D10 M100 E37 F10 N100\nM1006 A0 B0 L100 C41 D10 M100 E41 F10 N100\nM1006 A0 B0 L100 C44 D10 M100 E44 F10 N100\nM1006 A0 B10 L100 C0 D10 M100 E0 F10 N100\nM1006 A43 B10 L100 C39 D10 M100 E46 F10 N100\nM1006 A0 B0 L100 C0 D10 M100 E0 F10 N100\nM1006 A0 B0 L100 C39 D10 M100 E43 F10 N100\nM1006 A0 B0 L100 C0 D10 M100 E0 F10 N100\nM1006 A0 B0 L100 C41 D10 M100 E41 F10 N100\nM1006 A0 B0 L100 C44 D10 M100 E44 F10 N100\nM1006 A0 B0 L100 C49 D10 M100 E49 F10 N100\nM1006 A0 B0 L100 C0 D10 M100 E0 F10 N100\nM1006 A44 B10 L100 C39 D10 M100 E48 F10 N100\nM1006 A0 B0 L100 C0 D10 M100 E0 F10 N100\nM1006 A0 B0 L100 C39 D10 M100 E44 F10 N100\nM1006 A0 B0 L100 C0 D10 M100 E0 F10 N100\nM1006 A43 B10 L100 C39 D10 M100 E46 F10 N100\nM1006 W\nM18\n;=====avoid end stop =================\nG91\nG380 S2 Z30 F1200\nG380 S2 Z-20 F1200\nG1 Z5 F1200\nG90\n\n;===== reset machine status =================\nM290 X39 Y39 Z8\nM204 S6000\n\nM630 S0 P0\nG91\nM17 Z0.3 ; lower the z-motor current\n\nG90\nM17 X0.7 Y0.9 Z0.5 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM83\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\n;====== cog noise reduction=================\nM982.2 S1 ; turn on cog noise reduction\n\n;===== prepare print temperature and material ==========\nM400\nM18\nM109 S100 H170\nM104 S170\nM400\nM17\nM400\nG28 X\n\nM211 X0 Y0 Z0 ;turn off soft endstop ; turn off soft endstop to prevent protential logic problem\n\nM975 S1 ; turn on\n\nG1 X0.0 F30000\nG1 X-13.5 F3000\n\nM620 M ;enable remap\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n G392 S0 ;turn on clog detect\n M1002 gcode_claim_action : 4\n M400\n M1002 set_filament_type:UNKNOWN\n M109 S[nozzle_temperature_initial_layer]\n M104 S250\n M400\n T[initial_no_support_extruder]\n G1 X-13.5 F3000\n M400\n M620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n M109 S250 ;set nozzle to common flush temp\n M106 P1 S0\n G92 E0\n G1 E50 F200\n M400\n M1002 set_filament_type:{filament_type[initial_no_support_extruder]}\n M104 S{nozzle_temperature_range_high[initial_no_support_extruder]}\n G92 E0\n G1 E50 F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60}\n M400\n M106 P1 S178\n G92 E0\n G1 E5 F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60}\n M109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\n M104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-40}\n G92 E0\n G1 E-0.5 F300\n\n G1 X0 F30000\n G1 X-13.5 F3000\n G1 X0 F30000 ;wipe and shake\n G1 X-13.5 F3000\n G1 X0 F12000 ;wipe and shake\n G1 X0 F30000\n G1 X-13.5 F3000\n M109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-40}\n G392 S0 ;turn off clog detect\nM621 S[initial_no_support_extruder]A\n\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== mech mode fast check============================\nM1002 gcode_claim_action : 3\nG0 X25 Y175 F20000 ; find a soft place to home\n;M104 S0\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nM104 S170\n\n; build plate detect\nG39.4\nM400\n\nG1 Z5 F3000\nG1 X90 Y-1 F30000\nM400 P200\nM970.3 Q1 A7 K0 O2\nM974 Q1 S2 P0\n\nG1 X90 Y0 Z5 F30000\nM400 P200\nM970 Q0 A10 B50 C90 H15 K0 M20 O3\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X-1 Y10\nG28 X ; re-home XY\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\n\nM104 S170 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\nM211 S; push soft endstop status\nM211 X0 Y0 Z0 ;turn off Z axis endstop\n\nM83\nG1 E-1 F500\nG90\nM83\n\nM109 S170\nM104 S140\nG0 X90 Y-4 F30000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X91 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X92 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X93 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X94 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X95 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X96 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X97 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X98 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X99 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X99 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X99 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X99 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X99 F10000\nG380 S3 Z-5 F1200\n\nG1 Z5 F30000\n;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\nG1 X25 Y175 F30000.1 ;Brush material\nG1 Z0.2 F30000.1\nG1 Y185\nG91\nG1 X-30 F30000\nG1 Y-2\nG1 X27\nG1 Y1.5\nG1 X-28\nG1 Y-2\nG1 X30\nG1 Y1.5\nG1 X-30\nG90\nM83\n\nG1 Z5 F3000\nG0 X50 Y175 F20000 ; find a soft place to home\nG28 Z P0 T300; home z with low precision, permit 300deg temperature\nG29.2 S0 ; turn off ABL\n\nG0 X85 Y185 F10000 ;move to exposed steel surface and stop the nozzle\nG0 Z-1.01 F10000\nG91\n\nG2 I1 J0 X2 Y0 F2000.1\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\n\nG90\nG1 Z5 F30000\nG1 X25 Y175 F30000.1 ;Brush material\nG1 Z0.2 F30000.1\nG1 Y185\nG91\nG1 X-30 F30000\nG1 Y-2\nG1 X27\nG1 Y1.5\nG1 X-28\nG1 Y-2\nG1 X30\nG1 Y1.5\nG1 X-30\nG90\nM83\n\nG1 Z5\nG0 X55 Y175 F20000 ; find a soft place to home\nG28 Z P0 T300; home z with low precision, permit 300deg temperature\nG29.2 S0 ; turn off ABL\n\nG1 Z10\nG1 X85 Y185\nG1 Z-1.01\nG1 X95\nG1 X90\n\nM211 R; pop softend status\n\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== wait heatbed ====================\nM1002 gcode_claim_action : 2\nM104 S0\nM190 S[bed_temperature_initial_layer_single];set bed temp\nM109 S140\n\nG1 Z5 F3000\nG29.2 S1\nG1 X10 Y10 F20000\n\n;===== bed leveling ==================================\n;M1002 set_flag g29_before_print_flag=1\nM1002 judge_flag g29_before_print_flag\nM622 J1\n M1002 gcode_claim_action : 1\n G29 A T145;set high than the wipe temperature\n M400\n M500 ; save cali data\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28 T145\n\nM623\n\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\n\nG1 X-13.5 Y0 Z10 F10000\nG1 E1.2 F500\nM400\nM1002 set_filament_type:UNKNOWN\nM109 S{nozzle_temperature[initial_extruder]}\nM400\n\nM412 S1 ; ===turn on filament runout detection===\nM400 P10\n\nG392 S0 ;turn on clog detect\n\nM620.3 W1; === turn on filament tangle detection===\nM400 S2\n\nM1002 set_filament_type:{filament_type[initial_no_support_extruder]}\n;M1002 set_flag extrude_cali_flag=1\nM1002 judge_flag extrude_cali_flag\nM622 J1\n M1002 gcode_claim_action : 8\n \n M400\n M900 K0.0 L1000.0 M1.0\n G90\n M83\n G0 X68 Y-4 F30000\n G0 Z0.2 F18000 ;Move to start position\n M400\n G0 X88 E10 F{outer_wall_volumetric_speed/(24/20) * 60}\n G0 X93 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n G0 X98 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X103 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n G0 X108 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X113 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n G0 Y0 Z0 F20000\n M400\n \n G1 X-13.5 Y0 Z10 F10000\n M400\n \n G1 E10 F{outer_wall_volumetric_speed/2.4*60}\n M983 F{outer_wall_volumetric_speed/2.4} A0.3 ; cali dynamic extrusion compensation\n M106 P1 S178\n M400 S7\n G1 X0 F18000\n G1 X-13.5 F3000\n G1 X0 F18000 ;wipe and shake\n G1 X-13.5 F3000\n G1 X0 F12000 ;wipe and shake\n G1 X-13.5 F3000\n M400\n M106 P1 S0\n\n M1002 judge_last_extrude_cali_success\n M622 J0\n M983 F{outer_wall_volumetric_speed/2.4} A0.3 ; cali dynamic extrusion compensation\n M106 P1 S178\n M400 S7\n G1 X0 F18000\n G1 X-13.5 F3000\n G1 X0 F18000 ;wipe and shake\n G1 X-13.5 F3000\n G1 X0 F12000 ;wipe and shake\n M400\n M106 P1 S0\n M623\nM623 ; end of \"draw extrinsic para cali paint\"\n\n\n;===== extrude cali test ===============================\nM104 S{nozzle_temperature_initial_layer[initial_extruder]}\nG90\nM83\nG0 X68 Y-2.5 F30000\nG0 Z0.2 F18000 ;Move to start position\nG0 X88 E10 F{outer_wall_volumetric_speed/(24/20) * 60}\nG0 X93 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG0 X98 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 X103 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG0 X108 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 X113 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG0 X115 Z0 F20000\nG0 Z5\nM400\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\n\nM400 ; wait all motion done before implement the emprical L parameters\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.02} ; for Textured PEI Plate\n{endif}\n\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\n\nM211 X0 Y0 Z0 ;turn off soft endstop\nM1007 S1\n\n\n\n",
- "machine_end_gcode": ";===== date: 20231201 =====================\n;turn off nozzle clog detect\nG392 S0\n\n{if timelapse_type == 2}\nM991 S0 P-1 ;end timelapse immediately\n{endif}\nM400 ; wait for buffer to clear\nG92 E0 ; zero the extruder\nG1 E-0.8 F1800 ; retract\nG1 Z{max_layer_z + 0.5} F900 ; lower z a little\nG1 X0 F12000 ; move to safe pos \n{if timelapse_type == 1}\nM991 S0 P-1 ;end timelapse at safe pos\n{endif}\n\nM140 S0 ; turn off bed\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off remote part cooling fan\nM106 P3 S0 ; turn off chamber cooling fan\n\n;G1 X27 F15000 ; wipe\n\n; pull back filament to AMS\nM620 S255\nG1 X181 F12000\nT255\nG1 X0 F18000\nG1 X-13.0 F3000\nG1 X0 F18000 ; wipe\nM621 S255\n\nM104 S0 ; turn off hotend\n\nM400 ; wait all motion done\nM17 S\nM17 Z0.4 ; lower z motor current to reduce impact if there is something in the bottom\n{if (max_layer_z + 100.0) < 180}\n G1 Z{max_layer_z + 100.0} F600\n G1 Z{max_layer_z +98.0}\n{else}\n G1 Z180 F600\n G1 Z180\n{endif}\nM400 P100\nM17 R ; restore z current\n\nG90\nG1 X-13 Y180 F3600\n\nG91\nG1 Z-1 F600\nG90\nM83\n\nM220 S100 ; Reset feedrate magnitude\nM201.2 K1.0 ; Reset acc magnitude\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 0\n\n;=====printer finish sound=========\nM17\nM400 S1\nM1006 S1\nM1006 A0 B20 L100 C37 D20 M100 E42 F20 N100\nM1006 A0 B10 L100 C44 D10 M100 E44 F10 N100\nM1006 A0 B10 L100 C46 D10 M100 E46 F10 N100\nM1006 A44 B20 L100 C39 D20 M100 E48 F20 N100\nM1006 A0 B10 L100 C44 D10 M100 E44 F10 N100\nM1006 A0 B10 L100 C0 D10 M100 E0 F10 N100\nM1006 A0 B10 L100 C39 D10 M100 E39 F10 N100\nM1006 A0 B10 L100 C0 D10 M100 E0 F10 N100\nM1006 A0 B10 L100 C44 D10 M100 E44 F10 N100\nM1006 A0 B10 L100 C0 D10 M100 E0 F10 N100\nM1006 A0 B10 L100 C39 D10 M100 E39 F10 N100\nM1006 A0 B10 L100 C0 D10 M100 E0 F10 N100\nM1006 A44 B10 L100 C0 D10 M100 E48 F10 N100\nM1006 A0 B10 L100 C0 D10 M100 E0 F10 N100\nM1006 A44 B20 L100 C41 D20 M100 E49 F20 N100\nM1006 A0 B20 L100 C0 D20 M100 E0 F20 N100\nM1006 A0 B20 L100 C37 D20 M100 E37 F20 N100\nM1006 W\n;=====printer finish sound=========\nM400 S1\nM18\n",
+ "machine_start_gcode": ";===== machine: A1 mini =========================\n;===== date: 20231226 =====================\n\n;===== start to heat heatbead&hotend==========\nM1002 gcode_claim_action : 2\nM1002 set_filament_type:{filament_type[initial_no_support_extruder]}\nM104 S170\nM140 S[bed_temperature_initial_layer_single]\nG392 S0 ;turn off clog detect\n;=====start printer sound ===================\nM17\nM400 S1\nM1006 S1\nM1006 A0 B0 L100 C37 D10 M100 E37 F10 N100\nM1006 A0 B0 L100 C41 D10 M100 E41 F10 N100\nM1006 A0 B0 L100 C44 D10 M100 E44 F10 N100\nM1006 A0 B10 L100 C0 D10 M100 E0 F10 N100\nM1006 A43 B10 L100 C39 D10 M100 E46 F10 N100\nM1006 A0 B0 L100 C0 D10 M100 E0 F10 N100\nM1006 A0 B0 L100 C39 D10 M100 E43 F10 N100\nM1006 A0 B0 L100 C0 D10 M100 E0 F10 N100\nM1006 A0 B0 L100 C41 D10 M100 E41 F10 N100\nM1006 A0 B0 L100 C44 D10 M100 E44 F10 N100\nM1006 A0 B0 L100 C49 D10 M100 E49 F10 N100\nM1006 A0 B0 L100 C0 D10 M100 E0 F10 N100\nM1006 A44 B10 L100 C39 D10 M100 E48 F10 N100\nM1006 A0 B0 L100 C0 D10 M100 E0 F10 N100\nM1006 A0 B0 L100 C39 D10 M100 E44 F10 N100\nM1006 A0 B0 L100 C0 D10 M100 E0 F10 N100\nM1006 A43 B10 L100 C39 D10 M100 E46 F10 N100\nM1006 W\nM18\n;=====avoid end stop =================\nG91\nG380 S2 Z30 F1200\nG380 S2 Z-20 F1200\nG1 Z5 F1200\nG90\n\n;===== reset machine status =================\nM290 X39 Y39 Z8\nM204 S6000\n\nM630 S0 P0\nG91\nM17 Z0.3 ; lower the z-motor current\n\nG90\nM17 X0.7 Y0.9 Z0.5 ; reset motor current to default\nM960 S5 P1 ; turn on logo lamp\nG90\nM83\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nM73.2 R1.0 ;Reset left time magnitude\n;====== cog noise reduction=================\nM982.2 S1 ; turn on cog noise reduction\n\n;===== prepare print temperature and material ==========\nM400\nM18\nM109 S100 H170\nM104 S170\nM400\nM17\nM400\nG28 X\n\nM211 X0 Y0 Z0 ;turn off soft endstop ; turn off soft endstop to prevent protential logic problem\n\nM975 S1 ; turn on\n\nG1 X0.0 F30000\nG1 X-13.5 F3000\n\nM620 M ;enable remap\nM620 S[initial_no_support_extruder]A ; switch material if AMS exist\n G392 S0 ;turn on clog detect\n M1002 gcode_claim_action : 4\n M400\n M1002 set_filament_type:UNKNOWN\n M109 S[nozzle_temperature_initial_layer]\n M104 S250\n M400\n T[initial_no_support_extruder]\n G1 X-13.5 F3000\n M400\n M620.1 E F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60} T{nozzle_temperature_range_high[initial_no_support_extruder]}\n M109 S250 ;set nozzle to common flush temp\n M106 P1 S0\n G92 E0\n G1 E50 F200\n M400\n M1002 set_filament_type:{filament_type[initial_no_support_extruder]}\n M104 S{nozzle_temperature_range_high[initial_no_support_extruder]}\n G92 E0\n G1 E50 F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60}\n M400\n M106 P1 S178\n G92 E0\n G1 E5 F{filament_max_volumetric_speed[initial_no_support_extruder]/2.4053*60}\n M109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-20} ; drop nozzle temp, make filament shink a bit\n M104 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-40}\n G92 E0\n G1 E-0.5 F300\n\n G1 X0 F30000\n G1 X-13.5 F3000\n G1 X0 F30000 ;wipe and shake\n G1 X-13.5 F3000\n G1 X0 F12000 ;wipe and shake\n G1 X0 F30000\n G1 X-13.5 F3000\n M109 S{nozzle_temperature_initial_layer[initial_no_support_extruder]-40}\n G392 S0 ;turn off clog detect\nM621 S[initial_no_support_extruder]A\n\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== mech mode fast check============================\nM1002 gcode_claim_action : 3\nG0 X25 Y175 F20000 ; find a soft place to home\n;M104 S0\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nM104 S170\n\n; build plate detect\nM1002 judge_flag build_plate_detect_flag\nM622 S1\n G39.4\n M400\nM623\n\nG1 Z5 F3000\nG1 X90 Y-1 F30000\nM400 P200\nM970.3 Q1 A7 K0 O2\nM974 Q1 S2 P0\n\nG1 X90 Y0 Z5 F30000\nM400 P200\nM970 Q0 A10 B50 C90 H15 K0 M20 O3\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X-1 Y10\nG28 X ; re-home XY\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\n\nM104 S170 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\nM211 S; push soft endstop status\nM211 X0 Y0 Z0 ;turn off Z axis endstop\n\nM83\nG1 E-1 F500\nG90\nM83\n\nM109 S170\nM104 S140\nG0 X90 Y-4 F30000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X91 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X92 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X93 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X94 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X95 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X96 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X97 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X98 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X99 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X99 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X99 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X99 F10000\nG380 S3 Z-5 F1200\nG1 Z2 F1200\nG1 X99 F10000\nG380 S3 Z-5 F1200\n\nG1 Z5 F30000\n;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\nG1 X25 Y175 F30000.1 ;Brush material\nG1 Z0.2 F30000.1\nG1 Y185\nG91\nG1 X-30 F30000\nG1 Y-2\nG1 X27\nG1 Y1.5\nG1 X-28\nG1 Y-2\nG1 X30\nG1 Y1.5\nG1 X-30\nG90\nM83\n\nG1 Z5 F3000\nG0 X50 Y175 F20000 ; find a soft place to home\nG28 Z P0 T300; home z with low precision, permit 300deg temperature\nG29.2 S0 ; turn off ABL\n\nG0 X85 Y185 F10000 ;move to exposed steel surface and stop the nozzle\nG0 Z-1.01 F10000\nG91\n\nG2 I1 J0 X2 Y0 F2000.1\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\nG2 I1 J0 X2\nG2 I-0.75 J0 X-1.5\n\nG90\nG1 Z5 F30000\nG1 X25 Y175 F30000.1 ;Brush material\nG1 Z0.2 F30000.1\nG1 Y185\nG91\nG1 X-30 F30000\nG1 Y-2\nG1 X27\nG1 Y1.5\nG1 X-28\nG1 Y-2\nG1 X30\nG1 Y1.5\nG1 X-30\nG90\nM83\n\nG1 Z5\nG0 X55 Y175 F20000 ; find a soft place to home\nG28 Z P0 T300; home z with low precision, permit 300deg temperature\nG29.2 S0 ; turn off ABL\n\nG1 Z10\nG1 X85 Y185\nG1 Z-1.01\nG1 X95\nG1 X90\n\nM211 R; pop softend status\n\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== wait heatbed ====================\nM1002 gcode_claim_action : 2\nM104 S0\nM190 S[bed_temperature_initial_layer_single];set bed temp\nM109 S140\n\nG1 Z5 F3000\nG29.2 S1\nG1 X10 Y10 F20000\n\n;===== bed leveling ==================================\n;M1002 set_flag g29_before_print_flag=1\nM1002 judge_flag g29_before_print_flag\nM622 J1\n M1002 gcode_claim_action : 1\n G29 A X{first_layer_print_min[0]} Y{first_layer_print_min[1]} I{first_layer_print_size[0]} J{first_layer_print_size[1]}\n M400\n M500 ; save cali data\nM623\n;===== bed leveling end ================================\n\n;===== home after wipe mouth============================\nM1002 judge_flag g29_before_print_flag\nM622 J0\n\n M1002 gcode_claim_action : 13\n G28 T145\n\nM623\n\n;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n;===== noozle load line ===============================\nM975 S1\nG90\nM83\nT1000\n\nG1 X-13.5 Y0 Z10 F10000\nG1 E1.2 F500\nM400\nM1002 set_filament_type:UNKNOWN\nM109 S{nozzle_temperature[initial_extruder]}\nM400\n\nM412 S1 ; ===turn on filament runout detection===\nM400 P10\n\nG392 S0 ;turn on clog detect\n\nM620.3 W1; === turn on filament tangle detection===\nM400 S2\n\nM1002 set_filament_type:{filament_type[initial_no_support_extruder]}\n;M1002 set_flag extrude_cali_flag=1\nM1002 judge_flag extrude_cali_flag\nM622 J1\n M1002 gcode_claim_action : 8\n \n M400\n M900 K0.0 L1000.0 M1.0\n G90\n M83\n G0 X68 Y-4 F30000\n G0 Z0.2 F18000 ;Move to start position\n M400\n G0 X88 E10 F{outer_wall_volumetric_speed/(24/20) * 60}\n G0 X93 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n G0 X98 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X103 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n G0 X108 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X113 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\n G0 Y0 Z0 F20000\n M400\n \n G1 X-13.5 Y0 Z10 F10000\n M400\n \n G1 E10 F{outer_wall_volumetric_speed/2.4*60}\n M983 F{outer_wall_volumetric_speed/2.4} A0.3 H[nozzle_diameter]; cali dynamic extrusion compensation\n M106 P1 S178\n M400 S7\n G1 X0 F18000\n G1 X-13.5 F3000\n G1 X0 F18000 ;wipe and shake\n G1 X-13.5 F3000\n G1 X0 F12000 ;wipe and shake\n G1 X-13.5 F3000\n M400\n M106 P1 S0\n\n M1002 judge_last_extrude_cali_success\n M622 J0\n M983 F{outer_wall_volumetric_speed/2.4} A0.3 H[nozzle_diameter]; cali dynamic extrusion compensation\n M106 P1 S178\n M400 S7\n G1 X0 F18000\n G1 X-13.5 F3000\n G1 X0 F18000 ;wipe and shake\n G1 X-13.5 F3000\n G1 X0 F12000 ;wipe and shake\n M400\n M106 P1 S0\n M623\n \n G1 X-13.5 F3000\n M400\n M984 A0.1 E1 S1 F{outer_wall_volumetric_speed/2.4}\n M106 P1 S178\n M400 S7\n G1 X0 F18000\n G1 X-13.5 F3000\n G1 X0 F18000 ;wipe and shake\n G1 X-13.5 F3000\n G1 X0 F12000 ;wipe and shake\n G1 X-13.5 F3000\n M400\n M106 P1 S0\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\n;===== extrude cali test ===============================\nM104 S{nozzle_temperature_initial_layer[initial_extruder]}\nG90\nM83\nG0 X68 Y-2.5 F30000\nG0 Z0.2 F18000 ;Move to start position\nG0 X88 E10 F{outer_wall_volumetric_speed/(24/20) * 60}\nG0 X93 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG0 X98 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 X103 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG0 X108 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\nG0 X113 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4 * 60}\nG0 X115 Z0 F20000\nG0 Z5\nM400\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\n\nM400 ; wait all motion done before implement the emprical L parameters\n\n;===== for Textured PEI Plate , lower the nozzle as the nozzle was touching topmost of the texture when homing ==\n;curr_bed_type={curr_bed_type}\n{if curr_bed_type==\"Textured PEI Plate\"}\nG29.1 Z{-0.02} ; for Textured PEI Plate\n{endif}\n\nM960 S1 P0 ; turn off laser\nM960 S2 P0 ; turn off laser\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off big fan\nM106 P3 S0 ; turn off chamber fan\n\nM975 S1 ; turn on mech mode supression\nG90\nM83\nT1000\n\nM211 X0 Y0 Z0 ;turn off soft endstop\nM1007 S1\n",
+ "machine_end_gcode": ";===== date: 20231229 =====================\n;turn off nozzle clog detect\nG392 S0\n\nM400 ; wait for buffer to clear\nG92 E0 ; zero the extruder\nG1 E-0.8 F1800 ; retract\nG1 Z{max_layer_z + 0.5} F900 ; lower z a little\nG1 X0 Y{first_layer_center_no_wipe_tower[1]} F18000 ; move to safe pos\nG1 X-13.0 F3000 ; move to safe pos\n{if !spiral_mode && print_sequence != \"by object\"}\nM1002 judge_flag timelapse_record_flag\nM622 J1\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM400 P100\nM971 S11 C11 O0\nM991 S0 P-1 ;end timelapse at safe pos\nM623\n{endif}\n\nM140 S0 ; turn off bed\nM106 S0 ; turn off fan\nM106 P2 S0 ; turn off remote part cooling fan\nM106 P3 S0 ; turn off chamber cooling fan\n\n;G1 X27 F15000 ; wipe\n\n; pull back filament to AMS\nM620 S255\nG1 X181 F12000\nT255\nG1 X0 F18000\nG1 X-13.0 F3000\nG1 X0 F18000 ; wipe\nM621 S255\n\nM104 S0 ; turn off hotend\n\nM400 ; wait all motion done\nM17 S\nM17 Z0.4 ; lower z motor current to reduce impact if there is something in the bottom\n{if (max_layer_z + 100.0) < 180}\n G1 Z{max_layer_z + 100.0} F600\n G1 Z{max_layer_z +98.0}\n{else}\n G1 Z180 F600\n G1 Z180\n{endif}\nM400 P100\nM17 R ; restore z current\n\nG90\nG1 X-13 Y180 F3600\n\nG91\nG1 Z-1 F600\nG90\nM83\n\nM220 S100 ; Reset feedrate magnitude\nM201.2 K1.0 ; Reset acc magnitude\nM73.2 R1.0 ;Reset left time magnitude\nM1002 set_gcode_claim_speed_level : 0\n\n;=====printer finish sound=========\nM17\nM400 S1\nM1006 S1\nM1006 A0 B20 L100 C37 D20 M100 E42 F20 N100\nM1006 A0 B10 L100 C44 D10 M100 E44 F10 N100\nM1006 A0 B10 L100 C46 D10 M100 E46 F10 N100\nM1006 A44 B20 L100 C39 D20 M100 E48 F20 N100\nM1006 A0 B10 L100 C44 D10 M100 E44 F10 N100\nM1006 A0 B10 L100 C0 D10 M100 E0 F10 N100\nM1006 A0 B10 L100 C39 D10 M100 E39 F10 N100\nM1006 A0 B10 L100 C0 D10 M100 E0 F10 N100\nM1006 A0 B10 L100 C44 D10 M100 E44 F10 N100\nM1006 A0 B10 L100 C0 D10 M100 E0 F10 N100\nM1006 A0 B10 L100 C39 D10 M100 E39 F10 N100\nM1006 A0 B10 L100 C0 D10 M100 E0 F10 N100\nM1006 A44 B10 L100 C0 D10 M100 E48 F10 N100\nM1006 A0 B10 L100 C0 D10 M100 E0 F10 N100\nM1006 A44 B20 L100 C41 D20 M100 E49 F20 N100\nM1006 A0 B20 L100 C0 D20 M100 E0 F20 N100\nM1006 A0 B20 L100 C37 D20 M100 E37 F20 N100\nM1006 W\n;=====printer finish sound=========\nM400 S1\nM18 X Y Z\n",
"layer_change_gcode": "; layer num/total_layer_count: {layer_num+1}/[total_layer_count]\n; update layer progress\nM73 L{layer_num+1}\nM991 S0 P{layer_num} ;notify layer change\n",
- "time_lapse_gcode": ";===================== date: 20231201 =====================\n{if !spiral_mode && print_sequence != \"by object\"}\n; don't support timelapse gcode in spiral_mode and by object sequence for I3 structure printer\nM622.1 S1 ; for prev firware, default turned on\nM1002 judge_flag timelapse_record_flag\nM622 J1\nG92 E0\nG17\nG2 Z{layer_z + 0.4} I0.86 J0.86 P1 F20000 ; spiral lift a little\nG1 Z{max_layer_z + 0.4}\nG1 X0 Y{first_layer_center_no_wipe_tower[1]} F18000 ; move to safe pos\nG1 X-13.0 F3000 ; move to safe pos\nM400 P300\nM971 S11 C11 O0\nG92 E0\nG1 X0 F18000\nG1 Y178\nM623\n\nM622.1 S1\nM1002 judge_flag g39_detection_flag\nM622 J1\n ; enable nozzle clog detect at 3rd layer\n {if layer_num == 2}\n M400\n G90\n M83\n M204 S5000\n G0 Z2 F4000\n G0 X-6 Y170 F20000\n G39 S1 X-6 Y170\n G0 Z2 F4000\n G0 X90 Y90 F30000\n {endif}\n\n\n {if !in_head_wrap_detect_zone}\n M622.1 S0\n M1002 judge_flag g39_mass_exceed_flag\n M622 J1\n {if layer_num > 2}\n G392 S0\n M400\n G90\n M83\n M204 S5000\n G0 Z{max_layer_z + 0.4} F4000\n G39.3 S1\n G0 Z{max_layer_z + 0.4} F4000\n G392 S0\n {endif}\n M623\n {endif}\nM623\n{endif}\n\n",
- "change_filament_gcode": ";===== machine: A1 mini =========================\n;===== date: 20231201 =======================\nG392 S0\nM1007 S0\nM620 S[next_extruder]A\nM204 S9000\n{if toolchange_count > 1}\nG17\nG2 Z{max_layer_z + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\n{endif}\nG1 Z{max_layer_z + 3.0} F1200\n\nM400\nM106 P1 S0\nM106 P2 S0\n{if old_filament_temp > 142 && next_extruder < 255}\nM104 S[old_filament_temp]\n{endif}\n\nG1 X180 F18000\n;{if toolchange_count == 2}\n; get travel path for change filament\n;M620.1 X[travel_point_1_x] Y[travel_point_1_y] F21000 P0\n;M620.1 X[travel_point_2_x] Y[travel_point_2_y] F21000 P1\n;M620.1 X[travel_point_3_x] Y[travel_point_3_y] F21000 P2\n;{endif}\nM620.1 E F[old_filament_e_feedrate] T{nozzle_temperature_range_high[previous_extruder]}\nT[next_extruder]\nM620.1 E F[new_filament_e_feedrate] T{nozzle_temperature_range_high[next_extruder]}\n\nG1 Y90 F9000\n\n{if next_extruder < 255}\nM400\n\nG92 E0\n{if flush_length_1 > 1}\n; FLUSH_START\n; always use highest temperature to flush\nM400\nM1002 set_filament_type:UNKNOWN\nM109 S[nozzle_temperature_range_high]\nM106 P1 S60\n{if flush_length_1 > 23.7}\nG1 E23.7 F{old_filament_e_feedrate} ; do not need pulsatile flushing for start part\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\n{else}\nG1 E{flush_length_1} F{old_filament_e_feedrate}\n{endif}\n; FLUSH_END\nG1 E-[old_retract_length_toolchange] F1800\nG1 E[old_retract_length_toolchange] F300\nM400\nM1002 set_filament_type:{filament_type[next_extruder]}\n{endif}\n\n{if flush_length_1 > 45 && flush_length_2 > 1}\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nM400\nM106 P1 S0\n{endif}\n\n{if flush_length_2 > 1}\nM106 P1 S60\n; FLUSH_START\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_2 > 45 && flush_length_3 > 1}\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nM400\nM106 P1 S0\n{endif}\n\n{if flush_length_3 > 1}\nM106 P1 S60\n; FLUSH_START\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_3 > 45 && flush_length_4 > 1}\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nM400\nM106 P1 S0\n{endif}\n\n{if flush_length_4 > 1}\nM106 P1 S60\n; FLUSH_START\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\n; FLUSH_END\n{endif}\n\nM400\nM106 P1 S60\nM109 S[new_filament_temp]\nG1 E5 F{new_filament_e_feedrate} ;Compensate for filament spillage during waiting temperature\nM400\nG92 E0\nG1 E-[new_retract_length_toolchange] F1800\nM400\nM106 P1 S178\nM400 S3\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nM400\nG1 Z{max_layer_z + 3.0} F3000\nM106 P1 S0\n{if layer_z <= (initial_layer_print_height + 0.001)}\nM204 S[initial_layer_acceleration]\n{else}\nM204 S[default_acceleration]\n{endif}\n{else}\nG1 X[x_after_toolchange] Y[y_after_toolchange] Z[z_after_toolchange] F12000\n{endif}\nM621 S[next_extruder]A\nG392 S0\nM1007 S1\n\n"
+ "time_lapse_gcode": ";===================== date: 202312028 =====================\n{if !spiral_mode && print_sequence != \"by object\"}\n; don't support timelapse gcode in spiral_mode and by object sequence for I3 structure printer\nM622.1 S1 ; for prev firware, default turned on\nM1002 judge_flag timelapse_record_flag\nM622 J1\nG92 E0\nG17\nG2 Z{layer_z + 0.4} I0.86 J0.86 P1 F20000 ; spiral lift a little\nG1 Z{max_layer_z + 0.4}\nG1 X0 Y{first_layer_center_no_wipe_tower[1]} F18000 ; move to safe pos\nG1 X-13.0 F3000 ; move to safe pos\nM400 P300\nM971 S11 C11 O0\nG92 E0\nG1 X0 F18000\nM623\n\nM622.1 S1\nM1002 judge_flag g39_detection_flag\nM622 J1\n ; enable nozzle clog detect at 3rd layer\n {if layer_num == 2}\n M400\n G90\n M83\n M204 S5000\n G0 Z2 F4000\n G0 X-6 Y170 F20000\n G39 S1 X-6 Y170\n G0 Z2 F4000\n G0 X90 Y90 F30000\n {endif}\n\n\n {if !in_head_wrap_detect_zone}\n M622.1 S0\n M1002 judge_flag g39_mass_exceed_flag\n M622 J1\n {if layer_num > 2}\n G392 S0\n M400\n G90\n M83\n M204 S5000\n G0 Z{max_layer_z + 0.4} F4000\n G39.3 S1\n G0 Z{max_layer_z + 0.4} F4000\n G392 S0\n {endif}\n M623\n {endif}\nM623\n{endif}\n",
+ "change_filament_gcode": ";===== machine: A1 mini =========================\n;===== date: 20231225 =======================\nG392 S0\nM1007 S0\nM620 S[next_extruder]A\nM204 S9000\n{if toolchange_count > 1}\nG17\nG2 Z{max_layer_z + 0.4} I0.86 J0.86 P1 F10000 ; spiral lift a little from second lift\n{endif}\nG1 Z{max_layer_z + 3.0} F1200\n\nM400\nM106 P1 S0\nM106 P2 S0\n{if old_filament_temp > 142 && next_extruder < 255}\nM104 S[old_filament_temp]\n{endif}\n\nG1 X180 F18000\nM620.1 E F[old_filament_e_feedrate] T{nozzle_temperature_range_high[previous_extruder]}\nM620.10 A0 F[old_filament_e_feedrate]\nT[next_extruder]\nM620.1 E F[new_filament_e_feedrate] T{nozzle_temperature_range_high[next_extruder]}\nM620.10 A1 F[new_filament_e_feedrate] L[flush_length] H[nozzle_diameter] T[nozzle_temperature_range_high]\n\nG1 Y90 F9000\n\n{if next_extruder < 255}\nM400\n\nG92 E0\nM628 S0\n\n{if flush_length_1 > 1}\n; FLUSH_START\n; always use highest temperature to flush\nM400\nM1002 set_filament_type:UNKNOWN\nM109 S[nozzle_temperature_range_high]\nM106 P1 S60\n{if flush_length_1 > 23.7}\nG1 E23.7 F{old_filament_e_feedrate} ; do not need pulsatile flushing for start part\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{old_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\nG1 E{(flush_length_1 - 23.7) * 0.02} F50\nG1 E{(flush_length_1 - 23.7) * 0.23} F{new_filament_e_feedrate}\n{else}\nG1 E{flush_length_1} F{old_filament_e_feedrate}\n{endif}\n; FLUSH_END\nG1 E-[old_retract_length_toolchange] F1800\nG1 E[old_retract_length_toolchange] F300\nM400\nM1002 set_filament_type:{filament_type[next_extruder]}\n{endif}\n\n{if flush_length_1 > 45 && flush_length_2 > 1}\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nM400\nM106 P1 S0\n{endif}\n\n{if flush_length_2 > 1}\nM106 P1 S60\n; FLUSH_START\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\nG1 E{flush_length_2 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_2 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_2 > 45 && flush_length_3 > 1}\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nM400\nM106 P1 S0\n{endif}\n\n{if flush_length_3 > 1}\nM106 P1 S60\n; FLUSH_START\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\nG1 E{flush_length_3 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_3 * 0.02} F50\n; FLUSH_END\nG1 E-[new_retract_length_toolchange] F1800\nG1 E[new_retract_length_toolchange] F300\n{endif}\n\n{if flush_length_3 > 45 && flush_length_4 > 1}\n; WIPE\nM400\nM106 P1 S178\nM400 S3\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nM400\nM106 P1 S0\n{endif}\n\n{if flush_length_4 > 1}\nM106 P1 S60\n; FLUSH_START\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\nG1 E{flush_length_4 * 0.18} F{new_filament_e_feedrate}\nG1 E{flush_length_4 * 0.02} F50\n; FLUSH_END\n{endif}\n\nM629\n\nM400\nM106 P1 S60\nM109 S[new_filament_temp]\nG1 E5 F{new_filament_e_feedrate} ;Compensate for filament spillage during waiting temperature\nM400\nG92 E0\nG1 E-[new_retract_length_toolchange] F1800\nM400\nM106 P1 S178\nM400 S3\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nG1 X-13.5 F3000\nG1 X-3.5 F18000\nM400\nG1 Z{max_layer_z + 3.0} F3000\nM106 P1 S0\n{if layer_z <= (initial_layer_print_height + 0.001)}\nM204 S[initial_layer_acceleration]\n{else}\nM204 S[default_acceleration]\n{endif}\n{else}\nG1 X[x_after_toolchange] Y[y_after_toolchange] Z[z_after_toolchange] F12000\n{endif}\nM621 S[next_extruder]A\nG392 S0\nM1007 S1\n"
}
\ No newline at end of file
diff --git a/resources/profiles/BBL/machine/Bambu Lab A1 mini.json b/resources/profiles/BBL/machine/Bambu Lab A1 mini.json
index fc0d7a5be5f..31896bebf5d 100644
--- a/resources/profiles/BBL/machine/Bambu Lab A1 mini.json
+++ b/resources/profiles/BBL/machine/Bambu Lab A1 mini.json
@@ -4,6 +4,7 @@
"nozzle_diameter": "0.4;0.2;0.6;0.8",
"bed_model": "bbl-3dp-A1M.stl",
"bed_texture": "bbl-3dp-logo.svg",
+ "default_bed_type": "Textured PEI Plate",
"family": "BBL-3DP",
"machine_tech": "FFF",
"model_id": "N1",
diff --git a/resources/profiles/BBL/machine/Bambu Lab A1.json b/resources/profiles/BBL/machine/Bambu Lab A1.json
index 4c4f3b0c0a8..bd63f6ca8e2 100644
--- a/resources/profiles/BBL/machine/Bambu Lab A1.json
+++ b/resources/profiles/BBL/machine/Bambu Lab A1.json
@@ -4,6 +4,7 @@
"nozzle_diameter": "0.4;0.2;0.6;0.8",
"bed_model": "bbl-3dp-X1.stl",
"bed_texture": "bbl-3dp-logo.svg",
+ "default_bed_type": "Textured PEI Plate",
"family": "BBL-3DP",
"machine_tech": "FFF",
"model_id": "N2S",
diff --git a/resources/profiles/BBL/machine/Bambu Lab P1P.json b/resources/profiles/BBL/machine/Bambu Lab P1P.json
index 222634a7c3a..41036ba641c 100644
--- a/resources/profiles/BBL/machine/Bambu Lab P1P.json
+++ b/resources/profiles/BBL/machine/Bambu Lab P1P.json
@@ -4,6 +4,7 @@
"nozzle_diameter": "0.4;0.2;0.6;0.8",
"bed_model": "bbl-3dp-X1.stl",
"bed_texture": "bbl-3dp-logo.svg",
+ "default_bed_type": "Textured PEI Plate",
"family": "BBL-3DP",
"machine_tech": "FFF",
"model_id": "C11",
diff --git a/resources/profiles/BBL/machine/Bambu Lab P1S.json b/resources/profiles/BBL/machine/Bambu Lab P1S.json
index ea426acd142..8a9bb02cf23 100644
--- a/resources/profiles/BBL/machine/Bambu Lab P1S.json
+++ b/resources/profiles/BBL/machine/Bambu Lab P1S.json
@@ -4,6 +4,7 @@
"nozzle_diameter": "0.4;0.2;0.6;0.8",
"bed_model": "bbl-3dp-X1.stl",
"bed_texture": "bbl-3dp-logo.svg",
+ "default_bed_type": "Textured PEI Plate",
"family": "BBL-3DP",
"machine_tech": "FFF",
"model_id": "C12",
diff --git a/resources/profiles/BBL/machine/Bambu Lab X1 0.4 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1 0.4 nozzle.json
index 2239310b94d..22c7cf476d7 100644
--- a/resources/profiles/BBL/machine/Bambu Lab X1 0.4 nozzle.json
+++ b/resources/profiles/BBL/machine/Bambu Lab X1 0.4 nozzle.json
@@ -10,7 +10,7 @@
],
"printer_model": "Bambu Lab X1",
"printer_variant": "0.4",
- "auxiliary_fan": "1",
+ "auxiliary_fan": "0",
"bed_exclude_area": [
"0x0",
"18x0",
diff --git a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon.json b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon.json
index f7b35d35918..8407b6e2702 100644
--- a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon.json
+++ b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon.json
@@ -4,6 +4,7 @@
"nozzle_diameter": "0.4;0.2;0.6;0.8",
"bed_model": "bbl-3dp-X1.stl",
"bed_texture": "bbl-3dp-logo.svg",
+ "default_bed_type": "Cool Plate",
"family": "BBL-3DP",
"machine_tech": "FFF",
"model_id": "BL-P001",
diff --git a/resources/profiles/BBL/machine/Bambu Lab X1.json b/resources/profiles/BBL/machine/Bambu Lab X1.json
index b71f60dc3f5..aca4485aee6 100644
--- a/resources/profiles/BBL/machine/Bambu Lab X1.json
+++ b/resources/profiles/BBL/machine/Bambu Lab X1.json
@@ -4,6 +4,7 @@
"nozzle_diameter": "0.4;0.2;0.6;0.8",
"bed_model": "bbl-3dp-X1.stl",
"bed_texture": "bbl-3dp-logo.svg",
+ "default_bed_type": "Cool Plate",
"family": "BBL-3DP",
"machine_tech": "FFF",
"model_id": "BL-P002",
diff --git a/resources/profiles/BBL/machine/Bambu Lab X1E.json b/resources/profiles/BBL/machine/Bambu Lab X1E.json
index e5cbb8f47c0..8687b5137f5 100644
--- a/resources/profiles/BBL/machine/Bambu Lab X1E.json
+++ b/resources/profiles/BBL/machine/Bambu Lab X1E.json
@@ -4,6 +4,7 @@
"nozzle_diameter": "0.4;0.2;0.6;0.8",
"bed_model": "bbl-3dp-X1.stl",
"bed_texture": "bbl-3dp-logo.svg",
+ "default_bed_type": "Textured PEI Plate",
"family": "BBL-3DP",
"machine_tech": "FFF",
"model_id": "C13",
diff --git a/resources/profiles/BBL/process/0.06mm Fine @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/process/0.06mm Fine @BBL A1 0.2 nozzle.json
index ea11af41764..0b5df089733 100644
--- a/resources/profiles/BBL/process/0.06mm Fine @BBL A1 0.2 nozzle.json
+++ b/resources/profiles/BBL/process/0.06mm Fine @BBL A1 0.2 nozzle.json
@@ -6,6 +6,7 @@
"setting_id": "GP084",
"instantiation": "true",
"default_acceleration": "6000",
+ "elefant_foot_compensation": "0.075",
"initial_layer_infill_speed": "28",
"initial_layer_speed": "16",
"travel_speed": "700",
diff --git a/resources/profiles/BBL/process/0.06mm Fine @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/process/0.06mm Fine @BBL P1P 0.2 nozzle.json
index f75adbb2e6d..deb52983a44 100644
--- a/resources/profiles/BBL/process/0.06mm Fine @BBL P1P 0.2 nozzle.json
+++ b/resources/profiles/BBL/process/0.06mm Fine @BBL P1P 0.2 nozzle.json
@@ -6,6 +6,7 @@
"setting_id": "GP063",
"instantiation": "true",
"default_acceleration": "5000",
+ "elefant_foot_compensation": "0.15",
"outer_wall_acceleration": "2500",
"compatible_printers": [
"Bambu Lab P1P 0.2 nozzle"
diff --git a/resources/profiles/BBL/process/0.06mm High Quality @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/process/0.06mm High Quality @BBL A1 0.2 nozzle.json
new file mode 100644
index 00000000000..000a6d08d61
--- /dev/null
+++ b/resources/profiles/BBL/process/0.06mm High Quality @BBL A1 0.2 nozzle.json
@@ -0,0 +1,19 @@
+{
+ "type": "process",
+ "name": "0.06mm High Quality @BBL A1 0.2 nozzle",
+ "inherits": "fdm_process_bbl_0.06_nozzle_0.2",
+ "from": "system",
+ "setting_id": "GP118",
+ "instantiation": "true",
+ "default_acceleration": "4000",
+ "elefant_foot_compensation": "0.075",
+ "initial_layer_infill_speed": "28",
+ "initial_layer_speed": "16",
+ "outer_wall_acceleration": "2000",
+ "outer_wall_speed": "60",
+ "sparse_infill_pattern": "gyroid",
+ "travel_speed": "700",
+ "compatible_printers": [
+ "Bambu Lab A1 0.2 nozzle"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/BBL/process/0.06mm High Quality @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/process/0.06mm High Quality @BBL A1M 0.2 nozzle.json
new file mode 100644
index 00000000000..0ce29963472
--- /dev/null
+++ b/resources/profiles/BBL/process/0.06mm High Quality @BBL A1M 0.2 nozzle.json
@@ -0,0 +1,18 @@
+{
+ "type": "process",
+ "name": "0.06mm High Quality @BBL A1M 0.2 nozzle",
+ "inherits": "fdm_process_bbl_0.06_nozzle_0.2",
+ "from": "system",
+ "setting_id": "GP117",
+ "instantiation": "true",
+ "default_acceleration": "3000",
+ "initial_layer_infill_speed": "28",
+ "initial_layer_speed": "16",
+ "outer_wall_acceleration": "2000",
+ "outer_wall_speed": "60",
+ "sparse_infill_pattern": "gyroid",
+ "travel_speed": "700",
+ "compatible_printers": [
+ "Bambu Lab A1 mini 0.2 nozzle"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/BBL/process/0.06mm High Quality @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/process/0.06mm High Quality @BBL P1P 0.2 nozzle.json
new file mode 100644
index 00000000000..66e56802f27
--- /dev/null
+++ b/resources/profiles/BBL/process/0.06mm High Quality @BBL P1P 0.2 nozzle.json
@@ -0,0 +1,16 @@
+{
+ "type": "process",
+ "name": "0.06mm High Quality @BBL P1P 0.2 nozzle",
+ "inherits": "fdm_process_bbl_0.06_nozzle_0.2",
+ "from": "system",
+ "setting_id": "GP116",
+ "instantiation": "true",
+ "default_acceleration": "4000",
+ "elefant_foot_compensation": "0.15",
+ "outer_wall_acceleration": "2000",
+ "outer_wall_speed": "60",
+ "sparse_infill_pattern": "gyroid",
+ "compatible_printers": [
+ "Bambu Lab P1P 0.2 nozzle"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/BBL/process/0.06mm High Quality @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/process/0.06mm High Quality @BBL X1C 0.2 nozzle.json
new file mode 100644
index 00000000000..502c4cdaefd
--- /dev/null
+++ b/resources/profiles/BBL/process/0.06mm High Quality @BBL X1C 0.2 nozzle.json
@@ -0,0 +1,19 @@
+{
+ "type": "process",
+ "name": "0.06mm High Quality @BBL X1C 0.2 nozzle",
+ "inherits": "fdm_process_bbl_0.06_nozzle_0.2",
+ "from": "system",
+ "setting_id": "GP115",
+ "instantiation": "true",
+ "default_acceleration": "4000",
+ "elefant_foot_compensation": "0.15",
+ "outer_wall_acceleration": "2000",
+ "outer_wall_speed": "60",
+ "sparse_infill_pattern": "gyroid",
+ "compatible_printers": [
+ "Bambu Lab X1 Carbon 0.2 nozzle",
+ "Bambu Lab X1 0.2 nozzle",
+ "Bambu Lab P1S 0.2 nozzle",
+ "Bambu Lab X1E 0.2 nozzle"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/BBL/process/0.06mm Standard @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/process/0.06mm Standard @BBL X1C 0.2 nozzle.json
index 7a9b9bf315a..06a7a9eecbd 100644
--- a/resources/profiles/BBL/process/0.06mm Standard @BBL X1C 0.2 nozzle.json
+++ b/resources/profiles/BBL/process/0.06mm Standard @BBL X1C 0.2 nozzle.json
@@ -5,6 +5,7 @@
"from": "system",
"setting_id": "GP024",
"instantiation": "true",
+ "elefant_foot_compensation": "0.15",
"compatible_printers": [
"Bambu Lab X1 Carbon 0.2 nozzle",
"Bambu Lab X1 0.2 nozzle",
diff --git a/resources/profiles/BBL/process/0.08mm Extra Fine @BBL A1.json b/resources/profiles/BBL/process/0.08mm Extra Fine @BBL A1.json
index f04518bea0d..8e7e8cab90c 100644
--- a/resources/profiles/BBL/process/0.08mm Extra Fine @BBL A1.json
+++ b/resources/profiles/BBL/process/0.08mm Extra Fine @BBL A1.json
@@ -6,6 +6,7 @@
"setting_id": "GP076",
"instantiation": "true",
"default_acceleration": "6000",
+ "elefant_foot_compensation": "0.075",
"travel_speed": "700",
"compatible_printers": [
"Bambu Lab A1 0.4 nozzle"
diff --git a/resources/profiles/BBL/process/0.08mm High Quality @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/process/0.08mm High Quality @BBL A1 0.2 nozzle.json
new file mode 100644
index 00000000000..2cbd3c2c9d5
--- /dev/null
+++ b/resources/profiles/BBL/process/0.08mm High Quality @BBL A1 0.2 nozzle.json
@@ -0,0 +1,19 @@
+{
+ "type": "process",
+ "name": "0.08mm High Quality @BBL A1 0.2 nozzle",
+ "inherits": "fdm_process_bbl_0.08_nozzle_0.2",
+ "from": "system",
+ "setting_id": "GP119",
+ "instantiation": "true",
+ "default_acceleration": "4000",
+ "elefant_foot_compensation": "0.075",
+ "initial_layer_infill_speed": "28",
+ "initial_layer_speed": "16",
+ "outer_wall_acceleration": "2000",
+ "outer_wall_speed": "60",
+ "sparse_infill_pattern": "gyroid",
+ "travel_speed": "700",
+ "compatible_printers": [
+ "Bambu Lab A1 0.2 nozzle"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/BBL/process/0.08mm High Quality @BBL A1.json b/resources/profiles/BBL/process/0.08mm High Quality @BBL A1.json
new file mode 100644
index 00000000000..15c848b8b01
--- /dev/null
+++ b/resources/profiles/BBL/process/0.08mm High Quality @BBL A1.json
@@ -0,0 +1,22 @@
+{
+ "type": "process",
+ "name": "0.08mm High Quality @BBL A1",
+ "inherits": "fdm_process_bbl_0.08",
+ "from": "system",
+ "setting_id": "GP102",
+ "instantiation": "true",
+ "default_acceleration": "4000",
+ "elefant_foot_compensation": "0.075",
+ "gap_infill_speed": "210",
+ "inner_wall_speed": "120",
+ "internal_solid_infill_speed": "150",
+ "outer_wall_acceleration": "2000",
+ "outer_wall_speed": "60",
+ "sparse_infill_pattern": "gyroid",
+ "sparse_infill_speed": "150",
+ "top_surface_speed": "150",
+ "travel_speed": "700",
+ "compatible_printers": [
+ "Bambu Lab A1 0.4 nozzle"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/BBL/process/0.08mm High Quality @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/process/0.08mm High Quality @BBL A1M 0.2 nozzle.json
new file mode 100644
index 00000000000..6865d2fed06
--- /dev/null
+++ b/resources/profiles/BBL/process/0.08mm High Quality @BBL A1M 0.2 nozzle.json
@@ -0,0 +1,18 @@
+{
+ "type": "process",
+ "name": "0.08mm High Quality @BBL A1M 0.2 nozzle",
+ "inherits": "fdm_process_bbl_0.08_nozzle_0.2",
+ "from": "system",
+ "setting_id": "GP120",
+ "instantiation": "true",
+ "default_acceleration": "3000",
+ "initial_layer_infill_speed": "28",
+ "initial_layer_speed": "16",
+ "outer_wall_acceleration": "2000",
+ "outer_wall_speed": "60",
+ "sparse_infill_pattern": "gyroid",
+ "travel_speed": "700",
+ "compatible_printers": [
+ "Bambu Lab A1 mini 0.2 nozzle"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/BBL/process/0.08mm High Quality @BBL A1M.json b/resources/profiles/BBL/process/0.08mm High Quality @BBL A1M.json
new file mode 100644
index 00000000000..069a975b0dd
--- /dev/null
+++ b/resources/profiles/BBL/process/0.08mm High Quality @BBL A1M.json
@@ -0,0 +1,22 @@
+{
+ "type": "process",
+ "name": "0.08mm High Quality @BBL A1M",
+ "inherits": "fdm_process_bbl_0.08",
+ "from": "system",
+ "setting_id": "GP101",
+ "instantiation": "true",
+ "default_acceleration": "3000",
+ "elefant_foot_compensation": "0",
+ "gap_infill_speed": "210",
+ "inner_wall_speed": "120",
+ "internal_solid_infill_speed": "150",
+ "outer_wall_acceleration": "2000",
+ "outer_wall_speed": "60",
+ "sparse_infill_pattern": "gyroid",
+ "sparse_infill_speed": "150",
+ "top_surface_speed": "150",
+ "travel_speed": "700",
+ "compatible_printers": [
+ "Bambu Lab A1 mini 0.4 nozzle"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/BBL/process/0.08mm High Quality @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/process/0.08mm High Quality @BBL P1P 0.2 nozzle.json
new file mode 100644
index 00000000000..c7d6188f2ee
--- /dev/null
+++ b/resources/profiles/BBL/process/0.08mm High Quality @BBL P1P 0.2 nozzle.json
@@ -0,0 +1,16 @@
+{
+ "type": "process",
+ "name": "0.08mm High Quality @BBL P1P 0.2 nozzle",
+ "inherits": "fdm_process_bbl_0.08_nozzle_0.2",
+ "from": "system",
+ "setting_id": "GP121",
+ "instantiation": "true",
+ "default_acceleration": "4000",
+ "elefant_foot_compensation": "0.15",
+ "outer_wall_acceleration": "2000",
+ "outer_wall_speed": "60",
+ "sparse_infill_pattern": "gyroid",
+ "compatible_printers": [
+ "Bambu Lab P1P 0.2 nozzle"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/BBL/process/0.08mm High Quality @BBL P1P.json b/resources/profiles/BBL/process/0.08mm High Quality @BBL P1P.json
new file mode 100644
index 00000000000..454b86baf45
--- /dev/null
+++ b/resources/profiles/BBL/process/0.08mm High Quality @BBL P1P.json
@@ -0,0 +1,21 @@
+{
+ "type": "process",
+ "name": "0.08mm High Quality @BBL P1P",
+ "inherits": "fdm_process_bbl_0.08",
+ "from": "system",
+ "setting_id": "GP100",
+ "instantiation": "true",
+ "default_acceleration": "4000",
+ "elefant_foot_compensation": "0.15",
+ "gap_infill_speed": "210",
+ "inner_wall_speed": "120",
+ "internal_solid_infill_speed": "150",
+ "outer_wall_acceleration": "2000",
+ "outer_wall_speed": "60",
+ "sparse_infill_pattern": "gyroid",
+ "sparse_infill_speed": "150",
+ "top_surface_speed": "150",
+ "compatible_printers": [
+ "Bambu Lab P1P 0.4 nozzle"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/BBL/process/0.08mm High Quality @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/process/0.08mm High Quality @BBL X1C 0.2 nozzle.json
new file mode 100644
index 00000000000..aeb1c1765e4
--- /dev/null
+++ b/resources/profiles/BBL/process/0.08mm High Quality @BBL X1C 0.2 nozzle.json
@@ -0,0 +1,19 @@
+{
+ "type": "process",
+ "name": "0.08mm High Quality @BBL X1C 0.2 nozzle",
+ "inherits": "fdm_process_bbl_0.08_nozzle_0.2",
+ "from": "system",
+ "setting_id": "GP122",
+ "instantiation": "true",
+ "default_acceleration": "4000",
+ "elefant_foot_compensation": "0.15",
+ "outer_wall_acceleration": "2000",
+ "outer_wall_speed": "60",
+ "sparse_infill_pattern": "gyroid",
+ "compatible_printers": [
+ "Bambu Lab X1 Carbon 0.2 nozzle",
+ "Bambu Lab X1 0.2 nozzle",
+ "Bambu Lab P1S 0.2 nozzle",
+ "Bambu Lab X1E 0.2 nozzle"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/BBL/process/0.08mm High Quality @BBL X1C.json b/resources/profiles/BBL/process/0.08mm High Quality @BBL X1C.json
new file mode 100644
index 00000000000..777e9f4e44c
--- /dev/null
+++ b/resources/profiles/BBL/process/0.08mm High Quality @BBL X1C.json
@@ -0,0 +1,23 @@
+{
+ "type": "process",
+ "name": "0.08mm High Quality @BBL X1C",
+ "inherits": "fdm_process_bbl_0.08",
+ "from": "system",
+ "setting_id": "GP099",
+ "instantiation": "true",
+ "default_acceleration": "4000",
+ "gap_infill_speed": "210",
+ "inner_wall_speed": "120",
+ "internal_solid_infill_speed": "150",
+ "outer_wall_acceleration": "2000",
+ "outer_wall_speed": "60",
+ "sparse_infill_pattern": "gyroid",
+ "sparse_infill_speed": "150",
+ "top_surface_speed": "150",
+ "compatible_printers": [
+ "Bambu Lab X1 Carbon 0.4 nozzle",
+ "Bambu Lab X1 0.4 nozzle",
+ "Bambu Lab P1S 0.4 nozzle",
+ "Bambu Lab X1E 0.4 nozzle"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/BBL/process/0.08mm Optimal @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/process/0.08mm Optimal @BBL A1 0.2 nozzle.json
index 3f330ad07c6..ad2143b2c2e 100644
--- a/resources/profiles/BBL/process/0.08mm Optimal @BBL A1 0.2 nozzle.json
+++ b/resources/profiles/BBL/process/0.08mm Optimal @BBL A1 0.2 nozzle.json
@@ -6,6 +6,7 @@
"setting_id": "GP085",
"instantiation": "true",
"default_acceleration": "6000",
+ "elefant_foot_compensation": "0.075",
"initial_layer_infill_speed": "28",
"initial_layer_speed": "16",
"travel_speed": "700",
diff --git a/resources/profiles/BBL/process/0.08mm Optimal @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/process/0.08mm Optimal @BBL P1P 0.2 nozzle.json
index 5f0b6f6484a..b0ccea00294 100644
--- a/resources/profiles/BBL/process/0.08mm Optimal @BBL P1P 0.2 nozzle.json
+++ b/resources/profiles/BBL/process/0.08mm Optimal @BBL P1P 0.2 nozzle.json
@@ -6,6 +6,7 @@
"setting_id": "GP064",
"instantiation": "true",
"default_acceleration": "5000",
+ "elefant_foot_compensation": "0.15",
"outer_wall_acceleration": "2500",
"compatible_printers": [
"Bambu Lab P1P 0.2 nozzle"
diff --git a/resources/profiles/BBL/process/0.08mm Standard @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/process/0.08mm Standard @BBL X1C 0.2 nozzle.json
index d584de99c76..7c8e7bbbefb 100644
--- a/resources/profiles/BBL/process/0.08mm Standard @BBL X1C 0.2 nozzle.json
+++ b/resources/profiles/BBL/process/0.08mm Standard @BBL X1C 0.2 nozzle.json
@@ -5,6 +5,7 @@
"from": "system",
"setting_id": "GP025",
"instantiation": "true",
+ "elefant_foot_compensation": "0.15",
"compatible_printers": [
"Bambu Lab X1 Carbon 0.2 nozzle",
"Bambu Lab X1 0.2 nozzle",
diff --git a/resources/profiles/BBL/process/0.10mm High Quality @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/process/0.10mm High Quality @BBL A1 0.2 nozzle.json
new file mode 100644
index 00000000000..c848de06cdd
--- /dev/null
+++ b/resources/profiles/BBL/process/0.10mm High Quality @BBL A1 0.2 nozzle.json
@@ -0,0 +1,19 @@
+{
+ "type": "process",
+ "name": "0.10mm High Quality @BBL A1 0.2 nozzle",
+ "inherits": "fdm_process_bbl_0.10_nozzle_0.2",
+ "from": "system",
+ "setting_id": "GP114",
+ "instantiation": "true",
+ "default_acceleration": "4000",
+ "elefant_foot_compensation": "0.075",
+ "initial_layer_infill_speed": "28",
+ "initial_layer_speed": "16",
+ "outer_wall_acceleration": "2000",
+ "outer_wall_speed": "60",
+ "sparse_infill_pattern": "gyroid",
+ "travel_speed": "700",
+ "compatible_printers": [
+ "Bambu Lab A1 0.2 nozzle"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/BBL/process/0.10mm High Quality @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/process/0.10mm High Quality @BBL A1M 0.2 nozzle.json
new file mode 100644
index 00000000000..5eb21ef675e
--- /dev/null
+++ b/resources/profiles/BBL/process/0.10mm High Quality @BBL A1M 0.2 nozzle.json
@@ -0,0 +1,19 @@
+{
+ "type": "process",
+ "name": "0.10mm High Quality @BBL A1M 0.2 nozzle",
+ "inherits": "fdm_process_bbl_0.10_nozzle_0.2",
+ "from": "system",
+ "setting_id": "GP113",
+ "instantiation": "true",
+ "default_acceleration": "3000",
+ "elefant_foot_compensation": "0",
+ "initial_layer_infill_speed": "28",
+ "initial_layer_speed": "16",
+ "outer_wall_acceleration": "2000",
+ "outer_wall_speed": "60",
+ "sparse_infill_pattern": "gyroid",
+ "travel_speed": "700",
+ "compatible_printers": [
+ "Bambu Lab A1 mini 0.2 nozzle"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/BBL/process/0.10mm High Quality @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/process/0.10mm High Quality @BBL P1P 0.2 nozzle.json
new file mode 100644
index 00000000000..8167ee4df02
--- /dev/null
+++ b/resources/profiles/BBL/process/0.10mm High Quality @BBL P1P 0.2 nozzle.json
@@ -0,0 +1,16 @@
+{
+ "type": "process",
+ "name": "0.10mm High Quality @BBL P1P 0.2 nozzle",
+ "inherits": "fdm_process_bbl_0.10_nozzle_0.2",
+ "from": "system",
+ "setting_id": "GP112",
+ "instantiation": "true",
+ "default_acceleration": "4000",
+ "elefant_foot_compensation": "0.15",
+ "outer_wall_acceleration": "2000",
+ "outer_wall_speed": "60",
+ "sparse_infill_pattern": "gyroid",
+ "compatible_printers": [
+ "Bambu Lab P1P 0.2 nozzle"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/BBL/process/0.10mm High Quality @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/process/0.10mm High Quality @BBL X1C 0.2 nozzle.json
new file mode 100644
index 00000000000..af661fd789a
--- /dev/null
+++ b/resources/profiles/BBL/process/0.10mm High Quality @BBL X1C 0.2 nozzle.json
@@ -0,0 +1,19 @@
+{
+ "type": "process",
+ "name": "0.10mm High Quality @BBL X1C 0.2 nozzle",
+ "inherits": "fdm_process_bbl_0.10_nozzle_0.2",
+ "from": "system",
+ "setting_id": "GP111",
+ "instantiation": "true",
+ "default_acceleration": "4000",
+ "elefant_foot_compensation": "0.15",
+ "outer_wall_acceleration": "2000",
+ "outer_wall_speed": "60",
+ "sparse_infill_pattern": "gyroid",
+ "compatible_printers": [
+ "Bambu Lab X1 Carbon 0.2 nozzle",
+ "Bambu Lab X1 0.2 nozzle",
+ "Bambu Lab P1S 0.2 nozzle",
+ "Bambu Lab X1E 0.2 nozzle"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/BBL/process/0.10mm Standard @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/process/0.10mm Standard @BBL A1 0.2 nozzle.json
index 2ba86c81706..4b2576ef0b7 100644
--- a/resources/profiles/BBL/process/0.10mm Standard @BBL A1 0.2 nozzle.json
+++ b/resources/profiles/BBL/process/0.10mm Standard @BBL A1 0.2 nozzle.json
@@ -6,6 +6,7 @@
"setting_id": "GP083",
"instantiation": "true",
"default_acceleration": "6000",
+ "elefant_foot_compensation": "0.075",
"initial_layer_infill_speed": "28",
"initial_layer_speed": "16",
"travel_speed": "700",
diff --git a/resources/profiles/BBL/process/0.10mm Standard @BBL A1M 0.2 nozzle.json b/resources/profiles/BBL/process/0.10mm Standard @BBL A1M 0.2 nozzle.json
index 1c161ecd387..972961766e4 100644
--- a/resources/profiles/BBL/process/0.10mm Standard @BBL A1M 0.2 nozzle.json
+++ b/resources/profiles/BBL/process/0.10mm Standard @BBL A1M 0.2 nozzle.json
@@ -6,6 +6,7 @@
"setting_id": "GP039",
"instantiation": "true",
"default_acceleration": "6000",
+ "elefant_foot_compensation": "0",
"initial_layer_infill_speed": "28",
"initial_layer_speed": "16",
"travel_speed": "700",
diff --git a/resources/profiles/BBL/process/0.10mm Standard @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/process/0.10mm Standard @BBL X1C 0.2 nozzle.json
index 5fff3ebd879..9b04506d033 100644
--- a/resources/profiles/BBL/process/0.10mm Standard @BBL X1C 0.2 nozzle.json
+++ b/resources/profiles/BBL/process/0.10mm Standard @BBL X1C 0.2 nozzle.json
@@ -5,6 +5,7 @@
"from": "system",
"setting_id": "GP007",
"instantiation": "true",
+ "elefant_foot_compensation": "0.15",
"compatible_printers": [
"Bambu Lab X1 Carbon 0.2 nozzle",
"Bambu Lab X1 0.2 nozzle",
diff --git a/resources/profiles/BBL/process/0.12mm Draft @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/process/0.12mm Draft @BBL A1 0.2 nozzle.json
index 51d5be064ad..3a711c372e2 100644
--- a/resources/profiles/BBL/process/0.12mm Draft @BBL A1 0.2 nozzle.json
+++ b/resources/profiles/BBL/process/0.12mm Draft @BBL A1 0.2 nozzle.json
@@ -6,6 +6,7 @@
"setting_id": "GP086",
"instantiation": "true",
"default_acceleration": "6000",
+ "elefant_foot_compensation": "0.075",
"initial_layer_infill_speed": "28",
"initial_layer_speed": "16",
"travel_speed": "700",
diff --git a/resources/profiles/BBL/process/0.12mm Draft @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/process/0.12mm Draft @BBL P1P 0.2 nozzle.json
index 700cd50c0db..faef462ee45 100644
--- a/resources/profiles/BBL/process/0.12mm Draft @BBL P1P 0.2 nozzle.json
+++ b/resources/profiles/BBL/process/0.12mm Draft @BBL P1P 0.2 nozzle.json
@@ -6,6 +6,7 @@
"setting_id": "GP065",
"instantiation": "true",
"default_acceleration": "5000",
+ "elefant_foot_compensation": "0.15",
"outer_wall_acceleration": "2500",
"compatible_printers": [
"Bambu Lab P1P 0.2 nozzle"
diff --git a/resources/profiles/BBL/process/0.12mm Fine @BBL A1.json b/resources/profiles/BBL/process/0.12mm Fine @BBL A1.json
index 224b7755ba6..4bf79151e28 100644
--- a/resources/profiles/BBL/process/0.12mm Fine @BBL A1.json
+++ b/resources/profiles/BBL/process/0.12mm Fine @BBL A1.json
@@ -6,6 +6,7 @@
"setting_id": "GP077",
"instantiation": "true",
"default_acceleration": "6000",
+ "elefant_foot_compensation": "0.075",
"travel_speed": "700",
"compatible_printers": [
"Bambu Lab A1 0.4 nozzle"
diff --git a/resources/profiles/BBL/process/0.12mm High Quality @BBL A1.json b/resources/profiles/BBL/process/0.12mm High Quality @BBL A1.json
new file mode 100644
index 00000000000..131b39e8b22
--- /dev/null
+++ b/resources/profiles/BBL/process/0.12mm High Quality @BBL A1.json
@@ -0,0 +1,22 @@
+{
+ "type": "process",
+ "name": "0.12mm High Quality @BBL A1",
+ "inherits": "fdm_process_bbl_0.12",
+ "from": "system",
+ "setting_id": "GP106",
+ "instantiation": "true",
+ "default_acceleration": "4000",
+ "elefant_foot_compensation": "0.075",
+ "gap_infill_speed": "230",
+ "inner_wall_speed": "150",
+ "internal_solid_infill_speed": "180",
+ "outer_wall_acceleration": "2000",
+ "outer_wall_speed": "60",
+ "sparse_infill_pattern": "gyroid",
+ "sparse_infill_speed": "180",
+ "top_surface_speed": "150",
+ "travel_speed": "700",
+ "compatible_printers": [
+ "Bambu Lab A1 0.4 nozzle"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/BBL/process/0.12mm High Quality @BBL A1M.json b/resources/profiles/BBL/process/0.12mm High Quality @BBL A1M.json
new file mode 100644
index 00000000000..83058499493
--- /dev/null
+++ b/resources/profiles/BBL/process/0.12mm High Quality @BBL A1M.json
@@ -0,0 +1,22 @@
+{
+ "type": "process",
+ "name": "0.12mm High Quality @BBL A1M",
+ "inherits": "fdm_process_bbl_0.12",
+ "from": "system",
+ "setting_id": "GP105",
+ "instantiation": "true",
+ "default_acceleration": "3000",
+ "elefant_foot_compensation": "0",
+ "gap_infill_speed": "230",
+ "inner_wall_speed": "150",
+ "internal_solid_infill_speed": "180",
+ "outer_wall_acceleration": "2000",
+ "outer_wall_speed": "60",
+ "sparse_infill_pattern": "gyroid",
+ "sparse_infill_speed": "180",
+ "top_surface_speed": "150",
+ "travel_speed": "700",
+ "compatible_printers": [
+ "Bambu Lab A1 mini 0.4 nozzle"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/BBL/process/0.12mm High Quality @BBL P1P.json b/resources/profiles/BBL/process/0.12mm High Quality @BBL P1P.json
new file mode 100644
index 00000000000..da83aa8137d
--- /dev/null
+++ b/resources/profiles/BBL/process/0.12mm High Quality @BBL P1P.json
@@ -0,0 +1,20 @@
+{
+ "type": "process",
+ "name": "0.12mm High Quality @BBL P1P",
+ "inherits": "fdm_process_bbl_0.12",
+ "from": "system",
+ "setting_id": "GP104",
+ "instantiation": "true",
+ "default_acceleration": "4000",
+ "gap_infill_speed": "230",
+ "inner_wall_speed": "150",
+ "internal_solid_infill_speed": "180",
+ "outer_wall_acceleration": "2000",
+ "outer_wall_speed": "60",
+ "sparse_infill_pattern": "gyroid",
+ "sparse_infill_speed": "180",
+ "top_surface_speed": "150",
+ "compatible_printers": [
+ "Bambu Lab P1P 0.4 nozzle"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/BBL/process/0.12mm High Quality @BBL X1C.json b/resources/profiles/BBL/process/0.12mm High Quality @BBL X1C.json
new file mode 100644
index 00000000000..df9625b60b2
--- /dev/null
+++ b/resources/profiles/BBL/process/0.12mm High Quality @BBL X1C.json
@@ -0,0 +1,23 @@
+{
+ "type": "process",
+ "name": "0.12mm High Quality @BBL X1C",
+ "inherits": "fdm_process_bbl_0.12",
+ "from": "system",
+ "setting_id": "GP103",
+ "instantiation": "true",
+ "default_acceleration": "4000",
+ "gap_infill_speed": "230",
+ "inner_wall_speed": "150",
+ "internal_solid_infill_speed": "180",
+ "outer_wall_acceleration": "2000",
+ "outer_wall_speed": "60",
+ "sparse_infill_pattern": "gyroid",
+ "sparse_infill_speed": "180",
+ "top_surface_speed": "150",
+ "compatible_printers": [
+ "Bambu Lab X1 Carbon 0.4 nozzle",
+ "Bambu Lab X1 0.4 nozzle",
+ "Bambu Lab P1S 0.4 nozzle",
+ "Bambu Lab X1E 0.4 nozzle"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/BBL/process/0.12mm Standard @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/process/0.12mm Standard @BBL X1C 0.2 nozzle.json
index d36cce20269..5d3d9b8d63c 100644
--- a/resources/profiles/BBL/process/0.12mm Standard @BBL X1C 0.2 nozzle.json
+++ b/resources/profiles/BBL/process/0.12mm Standard @BBL X1C 0.2 nozzle.json
@@ -5,6 +5,7 @@
"from": "system",
"setting_id": "GP026",
"instantiation": "true",
+ "elefant_foot_compensation": "0.15",
"compatible_printers": [
"Bambu Lab X1 Carbon 0.2 nozzle",
"Bambu Lab X1 0.2 nozzle",
diff --git a/resources/profiles/BBL/process/0.14mm Extra Draft @BBL A1 0.2 nozzle.json b/resources/profiles/BBL/process/0.14mm Extra Draft @BBL A1 0.2 nozzle.json
index f8d359d5732..342f481afe0 100644
--- a/resources/profiles/BBL/process/0.14mm Extra Draft @BBL A1 0.2 nozzle.json
+++ b/resources/profiles/BBL/process/0.14mm Extra Draft @BBL A1 0.2 nozzle.json
@@ -6,6 +6,7 @@
"setting_id": "GP087",
"instantiation": "true",
"default_acceleration": "6000",
+ "elefant_foot_compensation": "0.075",
"initial_layer_infill_speed": "28",
"initial_layer_speed": "16",
"travel_speed": "700",
diff --git a/resources/profiles/BBL/process/0.14mm Extra Draft @BBL P1P 0.2 nozzle.json b/resources/profiles/BBL/process/0.14mm Extra Draft @BBL P1P 0.2 nozzle.json
index d5ad5bd49ff..568f51d502e 100644
--- a/resources/profiles/BBL/process/0.14mm Extra Draft @BBL P1P 0.2 nozzle.json
+++ b/resources/profiles/BBL/process/0.14mm Extra Draft @BBL P1P 0.2 nozzle.json
@@ -6,6 +6,7 @@
"setting_id": "GP066",
"instantiation": "true",
"default_acceleration": "5000",
+ "elefant_foot_compensation": "0.15",
"outer_wall_acceleration": "2500",
"compatible_printers": [
"Bambu Lab P1P 0.2 nozzle"
diff --git a/resources/profiles/BBL/process/0.14mm Standard @BBL X1C 0.2 nozzle.json b/resources/profiles/BBL/process/0.14mm Standard @BBL X1C 0.2 nozzle.json
index d486de8697e..227940298d8 100644
--- a/resources/profiles/BBL/process/0.14mm Standard @BBL X1C 0.2 nozzle.json
+++ b/resources/profiles/BBL/process/0.14mm Standard @BBL X1C 0.2 nozzle.json
@@ -5,6 +5,7 @@
"from": "system",
"setting_id": "GP027",
"instantiation": "true",
+ "elefant_foot_compensation": "0.15",
"compatible_printers": [
"Bambu Lab X1 Carbon 0.2 nozzle",
"Bambu Lab X1 0.2 nozzle",
diff --git a/resources/profiles/BBL/process/0.16mm High Quality @BBL A1.json b/resources/profiles/BBL/process/0.16mm High Quality @BBL A1.json
new file mode 100644
index 00000000000..1f246929f86
--- /dev/null
+++ b/resources/profiles/BBL/process/0.16mm High Quality @BBL A1.json
@@ -0,0 +1,22 @@
+{
+ "type": "process",
+ "name": "0.16mm High Quality @BBL A1",
+ "inherits": "fdm_process_bbl_0.16",
+ "from": "system",
+ "setting_id": "GP110",
+ "instantiation": "true",
+ "default_acceleration": "4000",
+ "elefant_foot_compensation": "0.075",
+ "gap_infill_speed": "250",
+ "inner_wall_speed": "150",
+ "internal_solid_infill_speed": "200",
+ "outer_wall_acceleration": "2000",
+ "outer_wall_speed": "60",
+ "sparse_infill_pattern": "gyroid",
+ "sparse_infill_speed": "200",
+ "top_surface_speed": "150",
+ "travel_speed": "700",
+ "compatible_printers": [
+ "Bambu Lab A1 0.4 nozzle"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/BBL/process/0.16mm High Quality @BBL A1M.json b/resources/profiles/BBL/process/0.16mm High Quality @BBL A1M.json
new file mode 100644
index 00000000000..58ac77c4c5f
--- /dev/null
+++ b/resources/profiles/BBL/process/0.16mm High Quality @BBL A1M.json
@@ -0,0 +1,22 @@
+{
+ "type": "process",
+ "name": "0.16mm High Quality @BBL A1M",
+ "inherits": "fdm_process_bbl_0.16",
+ "from": "system",
+ "setting_id": "GP109",
+ "instantiation": "true",
+ "default_acceleration": "3000",
+ "elefant_foot_compensation": "0",
+ "gap_infill_speed": "250",
+ "inner_wall_speed": "150",
+ "internal_solid_infill_speed": "200",
+ "outer_wall_acceleration": "2000",
+ "outer_wall_speed": "60",
+ "sparse_infill_pattern": "gyroid",
+ "sparse_infill_speed": "200",
+ "top_surface_speed": "150",
+ "travel_speed": "700",
+ "compatible_printers": [
+ "Bambu Lab A1 mini 0.4 nozzle"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/BBL/process/0.16mm High Quality @BBL P1P.json b/resources/profiles/BBL/process/0.16mm High Quality @BBL P1P.json
new file mode 100644
index 00000000000..d36e464f865
--- /dev/null
+++ b/resources/profiles/BBL/process/0.16mm High Quality @BBL P1P.json
@@ -0,0 +1,20 @@
+{
+ "type": "process",
+ "name": "0.16mm High Quality @BBL P1P",
+ "inherits": "fdm_process_bbl_0.16",
+ "from": "system",
+ "setting_id": "GP108",
+ "instantiation": "true",
+ "default_acceleration": "4000",
+ "gap_infill_speed": "250",
+ "inner_wall_speed": "150",
+ "internal_solid_infill_speed": "200",
+ "outer_wall_acceleration": "2000",
+ "outer_wall_speed": "60",
+ "sparse_infill_pattern": "gyroid",
+ "sparse_infill_speed": "200",
+ "top_surface_speed": "150",
+ "compatible_printers": [
+ "Bambu Lab P1P 0.4 nozzle"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/BBL/process/0.16mm High Quality @BBL X1C.json b/resources/profiles/BBL/process/0.16mm High Quality @BBL X1C.json
new file mode 100644
index 00000000000..32295f8e824
--- /dev/null
+++ b/resources/profiles/BBL/process/0.16mm High Quality @BBL X1C.json
@@ -0,0 +1,23 @@
+{
+ "type": "process",
+ "name": "0.16mm High Quality @BBL X1C",
+ "inherits": "fdm_process_bbl_0.16",
+ "from": "system",
+ "setting_id": "GP107",
+ "instantiation": "true",
+ "default_acceleration": "4000",
+ "gap_infill_speed": "250",
+ "inner_wall_speed": "150",
+ "internal_solid_infill_speed": "200",
+ "outer_wall_acceleration": "2000",
+ "outer_wall_speed": "60",
+ "sparse_infill_pattern": "gyroid",
+ "sparse_infill_speed": "200",
+ "top_surface_speed": "150",
+ "compatible_printers": [
+ "Bambu Lab X1 Carbon 0.4 nozzle",
+ "Bambu Lab X1 0.4 nozzle",
+ "Bambu Lab P1S 0.4 nozzle",
+ "Bambu Lab X1E 0.4 nozzle"
+ ]
+}
\ No newline at end of file
diff --git a/resources/profiles/BBL/process/0.16mm Optimal @BBL A1.json b/resources/profiles/BBL/process/0.16mm Optimal @BBL A1.json
index 29cc2a8d309..1ec6906d6d8 100644
--- a/resources/profiles/BBL/process/0.16mm Optimal @BBL A1.json
+++ b/resources/profiles/BBL/process/0.16mm Optimal @BBL A1.json
@@ -6,6 +6,7 @@
"setting_id": "GP078",
"instantiation": "true",
"default_acceleration": "6000",
+ "elefant_foot_compensation": "0.075",
"travel_speed": "700",
"compatible_printers": [
"Bambu Lab A1 0.4 nozzle"
diff --git a/resources/profiles/BBL/process/0.18mm Fine @BBL A1 0.6 nozzle.json b/resources/profiles/BBL/process/0.18mm Fine @BBL A1 0.6 nozzle.json
index 391a7d4069b..447c7994aab 100644
--- a/resources/profiles/BBL/process/0.18mm Fine @BBL A1 0.6 nozzle.json
+++ b/resources/profiles/BBL/process/0.18mm Fine @BBL A1 0.6 nozzle.json
@@ -6,6 +6,7 @@
"setting_id": "GP088",
"instantiation": "true",
"default_acceleration": "6000",
+ "elefant_foot_compensation": "0.075",
"travel_speed": "700",
"compatible_printers": [
"Bambu Lab A1 0.6 nozzle"
diff --git a/resources/profiles/BBL/process/0.18mm Fine @BBL P1P 0.6 nozzle.json b/resources/profiles/BBL/process/0.18mm Fine @BBL P1P 0.6 nozzle.json
index f4a3ee93ea0..a1635bd9d6d 100644
--- a/resources/profiles/BBL/process/0.18mm Fine @BBL P1P 0.6 nozzle.json
+++ b/resources/profiles/BBL/process/0.18mm Fine @BBL P1P 0.6 nozzle.json
@@ -5,6 +5,7 @@
"from": "system",
"setting_id": "GP072",
"instantiation": "true",
+ "elefant_foot_compensation": "0.15",
"compatible_printers": [
"Bambu Lab P1P 0.6 nozzle"
]
diff --git a/resources/profiles/BBL/process/0.18mm Standard @BBL X1C 0.6 nozzle.json b/resources/profiles/BBL/process/0.18mm Standard @BBL X1C 0.6 nozzle.json
index ad403a0007a..ae327ef1298 100644
--- a/resources/profiles/BBL/process/0.18mm Standard @BBL X1C 0.6 nozzle.json
+++ b/resources/profiles/BBL/process/0.18mm Standard @BBL X1C 0.6 nozzle.json
@@ -5,6 +5,7 @@
"from": "system",
"setting_id": "GP028",
"instantiation": "true",
+ "elefant_foot_compensation": "0.15",
"compatible_printers": [
"Bambu Lab X1 Carbon 0.6 nozzle",
"Bambu Lab X1 0.6 nozzle",
diff --git a/resources/profiles/BBL/process/0.20mm Standard @BBL A1.json b/resources/profiles/BBL/process/0.20mm Standard @BBL A1.json
index 1af91f1917a..e1c6f5ebd70 100644
--- a/resources/profiles/BBL/process/0.20mm Standard @BBL A1.json
+++ b/resources/profiles/BBL/process/0.20mm Standard @BBL A1.json
@@ -6,6 +6,7 @@
"setting_id": "GP079",
"instantiation": "true",
"default_acceleration": "6000",
+ "elefant_foot_compensation": "0.075",
"travel_speed": "700",
"compatible_printers": [
"Bambu Lab A1 0.4 nozzle"
diff --git a/resources/profiles/BBL/process/0.20mm Strength @BBL A1.json b/resources/profiles/BBL/process/0.20mm Strength @BBL A1.json
index 010245a65ca..17c882470bf 100644
--- a/resources/profiles/BBL/process/0.20mm Strength @BBL A1.json
+++ b/resources/profiles/BBL/process/0.20mm Strength @BBL A1.json
@@ -6,6 +6,7 @@
"setting_id": "GP080",
"instantiation": "true",
"default_acceleration": "6000",
+ "elefant_foot_compensation": "0.075",
"outer_wall_speed": "60",
"sparse_infill_density": "25%",
"travel_speed": "700",
diff --git a/resources/profiles/BBL/process/0.24mm Draft @BBL A1.json b/resources/profiles/BBL/process/0.24mm Draft @BBL A1.json
index 8c8c7a18c98..abdd58e9b94 100644
--- a/resources/profiles/BBL/process/0.24mm Draft @BBL A1.json
+++ b/resources/profiles/BBL/process/0.24mm Draft @BBL A1.json
@@ -6,6 +6,7 @@
"setting_id": "GP081",
"instantiation": "true",
"default_acceleration": "6000",
+ "elefant_foot_compensation": "0.075",
"travel_speed": "700",
"compatible_printers": [
"Bambu Lab A1 0.4 nozzle"
diff --git a/resources/profiles/BBL/process/0.24mm Fine @BBL A1 0.8 nozzle.json b/resources/profiles/BBL/process/0.24mm Fine @BBL A1 0.8 nozzle.json
index 0f61d97ec19..af778978f42 100644
--- a/resources/profiles/BBL/process/0.24mm Fine @BBL A1 0.8 nozzle.json
+++ b/resources/profiles/BBL/process/0.24mm Fine @BBL A1 0.8 nozzle.json
@@ -6,6 +6,7 @@
"setting_id": "GP092",
"instantiation": "true",
"default_acceleration": "6000",
+ "elefant_foot_compensation": "0.075",
"travel_speed": "700",
"compatible_printers": [
"Bambu Lab A1 0.8 nozzle"
diff --git a/resources/profiles/BBL/process/0.24mm Fine @BBL P1P 0.8 nozzle.json b/resources/profiles/BBL/process/0.24mm Fine @BBL P1P 0.8 nozzle.json
index 6ee5ebfe85a..5b02a41a121 100644
--- a/resources/profiles/BBL/process/0.24mm Fine @BBL P1P 0.8 nozzle.json
+++ b/resources/profiles/BBL/process/0.24mm Fine @BBL P1P 0.8 nozzle.json
@@ -5,6 +5,7 @@
"from": "system",
"setting_id": "GP068",
"instantiation": "true",
+ "elefant_foot_compensation": "0.15",
"compatible_printers": [
"Bambu Lab P1P 0.8 nozzle"
]
diff --git a/resources/profiles/BBL/process/0.24mm Optimal @BBL A1 0.6 nozzle.json b/resources/profiles/BBL/process/0.24mm Optimal @BBL A1 0.6 nozzle.json
index bb67e728ca8..f616ccd800a 100644
--- a/resources/profiles/BBL/process/0.24mm Optimal @BBL A1 0.6 nozzle.json
+++ b/resources/profiles/BBL/process/0.24mm Optimal @BBL A1 0.6 nozzle.json
@@ -6,6 +6,7 @@
"setting_id": "GP089",
"instantiation": "true",
"default_acceleration": "6000",
+ "elefant_foot_compensation": "0.075",
"travel_speed": "700",
"compatible_printers": [
"Bambu Lab A1 0.6 nozzle"
diff --git a/resources/profiles/BBL/process/0.24mm Optimal @BBL P1P 0.6 nozzle.json b/resources/profiles/BBL/process/0.24mm Optimal @BBL P1P 0.6 nozzle.json
index 1da10212951..54941c53272 100644
--- a/resources/profiles/BBL/process/0.24mm Optimal @BBL P1P 0.6 nozzle.json
+++ b/resources/profiles/BBL/process/0.24mm Optimal @BBL P1P 0.6 nozzle.json
@@ -5,6 +5,7 @@
"from": "system",
"setting_id": "GP069",
"instantiation": "true",
+ "elefant_foot_compensation": "0.15",
"compatible_printers": [
"Bambu Lab P1P 0.6 nozzle"
]
diff --git a/resources/profiles/BBL/process/0.24mm Standard @BBL X1C 0.6 nozzle.json b/resources/profiles/BBL/process/0.24mm Standard @BBL X1C 0.6 nozzle.json
index 7870260cabc..47ee33688aa 100644
--- a/resources/profiles/BBL/process/0.24mm Standard @BBL X1C 0.6 nozzle.json
+++ b/resources/profiles/BBL/process/0.24mm Standard @BBL X1C 0.6 nozzle.json
@@ -5,6 +5,7 @@
"from": "system",
"setting_id": "GP029",
"instantiation": "true",
+ "elefant_foot_compensation": "0.15",
"compatible_printers": [
"Bambu Lab X1 Carbon 0.6 nozzle",
"Bambu Lab X1 0.6 nozzle",
diff --git a/resources/profiles/BBL/process/0.24mm Standard @BBL X1C 0.8 nozzle.json b/resources/profiles/BBL/process/0.24mm Standard @BBL X1C 0.8 nozzle.json
index 3a50374efaa..a45123964c3 100644
--- a/resources/profiles/BBL/process/0.24mm Standard @BBL X1C 0.8 nozzle.json
+++ b/resources/profiles/BBL/process/0.24mm Standard @BBL X1C 0.8 nozzle.json
@@ -5,6 +5,7 @@
"from": "system",
"setting_id": "GP032",
"instantiation": "true",
+ "elefant_foot_compensation": "0.15",
"compatible_printers": [
"Bambu Lab X1 Carbon 0.8 nozzle",
"Bambu Lab X1 0.8 nozzle",
diff --git a/resources/profiles/BBL/process/0.28mm Extra Draft @BBL A1.json b/resources/profiles/BBL/process/0.28mm Extra Draft @BBL A1.json
index 0d8b5b700eb..432bb9292b1 100644
--- a/resources/profiles/BBL/process/0.28mm Extra Draft @BBL A1.json
+++ b/resources/profiles/BBL/process/0.28mm Extra Draft @BBL A1.json
@@ -6,6 +6,7 @@
"setting_id": "GP082",
"instantiation": "true",
"default_acceleration": "6000",
+ "elefant_foot_compensation": "0.075",
"travel_speed": "700",
"compatible_printers": [
"Bambu Lab A1 0.4 nozzle"
diff --git a/resources/profiles/BBL/process/0.30mm Standard @BBL A1 0.6 nozzle.json b/resources/profiles/BBL/process/0.30mm Standard @BBL A1 0.6 nozzle.json
index 478d4fca2cb..b05e7cea1e4 100644
--- a/resources/profiles/BBL/process/0.30mm Standard @BBL A1 0.6 nozzle.json
+++ b/resources/profiles/BBL/process/0.30mm Standard @BBL A1 0.6 nozzle.json
@@ -6,6 +6,7 @@
"setting_id": "GP096",
"instantiation": "true",
"default_acceleration": "6000",
+ "elefant_foot_compensation": "0.075",
"travel_speed": "700",
"compatible_printers": [
"Bambu Lab A1 0.6 nozzle"
diff --git a/resources/profiles/BBL/process/0.30mm Standard @BBL A1M 0.6 nozzle.json b/resources/profiles/BBL/process/0.30mm Standard @BBL A1M 0.6 nozzle.json
index 960ad6d6c2b..ef0567d6d12 100644
--- a/resources/profiles/BBL/process/0.30mm Standard @BBL A1M 0.6 nozzle.json
+++ b/resources/profiles/BBL/process/0.30mm Standard @BBL A1M 0.6 nozzle.json
@@ -6,6 +6,7 @@
"setting_id": "GP038",
"instantiation": "true",
"default_acceleration": "6000",
+ "elefant_foot_compensation": "0",
"travel_speed": "700",
"compatible_printers": [
"Bambu Lab A1 mini 0.6 nozzle"
diff --git a/resources/profiles/BBL/process/0.30mm Standard @BBL X1 0.6 nozzle.json b/resources/profiles/BBL/process/0.30mm Standard @BBL X1 0.6 nozzle.json
index d6114dface0..f53720838f5 100644
--- a/resources/profiles/BBL/process/0.30mm Standard @BBL X1 0.6 nozzle.json
+++ b/resources/profiles/BBL/process/0.30mm Standard @BBL X1 0.6 nozzle.json
@@ -5,6 +5,7 @@
"from": "system",
"setting_id": "GP011",
"instantiation": "true",
+ "elefant_foot_compensation": "0.15",
"compatible_printers": [
"Bambu Lab X1 0.6 nozzle"
]
diff --git a/resources/profiles/BBL/process/0.30mm Standard @BBL X1C 0.6 nozzle.json b/resources/profiles/BBL/process/0.30mm Standard @BBL X1C 0.6 nozzle.json
index 31e55d13fdf..c09f04e219d 100644
--- a/resources/profiles/BBL/process/0.30mm Standard @BBL X1C 0.6 nozzle.json
+++ b/resources/profiles/BBL/process/0.30mm Standard @BBL X1C 0.6 nozzle.json
@@ -5,6 +5,7 @@
"from": "system",
"setting_id": "GP010",
"instantiation": "true",
+ "elefant_foot_compensation": "0.15",
"compatible_printers": [
"Bambu Lab X1 Carbon 0.6 nozzle",
"Bambu Lab P1S 0.6 nozzle",
diff --git a/resources/profiles/BBL/process/0.30mm Strength @BBL A1 0.6 nozzle.json b/resources/profiles/BBL/process/0.30mm Strength @BBL A1 0.6 nozzle.json
index 694da6a8c51..f4978b869f9 100644
--- a/resources/profiles/BBL/process/0.30mm Strength @BBL A1 0.6 nozzle.json
+++ b/resources/profiles/BBL/process/0.30mm Strength @BBL A1 0.6 nozzle.json
@@ -6,6 +6,7 @@
"setting_id": "GP097",
"instantiation": "true",
"default_acceleration": "6000",
+ "elefant_foot_compensation": "0.075",
"sparse_infill_density": "25%",
"travel_speed": "700",
"wall_loops": "4",
diff --git a/resources/profiles/BBL/process/0.30mm Strength @BBL P1P 0.6 nozzle.json b/resources/profiles/BBL/process/0.30mm Strength @BBL P1P 0.6 nozzle.json
index fc06431da3a..c5bcdf6cd6d 100644
--- a/resources/profiles/BBL/process/0.30mm Strength @BBL P1P 0.6 nozzle.json
+++ b/resources/profiles/BBL/process/0.30mm Strength @BBL P1P 0.6 nozzle.json
@@ -5,8 +5,9 @@
"from": "system",
"setting_id": "GP067",
"instantiation": "true",
- "wall_loops": "4",
+ "elefant_foot_compensation": "0.15",
"sparse_infill_density": "25%",
+ "wall_loops": "4",
"compatible_printers": [
"Bambu Lab P1P 0.6 nozzle"
]
diff --git a/resources/profiles/BBL/process/0.30mm Strength @BBL X1C 0.6 nozzle.json b/resources/profiles/BBL/process/0.30mm Strength @BBL X1C 0.6 nozzle.json
index b1a7451a468..08493a2232f 100644
--- a/resources/profiles/BBL/process/0.30mm Strength @BBL X1C 0.6 nozzle.json
+++ b/resources/profiles/BBL/process/0.30mm Strength @BBL X1C 0.6 nozzle.json
@@ -5,8 +5,9 @@
"from": "system",
"setting_id": "GP036",
"instantiation": "true",
- "wall_loops": "4",
+ "elefant_foot_compensation": "0.15",
"sparse_infill_density": "25%",
+ "wall_loops": "4",
"compatible_printers": [
"Bambu Lab X1 Carbon 0.6 nozzle",
"Bambu Lab X1 0.6 nozzle",
diff --git a/resources/profiles/BBL/process/0.32mm Optimal @BBL A1 0.8 nozzle.json b/resources/profiles/BBL/process/0.32mm Optimal @BBL A1 0.8 nozzle.json
index 90283885e04..fbeab32f629 100644
--- a/resources/profiles/BBL/process/0.32mm Optimal @BBL A1 0.8 nozzle.json
+++ b/resources/profiles/BBL/process/0.32mm Optimal @BBL A1 0.8 nozzle.json
@@ -6,6 +6,7 @@
"setting_id": "GP093",
"instantiation": "true",
"default_acceleration": "6000",
+ "elefant_foot_compensation": "0.075",
"travel_speed": "700",
"compatible_printers": [
"Bambu Lab A1 0.8 nozzle"
diff --git a/resources/profiles/BBL/process/0.32mm Optimal @BBL P1P 0.8 nozzle.json b/resources/profiles/BBL/process/0.32mm Optimal @BBL P1P 0.8 nozzle.json
index 8dd6c892b80..54463e5b3a2 100644
--- a/resources/profiles/BBL/process/0.32mm Optimal @BBL P1P 0.8 nozzle.json
+++ b/resources/profiles/BBL/process/0.32mm Optimal @BBL P1P 0.8 nozzle.json
@@ -5,6 +5,7 @@
"from": "system",
"setting_id": "GP075",
"instantiation": "true",
+ "elefant_foot_compensation": "0.15",
"compatible_printers": [
"Bambu Lab P1P 0.8 nozzle"
]
diff --git a/resources/profiles/BBL/process/0.32mm Standard @BBL X1C 0.8 nozzle.json b/resources/profiles/BBL/process/0.32mm Standard @BBL X1C 0.8 nozzle.json
index e6cd89b08b1..0a61d6aaa09 100644
--- a/resources/profiles/BBL/process/0.32mm Standard @BBL X1C 0.8 nozzle.json
+++ b/resources/profiles/BBL/process/0.32mm Standard @BBL X1C 0.8 nozzle.json
@@ -5,6 +5,7 @@
"from": "system",
"setting_id": "GP033",
"instantiation": "true",
+ "elefant_foot_compensation": "0.15",
"compatible_printers": [
"Bambu Lab X1 Carbon 0.8 nozzle",
"Bambu Lab X1 0.8 nozzle",
diff --git a/resources/profiles/BBL/process/0.36mm Draft @BBL A1 0.6 nozzle.json b/resources/profiles/BBL/process/0.36mm Draft @BBL A1 0.6 nozzle.json
index 5a105aba64e..3448a0f1bba 100644
--- a/resources/profiles/BBL/process/0.36mm Draft @BBL A1 0.6 nozzle.json
+++ b/resources/profiles/BBL/process/0.36mm Draft @BBL A1 0.6 nozzle.json
@@ -6,6 +6,7 @@
"setting_id": "GP090",
"instantiation": "true",
"default_acceleration": "6000",
+ "elefant_foot_compensation": "0.075",
"travel_speed": "700",
"compatible_printers": [
"Bambu Lab A1 0.6 nozzle"
diff --git a/resources/profiles/BBL/process/0.36mm Draft @BBL P1P 0.6 nozzle.json b/resources/profiles/BBL/process/0.36mm Draft @BBL P1P 0.6 nozzle.json
index d9fd1794661..b7a618da197 100644
--- a/resources/profiles/BBL/process/0.36mm Draft @BBL P1P 0.6 nozzle.json
+++ b/resources/profiles/BBL/process/0.36mm Draft @BBL P1P 0.6 nozzle.json
@@ -5,6 +5,7 @@
"from": "system",
"setting_id": "GP070",
"instantiation": "true",
+ "elefant_foot_compensation": "0.15",
"compatible_printers": [
"Bambu Lab P1P 0.6 nozzle"
]
diff --git a/resources/profiles/BBL/process/0.36mm Standard @BBL X1C 0.6 nozzle.json b/resources/profiles/BBL/process/0.36mm Standard @BBL X1C 0.6 nozzle.json
index 9afac00ad18..24acdebf3b0 100644
--- a/resources/profiles/BBL/process/0.36mm Standard @BBL X1C 0.6 nozzle.json
+++ b/resources/profiles/BBL/process/0.36mm Standard @BBL X1C 0.6 nozzle.json
@@ -5,6 +5,7 @@
"from": "system",
"setting_id": "GP030",
"instantiation": "true",
+ "elefant_foot_compensation": "0.15",
"compatible_printers": [
"Bambu Lab X1 Carbon 0.6 nozzle",
"Bambu Lab X1 0.6 nozzle",
diff --git a/resources/profiles/BBL/process/0.40mm Standard @BBL A1 0.8 nozzle.json b/resources/profiles/BBL/process/0.40mm Standard @BBL A1 0.8 nozzle.json
index 41f09b4e040..e642efe3f40 100644
--- a/resources/profiles/BBL/process/0.40mm Standard @BBL A1 0.8 nozzle.json
+++ b/resources/profiles/BBL/process/0.40mm Standard @BBL A1 0.8 nozzle.json
@@ -6,6 +6,7 @@
"setting_id": "GP098",
"instantiation": "true",
"default_acceleration": "6000",
+ "elefant_foot_compensation": "0.075",
"travel_speed": "700",
"compatible_printers": [
"Bambu Lab A1 0.8 nozzle"
diff --git a/resources/profiles/BBL/process/0.40mm Standard @BBL A1M 0.8 nozzle.json b/resources/profiles/BBL/process/0.40mm Standard @BBL A1M 0.8 nozzle.json
index 9b23f80d098..39300abc52b 100644
--- a/resources/profiles/BBL/process/0.40mm Standard @BBL A1M 0.8 nozzle.json
+++ b/resources/profiles/BBL/process/0.40mm Standard @BBL A1M 0.8 nozzle.json
@@ -6,6 +6,7 @@
"setting_id": "GP037",
"instantiation": "true",
"default_acceleration": "6000",
+ "elefant_foot_compensation": "0",
"travel_speed": "700",
"compatible_printers": [
"Bambu Lab A1 mini 0.8 nozzle"
diff --git a/resources/profiles/BBL/process/0.40mm Standard @BBL X1 0.8 nozzle.json b/resources/profiles/BBL/process/0.40mm Standard @BBL X1 0.8 nozzle.json
index e9aa8d1836a..649f3e803f5 100644
--- a/resources/profiles/BBL/process/0.40mm Standard @BBL X1 0.8 nozzle.json
+++ b/resources/profiles/BBL/process/0.40mm Standard @BBL X1 0.8 nozzle.json
@@ -5,6 +5,7 @@
"from": "system",
"setting_id": "GP012",
"instantiation": "true",
+ "elefant_foot_compensation": "0.15",
"compatible_printers": [
"Bambu Lab X1 0.8 nozzle"
]
diff --git a/resources/profiles/BBL/process/0.40mm Standard @BBL X1C 0.8 nozzle.json b/resources/profiles/BBL/process/0.40mm Standard @BBL X1C 0.8 nozzle.json
index b6d0c079174..ed00b1679fa 100644
--- a/resources/profiles/BBL/process/0.40mm Standard @BBL X1C 0.8 nozzle.json
+++ b/resources/profiles/BBL/process/0.40mm Standard @BBL X1C 0.8 nozzle.json
@@ -5,6 +5,7 @@
"from": "system",
"setting_id": "GP009",
"instantiation": "true",
+ "elefant_foot_compensation": "0.15",
"compatible_printers": [
"Bambu Lab X1 Carbon 0.8 nozzle",
"Bambu Lab P1S 0.8 nozzle",
diff --git a/resources/profiles/BBL/process/0.42mm Extra Draft @BBL A1 0.6 nozzle.json b/resources/profiles/BBL/process/0.42mm Extra Draft @BBL A1 0.6 nozzle.json
index 2c48240ebf2..b0eda75687d 100644
--- a/resources/profiles/BBL/process/0.42mm Extra Draft @BBL A1 0.6 nozzle.json
+++ b/resources/profiles/BBL/process/0.42mm Extra Draft @BBL A1 0.6 nozzle.json
@@ -6,6 +6,7 @@
"setting_id": "GP091",
"instantiation": "true",
"default_acceleration": "6000",
+ "elefant_foot_compensation": "0.075",
"travel_speed": "700",
"compatible_printers": [
"Bambu Lab A1 0.6 nozzle"
diff --git a/resources/profiles/BBL/process/0.42mm Extra Draft @BBL P1P 0.6 nozzle.json b/resources/profiles/BBL/process/0.42mm Extra Draft @BBL P1P 0.6 nozzle.json
index 0ee88c27874..9305139f2d8 100644
--- a/resources/profiles/BBL/process/0.42mm Extra Draft @BBL P1P 0.6 nozzle.json
+++ b/resources/profiles/BBL/process/0.42mm Extra Draft @BBL P1P 0.6 nozzle.json
@@ -5,6 +5,7 @@
"from": "system",
"setting_id": "GP073",
"instantiation": "true",
+ "elefant_foot_compensation": "0.15",
"compatible_printers": [
"Bambu Lab P1P 0.6 nozzle"
]
diff --git a/resources/profiles/BBL/process/0.42mm Standard @BBL X1C 0.6 nozzle.json b/resources/profiles/BBL/process/0.42mm Standard @BBL X1C 0.6 nozzle.json
index a6951dd6bb4..38b90393da2 100644
--- a/resources/profiles/BBL/process/0.42mm Standard @BBL X1C 0.6 nozzle.json
+++ b/resources/profiles/BBL/process/0.42mm Standard @BBL X1C 0.6 nozzle.json
@@ -5,6 +5,7 @@
"from": "system",
"setting_id": "GP031",
"instantiation": "true",
+ "elefant_foot_compensation": "0.15",
"compatible_printers": [
"Bambu Lab X1 Carbon 0.6 nozzle",
"Bambu Lab X1 0.6 nozzle",
diff --git a/resources/profiles/BBL/process/0.48mm Draft @BBL A1 0.8 nozzle.json b/resources/profiles/BBL/process/0.48mm Draft @BBL A1 0.8 nozzle.json
index 7e0b5893605..a03f301b783 100644
--- a/resources/profiles/BBL/process/0.48mm Draft @BBL A1 0.8 nozzle.json
+++ b/resources/profiles/BBL/process/0.48mm Draft @BBL A1 0.8 nozzle.json
@@ -6,6 +6,7 @@
"setting_id": "GP094",
"instantiation": "true",
"default_acceleration": "6000",
+ "elefant_foot_compensation": "0.075",
"travel_speed": "700",
"compatible_printers": [
"Bambu Lab A1 0.8 nozzle"
diff --git a/resources/profiles/BBL/process/0.48mm Draft @BBL P1P 0.8 nozzle.json b/resources/profiles/BBL/process/0.48mm Draft @BBL P1P 0.8 nozzle.json
index 3b9d26f9505..0299ac8fece 100644
--- a/resources/profiles/BBL/process/0.48mm Draft @BBL P1P 0.8 nozzle.json
+++ b/resources/profiles/BBL/process/0.48mm Draft @BBL P1P 0.8 nozzle.json
@@ -5,6 +5,7 @@
"from": "system",
"setting_id": "GP074",
"instantiation": "true",
+ "elefant_foot_compensation": "0.15",
"compatible_printers": [
"Bambu Lab P1P 0.8 nozzle"
]
diff --git a/resources/profiles/BBL/process/0.48mm Standard @BBL X1C 0.8 nozzle.json b/resources/profiles/BBL/process/0.48mm Standard @BBL X1C 0.8 nozzle.json
index ffa6bc5a377..40756960883 100644
--- a/resources/profiles/BBL/process/0.48mm Standard @BBL X1C 0.8 nozzle.json
+++ b/resources/profiles/BBL/process/0.48mm Standard @BBL X1C 0.8 nozzle.json
@@ -5,10 +5,11 @@
"from": "system",
"setting_id": "GP034",
"instantiation": "true",
+ "elefant_foot_compensation": "0.15",
"compatible_printers": [
"Bambu Lab X1 Carbon 0.8 nozzle",
"Bambu Lab X1 0.8 nozzle",
"Bambu Lab P1S 0.8 nozzle",
"Bambu Lab X1E 0.8 nozzle"
]
-}
+}
\ No newline at end of file
diff --git a/resources/profiles/BBL/process/0.56mm Extra Draft @BBL A1 0.8 nozzle.json b/resources/profiles/BBL/process/0.56mm Extra Draft @BBL A1 0.8 nozzle.json
index befd67cb91c..8b1312dfb9c 100644
--- a/resources/profiles/BBL/process/0.56mm Extra Draft @BBL A1 0.8 nozzle.json
+++ b/resources/profiles/BBL/process/0.56mm Extra Draft @BBL A1 0.8 nozzle.json
@@ -6,6 +6,7 @@
"setting_id": "GP095",
"instantiation": "true",
"default_acceleration": "6000",
+ "elefant_foot_compensation": "0.075",
"travel_speed": "700",
"compatible_printers": [
"Bambu Lab A1 0.8 nozzle"
diff --git a/resources/profiles/BBL/process/0.56mm Extra Draft @BBL P1P 0.8 nozzle.json b/resources/profiles/BBL/process/0.56mm Extra Draft @BBL P1P 0.8 nozzle.json
index 3dca29d8ba3..ca90e061ead 100644
--- a/resources/profiles/BBL/process/0.56mm Extra Draft @BBL P1P 0.8 nozzle.json
+++ b/resources/profiles/BBL/process/0.56mm Extra Draft @BBL P1P 0.8 nozzle.json
@@ -5,6 +5,7 @@
"from": "system",
"setting_id": "GP071",
"instantiation": "true",
+ "elefant_foot_compensation": "0.15",
"compatible_printers": [
"Bambu Lab P1P 0.8 nozzle"
]
diff --git a/resources/profiles/BBL/process/0.56mm Standard @BBL X1C 0.8 nozzle.json b/resources/profiles/BBL/process/0.56mm Standard @BBL X1C 0.8 nozzle.json
index c5c002865de..48cb2aac2e3 100644
--- a/resources/profiles/BBL/process/0.56mm Standard @BBL X1C 0.8 nozzle.json
+++ b/resources/profiles/BBL/process/0.56mm Standard @BBL X1C 0.8 nozzle.json
@@ -5,6 +5,7 @@
"from": "system",
"setting_id": "GP035",
"instantiation": "true",
+ "elefant_foot_compensation": "0.15",
"compatible_printers": [
"Bambu Lab X1 Carbon 0.8 nozzle",
"Bambu Lab X1 0.8 nozzle",
diff --git a/src/OrcaSlicer.cpp b/src/OrcaSlicer.cpp
index 1bebecfb96c..a39c35cfa2a 100644
--- a/src/OrcaSlicer.cpp
+++ b/src/OrcaSlicer.cpp
@@ -1037,7 +1037,7 @@ int CLI::run(int argc, char **argv)
std::vector current_filaments_name, current_filaments_system_name, current_inherits_group;
DynamicPrintConfig load_process_config, load_machine_config;
bool new_process_config_is_system = true, new_printer_config_is_system = true;
- std::string pipe_name;
+ std::string pipe_name, makerlab_name, makerlab_version;
// Read input file(s) if any.
BOOST_LOG_TRIVIAL(info) << "Will start to read model file now, file count :" << m_input_files.size() << "\n";
@@ -1090,6 +1090,14 @@ int CLI::run(int argc, char **argv)
}
}
+ ConfigOptionString* makerlab_name_option = m_config.option("makerlab_name");
+ if (makerlab_name_option)
+ makerlab_name = makerlab_name_option->value;
+
+ ConfigOptionString* makerlab_version_option = m_config.option("makerlab_version");
+ if (makerlab_version_option)
+ makerlab_version = makerlab_version_option->value;
+
//skip model object map construct
if (need_skip) {
BOOST_LOG_TRIVIAL(info) << boost::format("need to skip objects, size %1%:")%skip_objects.size();
@@ -1320,7 +1328,7 @@ int CLI::run(int argc, char **argv)
if (loaded_filament_ids.size() > input_index) {
if (loaded_filament_ids[input_index] > 0) {
if (loaded_filament_ids[input_index] > load_filaments.size()) {
- BOOST_LOG_TRIVIAL(error) << boost::format("invalid filament id %1% at index %2%, max %3%")%loaded_filament_ids[input_index] % (input_index + 1) %load_filaments.size();
+ BOOST_LOG_TRIVIAL(error) << boost::format("invalid filament_id %1% at index %2%, max %3%")%loaded_filament_ids[input_index] % (input_index + 1) %load_filaments.size();
record_exit_reson(outfile_dir, CLI_INVALID_PARAMS, 0, cli_errors[CLI_INVALID_PARAMS], sliced_info);
flush_and_exit(CLI_INVALID_PARAMS);
}
@@ -5216,6 +5224,13 @@ int CLI::run(int argc, char **argv)
#endif
BOOST_LOG_TRIVIAL(info) << "will export 3mf to " << export_3mf_file << std::endl;
+ if (!makerlab_name.empty()) {
+ Model &model = m_models[0];
+
+ model.mk_name = makerlab_name;
+ model.mk_version = makerlab_version;
+ BOOST_LOG_TRIVIAL(info) << boost::format("mk_name %1%, mk_version %2%")%makerlab_name %makerlab_version;
+ }
if (! this->export_project(&m_models[0], export_3mf_file, plate_data_list, project_presets, thumbnails, top_thumbnails, pick_thumbnails,
calibration_thumbnails, plate_bboxes, &m_print_config, minimum_save, plate_to_slice - 1))
{
diff --git a/src/libslic3r/ArcFitter.cpp b/src/libslic3r/ArcFitter.cpp
index bfc95d0b74e..cdfd708b10c 100644
--- a/src/libslic3r/ArcFitter.cpp
+++ b/src/libslic3r/ArcFitter.cpp
@@ -1,4 +1,5 @@
#include "ArcFitter.hpp"
+#include "Polyline.hpp"
#include
#include
diff --git a/src/libslic3r/Brim.cpp b/src/libslic3r/Brim.cpp
index fee56ed56b5..940e5e1ee69 100644
--- a/src/libslic3r/Brim.cpp
+++ b/src/libslic3r/Brim.cpp
@@ -18,6 +18,8 @@
#include
#include
+#include
+
#ifndef NDEBUG
// #define BRIM_DEBUG_TO_SVG
#endif
diff --git a/src/libslic3r/BuildVolume.cpp b/src/libslic3r/BuildVolume.cpp
index f6547e2b3dc..010a330e269 100644
--- a/src/libslic3r/BuildVolume.cpp
+++ b/src/libslic3r/BuildVolume.cpp
@@ -1,5 +1,6 @@
#include "BuildVolume.hpp"
#include "ClipperUtils.hpp"
+#include "TriangleMesh.hpp"
#include "Geometry/ConvexHull.hpp"
#include "GCode/GCodeProcessor.hpp"
#include "Point.hpp"
diff --git a/src/libslic3r/Config.cpp b/src/libslic3r/Config.cpp
index c303cef5ab1..e37faf88541 100644
--- a/src/libslic3r/Config.cpp
+++ b/src/libslic3r/Config.cpp
@@ -8,6 +8,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -17,6 +18,7 @@
#include
#include
#include
+#include
#include
#include
#include
diff --git a/src/libslic3r/FaceDetector.cpp b/src/libslic3r/FaceDetector.cpp
index 33423ae7e08..5eb5ca762ce 100644
--- a/src/libslic3r/FaceDetector.cpp
+++ b/src/libslic3r/FaceDetector.cpp
@@ -2,6 +2,7 @@
#include "TriangleMesh.hpp"
#include "SLA/IndexedMesh.hpp"
#include "Model.hpp"
+#include
namespace Slic3r {
static const double BBOX_OFFSET = 2.0;
diff --git a/src/libslic3r/Format/STEP.cpp b/src/libslic3r/Format/STEP.cpp
index 8155d98d4d9..5ee66be24dc 100644
--- a/src/libslic3r/Format/STEP.cpp
+++ b/src/libslic3r/Format/STEP.cpp
@@ -5,6 +5,12 @@
#include "STEP.hpp"
#include
+#include
+#include
+#include
+
+#include
+#include
#ifdef _WIN32
#define DIR_SEPARATOR '\\'
diff --git a/src/libslic3r/Format/bbs_3mf.cpp b/src/libslic3r/Format/bbs_3mf.cpp
index 84ec7a4faed..eebfd935cbe 100644
--- a/src/libslic3r/Format/bbs_3mf.cpp
+++ b/src/libslic3r/Format/bbs_3mf.cpp
@@ -31,6 +31,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -44,6 +45,8 @@
namespace pt = boost::property_tree;
+#include
+#include
#include
#include
@@ -136,6 +139,9 @@ const std::string BBL_REGION_TAG = "Region";
const std::string BBL_MODIFICATION_TAG = "ModificationDate";
const std::string BBL_CREATION_DATE_TAG = "CreationDate";
const std::string BBL_APPLICATION_TAG = "Application";
+const std::string BBL_MAKERLAB_TAG = "MakerLab";
+const std::string BBL_MAKERLAB_VERSION_TAG = "MakerLabVersion";
+
const std::string BBL_PROFILE_TITLE_TAG = "ProfileTitle";
const std::string BBL_PROFILE_COVER_TAG = "ProfileCover";
@@ -6313,7 +6319,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result)
std::stringstream stream;
reset_stream(stream);
stream << "\n";
- stream << "<" << MODEL_TAG << " unit=\"millimeter\" xml:lang=\"en-US\" xmlns=\"http://schemas.microsoft.com/3dmanufacturing/core/2015/02\" xmlns:slic3rpe=\"http://schemas.slic3r.org/3mf/2017/06\"";
+ stream << "<" << MODEL_TAG << " unit=\"millimeter\" xml:lang=\"en-US\" xmlns=\"http://schemas.microsoft.com/3dmanufacturing/core/2015/02\" xmlns:BambuStudio=\"http://schemas.bambulab.com/package/2021\"";
if (m_production_ext)
stream << " xmlns:p=\"http://schemas.microsoft.com/3dmanufacturing/production/2015/06\" requiredextensions=\"p\"";
stream << ">\n";
@@ -6383,6 +6389,15 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result)
}
metadata_item_map[BBS_3MF_VERSION] = std::to_string(VERSION_BBS_3MF);
+ if (!model.mk_name.empty()) {
+ metadata_item_map[BBL_MAKERLAB_TAG] = xml_escape(model.mk_name);
+ BOOST_LOG_TRIVIAL(info) << "saved mk_name " << model.mk_name;
+ }
+ if (!model.mk_version.empty()) {
+ metadata_item_map[BBL_MAKERLAB_VERSION_TAG] = xml_escape(model.mk_version);
+ BOOST_LOG_TRIVIAL(info) << "saved mk_version " << model.mk_version;
+ }
+
// store metadata info
for (auto item : metadata_item_map) {
BOOST_LOG_TRIVIAL(info) << "bbs_3mf: save key= " << item.first << ", value = " << item.second;
diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp
index 626d3d6d720..05203f1cdf8 100644
--- a/src/libslic3r/GCode.cpp
+++ b/src/libslic3r/GCode.cpp
@@ -581,6 +581,8 @@ static std::vector get_path_of_change_filament(const Print& print)
config.set_key_value("travel_point_3_x", new ConfigOptionFloat(float(travel_point_3.x())));
config.set_key_value("travel_point_3_y", new ConfigOptionFloat(float(travel_point_3.y())));
+ config.set_key_value("flush_length", new ConfigOptionFloat(purge_length));
+
int flush_count = std::min(g_max_flush_count, (int) std::round(purge_volume / g_purge_volume_one_time));
float flush_unit = purge_length / flush_count;
int flush_idx = 0;
@@ -5930,6 +5932,8 @@ std::string GCode::set_extruder(unsigned int extruder_id, double print_z, bool b
dyn_config.set_key_value("travel_point_3_x", new ConfigOptionFloat(float(travel_point_3.x())));
dyn_config.set_key_value("travel_point_3_y", new ConfigOptionFloat(float(travel_point_3.y())));
+ dyn_config.set_key_value("flush_length", new ConfigOptionFloat(wipe_length));
+
int flush_count = std::min(g_max_flush_count, (int)std::round(wipe_volume / g_purge_volume_one_time));
float flush_unit = wipe_length / flush_count;
int flush_idx = 0;
diff --git a/src/libslic3r/Layer.hpp b/src/libslic3r/Layer.hpp
index 52c48dfcd2b..13ae774ff90 100644
--- a/src/libslic3r/Layer.hpp
+++ b/src/libslic3r/Layer.hpp
@@ -2,6 +2,7 @@
#define slic3r_Layer_hpp_
#include "libslic3r.h"
+#include "BoundingBox.hpp"
#include "Flow.hpp"
#include "SurfaceCollection.hpp"
#include "ExtrusionEntityCollection.hpp"
diff --git a/src/libslic3r/MeshBoolean.cpp b/src/libslic3r/MeshBoolean.cpp
index 1021fb7658c..f9e66e9ebb4 100644
--- a/src/libslic3r/MeshBoolean.cpp
+++ b/src/libslic3r/MeshBoolean.cpp
@@ -620,7 +620,7 @@ MCAPI_ATTR void MCAPI_CALL mcDebugOutput(McDebugSource source,
}
-void do_boolean(McutMesh &srcMesh, const McutMesh &cutMesh, const std::string &boolean_opts)
+bool do_boolean_single(McutMesh &srcMesh, const McutMesh &cutMesh, const std::string &boolean_opts)
{
// create context
McContext context = MC_NULL_HANDLE;
@@ -651,7 +651,7 @@ void do_boolean(McutMesh &srcMesh, const McutMesh &cutMesh, const std::string &b
if (srcMesh.vertexCoordsArray.empty() && (boolean_opts == "UNION" || boolean_opts == "B_NOT_A")) {
srcMesh = cutMesh;
mcReleaseContext(context);
- return;
+ return true;
}
err = mcDispatch(context,
@@ -669,31 +669,9 @@ void do_boolean(McutMesh &srcMesh, const McutMesh &cutMesh, const std::string &b
mcReleaseContext(context);
if (boolean_opts == "UNION") {
merge_mcut_meshes(srcMesh, cutMesh);
+ return true;
}
- else {
- // when src mesh has multiple connected components, mcut refuses to work.
- // But we can force it to work by spliting the src mesh into disconnected components,
- // and do booleans seperately, then merge all the results.
- indexed_triangle_set all_its;
- TriangleMesh tri_src = mcut_to_triangle_mesh(srcMesh);
- std::vector src_parts = its_split(tri_src.its);
- if (src_parts.size() == 1)
- {
- //can not split, return error directly
- BOOST_LOG_TRIVIAL(error) << boost::format("bool operation %1% failed, also can not split")%boolean_opts;
- return;
- }
- for (size_t i = 0; i < src_parts.size(); i++)
- {
- auto part = triangle_mesh_to_mcut(src_parts[i]);
- do_boolean(*part, cutMesh, boolean_opts);
- TriangleMesh tri_part = mcut_to_triangle_mesh(*part);
- its_merge(all_its, tri_part.its);
- }
- srcMesh = *triangle_mesh_to_mcut(all_its);
- }
-
- return;
+ return false;
}
// query the number of available connected component
@@ -704,8 +682,9 @@ void do_boolean(McutMesh &srcMesh, const McutMesh &cutMesh, const std::string &b
mcReleaseContext(context);
if (numConnComps == 0 && boolean_opts == "UNION") {
merge_mcut_meshes(srcMesh, cutMesh);
+ return true;
}
- return;
+ return false;
}
std::vector connectedComponents(numConnComps, MC_NULL_HANDLE);
@@ -772,126 +751,57 @@ void do_boolean(McutMesh &srcMesh, const McutMesh &cutMesh, const std::string &b
// free connected component data
err = mcReleaseConnectedComponents(context, 0, NULL);
-
// destroy context
err = mcReleaseContext(context);
srcMesh = outMesh;
+
+ return true;
}
-/* BBS: Musang King
- * mcut for Mesh Boolean which provides C-style syntax API
- */
-std::vector make_boolean(const McutMesh &srcMesh, const McutMesh &cutMesh, const std::string &boolean_opts)
+void do_boolean(McutMesh& srcMesh, const McutMesh& cutMesh, const std::string& boolean_opts)
{
- // create context
- McContext context = MC_NULL_HANDLE;
- McResult err = mcCreateContext(&context, 0);
- // add debug callback according to https://cutdigital.github.io/mcut.site/tutorials/debugging/
- mcDebugMessageCallback(context, mcDebugOutput, nullptr);
- mcDebugMessageControl(
- context,
- MC_DEBUG_SOURCE_ALL,
- MC_DEBUG_TYPE_ERROR,
- MC_DEBUG_SEVERITY_MEDIUM,
- true);
- // We can either let MCUT compute all possible meshes (including patches etc.), or we can
- // constrain the library to compute exactly the boolean op mesh we want. This 'constrained' case
- // is done with the following flags.
- // NOTE#1: you can extend these flags by bitwise ORing with additional flags (see `McDispatchFlags' in mcut.h)
- // NOTE#2: below order of columns MATTERS
- const std::map booleanOpts = {
- {"A_NOT_B", MC_DISPATCH_FILTER_FRAGMENT_SEALING_INSIDE | MC_DISPATCH_FILTER_FRAGMENT_LOCATION_ABOVE},
- {"B_NOT_A", MC_DISPATCH_FILTER_FRAGMENT_SEALING_OUTSIDE | MC_DISPATCH_FILTER_FRAGMENT_LOCATION_BELOW},
- {"UNION", MC_DISPATCH_FILTER_FRAGMENT_SEALING_OUTSIDE | MC_DISPATCH_FILTER_FRAGMENT_LOCATION_ABOVE},
- {"INTERSECTION", MC_DISPATCH_FILTER_FRAGMENT_SEALING_INSIDE | MC_DISPATCH_FILTER_FRAGMENT_LOCATION_BELOW},
- };
+ TriangleMesh tri_src = mcut_to_triangle_mesh(srcMesh);
+ std::vector src_parts = its_split(tri_src.its);
- std::map::const_iterator it = booleanOpts.find(boolean_opts);
- McFlags boolOpFlags = it->second;
+ TriangleMesh tri_cut = mcut_to_triangle_mesh(cutMesh);
+ std::vector cut_parts = its_split(tri_cut.its);
- err = mcDispatch(context,
- MC_DISPATCH_VERTEX_ARRAY_DOUBLE | // vertices are in array of doubles
- MC_DISPATCH_ENFORCE_GENERAL_POSITION | // perturb if necessary
- boolOpFlags, // filter flags which specify the type of output we want
- // source mesh
- reinterpret_cast(srcMesh.vertexCoordsArray.data()), reinterpret_cast(srcMesh.faceIndicesArray.data()),
- srcMesh.faceSizesArray.data(), static_cast(srcMesh.vertexCoordsArray.size() / 3), static_cast(srcMesh.faceSizesArray.size()),
- // cut mesh
- reinterpret_cast(cutMesh.vertexCoordsArray.data()), cutMesh.faceIndicesArray.data(), cutMesh.faceSizesArray.data(),
- static_cast(cutMesh.vertexCoordsArray.size() / 3), static_cast(cutMesh.faceSizesArray.size()));
-
- // query the number of available connected component
- uint32_t numConnComps;
- err = mcGetConnectedComponents(context, MC_CONNECTED_COMPONENT_TYPE_FRAGMENT, 0, NULL, &numConnComps);
-
- std::vector connectedComponents(numConnComps, MC_NULL_HANDLE);
- err = mcGetConnectedComponents(context, MC_CONNECTED_COMPONENT_TYPE_FRAGMENT, (uint32_t) connectedComponents.size(), connectedComponents.data(), NULL);
-
- std::vector outs;
- // traversal of all connected components
- for (int n = 0; n < numConnComps; ++n) {
- // query the data of each connected component from MCUT
- McConnectedComponent connComp = connectedComponents[n];
-
- // query the vertices
- McSize numBytes = 0;
- err = mcGetConnectedComponentData(context, connComp, MC_CONNECTED_COMPONENT_DATA_VERTEX_DOUBLE, 0, NULL, &numBytes);
- uint32_t ccVertexCount = (uint32_t) (numBytes / (sizeof(double) * 3));
- std::vector ccVertices((uint64_t) ccVertexCount * 3u, 0);
- err = mcGetConnectedComponentData(context, connComp, MC_CONNECTED_COMPONENT_DATA_VERTEX_DOUBLE, numBytes, (void *) ccVertices.data(), NULL);
-
- // query the faces
- numBytes = 0;
- err = mcGetConnectedComponentData(context, connComp, MC_CONNECTED_COMPONENT_DATA_FACE_TRIANGULATION, 0, NULL, &numBytes);
- std::vector ccFaceIndices(numBytes / sizeof(uint32_t), 0);
- err = mcGetConnectedComponentData(context, connComp, MC_CONNECTED_COMPONENT_DATA_FACE_TRIANGULATION, numBytes, ccFaceIndices.data(), NULL);
- std::vector faceSizes(ccFaceIndices.size() / 3, 3);
-
- const uint32_t ccFaceCount = static_cast(faceSizes.size());
-
- // Here we show, how to know when connected components, pertain particular boolean operations.
- McPatchLocation patchLocation = (McPatchLocation) 0;
- err = mcGetConnectedComponentData(context, connComp, MC_CONNECTED_COMPONENT_DATA_PATCH_LOCATION, sizeof(McPatchLocation), &patchLocation, NULL);
-
- McFragmentLocation fragmentLocation = (McFragmentLocation) 0;
- err = mcGetConnectedComponentData(context, connComp, MC_CONNECTED_COMPONENT_DATA_FRAGMENT_LOCATION, sizeof(McFragmentLocation), &fragmentLocation, NULL);
+ if (src_parts.empty() && boolean_opts == "UNION") {
+ srcMesh = cutMesh;
+ return;
+ }
+ if(cut_parts.empty()) return;
- // rearrange vertices/faces and save into result mesh
- std::vector vertices(ccVertexCount);
- for (uint32_t i = 0; i < ccVertexCount; ++i) {
- vertices[i][0] = (float) ccVertices[(uint64_t) i * 3 + 0];
- vertices[i][1] = (float) ccVertices[(uint64_t) i * 3 + 1];
- vertices[i][2] = (float) ccVertices[(uint64_t) i * 3 + 2];
+ // when src mesh has multiple connected components, mcut refuses to work.
+ // But we can force it to work by spliting the src mesh into disconnected components,
+ // and do booleans seperately, then merge all the results.
+ indexed_triangle_set all_its;
+ if (boolean_opts == "UNION" || boolean_opts == "A_NOT_B") {
+ for (size_t i = 0; i < src_parts.size(); i++) {
+ auto src_part = triangle_mesh_to_mcut(src_parts[i]);
+ for (size_t j = 0; j < cut_parts.size(); j++) {
+ auto cut_part = triangle_mesh_to_mcut(cut_parts[j]);
+ bool success = do_boolean_single(*src_part, *cut_part, boolean_opts);
+ }
+ TriangleMesh tri_part = mcut_to_triangle_mesh(*src_part);
+ its_merge(all_its, tri_part.its);
}
-
- // output faces
- int faceVertexOffsetBase = 0;
-
- // for each face in CC
- std::vector faces(ccFaceCount);
- for (uint32_t f = 0; f < ccFaceCount; ++f) {
- bool reverseWindingOrder = (fragmentLocation == MC_FRAGMENT_LOCATION_BELOW) && (patchLocation == MC_PATCH_LOCATION_OUTSIDE);
- int faceSize = faceSizes.at(f);
-
- // for each vertex in face
- for (int v = (reverseWindingOrder ? (faceSize - 1) : 0); (reverseWindingOrder ? (v >= 0) : (v < faceSize)); v += (reverseWindingOrder ? -1 : 1)) {
- faces[f][v] = ccFaceIndices[(uint64_t) faceVertexOffsetBase + v];
+ }
+ else if (boolean_opts == "INTERSECTION") {
+ for (size_t i = 0; i < src_parts.size(); i++) {
+ for (size_t j = 0; j < cut_parts.size(); j++) {
+ auto src_part = triangle_mesh_to_mcut(src_parts[i]);
+ auto cut_part = triangle_mesh_to_mcut(cut_parts[j]);
+ bool success = do_boolean_single(*src_part, *cut_part, boolean_opts);
+ if (success) {
+ TriangleMesh tri_part = mcut_to_triangle_mesh(*src_part);
+ its_merge(all_its, tri_part.its);
+ }
}
- faceVertexOffsetBase += faceSize;
}
-
- TriangleMesh out(vertices, faces);
- outs.emplace_back(out);
}
-
- // free connected component data
- err = mcReleaseConnectedComponents(context, (uint32_t) connectedComponents.size(), connectedComponents.data());
-
- // destroy context
- err = mcReleaseContext(context);
-
- return outs;
+ srcMesh = *triangle_mesh_to_mcut(all_its);
}
void make_boolean(const TriangleMesh &src_mesh, const TriangleMesh &cut_mesh, std::vector &dst_mesh, const std::string &boolean_opts)
diff --git a/src/libslic3r/MeshBoolean.hpp b/src/libslic3r/MeshBoolean.hpp
index 520d2f189a9..92592f5f61b 100644
--- a/src/libslic3r/MeshBoolean.hpp
+++ b/src/libslic3r/MeshBoolean.hpp
@@ -85,9 +85,12 @@ McutMeshPtr triangle_mesh_to_mcut(const indexed_triangle_set &M);
TriangleMesh mcut_to_triangle_mesh(const McutMesh &mcutmesh);
// do boolean and save result to srcMesh
+// return true if sucessful
+bool do_boolean_single(McutMesh& srcMesh, const McutMesh& cutMesh, const std::string& boolean_opts);
+// do boolean of mesh with multiple volumes and save result to srcMesh
+// Both srcMesh and cutMesh may have multiple volumes.
void do_boolean(McutMesh &srcMesh, const McutMesh &cutMesh, const std::string &boolean_opts);
-std::vector make_boolean(const McutMesh &srcMesh, const McutMesh &cutMesh, const std::string &boolean_opts);
// do boolean and convert result to TriangleMesh
void make_boolean(const TriangleMesh &src_mesh, const TriangleMesh &cut_mesh, std::vector &dst_mesh, const std::string &boolean_opts);
diff --git a/src/libslic3r/Model.cpp b/src/libslic3r/Model.cpp
index ed3624dce84..5cfc5c79ad0 100644
--- a/src/libslic3r/Model.cpp
+++ b/src/libslic3r/Model.cpp
@@ -106,6 +106,9 @@ Model& Model::assign_copy(const Model &rhs)
this->stl_design_id = rhs.stl_design_id;
this->profile_info = rhs.profile_info;
+ this->mk_name = rhs.mk_name;
+ this->mk_version = rhs.mk_version;
+
return *this;
}
@@ -135,6 +138,8 @@ Model& Model::assign_copy(Model &&rhs)
//BBS: add auxiliary path logic
// BBS: backup, all in one temp dir
this->stl_design_id = rhs.stl_design_id;
+ this->mk_name = rhs.mk_name;
+ this->mk_version = rhs.mk_version;
this->backup_path = std::move(rhs.backup_path);
this->object_backup_id_map = std::move(rhs.object_backup_id_map);
this->next_object_backup_id = rhs.next_object_backup_id;
@@ -935,6 +940,8 @@ void Model::load_from(Model& model)
stl_design_id = model.stl_design_id;
model_info = model.model_info;
profile_info = model.profile_info;
+ mk_name = model.mk_name;
+ mk_version = model.mk_version;
model.design_info.reset();
model.model_info.reset();
model.profile_info.reset();
diff --git a/src/libslic3r/Model.hpp b/src/libslic3r/Model.hpp
index 2b4fa14e4b7..5ef1c938fbd 100644
--- a/src/libslic3r/Model.hpp
+++ b/src/libslic3r/Model.hpp
@@ -1485,6 +1485,10 @@ class Model final : public ObjectBase
std::shared_ptr model_info = nullptr;
std::shared_ptr profile_info = nullptr;
+ //makerlab information
+ std::string mk_name;
+ std::string mk_version;
+
void SetDesigner(std::string designer, std::string designer_user_id) {
if (design_info == nullptr) {
design_info = std::make_shared();
diff --git a/src/libslic3r/ObjectID.hpp b/src/libslic3r/ObjectID.hpp
index b4e0507f414..94fbb6a0abd 100644
--- a/src/libslic3r/ObjectID.hpp
+++ b/src/libslic3r/ObjectID.hpp
@@ -2,6 +2,7 @@
#define slic3r_ObjectID_hpp_
#include
+#include
namespace Slic3r {
diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp
index 03d77b0e3c2..2652f603ed5 100644
--- a/src/libslic3r/Preset.cpp
+++ b/src/libslic3r/Preset.cpp
@@ -440,6 +440,7 @@ void Preset::load_info(const std::string& file)
}
else if (v.first.compare("base_id") == 0) {
this->base_id = v.second.get_value();
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " load info from: " << file << " and base_id: " << this->base_id;
if (this->base_id.compare("null") == 0)
this->base_id.clear();
}
@@ -539,6 +540,7 @@ void Preset::save(DynamicPrintConfig* parent_config)
} else {
this->config.save_to_json(this->file, this->name, from_str, this->version.to_string(), this->custom_defined);
}
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " save config for: " << this->name << " and filament_id: " << filament_id << " and base_id: " << this->base_id;
fs::path idx_file(this->file);
idx_file.replace_extension(".info");
@@ -1162,6 +1164,7 @@ void PresetCollection::load_presets(
// Find a default preset for the config. The PrintPresetCollection provides different default preset based on the "printer_technology" field.
preset.config = default_preset.config;
}
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " load preset: " << name << " and filament_id: " << preset.filament_id << " and base_id: " << preset.base_id;
preset.config.apply(std::move(config));
Preset::normalize(preset.config);
// Report configuration fields, which are misplaced into a wrong group.
@@ -1284,9 +1287,10 @@ int PresetCollection::get_differed_values_to_update(Preset& preset, std::mapbase_id.empty())
preset->base_id = parent_preset->setting_id;
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " " << preset->name << " filament_id: " << preset->filament_id << " base_id: " << preset->base_id;
preset->save(&(parent_preset->config));
}
}
@@ -1630,6 +1635,7 @@ bool PresetCollection::load_user_preset(std::string name, std::mapdefault_preset_for(cloud_config);
if (inherit_preset) {
new_config = inherit_preset->config;
+ if (cloud_filament_id == "null") {
+ cloud_filament_id = inherit_preset->filament_id;
+ }
}
else {
// We support custom root preset now
@@ -1688,8 +1697,8 @@ bool PresetCollection::load_user_preset(std::string name, std::mapbase_id = cloud_base_id;
iter->filament_id = cloud_filament_id;
//presets_loaded.emplace_back(*it->second);
- BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(", update the user preset %1% from cloud, type %2%, setting_id %3%, base_id %4%, sync_info %5% inherits %6%")
- % iter->name %Preset::get_type_string(m_type) %iter->setting_id %iter->base_id %iter->sync_info %iter->inherits();
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", update the user preset %1% from cloud, type %2%, setting_id %3%, base_id %4%, sync_info %5% inherits %6%, filament_id %7%")
+ % iter->name %Preset::get_type_string(m_type) %iter->setting_id %iter->base_id %iter->sync_info %iter->inherits() % iter->filament_id;
}
else {
//create a new one
@@ -1708,8 +1717,8 @@ bool PresetCollection::load_user_preset(std::string name, std::map PresetCollection::load_external_preset(
preset.filament_id = parent->filament_id;
}
}
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " " << preset.name << " filament_id: " << preset.filament_id << " base_id: " << preset.base_id;
if (from_project) {
preset.is_project_embedded = true;
}
@@ -2115,6 +2125,7 @@ bool PresetCollection::clone_presets(std::vector const &presets,
auto old_name = this->get_edited_preset().name;
for (auto preset : new_presets) {
preset.alias.clear();
+ preset.base_id.clear();
auto it = this->find_preset_internal(preset.name);
assert((it == m_presets.end() || it->name != preset.name) || force_rewritten);
if (it == m_presets.end() || it->name != preset.name) {
@@ -2130,23 +2141,11 @@ bool PresetCollection::clone_presets(std::vector const &presets,
return true;
}
-bool PresetCollection::clone_presets_for_printer(std::vector const &presets, std::vector &failures, std::string const &printer, bool force_rewritten)
-{
- return clone_presets(presets, failures, [printer](Preset &preset, Preset::Type &type) {
- std::string prefix = preset.name.substr(0, preset.name.find(" @"));
- std::replace(prefix.begin(), prefix.end(), '/', '-');
- preset.name = prefix + " @" + printer;
- //preset.alias = "";
- auto *compatible_printers = dynamic_cast(preset.config.option("compatible_printers"));
- compatible_printers->values = std::vector{ printer };
- }, force_rewritten);
-}
-
-bool PresetCollection::create_presets_from_template_for_printer(std::vector const & templates,
- std::vector & failures,
- std::string const & printer,
- std::function create_filament_id,
- bool force_rewritten)
+bool PresetCollection::clone_presets_for_printer(std::vector const & templates,
+ std::vector & failures,
+ std::string const & printer,
+ std::function create_filament_id,
+ bool force_rewritten)
{
return clone_presets(templates, failures, [printer, create_filament_id](Preset &preset, Preset::Type &type) {
std::string prefix = preset.name.substr(0, preset.name.find(" @"));
@@ -2155,8 +2154,10 @@ bool PresetCollection::create_presets_from_template_for_printer(std::vector(preset.config.option("compatible_printers"));
compatible_printers->values = std::vector{printer};
preset.is_visible = true;
- if (type == Preset::TYPE_FILAMENT)
+ if (type == Preset::TYPE_FILAMENT) {
preset.filament_id = create_filament_id(prefix);
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " " << __LINE__ << preset.name << " create filament_id: " << preset.filament_id;
+ }
}, force_rewritten);
}
@@ -2175,6 +2176,7 @@ bool PresetCollection::clone_presets_for_filament(Preset const *const & pres
preset.config.apply_only(dynamic_config, {"filament_vendor", "compatible_printers", "filament_type"},true);
preset.filament_id = filament_id;
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " " << __LINE__ << preset.name << " is cloned and filament_id: " << filament_id;
}
},
force_rewritten);
@@ -2253,11 +2255,8 @@ void PresetCollection::save_current_preset(const std::string &new_name, bool det
// Clear the link to the parent profile.
inherits.clear();
BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(": save preset %1% , with detach")%new_name;
- } else {
- // Inherited from a user preset. Just maintain the "inherited" flag,
- // meaning it will inherit from either the system preset, or the inherited user preset.
- auto base = get_preset_base(curr_preset);
- inherits = base ? base->name : "";
+ } else if (is_base_preset(preset)) {
+ inherits = old_name;
}
preset.is_default = false;
preset.is_system = false;
@@ -2292,6 +2291,7 @@ void PresetCollection::save_current_preset(const std::string &new_name, bool det
parent_preset = this->find_preset(final_inherits, false, true);
if (parent_preset && this->get_selected_preset().base_id.empty()) {
this->get_selected_preset().base_id = parent_preset->setting_id;
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " base_id: " << parent_preset->setting_id;
}
}
if (parent_preset)
@@ -2556,6 +2556,12 @@ void add_correct_opts_to_diff(const std::string &opt_key, t_config_option_keys&
const T* opt_init = static_cast(other.option(opt_key));
const T* opt_cur = static_cast(this_c.option(opt_key));
int opt_init_max_id = opt_init->values.size() - 1;
+ if (opt_init_max_id < 0) {
+ for (int i = 0; i < int(opt_cur->values.size()); i++)
+ vec.emplace_back(opt_key + "#" + std::to_string(i));
+ return;
+ }
+
for (int i = 0; i < int(opt_cur->values.size()); i++)
{
int init_id = i <= opt_init_max_id ? i : 0;
@@ -2857,7 +2863,7 @@ std::string PresetCollection::path_from_name(const std::string &new_name, bool d
std::string PresetCollection::path_for_preset(const Preset &preset) const
{
- return path_from_name(preset.name, get_preset_base(preset) == &preset);
+ return path_from_name(preset.name, is_base_preset(preset));
}
const Preset& PrinterPresetCollection::default_preset_for(const DynamicPrintConfig &config) const
diff --git a/src/libslic3r/Preset.hpp b/src/libslic3r/Preset.hpp
index 15dd3d579c6..ba9af12c3c0 100644
--- a/src/libslic3r/Preset.hpp
+++ b/src/libslic3r/Preset.hpp
@@ -5,6 +5,7 @@
#include
#include
#include
+#include
#include
#include
@@ -457,8 +458,7 @@ class PresetCollection
Preset& load_preset(const std::string &path, const std::string &name, DynamicPrintConfig &&config, bool select = true, Semver file_version = Semver(), bool is_custom_defined = false);
bool clone_presets(std::vector const &presets, std::vector &failures, std::function modifier, bool force_rewritten = false);
- bool clone_presets_for_printer(std::vector const &presets, std::vector &failures, std::string const &printer, bool force_rewritten = false);
- bool create_presets_from_template_for_printer(
+ bool clone_presets_for_printer(
std::vector const &templates, std::vector &failures, std::string const &printer, std::function create_filament_id, bool force_rewritten = false);
bool clone_presets_for_filament(Preset const *const & preset,
std::vector &failures,
@@ -673,6 +673,7 @@ class PresetCollection
// Without force, the selection is only updated if the index changes.
// With force, the changes are reverted if the new index is the same as the old index.
bool select_preset_by_name(const std::string &name, bool force);
+ bool is_base_preset(const Preset &preset) const { return preset.is_system || (preset.is_user() && preset.inherits().empty()); }
// Generate a file path from a profile name. Add the ".ini" suffix if it is missing.
std::string path_from_name(const std::string &new_name, bool detach = false) const;
diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp
index 152e676894a..3f86a568e56 100644
--- a/src/libslic3r/PresetBundle.cpp
+++ b/src/libslic3r/PresetBundle.cpp
@@ -611,6 +611,7 @@ PresetsConfigSubstitutions PresetBundle::load_user_presets(AppConfig &
std::map::iterator inherits_iter = value_map.find(BBL_JSON_KEY_INHERITS);
if ((pass == 1) == (inherits_iter == value_map.end() || inherits_iter->second.empty()))
continue;
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " start load from cloud: " << name;
//get the type first
std::map::iterator type_iter = value_map.find(BBL_JSON_KEY_TYPE);
if (type_iter == value_map.end()) {
@@ -825,6 +826,7 @@ bool PresetBundle::import_json_presets(PresetsConfigSubstitutions & s
preset.version = *version;
inherit_preset = collection->find_preset(inherits_value, false, true); // pointer maybe wrong after insert, redo find
if (inherit_preset) preset.base_id = inherit_preset->setting_id;
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " " << __LINE__ << preset.name << " have filament_id: " << preset.filament_id << " and base_id: " << preset.base_id;
Preset::normalize(preset.config);
// Report configuration fields, which are misplaced into a wrong group.
const Preset &default_preset = collection->default_preset_for(new_config);
@@ -1819,6 +1821,7 @@ void PresetBundle::set_num_filaments(unsigned int n, std::string new_color)
ConfigOptionStrings* filament_color = project_config.option("filament_colour");
filament_color->resize(n);
+ ams_multi_color_filment.resize(n);
//BBS set new filament color to new_color
if (old_filament_count < n) {
@@ -1836,15 +1839,18 @@ unsigned int PresetBundle::sync_ams_list(unsigned int &unknowns)
{
std::vector filament_presets;
std::vector filament_colors;
+ ams_multi_color_filment.clear();
for (auto &entry : filament_ams_list) {
auto & ams = entry.second;
auto filament_id = ams.opt_string("filament_id", 0u);
auto filament_color = ams.opt_string("filament_colour", 0u);
auto filament_changed = !ams.has("filament_changed") || ams.opt_bool("filament_changed");
+ auto filament_multi_color = ams.opt("filament_multi_colors")->values;
if (filament_id.empty()) continue;
if (!filament_changed && this->filament_presets.size() > filament_presets.size()) {
filament_presets.push_back(this->filament_presets[filament_presets.size()]);
filament_colors.push_back(filament_color);
+ ams_multi_color_filment.push_back(filament_multi_color);
continue;
}
auto iter = std::find_if(filaments.begin(), filaments.end(), [this, &filament_id](auto &f) {
@@ -1859,17 +1865,27 @@ unsigned int PresetBundle::sync_ams_list(unsigned int &unknowns)
&& boost::algorithm::starts_with(f.name, filament_type);
});
}
- if (iter == filaments.end())
+ if (iter == filaments.end()) {
+ // Prefer old selection
+ if (filament_presets.size() < this->filament_presets.size()) {
+ filament_presets.push_back(this->filament_presets[filament_presets.size()]);
+ filament_colors.push_back(filament_color);
+ ams_multi_color_filment.push_back(filament_multi_color);
+ ++unknowns;
+ continue;
+ }
iter = std::find_if(filaments.begin(), filaments.end(), [&filament_type](auto &f) {
return f.is_compatible && f.is_system;
});
- if (iter == filaments.end())
- continue;
+ if (iter == filaments.end())
+ continue;
+ }
++unknowns;
filament_id = iter->filament_id;
}
filament_presets.push_back(iter->name);
filament_colors.push_back(filament_color);
+ ams_multi_color_filment.push_back(filament_multi_color);
}
if (filament_presets.empty())
return 0;
@@ -3453,6 +3469,7 @@ std::pair PresetBundle::load_vendor_configs_
loaded.version = current_vendor_profile->config_version;
loaded.setting_id = setting_id;
loaded.filament_id = filament_id;
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " " << __LINE__ << loaded.name << " load filament_id: " << filament_id;
if (presets_collection->type() == Preset::TYPE_FILAMENT) {
if (filament_id.empty() && "Template" != vendor_name) {
BOOST_LOG_TRIVIAL(error) << __FUNCTION__<< ": can not find filament_id for " << preset_name;
diff --git a/src/libslic3r/PresetBundle.hpp b/src/libslic3r/PresetBundle.hpp
index 0050561286d..f9167cb4c81 100644
--- a/src/libslic3r/PresetBundle.hpp
+++ b/src/libslic3r/PresetBundle.hpp
@@ -134,6 +134,7 @@ class PresetBundle
std::vector filament_presets;
// BBS: ams
std::map filament_ams_list;
+ std::vector> ams_multi_color_filment;
// Calibrate
Preset const * calibrate_printer = nullptr;
std::set calibrate_filaments;
diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp
index 67e2072e076..9843e1e83c8 100644
--- a/src/libslic3r/PrintConfig.cpp
+++ b/src/libslic3r/PrintConfig.cpp
@@ -6597,6 +6597,18 @@ CLIMiscConfigDef::CLIMiscConfigDef()
def->tooltip = "Skip the modified gcodes in 3mf from Printer or filament Presets";
def->cli_params = "option";
def->set_default_value(new ConfigOptionBool(false));
+
+ def = this->add("makerlab_name", coString);
+ def->label = "MakerLab name";
+ def->tooltip = "MakerLab name to generate this 3mf";
+ def->cli_params = "name";
+ def->set_default_value(new ConfigOptionString());
+
+ def = this->add("makerlab_version", coString);
+ def->label = "MakerLab version";
+ def->tooltip = "MakerLab version to generate this 3mf";
+ def->cli_params = "version";
+ def->set_default_value(new ConfigOptionString());
}
const CLIActionsConfigDef cli_actions_config_def;
diff --git a/src/libslic3r/Utils.hpp b/src/libslic3r/Utils.hpp
index 3fd171528ee..0c7426a0ad0 100644
--- a/src/libslic3r/Utils.hpp
+++ b/src/libslic3r/Utils.hpp
@@ -6,6 +6,7 @@
#ifndef slic3r_Utils_hpp_
#define slic3r_Utils_hpp_
+#include
#include
#include
#include
diff --git a/src/platform/osx/Info.plist.in b/src/platform/osx/Info.plist.in
index 4e12fe46566..e58a3d06819 100644
--- a/src/platform/osx/Info.plist.in
+++ b/src/platform/osx/Info.plist.in
@@ -7,7 +7,7 @@
CFBundleGetInfoString
@SLIC3R_APP_NAME@ Copyright(C) 2021-2023 Lunkuo All Rights Reserved
CFBundleIconFile
- OrcaSlicer.icns
+ images/OrcaSlicer.icns
CFBundleName
@SLIC3R_APP_KEY@
CFBundleShortVersionString
@@ -22,6 +22,17 @@
????
CFBundleVersion
@SLIC3R_BUILD_ID@
+ CFBundleURLTypes
+
+
+ CFBundleURLName
+ orcasliceropen url
+ CFBundleURLSchemes
+
+ orcasliceropen
+
+
+
CFBundleDocumentTypes
@@ -31,7 +42,7 @@
STL
CFBundleTypeIconFile
- stl.icns
+ images/stl.icns
CFBundleTypeName
STL
CFBundleTypeRole
@@ -48,7 +59,7 @@
OBJ
CFBundleTypeIconFile
- OrcaSlicer.icns
+ images/OrcaSlicer.icns
CFBundleTypeName
STL
CFBundleTypeRole
@@ -65,7 +76,7 @@
AMF
CFBundleTypeIconFile
- OrcaSlicer.icns
+ images/OrcaSlicer.icns
CFBundleTypeName
AMF
CFBundleTypeRole
@@ -82,7 +93,7 @@
3MF
CFBundleTypeIconFile
- OrcaSlicer.icns
+ images/OrcaSlicer.icns
CFBundleTypeName
3MF
CFBundleTypeRole
@@ -99,7 +110,7 @@
GCODE
CFBundleTypeIconFile
- gcode.icns
+ images/gcode.icns
CFBundleTypeName
GCODE
CFBundleTypeRole
diff --git a/src/platform/unix/OrcaSlicer.desktop b/src/platform/unix/OrcaSlicer.desktop
index ac44f8ba081..9a46c4f24f1 100644
--- a/src/platform/unix/OrcaSlicer.desktop
+++ b/src/platform/unix/OrcaSlicer.desktop
@@ -2,7 +2,7 @@
Name=OrcaSlicer
GenericName=3D Printing Software
Icon=OrcaSlicer
-Exec=orca-slicer %F
+Exec=orca-slicer %U
Terminal=false
Type=Application
MimeType=model/stl;model/3mf;application/vnd.ms-3mfdocument;application/prs.wavefront-obj;application/x-amf;
diff --git a/src/slic3r/GUI/AMSMaterialsSetting.cpp b/src/slic3r/GUI/AMSMaterialsSetting.cpp
index 6e89a04d46b..8e11493b38d 100644
--- a/src/slic3r/GUI/AMSMaterialsSetting.cpp
+++ b/src/slic3r/GUI/AMSMaterialsSetting.cpp
@@ -671,6 +671,10 @@ void AMSMaterialsSetting::set_colors(std::vector colors)
m_clr_picker->set_colors(colors);
}
+void AMSMaterialsSetting::set_ctype(int ctype)
+{
+ m_clr_picker->ctype = ctype;
+}
void AMSMaterialsSetting::on_picker_color(wxCommandEvent& event)
{
@@ -1107,6 +1111,8 @@ ColorPicker::ColorPicker(wxWindow* parent, wxWindowID id, const wxPoint& pos /*=
Bind(wxEVT_PAINT, &ColorPicker::paintEvent, this);
m_bitmap_border = create_scaled_bitmap("color_picker_border", nullptr, 25);
+ m_bitmap_border_dark = create_scaled_bitmap("color_picker_border_dark", nullptr, 25);
+ m_bitmap_transparent_def = create_scaled_bitmap("transparent_color_picker", nullptr, 25);
m_bitmap_transparent = create_scaled_bitmap("transparent_color_picker", nullptr, 25);
}
@@ -1115,11 +1121,16 @@ ColorPicker::~ColorPicker(){}
void ColorPicker::msw_rescale()
{
m_bitmap_border = create_scaled_bitmap("color_picker_border", nullptr, 25);
+ m_bitmap_border_dark = create_scaled_bitmap("color_picker_border_dark", nullptr, 25);
+
Refresh();
}
void ColorPicker::set_color(wxColour col)
{
+ if (m_colour != col && col.Alpha() != 0 && col.Alpha() != 255 && col.Alpha() != 254) {
+ transparent_changed = true;
+ }
m_colour = col;
Refresh();
}
@@ -1161,11 +1172,27 @@ void ColorPicker::doRender(wxDC& dc)
{
wxSize size = GetSize();
auto alpha = m_colour.Alpha();
-
auto radius = m_show_full ? size.x / 2 - FromDIP(1) : size.x / 2;
if (m_selected) radius -= FromDIP(1);
if (alpha == 0) {
+ dc.DrawBitmap(m_bitmap_transparent_def, 0, 0);
+ }
+ else if (alpha != 254 && alpha != 255) {
+ if (transparent_changed) {
+ std::string rgb = (m_colour.GetAsString(wxC2S_HTML_SYNTAX)).ToStdString();
+ if (rgb.size() == 9) {
+ //delete alpha value
+ rgb = rgb.substr(0, rgb.size() - 2);
+ }
+ float alpha_f = 0.7 * m_colour.Alpha() / 255.0;
+ std::vector replace;
+ replace.push_back(rgb);
+ std::string fill_replace = "fill-opacity=\"" + std::to_string(alpha_f);
+ replace.push_back(fill_replace);
+ m_bitmap_transparent = ScalableBitmap(this, "transparent_color_picker", 25, false, false, true, replace).bmp();
+ transparent_changed = false;
+ }
dc.DrawBitmap(m_bitmap_transparent, 0, 0);
}
else {
@@ -1185,27 +1212,50 @@ void ColorPicker::doRender(wxDC& dc)
dc.SetBrush(*wxTRANSPARENT_BRUSH);
dc.DrawCircle(size.x / 2, size.y / 2, radius);
- //transparent
- if (alpha == 0) {
- dc.DrawBitmap(m_bitmap_transparent, 0, 0);
- }
-
if (m_cols.size() > 1) {
- int left = FromDIP(0);
- float total_width = size.x;
- int gwidth = std::round(total_width / (m_cols.size() - 1));
+ if (ctype == 0) {
+ int left = FromDIP(0);
+ float total_width = size.x;
+ int gwidth = std::round(total_width / (m_cols.size() - 1));
- for (int i = 0; i < m_cols.size() - 1; i++) {
+ for (int i = 0; i < m_cols.size() - 1; i++) {
- if ((left + gwidth) > (size.x)) {
- gwidth = size.x - left;
- }
+ if ((left + gwidth) > (size.x)) {
+ gwidth = size.x - left;
+ }
- auto rect = wxRect(left, 0, gwidth, size.y);
- dc.GradientFillLinear(rect, m_cols[i], m_cols[i + 1], wxEAST);
- left += gwidth;
+ auto rect = wxRect(left, 0, gwidth, size.y);
+ dc.GradientFillLinear(rect, m_cols[i], m_cols[i + 1], wxEAST);
+ left += gwidth;
+ }
+ if (wxGetApp().dark_mode()) {
+ dc.DrawBitmap(m_bitmap_border_dark, wxPoint(0, 0));
+ }
+ else {
+ dc.DrawBitmap(m_bitmap_border, wxPoint(0, 0));
+ }
+ }
+ else {
+ float ev_angle = 360.0 / m_cols.size();
+ float startAngle = 270.0;
+ float endAngle = 270.0;
+ dc.SetPen(*wxTRANSPARENT_PEN);
+ for (int i = 0; i < m_cols.size(); i++) {
+ dc.SetBrush(m_cols[i]);
+ endAngle += ev_angle;
+ endAngle = endAngle > 360.0 ? endAngle - 360.0 : endAngle;
+ wxPoint center(size.x / 2, size.y / 2);
+ dc.DrawEllipticArc(center.x - radius, center.y - radius, 2 * radius, 2 * radius, startAngle, endAngle);
+ startAngle += ev_angle;
+ startAngle = startAngle > 360.0 ? startAngle - 360.0 : startAngle;
+ }
+ if (wxGetApp().dark_mode()) {
+ dc.DrawBitmap(m_bitmap_border_dark, wxPoint(0, 0));
+ }
+ else {
+ dc.DrawBitmap(m_bitmap_border, wxPoint(0, 0));
+ }
}
- dc.DrawBitmap(m_bitmap_border, wxPoint(0, 0));
}
}
diff --git a/src/slic3r/GUI/AMSMaterialsSetting.hpp b/src/slic3r/GUI/AMSMaterialsSetting.hpp
index 847bc834038..06519886395 100644
--- a/src/slic3r/GUI/AMSMaterialsSetting.hpp
+++ b/src/slic3r/GUI/AMSMaterialsSetting.hpp
@@ -33,13 +33,18 @@ class ColorPicker : public wxWindow
{
public:
wxBitmap m_bitmap_border;
+ wxBitmap m_bitmap_border_dark;
wxBitmap m_bitmap_transparent;
+ wxBitmap m_bitmap_transparent_def; //default transparent material
wxColour m_colour;
std::vector m_cols;
bool m_selected{false};
bool m_show_full{false};
bool m_is_empty{false};
+ int ctype;
+
+ bool transparent_changed{false};
ColorPicker(wxWindow* parent, wxWindowID id, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize);
~ColorPicker();
@@ -108,6 +113,7 @@ class AMSMaterialsSetting : public DPIDialog
void set_color(wxColour color);
void set_empty_color(wxColour color);
void set_colors(std::vector colors);
+ void set_ctype(int ctype);
void on_picker_color(wxCommandEvent& color);
MachineObject* obj{ nullptr };
diff --git a/src/slic3r/GUI/BindDialog.cpp b/src/slic3r/GUI/BindDialog.cpp
index dd4e826ecb8..3c97fdf3d1a 100644
--- a/src/slic3r/GUI/BindDialog.cpp
+++ b/src/slic3r/GUI/BindDialog.cpp
@@ -573,7 +573,7 @@ wxString get_fail_reason(int code)
agent->track_update_property("dev_ota_version", m_machine_info->get_ota_version());
m_simplebook->SetSelection(0);
- auto m_bind_job = std::make_unique(m_machine_info->dev_id, m_machine_info->dev_ip, m_machine_info->bind_sec_link);
+ auto m_bind_job = std::make_unique(m_machine_info->dev_id, m_machine_info->dev_ip, m_machine_info->bind_sec_link, m_machine_info->bind_ssdp_version);
if (m_machine_info && (m_machine_info->get_printer_series() == PrinterSeries::SERIES_X1)) {
m_bind_job->set_improved(false);
diff --git a/src/slic3r/GUI/BitmapCache.cpp b/src/slic3r/GUI/BitmapCache.cpp
index 080a0f7db60..318160f11f4 100644
--- a/src/slic3r/GUI/BitmapCache.cpp
+++ b/src/slic3r/GUI/BitmapCache.cpp
@@ -387,6 +387,78 @@ replaces["\"#009688\""] = "\"#00675b\"";
return this->insert_raw_rgba(bitmap_key, width, height, data.data(), grayscale);
}
+wxBitmap* BitmapCache::load_svg2(const std::string& bitmap_name, unsigned target_width, unsigned target_height,
+ const bool grayscale/* = false*/, const bool dark_mode/* = false*/, const std::vector& array_new_color /*= vector()*/, const float scale_in_center/* = 0*/)
+{
+
+ std::map replaces;
+ if (array_new_color.size() == 2) {
+ replaces["#D9D9D9"] = array_new_color[0];
+ replaces["fill-opacity=\"1.0"] = array_new_color[1];
+ }
+
+
+ NSVGimage* image = nullptr;
+ image = nsvgParseFromFileWithReplace(Slic3r::var(bitmap_name + ".svg").c_str(), "px", 96.0f, replaces);
+
+ if (image == nullptr)
+ return nullptr;
+
+ if (target_height == 0 && target_width == 0)
+ target_height = image->height;
+
+ target_height != 0 ? target_height *= m_scale : target_width *= m_scale;
+
+ float svg_scale = target_height != 0 ?
+ (float)target_height / image->height : target_width != 0 ?
+ (float)target_width / image->width : 1;
+
+ int width = (int)(svg_scale * image->width + 0.5f);
+ int height = (int)(svg_scale * image->height + 0.5f);
+ int n_pixels = width * height;
+ if (n_pixels <= 0) {
+ ::nsvgDelete(image);
+ return nullptr;
+ }
+
+ NSVGrasterizer* rast = ::nsvgCreateRasterizer();
+ if (rast == nullptr) {
+ ::nsvgDelete(image);
+ return nullptr;
+ }
+
+ std::vector data(n_pixels * 4, 0);
+ // BBS: support resize by fill border
+ if (scale_in_center > 0 && scale_in_center < svg_scale) {
+ int w = (int)(image->width * scale_in_center);
+ int h = (int)(image->height * scale_in_center);
+ ::nsvgRasterize(rast, image, 0, 0, scale_in_center, data.data() + int(height - h) / 2 * width * 4 + int(width - w) / 2 * 4, w, h, width * 4);
+ }
+ else
+ ::nsvgRasterize(rast, image, 0, 0, svg_scale, data.data(), width, height, width * 4);
+ ::nsvgDeleteRasterizer(rast);
+ ::nsvgDelete(image);
+
+ const unsigned char * raw_data = data.data();
+ wxImage wx_image(width, height);
+ wx_image.InitAlpha();
+ unsigned char* rgb = wx_image.GetData();
+ unsigned char* alpha = wx_image.GetAlpha();
+ unsigned int pixels = width * height;
+ for (unsigned int i = 0; i < pixels; ++i) {
+ *rgb++ = *raw_data++;
+ *rgb++ = *raw_data++;
+ *rgb++ = *raw_data++;
+ *alpha++ = *raw_data++;
+ }
+
+ if (grayscale)
+ wx_image = wx_image.ConvertToGreyscale(m_gs, m_gs, m_gs);
+ auto result = new wxBitmap(wxImage_to_wxBitmap_with_alpha(std::move(wx_image), m_scale));
+ return result;
+
+}
+
//we make scaled solid bitmaps only for the cases, when its will be used with scaled SVG icon in one output bitmap
wxBitmap BitmapCache::mksolid(size_t width, size_t height, unsigned char r, unsigned char g, unsigned char b, unsigned char transparency, bool suppress_scaling/* = false*/, size_t border_width /*= 0*/, bool dark_mode/* = false*/)
{
diff --git a/src/slic3r/GUI/BitmapCache.hpp b/src/slic3r/GUI/BitmapCache.hpp
index ab9e4572406..dd8ef5a4509 100644
--- a/src/slic3r/GUI/BitmapCache.hpp
+++ b/src/slic3r/GUI/BitmapCache.hpp
@@ -43,6 +43,8 @@ class BitmapCache
static NSVGimage* nsvgParseFromFileWithReplace(const char* filename, const char* units, float dpi, const std::map& replaces);
// Load svg from resources/icons. bitmap_key is given without the .svg suffix. SVG will be rasterized to provided height/width.
wxBitmap* load_svg(const std::string &bitmap_key, unsigned width = 0, unsigned height = 0, const bool grayscale = false, const bool dark_mode = false, const std::string& new_color = "", const float scale_in_center = 0.f);
+ //Load background image of semi transparent material with color,
+ wxBitmap* load_svg2(const std::string &bitmap_key, unsigned width = 0, unsigned height = 0, const bool grayscale = false, const bool dark_mode = false, const std::vector& array_new_color = std::vector(), const float scale_in_center = 0.0f);
wxBitmap mksolid(size_t width, size_t height, unsigned char r, unsigned char g, unsigned char b, unsigned char transparency, bool suppress_scaling = false, size_t border_width = 0, bool dark_mode = false);
wxBitmap mksolid(size_t width, size_t height, const unsigned char rgb[3], bool suppress_scaling = false, size_t border_width = 0, bool dark_mode = false) { return mksolid(width, height, rgb[0], rgb[1], rgb[2], wxALPHA_OPAQUE, suppress_scaling, border_width, dark_mode); }
diff --git a/src/slic3r/GUI/CalibrationWizardPresetPage.cpp b/src/slic3r/GUI/CalibrationWizardPresetPage.cpp
index 83f385365cc..b428110c75a 100644
--- a/src/slic3r/GUI/CalibrationWizardPresetPage.cpp
+++ b/src/slic3r/GUI/CalibrationWizardPresetPage.cpp
@@ -1790,7 +1790,10 @@ Preset* CalibrationPresetPage::get_printer_preset(MachineObject* obj, float nozz
if (printer_nozzle_opt)
printer_nozzle_vals = dynamic_cast(printer_nozzle_opt);
std::string model_id = printer_it->get_current_printer_type(preset_bundle);
- if (model_id.compare(obj->printer_type) == 0
+
+ std::string printer_type = obj->printer_type;
+ if (obj->is_support_p1s_plus) { printer_type = "C12"; }
+ if (model_id.compare(printer_type) == 0
&& printer_nozzle_vals
&& abs(printer_nozzle_vals->get_at(0) - nozzle_value) < 1e-3) {
printer_preset = &(*printer_it);
diff --git a/src/slic3r/GUI/CalibrationWizardSavePage.cpp b/src/slic3r/GUI/CalibrationWizardSavePage.cpp
index 2c8f6c6461a..77637bc10d9 100644
--- a/src/slic3r/GUI/CalibrationWizardSavePage.cpp
+++ b/src/slic3r/GUI/CalibrationWizardSavePage.cpp
@@ -261,11 +261,9 @@ void CaliPASaveAutoPanel::sync_cali_result(const std::vector& cal
static std::vector filtered_results;
filtered_results.clear();
for (auto history : history_result) {
- for (auto& info : m_obj->selected_cali_preset) {
- if (history.filament_id == info.filament_id) {
- filtered_results.push_back(history);
- selections.push_back(from_u8(history.name));
- }
+ if (history.filament_id == item.filament_id) {
+ filtered_results.push_back(history);
+ selections.push_back(from_u8(history.name));
}
}
comboBox_tray_name->Set(selections);
diff --git a/src/slic3r/GUI/CreatePresetsDialog.cpp b/src/slic3r/GUI/CreatePresetsDialog.cpp
index 9b7fdee95e4..628af9deb7d 100644
--- a/src/slic3r/GUI/CreatePresetsDialog.cpp
+++ b/src/slic3r/GUI/CreatePresetsDialog.cpp
@@ -420,7 +420,7 @@ static std::string get_filament_id(std::string vendor_typr_serial)
continue;
}
std::string filament_name = preset_name.substr(0, index_at - 1);
- if (filament_name == vendor_typr_serial)
+ if (filament_name == vendor_typr_serial && preset.filament_id != "null")
return preset.filament_id;
filament_id_to_filament_name[preset.filament_id].insert(filament_name);
}
@@ -437,7 +437,7 @@ static std::string get_filament_id(std::string vendor_typr_serial)
continue;
}
std::string filament_name = preset_name.substr(0, index_at - 1);
- if (filament_name == vendor_typr_serial)
+ if (filament_name == vendor_typr_serial && preset->filament_id != "null")
return preset->filament_id;
filament_id_to_filament_name[preset->filament_id].insert(filament_name);
}
@@ -460,7 +460,7 @@ static std::string get_filament_id(std::string vendor_typr_serial)
user_filament_id = "P" + calculate_md5(vendor_typr_serial + get_curr_time()).substr(0, 7);
}
}
- BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " filament name is: " << vendor_typr_serial << "and create filament id is: " << user_filament_id;
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " filament name is: " << vendor_typr_serial << "and create filament_id is: " << user_filament_id;
return user_filament_id;
}
@@ -864,7 +864,7 @@ wxBoxSizer *CreateFilamentPresetDialog::create_filament_preset_item()
}
}
} else {
- BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " not find filament id corresponding to the type: and the type is" << filament_type;
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " not find filament_id corresponding to the type: and the type is" << filament_type;
}
sort_printer_by_nozzle(printer_name_to_filament_preset);
for (std::pair printer_to_preset : printer_name_to_filament_preset)
@@ -1105,7 +1105,8 @@ wxArrayString CreateFilamentPresetDialog::get_filament_preset_choices()
Preset *preset = filament_presets.second;
auto inherit = preset->config.option("inherits");
if (inherit && !inherit->value.empty()) continue;
- if (std::string::npos == filament_presets.first.find(type_name)) continue;
+ auto fila_type = preset->config.option("filament_type");
+ if (!fila_type || fila_type->values.empty() || system_filament_types_map[type_name] != fila_type->values[0]) continue;
m_filament_choice_map[preset->filament_id].push_back(preset);
}
@@ -1115,7 +1116,7 @@ wxArrayString CreateFilamentPresetDialog::get_filament_preset_choices()
std::set preset_name_set;
for (Preset* filament_preset : preset.second) {
std::string preset_name = filament_preset->name;
- BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " filament id: " << filament_preset->filament_id << " preset name: " << filament_preset->name;
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " filament_id: " << filament_preset->filament_id << " preset name: " << filament_preset->name;
size_t index_at = preset_name.find("@");
if (std::string::npos != index_at) {
std::string cur_preset_name = preset_name.substr(0, index_at - 1);
@@ -2645,7 +2646,7 @@ wxBoxSizer *CreatePrinterPresetDialog::create_page2_btns_item(wxWindow *parent)
/****************************** clone filament preset ********************************/
std::vector failures;
if (!selected_filament_presets.empty()) {
- bool create_preset_result = preset_bundle->filaments.create_presets_from_template_for_printer(selected_filament_presets, failures, printer_preset_name, get_filament_id, rewritten);
+ bool create_preset_result = preset_bundle->filaments.clone_presets_for_printer(selected_filament_presets, failures, printer_preset_name, get_filament_id, rewritten);
if (!create_preset_result) {
std::string message;
for (const std::string &failure : failures) { message += "\t" + failure + "\n"; }
@@ -2654,7 +2655,7 @@ wxBoxSizer *CreatePrinterPresetDialog::create_page2_btns_item(wxWindow *parent)
wxYES | wxYES_DEFAULT | wxCENTRE);
int res = dlg.ShowModal();
if (wxID_YES == res) {
- create_preset_result = preset_bundle->filaments.create_presets_from_template_for_printer(selected_filament_presets, failures, printer_preset_name,
+ create_preset_result = preset_bundle->filaments.clone_presets_for_printer(selected_filament_presets, failures, printer_preset_name,
get_filament_id, true);
} else {
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " printer preset no same preset but filament has same preset, user cancel create the printer preset";
@@ -2670,7 +2671,7 @@ wxBoxSizer *CreatePrinterPresetDialog::create_page2_btns_item(wxWindow *parent)
failures.clear();
if (!selected_process_presets.empty()) {
generate_process_presets_data(selected_process_presets, printer_nozzle_name);
- bool create_preset_result = preset_bundle->prints.create_presets_from_template_for_printer(selected_process_presets, failures, printer_preset_name,
+ bool create_preset_result = preset_bundle->prints.clone_presets_for_printer(selected_process_presets, failures, printer_preset_name,
get_filament_id, rewritten);
if (!create_preset_result) {
std::string message;
@@ -2680,7 +2681,7 @@ wxBoxSizer *CreatePrinterPresetDialog::create_page2_btns_item(wxWindow *parent)
wxYES | wxYES_DEFAULT | wxCENTRE);
int res = dlg.ShowModal();
if (wxID_YES == res) {
- create_preset_result = preset_bundle->prints.create_presets_from_template_for_printer(selected_process_presets, failures, printer_preset_name, get_filament_id, true);
+ create_preset_result = preset_bundle->prints.clone_presets_for_printer(selected_process_presets, failures, printer_preset_name, get_filament_id, true);
} else {
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " printer preset no same preset but process has same preset, user cancel create the printer preset";
return;
@@ -2692,7 +2693,7 @@ wxBoxSizer *CreatePrinterPresetDialog::create_page2_btns_item(wxWindow *parent)
/****************************** clone filament preset ********************************/
std::vector failures;
if (!selected_filament_presets.empty()) {
- bool create_preset_result = preset_bundle->filaments.clone_presets_for_printer(selected_filament_presets, failures, printer_preset_name, rewritten);
+ bool create_preset_result = preset_bundle->filaments.clone_presets_for_printer(selected_filament_presets, failures, printer_preset_name, get_filament_id, rewritten);
if (!create_preset_result) {
std::string message;
for (const std::string& failure : failures) {
@@ -2703,7 +2704,7 @@ wxBoxSizer *CreatePrinterPresetDialog::create_page2_btns_item(wxWindow *parent)
wxYES | wxYES_DEFAULT | wxCENTRE);
int res = dlg.ShowModal();
if (wxID_YES == res) {
- create_preset_result = preset_bundle->filaments.clone_presets_for_printer(selected_filament_presets, failures, printer_preset_name, true);
+ create_preset_result = preset_bundle->filaments.clone_presets_for_printer(selected_filament_presets, failures, printer_preset_name, get_filament_id, true);
} else {
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " printer preset no same preset but filament has same preset, user cancel create the printer preset";
return;
@@ -2714,7 +2715,7 @@ wxBoxSizer *CreatePrinterPresetDialog::create_page2_btns_item(wxWindow *parent)
/****************************** clone process preset ********************************/
failures.clear();
if (!selected_process_presets.empty()) {
- bool create_preset_result = preset_bundle->prints.clone_presets_for_printer(selected_process_presets, failures, printer_preset_name, rewritten);
+ bool create_preset_result = preset_bundle->prints.clone_presets_for_printer(selected_process_presets, failures, printer_preset_name, get_filament_id, rewritten);
if (!create_preset_result) {
std::string message;
for (const std::string& failure : failures) {
@@ -2723,7 +2724,7 @@ wxBoxSizer *CreatePrinterPresetDialog::create_page2_btns_item(wxWindow *parent)
MessageDialog dlg(this, _L("Create process presets failed. As follows:\n") + from_u8(message) + _L("\nDo you want to rewrite it?"), wxString(SLIC3R_APP_FULL_NAME) + " - " + _L("Info"), wxYES | wxYES_DEFAULT | wxCENTRE);
int res = dlg.ShowModal();
if (wxID_YES == res) {
- create_preset_result = preset_bundle->prints.clone_presets_for_printer(selected_process_presets, failures, printer_preset_name, true);
+ create_preset_result = preset_bundle->prints.clone_presets_for_printer(selected_process_presets, failures, printer_preset_name, get_filament_id, true);
} else {
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " printer preset no same preset but filament has same preset, user cancel create the printer preset";
return;
@@ -4397,25 +4398,9 @@ void EditFilamentPresetDialog::edit_preset()
}
// edit preset
- std::shared_ptr need_edit_preset = filament_presets[m_need_edit_preset_index];
- std::string need_edit_preset_name = need_edit_preset->name;
- Tab * tab = wxGetApp().get_tab(need_edit_preset->type);
- if (tab == nullptr) {
- m_selected_printer.clear();
- m_need_edit_preset_index = -1;
- return;
- }
-
- tab->restore_last_select_item();
-
- wxGetApp().get_tab(need_edit_preset->type)->select_preset(need_edit_preset_name);
- // when some preset have modified, if the printer is not need_edit_preset_name compatible printer, the preset will jump to other preset, need select again
- if (!need_edit_preset->is_compatible) wxGetApp().get_tab(need_edit_preset->type)->select_preset(need_edit_preset_name);
-
- m_selected_printer.clear();
- m_need_edit_preset_index = -1;
-
+ m_need_edit_preset = filament_presets[m_need_edit_preset_index];
wxGetApp().params_dialog()->set_editing_filament_id(m_filament_id);
+
EndModal(wxID_EDIT);
}
@@ -4882,6 +4867,14 @@ wxPanel *PresetTree::get_child_item(wxPanel *parent, std::shared_ptr pre
preset_name->SetFont(Label::Body_10);
preset_name->SetForegroundColour(*wxBLACK);
sizer->Add(preset_name, 0, wxEXPAND | wxALL, 5);
+ bool base_id_error = false;
+ if (preset->inherits() == "" && preset->base_id != "") base_id_error = true;
+ if (base_id_error) {
+ std::string wiki_url = "https://wiki.bambulab.com/en/software/bambu-studio/custom-filament-issue";
+ wxHyperlinkCtrl *m_download_hyperlink = new wxHyperlinkCtrl(panel, wxID_ANY, _L("[Delete Required]"), wiki_url, wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE);
+ m_download_hyperlink->SetFont(Label::Body_10);
+ sizer->Add(m_download_hyperlink, 0, wxEXPAND | wxALL, 5);
+ }
sizer->Add(0, 0, 1, wxEXPAND, 0);
StateColor flush_bg_col(std::pair(wxColour(219, 253, 231), StateColor::Pressed), std::pair(wxColour(238, 238, 238), StateColor::Hovered),
@@ -4893,6 +4886,9 @@ wxPanel *PresetTree::get_child_item(wxPanel *parent, std::shared_ptr pre
StateColor flush_bd_col(std::pair(wxColour(0, 150, 136), StateColor::Pressed), std::pair(wxColour(0, 150, 136), StateColor::Hovered),
std::pair(wxColour(172, 172, 172), StateColor::Normal));
+ StateColor btn_bg_green(std::pair(wxColour(0, 137, 123), StateColor::Pressed), std::pair(wxColour(38, 166, 154), StateColor::Hovered),
+ std::pair(wxColour(0, 150, 136), StateColor::Normal));
+
Button *edit_preset_btn = new Button(panel, _L("Edit Preset"));
edit_preset_btn->SetFont(Label::Body_10);
edit_preset_btn->SetPaddingSize(wxSize(8, 3));
@@ -4908,9 +4904,16 @@ wxPanel *PresetTree::get_child_item(wxPanel *parent, std::shared_ptr pre
del_preset_btn->SetFont(Label::Body_10);
del_preset_btn->SetPaddingSize(wxSize(8, 3));
del_preset_btn->SetCornerRadius(8);
- del_preset_btn->SetBackgroundColor(flush_bg_col);
- del_preset_btn->SetBorderColor(flush_bd_col);
- del_preset_btn->SetTextColor(flush_fg_col);
+ if (base_id_error) {
+ del_preset_btn->SetBackgroundColor(btn_bg_green);
+ del_preset_btn->SetBorderColor(btn_bg_green);
+ del_preset_btn->SetTextColor(wxColour(0xFFFFFE));
+ } else {
+ del_preset_btn->SetBackgroundColor(flush_bg_col);
+ del_preset_btn->SetBorderColor(flush_bd_col);
+ del_preset_btn->SetTextColor(flush_fg_col);
+ }
+
//del_preset_btn->Hide();
sizer->Add(del_preset_btn, 0, wxALL | wxALIGN_CENTER_VERTICAL, 0);
diff --git a/src/slic3r/GUI/CreatePresetsDialog.hpp b/src/slic3r/GUI/CreatePresetsDialog.hpp
index c2334176131..ba603db3219 100644
--- a/src/slic3r/GUI/CreatePresetsDialog.hpp
+++ b/src/slic3r/GUI/CreatePresetsDialog.hpp
@@ -356,6 +356,7 @@ class EditFilamentPresetDialog : public DPIDialog
~EditFilamentPresetDialog();
wxPanel *get_preset_tree_panel() { return m_preset_tree_panel; }
+ std::shared_ptr get_need_edit_preset() { return m_need_edit_preset; }
void set_printer_name(const std::string &printer_name) { m_selected_printer = printer_name; }
void set_need_delete_preset_index(int need_delete_preset_index) { m_need_delete_preset_index = need_delete_preset_index; }
void set_need_edit_preset_index(int need_edit_preset_index) { m_need_edit_preset_index = need_edit_preset_index; }
@@ -388,6 +389,7 @@ class EditFilamentPresetDialog : public DPIDialog
wxStaticText * m_note_text = nullptr;
int m_need_delete_preset_index = -1;
int m_need_edit_preset_index = -1;
+ std::shared_ptr m_need_edit_preset;
std::string m_selected_printer = "";
std::unordered_map>> m_printer_compatible_presets;
diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp
index fcafd0d3032..f3ffa85bdc4 100644
--- a/src/slic3r/GUI/DeviceManager.cpp
+++ b/src/slic3r/GUI/DeviceManager.cpp
@@ -1366,7 +1366,7 @@ void MachineObject::parse_status(int flag)
}
is_support_filament_tangle_detect = ((flag >> 19) & 0x1) != 0;
-
+ is_support_user_preset = ((flag >> 22) & 0x1) != 0;
if (xcam_filament_tangle_detect_count > 0)
xcam_filament_tangle_detect_count--;
else {
@@ -1384,6 +1384,9 @@ void MachineObject::parse_status(int flag)
if (installed_plus && supported_plus) {
is_support_p1s_plus = true;
}
+ else {
+ is_support_p1s_plus = false;
+ }
}
sdcard_state = MachineObject::SdcardState((flag >> 8) & 0x11);
@@ -2226,41 +2229,6 @@ int MachineObject::command_get_flow_ratio_calibration_result(float nozzle_diamet
return -1;
}
-int MachineObject::command_unload_filament()
-{
- if (get_printer_series() == PrinterSeries::SERIES_X1 && !ams_support_virtual_tray) {
- // fixed gcode file
- json j;
- j["print"]["command"] = "gcode_file";
- j["print"]["param"] = "/usr/etc/print/filament_unload.gcode";
- j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++);
- return this->publish_json(j.dump());
- }
- else if (get_printer_series() == PrinterSeries::SERIES_P1P || (get_printer_series() == PrinterSeries::SERIES_X1 && ams_support_virtual_tray) ) {
- std::string gcode = DeviceManager::load_gcode(printer_type, "ams_unload.gcode");
- if (gcode.empty()) {
- return -1;
- }
-
- json j;
- j["print"]["command"] = "gcode_line";
- j["print"]["param"] = gcode;
- j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++);
-
- if (m_agent)
- j["print"]["user_id"] = m_agent->get_user_id();
-
- return this->publish_json(j.dump());
- }
- else {
- json j;
- j["print"]["command"] = "unload_filament";
- j["print"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++);
- return this->publish_json(j.dump());
- }
-}
-
-
int MachineObject::command_ipcam_record(bool on_off)
{
BOOST_LOG_TRIVIAL(info) << "command_ipcam_record = " << on_off;
@@ -2721,7 +2689,7 @@ int MachineObject::parse_json(std::string payload)
uint64_t t_utc = j.value("t_utc", 0ULL);
if (t_utc > 0)
- last_update_time = std::chrono::system_clock::time_point(t_utc * 1ms);
+ last_utc_time = std::chrono::system_clock::time_point(t_utc * 1ms);
BOOST_LOG_TRIVIAL(trace) << "parse_json: dev_id=" << dev_id << ", playload=" << j.dump(4);
@@ -2745,7 +2713,10 @@ int MachineObject::parse_json(std::string payload)
module_vers.emplace(ver_info.name, ver_info);
if (ver_info.name == "ota") {
NetworkAgent* agent = GUI::wxGetApp().getAgent();
- if (agent) agent->track_update_property("dev_ota_ver", ver_info.sw_ver);
+ if (agent) {
+ std::string dev_ota_str = "dev_ota_ver:" + this->dev_id;
+ agent->track_update_property(dev_ota_str, ver_info.sw_ver);
+ }
}
}
@@ -3869,6 +3840,10 @@ int MachineObject::parse_json(std::string payload)
curr_tray->color = "";
}
+ if (tray_it->contains("ctype"))
+ curr_tray->ctype = (*tray_it)["ctype"].get();
+ else
+ curr_tray->ctype = 0;
curr_tray->cols.clear();
if (tray_it->contains("cols")) {
if ((*tray_it)["cols"].is_array()) {
@@ -4943,9 +4918,13 @@ void DeviceManager::on_machine_alive(std::string json_str)
std::string connect_type = j["connect_type"].get();
std::string bind_state = j["bind_state"].get();
std::string sec_link = "";
+ std::string ssdp_version = "";
if (j.contains("sec_link")) {
sec_link = j["sec_link"].get();
}
+ if (j.contains("ssdp_version")) {
+ ssdp_version = j["ssdp_version"].get();
+ }
std::string connection_name = "";
if (j.contains("connection_name")) {
connection_name = j["connection_name"].get();
@@ -4960,6 +4939,7 @@ void DeviceManager::on_machine_alive(std::string json_str)
it->second->bind_state = bind_state;
it->second->bind_sec_link = sec_link;
it->second->dev_connection_type = connect_type;
+ it->second->bind_ssdp_version = ssdp_version;
}
/* update localMachineList */
@@ -4990,6 +4970,7 @@ void DeviceManager::on_machine_alive(std::string json_str)
obj->dev_connection_type= connect_type;
obj->bind_state = bind_state;
obj->bind_sec_link = sec_link;
+ obj->bind_ssdp_version = ssdp_version;
obj->printer_type = MachineObject::parse_printer_type(printer_type_str);
// U0 firmware
@@ -5014,6 +4995,7 @@ void DeviceManager::on_machine_alive(std::string json_str)
obj->bind_state = bind_state;
obj->bind_sec_link = sec_link;
obj->dev_connection_name = connection_name;
+ obj->bind_ssdp_version = ssdp_version;
obj->m_is_online = true;
//load access code
diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp
index 37bdb737641..1e142a97c30 100644
--- a/src/slic3r/GUI/DeviceManager.hpp
+++ b/src/slic3r/GUI/DeviceManager.hpp
@@ -192,6 +192,7 @@ class AmsTray {
std::string nozzle_temp_min;
std::string xcam_info;
std::string uuid;
+ int ctype = 0;
float k = 0.0f; // k range: 0 ~ 0.5
float n = 0.0f; // k range: 0.6 ~ 2.0
int cali_idx = 0;
@@ -450,6 +451,7 @@ class MachineObject
std::string bind_user_id;
std::string bind_state; /* free | occupied */
std::string bind_sec_link;
+ std::string bind_ssdp_version;
bool is_avaliable() { return bind_state == "free"; }
time_t last_alive;
bool m_is_online;
@@ -461,6 +463,7 @@ class MachineObject
int parse_msg_count = 0;
int keep_alive_count = 0;
std::chrono::system_clock::time_point last_update_time; /* last received print data from machine */
+ std::chrono::system_clock::time_point last_utc_time; /* last received print data from machine */
std::chrono::system_clock::time_point last_keep_alive; /* last received print data from machine */
std::chrono::system_clock::time_point last_push_time; /* last received print push from machine */
std::chrono::system_clock::time_point last_request_push; /* last received print push from machine */
@@ -877,8 +880,6 @@ class MachineObject
int command_start_flow_ratio_calibration(const X1CCalibInfos& calib_data);
int command_get_flow_ratio_calibration_result(float nozzle_diameter);
- int command_unload_filament();
-
// camera control
int command_ipcam_record(bool on_off);
int command_ipcam_timelapse(bool on_off);
diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp
index 5981eb87ac8..9d408a015f2 100644
--- a/src/slic3r/GUI/GLCanvas3D.hpp
+++ b/src/slic3r/GUI/GLCanvas3D.hpp
@@ -1062,17 +1062,6 @@ class GLCanvas3D
void highlight_toolbar_item(const std::string& item_name);
void highlight_gizmo(const std::string& gizmo_name);
- ArrangeSettings get_arrange_settings() const {
- const ArrangeSettings &settings = get_arrange_settings(this);
- ArrangeSettings ret = settings;
- if (&settings == &m_arrange_settings_fff_seq_print) {
- ret.distance = std::max(ret.distance,
- float(min_object_distance(*m_config)));
- }
-
- return ret;
- }
-
// Timestamp for FPS calculation and notification fade-outs.
static int64_t timestamp_now() {
#ifdef _WIN32
diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp
index afd76b546ae..42c19513cfc 100644
--- a/src/slic3r/GUI/GUI_App.cpp
+++ b/src/slic3r/GUI/GUI_App.cpp
@@ -1028,8 +1028,12 @@ void GUI_App::post_init()
// BOOST_LOG_TRIVIAL(info) << "Loading user presets...";
// scrn->SetText(_L("Loading user presets..."));
if (m_agent) { start_sync_user_preset(); }
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " sync_user_preset: true";
+ } else {
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " sync_user_preset: false";
}
+ m_open_method = "double_click";
bool switch_to_3d = false;
if (!this->init_params->input_files.empty()) {
@@ -1053,6 +1057,7 @@ void GUI_App::post_init()
if (!download_file_url.empty() && ( boost::starts_with(download_file_url, "http://") || boost::starts_with(download_file_url, "https://")) ) {
request_model_download(download_origin_url);
}
+ m_open_method = "makerworld";
}
else {
switch_to_3d = true;
@@ -1060,23 +1065,28 @@ void GUI_App::post_init()
mainframe->select_tab(size_t(MainFrame::tp3DEditor));
plater_->select_view_3D("3D");
this->plater()->load_gcode(from_u8(this->init_params->input_files.front()));
+ m_open_method = "gcode";
}
else {
mainframe->select_tab(size_t(MainFrame::tp3DEditor));
plater_->select_view_3D("3D");
- Plater::TakeSnapshot snapshot(this->plater(), "Load Project", UndoRedo::SnapshotType::ProjectSeparator);
- const std::vector res = this->plater()->load_files(this->init_params->input_files);
- if (!res.empty()) {
- if (this->init_params->input_files.size() == 1) {
- // Update application titlebar when opening a project file
- const std::string& filename = this->init_params->input_files.front();
- this->plater()->up_to_date(true, false);
- this->plater()->up_to_date(true, true);
- //BBS: remove amf logic as project
- if (boost::algorithm::iends_with(filename, ".3mf"))
- this->plater()->set_project_filename(from_u8(filename));
+ wxArrayString input_files;
+ for (auto & file : this->init_params->input_files) {
+ input_files.push_back(wxString::FromUTF8(file));
+ }
+ this->plater()->set_project_filename(_L("Untitled"));
+ this->plater()->load_files(input_files);
+ try {
+ if (!input_files.empty()) {
+ std::string file_path = input_files.front().ToStdString();
+ std::filesystem::path path(file_path);
+ m_open_method = "file_" + path.extension().string();
}
}
+ catch (...) {
+ BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ", file path exception!";
+ m_open_method = "file";
+ }
}
}
}
@@ -3300,17 +3310,8 @@ void GUI_App::link_to_network_check()
else if (country_code == "CN") {
url = "https://status.bambulab.cn";
}
- else if (country_code == "ENV_CN_DEV") {
- url = "https://status.bambu-lab.com";
- }
- else if (country_code == "ENV_CN_QA") {
- url = "https://status.bambu-lab.com";
- }
- else if (country_code == "ENV_CN_PRE") {
- url = "https://status.bambu-lab.com";
- }
else {
- url = "https://status.bambu-lab.com";
+ url = "https://status.bambulab.com";
}
wxLaunchDefaultBrowser(url);
}
@@ -4162,6 +4163,10 @@ void GUI_App::check_track_enable()
/* record studio start event */
json j;
j["user_mode"] = this->get_mode_str();
+ j["open_method"] = m_open_method;
+ if (m_agent) {
+ m_agent->track_event("studio_launch", j.dump());
+ }
}
}
@@ -5881,7 +5886,7 @@ void GUI_App::OSXStoreOpenFiles(const wxArrayString &fileNames)
void GUI_App::MacOpenURL(const wxString& url)
{
- BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "get mac url " << url;
+ BOOST_LOG_TRIVIAL(trace) << __FUNCTION__ << "get mac url " << url;
if (!url.empty() && boost::starts_with(url, "orcasliceropen://")) {
auto input_str_arr = split_str(url.ToStdString(), "orcasliceropen://");
@@ -5892,7 +5897,7 @@ void GUI_App::MacOpenURL(const wxString& url)
}
std::string download_file_url = url_decode(download_origin_url);
- BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << download_file_url;
+ BOOST_LOG_TRIVIAL(trace) << __FUNCTION__ << download_file_url;
if (!download_file_url.empty() && (boost::starts_with(download_file_url, "http://") || boost::starts_with(download_file_url, "https://"))) {
if (m_post_initialized) {
@@ -6064,6 +6069,12 @@ void GUI_App::open_mall_page_dialog()
link_url = host_url + model_url;
}
+ if (link_url.find("?") != std::string::npos) {
+ link_url += "&from=orcaslicer";
+ } else {
+ link_url += "?from=orcaslicer";
+ }
+
wxLaunchDefaultBrowser(link_url);
}
diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp
index b2d09bff396..bd7868dbd73 100644
--- a/src/slic3r/GUI/GUI_App.hpp
+++ b/src/slic3r/GUI/GUI_App.hpp
@@ -664,6 +664,7 @@ class GUI_App : public wxApp
std::string m_older_data_dir_path;
boost::optional m_last_config_version;
bool m_config_corrupted { false };
+ std::string m_open_method;
};
DECLARE_APP(GUI_App)
diff --git a/src/slic3r/GUI/GUI_Factories.cpp b/src/slic3r/GUI/GUI_Factories.cpp
index 9ea5aa5c2b0..2629248d032 100644
--- a/src/slic3r/GUI/GUI_Factories.cpp
+++ b/src/slic3r/GUI/GUI_Factories.cpp
@@ -915,6 +915,10 @@ void MenuFactory::append_menu_items_flush_options(wxMenu* menu)
ModelConfig& select_object_config = object_list->object(selection.get_object_idx())->config;
wxMenu* flush_options_menu = new wxMenu();
+ auto can_flush = [&global_config]() {
+ auto option = global_config.option("enable_prime_tower");
+ return option ? option->getBool() : false;
+ };
append_menu_check_item(flush_options_menu, wxID_ANY, _L("Flush into objects' infill"), "",
[&select_object_config, &global_config](wxCommandEvent&) {
const ConfigOption* option = select_object_config.option(FREQ_SETTINGS_BUNDLE_FFF["Flush options"][0]);
@@ -923,8 +927,8 @@ void MenuFactory::append_menu_items_flush_options(wxMenu* menu)
}
select_object_config.set_key_value(FREQ_SETTINGS_BUNDLE_FFF["Flush options"][0], new ConfigOptionBool(!option->getBool()));
wxGetApp().obj_settings()->UpdateAndShow(true);
- }, menu, []() {return true; },
- [&select_object_config, &global_config]() {
+ }, menu, can_flush,
+ [&select_object_config, &global_config]() {
const ConfigOption* option = select_object_config.option(FREQ_SETTINGS_BUNDLE_FFF["Flush options"][0]);
if (!option) {
option = global_config.option(FREQ_SETTINGS_BUNDLE_FFF["Flush options"][0]);
@@ -940,8 +944,8 @@ void MenuFactory::append_menu_items_flush_options(wxMenu* menu)
}
select_object_config.set_key_value(FREQ_SETTINGS_BUNDLE_FFF["Flush options"][1], new ConfigOptionBool(!option->getBool()));
wxGetApp().obj_settings()->UpdateAndShow(true);
- }, menu, []() {return true; },
- [&select_object_config, &global_config]() {
+ }, menu, can_flush,
+ [&select_object_config, &global_config]() {
const ConfigOption* option = select_object_config.option(FREQ_SETTINGS_BUNDLE_FFF["Flush options"][1]);
if (!option) {
option = global_config.option(FREQ_SETTINGS_BUNDLE_FFF["Flush options"][1]);
@@ -957,8 +961,8 @@ void MenuFactory::append_menu_items_flush_options(wxMenu* menu)
}
select_object_config.set_key_value(FREQ_SETTINGS_BUNDLE_FFF["Flush options"][2], new ConfigOptionBool(!option->getBool()));
wxGetApp().obj_settings()->UpdateAndShow(true);
- }, menu, []() {return true; },
- [&select_object_config, &global_config]() {
+ }, menu, can_flush,
+ [&select_object_config, &global_config]() {
const ConfigOption* option = select_object_config.option(FREQ_SETTINGS_BUNDLE_FFF["Flush options"][2]);
if (!option) {
option = global_config.option(FREQ_SETTINGS_BUNDLE_FFF["Flush options"][2]);
diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp
index 725020ef309..be90c40790b 100644
--- a/src/slic3r/GUI/GUI_ObjectList.cpp
+++ b/src/slic3r/GUI/GUI_ObjectList.cpp
@@ -2892,15 +2892,16 @@ void ObjectList::boolean()
Plater::TakeSnapshot snapshot(wxGetApp().plater(), "boolean");
- Model* model = (*m_objects)[0]->get_model();
+ ModelObject* object = (*m_objects)[obj_idxs.front()];
+ TriangleMesh mesh = Plater::combine_mesh_fff(*object, -1, [this](const std::string& msg) {return wxGetApp().notification_manager()->push_plater_error_notification(msg); });
+
+ // add mesh to model as a new object, keep the original object's name and config
+ Model* model = object->get_model();
ModelObject* new_object = model->add_object();
- new_object->name = (*m_objects)[0]->name;
- new_object->config.assign_config((*m_objects)[0]->config);
+ new_object->name = object->name;
+ new_object->config.assign_config(object->config);
if (new_object->instances.empty())
new_object->add_instance();
-
- ModelObject* object = (*m_objects)[obj_idxs.front()];
- TriangleMesh mesh = Plater::combine_mesh_fff(*object, -1, [this](const std::string& msg) {return wxGetApp().notification_manager()->push_plater_error_notification(msg); });
ModelVolume* new_volume = new_object->add_volume(mesh);
// BBS: ensure on bed but no need to ensure locate in the center around origin
@@ -3712,6 +3713,9 @@ wxDataViewItemArray ObjectList::add_volumes_to_object_in_list(size_t obj_idx, st
}
int volume_idx{-1};
+ auto& ui_and_3d_volume_map = m_objects_model->get_ui_and_3d_volume_map();
+ ui_and_3d_volume_map.clear();
+ int ui_volume_idx = 0;
for (const ModelVolume *volume : object->volumes) {
++volume_idx;
if (object->is_cut() && volume->is_cut_connector())
@@ -3726,6 +3730,8 @@ wxDataViewItemArray ObjectList::add_volumes_to_object_in_list(size_t obj_idx, st
get_warning_icon_name(volume->mesh().stats()),
volume->config.has("extruder") ? volume->config.extruder() : 0,
false);
+ ui_and_3d_volume_map[ui_volume_idx] = volume_idx;
+ ui_volume_idx++;
add_settings_item(vol_item, &volume->config.get());
if (add_to_selection && add_to_selection(volume))
@@ -4442,8 +4448,10 @@ void ObjectList::update_selections()
assert(obj_idx >= 0 && vol_idx >= 0);
if (object(obj_idx)->volumes[vol_idx]->is_cut_connector())
sels.Add(m_objects_model->GetInfoItemByType(m_objects_model->GetItemById(obj_idx), InfoItemType::CutConnectors));
- else
+ else {
+ vol_idx = m_objects_model->get_real_volume_index_in_ui(vol_idx);
sels.Add(m_objects_model->GetItemByVolumeId(obj_idx, vol_idx));
+ }
}
}
m_selection_mode = smVolume; }
@@ -4547,7 +4555,8 @@ void ObjectList::update_selections_on_canvas()
const int obj_idx = m_objects_model->GetObjectIdByItem(item);
if (type == itVolume) {
- const int vol_idx = m_objects_model->GetVolumeIdByItem(item);
+ int vol_idx = m_objects_model->GetVolumeIdByItem(item);
+ vol_idx = m_objects_model->get_real_volume_index_in_3d(vol_idx);
std::vector idxs = selection.get_volume_idxs_from_volume(obj_idx, std::max(instance_idx, 0), vol_idx);
volume_idxs.insert(volume_idxs.end(), idxs.begin(), idxs.end());
}
@@ -5761,24 +5770,8 @@ wxDataViewItemArray ObjectList::reorder_volumes_and_get_selection(int obj_idx, s
return items;
object->sort_volumes(true);
-
- wxDataViewItem object_item = m_objects_model->GetItemById(obj_idx);
- m_objects_model->DeleteVolumeChildren(object_item);
-
- for (const ModelVolume* volume : object->volumes) {
- wxDataViewItem vol_item = m_objects_model->AddVolumeChild(object_item, from_u8(volume->name),
- volume->type(),
- volume->is_text(),
- volume->is_svg(),
- get_warning_icon_name(volume->mesh().stats()),
- volume->config.has("extruder") ? volume->config.extruder() : 0,
- false);
- // add settings to the part, if it has those
- add_settings_item(vol_item, &volume->config.get());
-
- if (add_to_selection && add_to_selection(volume))
- items.Add(vol_item);
- }
+ update_info_items(obj_idx, nullptr, true);
+ items = add_volumes_to_object_in_list(obj_idx, std::move(add_to_selection));
changed_object(obj_idx);
return items;
diff --git a/src/slic3r/GUI/HMS.cpp b/src/slic3r/GUI/HMS.cpp
index c1b73f2c08b..73a1204ee0f 100644
--- a/src/slic3r/GUI/HMS.cpp
+++ b/src/slic3r/GUI/HMS.cpp
@@ -17,7 +17,9 @@ int get_hms_info_version(std::string& version)
}
int result = -1;
version = "";
- std::string url = (boost::format("https://%1%/GetVersion.php") % hms_host).str();
+ std::string lang;
+ std::string query_params = HMSQuery::build_query_params(lang);
+ std::string url = (boost::format("https://%1%/GetVersion.php?%2%") % hms_host % query_params).str();
Slic3r::Http http = Slic3r::Http::get(url);
http.timeout_max(10)
.on_complete([&result, &version](std::string body, unsigned status){
@@ -44,13 +46,14 @@ int HMSQuery::download_hms_info()
if (!config) return -1;
std::string hms_host = wxGetApp().app_config->get_hms_host();
- std::string lang_code = HMSQuery::hms_language_code();
- std::string url = (boost::format("https://%1%/query.php?lang=%2%") % hms_host % lang_code).str();
+ std::string lang;
+ std::string query_params = HMSQuery::build_query_params(lang);
+ std::string url = (boost::format("https://%1%/query.php?%2%") % hms_host % query_params).str();
BOOST_LOG_TRIVIAL(info) << "hms: download url = " << url;
Slic3r::Http http = Slic3r::Http::get(url);
-
+ m_hms_json.clear();
http.on_complete([this](std::string body, unsigned status) {
try {
json j = json::parse(body);
@@ -73,7 +76,8 @@ int HMSQuery::download_hms_info()
BOOST_LOG_TRIVIAL(error) << "HMSQuery: update hms info error = " << error << ", body = " << body << ", status = " << status;
}).perform_sync();
- save_to_local();
+ if (!m_hms_json.empty())
+ save_to_local(lang);
return 0;
}
@@ -84,7 +88,7 @@ int HMSQuery::load_from_local(std::string &version_info)
BOOST_LOG_TRIVIAL(error) << "HMS: load_from_local, data_dir() is empty";
return -1;
}
- std::string filename = get_hms_file();
+ std::string filename = get_hms_file(HMSQuery::hms_language_code());
auto hms_folder = (boost::filesystem::path(data_dir()) / "hms");
if (!fs::exists(hms_folder))
fs::create_directory(hms_folder);
@@ -111,13 +115,13 @@ int HMSQuery::load_from_local(std::string &version_info)
return 0;
}
-int HMSQuery::save_to_local()
+int HMSQuery::save_to_local(std::string lang)
{
if (data_dir().empty()) {
BOOST_LOG_TRIVIAL(error) << "HMS: save_to_local, data_dir() is empty";
return -1;
}
- std::string filename = get_hms_file();
+ std::string filename = get_hms_file(lang);
auto hms_folder = (boost::filesystem::path(data_dir()) / "hms");
if (!fs::exists(hms_folder))
fs::create_directory(hms_folder);
@@ -152,10 +156,18 @@ std::string HMSQuery::hms_language_code()
return lang_code;
}
-std::string HMSQuery::get_hms_file()
+std::string HMSQuery::build_query_params(std::string& lang)
{
std::string lang_code = HMSQuery::hms_language_code();
- return (boost::format("hms_%1%.json") % lang_code).str();
+ lang = lang_code;
+ std::string query_params = (boost::format("lang=%1%") % lang_code).str();
+ return query_params;
+}
+
+std::string HMSQuery::get_hms_file(std::string lang)
+{
+ //std::string lang_code = HMSQuery::hms_language_code();
+ return (boost::format("hms_%1%.json") % lang).str();
}
wxString HMSQuery::query_hms_msg(std::string long_error_code)
@@ -263,6 +275,9 @@ int HMSQuery::check_hms_info()
std::string new_version;
get_hms_info_version(new_version);
BOOST_LOG_TRIVIAL(info) << "HMS: check_hms_info latest version = " << new_version;
+
+ if (new_version.empty()) {return 0;}
+
if (!version.empty() && version == new_version) {
download_new_hms_info = false;
}
@@ -272,7 +287,7 @@ int HMSQuery::check_hms_info()
if (download_new_hms_info) {
download_hms_info();
}
- return;
+ return 0;
});
return 0;
}
diff --git a/src/slic3r/GUI/HMS.hpp b/src/slic3r/GUI/HMS.hpp
index e76a5938cec..64edf84caa9 100644
--- a/src/slic3r/GUI/HMS.hpp
+++ b/src/slic3r/GUI/HMS.hpp
@@ -22,8 +22,8 @@ class HMSQuery {
json m_hms_json;
int download_hms_info();
int load_from_local(std::string& version_info);
- int save_to_local();
- std::string get_hms_file();
+ int save_to_local(std::string lang);
+ std::string get_hms_file(std::string lang);
wxString _query_hms_msg(std::string long_error_code, std::string lang_code = "en");
wxString _query_error_msg(std::string long_error_code, std::string lang_code = "en");
public:
@@ -32,6 +32,7 @@ class HMSQuery {
wxString query_hms_msg(std::string long_error_code);
wxString query_print_error_msg(int print_error);
static std::string hms_language_code();
+ static std::string build_query_params(std::string& lang);
};
int get_hms_info_version(std::string &version);
diff --git a/src/slic3r/GUI/Jobs/ArrangeJob.cpp b/src/slic3r/GUI/Jobs/ArrangeJob.cpp
index 5b73b629490..538ffc4fa5d 100644
--- a/src/slic3r/GUI/Jobs/ArrangeJob.cpp
+++ b/src/slic3r/GUI/Jobs/ArrangeJob.cpp
@@ -752,9 +752,9 @@ double bed_stride_y(const Plater* plater) {
arrangement::ArrangeParams init_arrange_params(Plater *p)
{
arrangement::ArrangeParams params;
- const GLCanvas3D::ArrangeSettings &settings = static_cast(p->canvas3D())->get_arrange_settings();
- auto & print = wxGetApp().plater()->get_partplate_list().get_current_fff_print();
- const PrintConfig& print_config = print.config();
+ GLCanvas3D::ArrangeSettings &settings = p->canvas3D()->get_arrange_settings();
+ auto &print = wxGetApp().plater()->get_partplate_list().get_current_fff_print();
+ const PrintConfig &print_config = print.config();
params.clearance_height_to_rod = print_config.extruder_clearance_height_to_rod.value;
params.clearance_height_to_lid = print_config.extruder_clearance_height_to_lid.value;
diff --git a/src/slic3r/GUI/Jobs/BindJob.cpp b/src/slic3r/GUI/Jobs/BindJob.cpp
index 26e20d867e0..57b22cc221e 100644
--- a/src/slic3r/GUI/Jobs/BindJob.cpp
+++ b/src/slic3r/GUI/Jobs/BindJob.cpp
@@ -16,11 +16,12 @@ static auto waiting_auth_str = _u8L("Logging in");
static auto login_failed_str = _u8L("Login failed");
-BindJob::BindJob(std::string dev_id, std::string dev_ip, std::string sec_link)
+BindJob::BindJob(std::string dev_id, std::string dev_ip, std::string sec_link, std::string ssdp_version)
:
m_dev_id(dev_id),
m_dev_ip(dev_ip),
- m_sec_link(sec_link)
+ m_sec_link(sec_link),
+ m_ssdp_version(ssdp_version)
{
;
}
@@ -55,7 +56,8 @@ void BindJob::process(Ctl &ctl)
wxDateTime::TimeZone tz(wxDateTime::Local);
long offset = tz.GetOffset();
std::string timezone = get_timezone_utc_hm(offset);
-
+
+ m_agent->track_update_property("ssdp_version", m_ssdp_version, "string");
int result = m_agent->bind(m_dev_ip, m_dev_id, m_sec_link, timezone, m_improved,
[this, &ctl, &curr_percent, &msg, &result_code, &result_info](int stage, int code, std::string info) {
diff --git a/src/slic3r/GUI/Jobs/BindJob.hpp b/src/slic3r/GUI/Jobs/BindJob.hpp
index b0bc4d818d5..7890d63afb0 100644
--- a/src/slic3r/GUI/Jobs/BindJob.hpp
+++ b/src/slic3r/GUI/Jobs/BindJob.hpp
@@ -17,12 +17,13 @@ class BindJob : public Job
std::string m_dev_id;
std::string m_dev_ip;
std::string m_sec_link;
+ std::string m_ssdp_version;
bool m_job_finished{ false };
int m_print_job_completed_id = 0;
bool m_improved{false};
public:
- BindJob(std::string dev_id, std::string dev_ip, std::string sec_link);
+ BindJob(std::string dev_id, std::string dev_ip, std::string sec_link, std::string ssdp_version);
int status_range() const
{
diff --git a/src/slic3r/GUI/Jobs/FillBedJob.cpp b/src/slic3r/GUI/Jobs/FillBedJob.cpp
index 267fbee82ae..efcb556456f 100644
--- a/src/slic3r/GUI/Jobs/FillBedJob.cpp
+++ b/src/slic3r/GUI/Jobs/FillBedJob.cpp
@@ -150,8 +150,7 @@ void FillBedJob::prepare()
double sc = scaled(1.) * scaled(1.);
- const GLCanvas3D::ArrangeSettings& settings = static_cast(m_plater->canvas3D())->get_arrange_settings();
- auto polys = offset_ex(m_selected.front().poly, scaled(settings.distance) / 2);
+ auto polys = offset_ex(m_selected.front().poly, params.min_obj_distance / 2);
ExPolygon poly = polys.empty() ? m_selected.front().poly : polys.front();
double poly_area = poly.area() / sc;
double unsel_area = std::accumulate(m_unselected.begin(),
diff --git a/src/slic3r/GUI/Jobs/PrintJob.cpp b/src/slic3r/GUI/Jobs/PrintJob.cpp
index b331ebfca57..8ff354e7c78 100644
--- a/src/slic3r/GUI/Jobs/PrintJob.cpp
+++ b/src/slic3r/GUI/Jobs/PrintJob.cpp
@@ -68,9 +68,15 @@ std::string PrintJob::truncate_string(const std::string& str, size_t maxLength)
}
wxString local_str = wxString::FromUTF8(str);
- wxString truncatedStr = local_str.Mid(0, maxLength - 3);
- truncatedStr.append("...");
+ wxString truncatedStr;
+ for (auto i = 1; i < local_str.Length(); i++) {
+ wxString tagStr = local_str.Mid(0, i);
+ if (tagStr.ToUTF8().length() >= maxLength) {
+ truncatedStr = local_str.Mid(0, i - 1);
+ break;
+ }
+ }
return truncatedStr.utf8_string();
}
diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp
index 288e8a579e2..3b70614dae8 100644
--- a/src/slic3r/GUI/MainFrame.cpp
+++ b/src/slic3r/GUI/MainFrame.cpp
@@ -3688,11 +3688,13 @@ void MainFrame::on_select_default_preset(SimpleEvent& evt)
case wxID_YES: {
wxGetApp().app_config->set_bool("sync_user_preset", true);
wxGetApp().start_sync_user_preset(true);
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " sync_user_preset: true";
break;
}
case wxID_NO:
wxGetApp().app_config->set_bool("sync_user_preset", false);
wxGetApp().stop_sync_user_preset();
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " sync_user_preset: false";
break;
default:
break;
diff --git a/src/slic3r/GUI/MediaFilePanel.cpp b/src/slic3r/GUI/MediaFilePanel.cpp
index dded21372bd..3b23ee76321 100644
--- a/src/slic3r/GUI/MediaFilePanel.cpp
+++ b/src/slic3r/GUI/MediaFilePanel.cpp
@@ -198,7 +198,9 @@ MediaFilePanel::~MediaFilePanel()
SetMachineObject(nullptr);
}
-void MediaFilePanel::SetMachineObject(MachineObject* obj)
+wxString hide_id_middle_string(wxString const &str, size_t offset = 0, size_t length = -1);
+
+ void MediaFilePanel::SetMachineObject(MachineObject* obj)
{
std::string machine = obj ? obj->dev_id : "";
if (obj) {
@@ -442,7 +444,7 @@ void MediaFilePanel::fetchUrl(boost::weak_ptr wfs)
if (agent) {
agent->get_camera_url(m_machine,
[this, wfs, m = m_machine, v = m_dev_ver](std::string url) {
- BOOST_LOG_TRIVIAL(info) << "MediaFilePanel::fetchUrl: camera_url: " << hide_passwd(url, {"authkey=", "passwd="});
+ BOOST_LOG_TRIVIAL(info) << "MediaFilePanel::fetchUrl: camera_url: " << hide_id_middle_string(hide_passwd(url, {"authkey=", "passwd="}), 9, 20);
CallAfter([=] {
boost::shared_ptr fs(wfs.lock());
if (!fs || fs != m_image_grid->GetFileSystem()) return;
diff --git a/src/slic3r/GUI/MediaPlayCtrl.cpp b/src/slic3r/GUI/MediaPlayCtrl.cpp
index 0d3e01b4bcb..7fb8392f6a6 100644
--- a/src/slic3r/GUI/MediaPlayCtrl.cpp
+++ b/src/slic3r/GUI/MediaPlayCtrl.cpp
@@ -90,6 +90,15 @@ MediaPlayCtrl::~MediaPlayCtrl()
m_thread.join();
}
+wxString hide_id_middle_string(wxString const &str, size_t offset = 0, size_t length = -1)
+{
+ if (length == size_t(-1))
+ length = str.Length() - offset;
+ if (length <= 8)
+ return str;
+ return str.Left(offset + 4) + wxString(length - 8, '*') + str.Mid(offset + length - 4);
+}
+
void MediaPlayCtrl::SetMachineObject(MachineObject* obj)
{
std::string machine = obj ? obj->dev_id : "";
@@ -120,7 +129,7 @@ void MediaPlayCtrl::SetMachineObject(MachineObject* obj)
return;
}
m_machine = machine;
- BOOST_LOG_TRIVIAL(info) << "MediaPlayCtrl switch machine: " << m_machine;
+ BOOST_LOG_TRIVIAL(info) << "MediaPlayCtrl switch machine: " << hide_id_middle_string(m_machine);
m_disable_lan = false;
m_failed_retry = 0;
m_last_failed_codes.clear();
@@ -149,8 +158,7 @@ wxString hide_passwd(wxString url, std::vector const &passwords)
if (p[p.length() - 1] == '=') {
i = j;
j = url.find('&', i);
- if (j == wxString::npos)
- j = url.length();
+ if (j == wxString::npos) j = url.length();
}
auto l = size_t(j - i);
if (j == url.length() || url[j] == '@' || url[j] == '&')
@@ -199,7 +207,7 @@ void MediaPlayCtrl::Play()
m_url = "bambu:///rtsps___" + m_lan_user + ":" + m_lan_passwd + "@" + m_lan_ip + "/streaming/live/1?proto=rtsps";
else if (m_lan_proto == MachineObject::LVL_Rtsp)
m_url = "bambu:///rtsp___" + m_lan_user + ":" + m_lan_passwd + "@" + m_lan_ip + "/streaming/live/1?proto=rtsp";
- m_url += "&device=" + m_machine;
+ m_url += "&device=" + hide_id_middle_string(m_machine);
m_url += "&version=" + agent_version;
m_url += "&dev_ver=" + m_dev_ver;
BOOST_LOG_TRIVIAL(info) << "MediaPlayCtrl: " << hide_passwd(m_url, {m_lan_passwd} );
@@ -231,11 +239,11 @@ void MediaPlayCtrl::Play()
if (agent) {
agent->get_camera_url(m_machine, [this, m = m_machine, v = agent_version, dv = m_dev_ver](std::string url) {
if (boost::algorithm::starts_with(url, "bambu:///")) {
- url += "&device=" + m;
+ url += "&device=" + into_u8(hide_id_middle_string(m));
url += "&version=" + v;
url += "&dev_ver=" + dv;
}
- BOOST_LOG_TRIVIAL(info) << "MediaPlayCtrl: " << hide_passwd(url, {"authkey=", "passwd="}) << ", machine: " << m_machine;
+ BOOST_LOG_TRIVIAL(info) << "MediaPlayCtrl: " << hide_id_middle_string(hide_passwd(url, {"authkey=", "passwd="}), 9, 20);
CallAfter([this, m, url] {
if (m != m_machine) {
BOOST_LOG_TRIVIAL(info) << "MediaPlayCtrl drop late ttcode for machine: " << m;
@@ -392,7 +400,7 @@ void MediaPlayCtrl::ToggleStream()
url = "bambu:///rtsps___" + m_lan_user + ":" + m_lan_passwd + "@" + m_lan_ip + "/streaming/live/1?proto=rtsps";
else if (m_lan_proto == MachineObject::LVL_Rtsp)
url = "bambu:///rtsp___" + m_lan_user + ":" + m_lan_passwd + "@" + m_lan_ip + "/streaming/live/1?proto=rtsp";
- url += "&device=" + m_machine;
+ url += "&device=" + into_u8(hide_id_middle_string(m_machine));
url += "&dev_ver=" + m_dev_ver;
BOOST_LOG_TRIVIAL(info) << "MediaPlayCtrl::ToggleStream: " << hide_passwd(url, {m_lan_passwd});
std::string file_url = data_dir() + "/cameratools/url.txt";
@@ -411,7 +419,7 @@ void MediaPlayCtrl::ToggleStream()
url += "&version=" + v;
url += "&dev_ver=" + dv;
}
- BOOST_LOG_TRIVIAL(info) << "MediaPlayCtrl::ToggleStream: " << hide_passwd(url, {"authkey=", "passwd="});
+ BOOST_LOG_TRIVIAL(info) << "MediaPlayCtrl::ToggleStream: " << hide_id_middle_string(hide_passwd(url, {"authkey=", "passwd="}), 9, 20);
CallAfter([this, m, url] {
if (m != m_machine) return;
if (url.empty() || !boost::algorithm::starts_with(url, "bambu:///")) {
@@ -537,7 +545,7 @@ void MediaPlayCtrl::media_proc()
}
wxString url = m_tasks.front();
if (m_tasks.size() >= 2 && !url.IsEmpty() && url[0] != '<' && m_tasks[1] == "") {
- BOOST_LOG_TRIVIAL(info) << "MediaPlayCtrl: busy skip url: " << hide_passwd(url, {"authkey=", "passwd=", m_lan_passwd});
+ BOOST_LOG_TRIVIAL(info) << "MediaPlayCtrl: busy skip url: " << hide_id_middle_string(hide_passwd(url, {"authkey=", "passwd=", m_lan_passwd}), 9, 20);
m_tasks.pop_front();
m_tasks.pop_front();
continue;
diff --git a/src/slic3r/GUI/ObjectDataViewModel.hpp b/src/slic3r/GUI/ObjectDataViewModel.hpp
index 4f1c6208986..8725645191f 100644
--- a/src/slic3r/GUI/ObjectDataViewModel.hpp
+++ b/src/slic3r/GUI/ObjectDataViewModel.hpp
@@ -342,13 +342,30 @@ class ObjectDataViewModel :public wxDataViewModel
wxDataViewCtrl* m_ctrl { nullptr };
std::vector> assembly_name_list;
std::vector> search_found_list;
+ std::map m_ui_and_3d_volume_map;
public:
ObjectDataViewModel();
~ObjectDataViewModel();
void Init();
-
+ std::map &get_ui_and_3d_volume_map() { return m_ui_and_3d_volume_map; }
+ int get_real_volume_index_in_3d(int ui_value)
+ {
+ if (m_ui_and_3d_volume_map.find(ui_value) != m_ui_and_3d_volume_map.end()) {
+ return m_ui_and_3d_volume_map[ui_value];
+ }
+ return ui_value;
+ }
+ int get_real_volume_index_in_ui(int _3d_value)
+ {
+ for (auto item: m_ui_and_3d_volume_map) {
+ if (item.second == _3d_value) {
+ return item.first;
+ }
+ }
+ return _3d_value;
+ }
wxDataViewItem AddPlate(PartPlate* part_plate, wxString name = wxEmptyString, bool refresh = true);
wxDataViewItem AddObject(ModelObject* model_object, std::string warning_bitmap, bool has_lock = false, bool refresh = true);
wxDataViewItem AddVolumeChild( const wxDataViewItem &parent_item,
diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp
index 67d3022d54a..28b34b15593 100644
--- a/src/slic3r/GUI/Plater.cpp
+++ b/src/slic3r/GUI/Plater.cpp
@@ -1541,6 +1541,10 @@ std::map Sidebar::build_filament_ams_list(MachineObject
vt_tray_config.set_key_value("filament_colour", new ConfigOptionStrings{ into_u8(wxColour("#" + vt_tray.color).GetAsString(wxC2S_HTML_SYNTAX)) });
vt_tray_config.set_key_value("filament_exist", new ConfigOptionBools{ true });
+ vt_tray_config.set_key_value("filament_multi_colors", new ConfigOptionStrings{});
+ for (int i = 0; i < vt_tray.cols.size(); ++i) {
+ vt_tray_config.opt("filament_multi_colors")->values.push_back(into_u8(wxColour("#" + vt_tray.cols[i]).GetAsString(wxC2S_HTML_SYNTAX)));
+ }
filament_ams_list.emplace(VIRTUAL_TRAY_ID, std::move(vt_tray_config));
}
@@ -1559,6 +1563,10 @@ std::map Sidebar::build_filament_ams_list(MachineObject
tray_config.set_key_value("filament_colour", new ConfigOptionStrings{ into_u8(wxColour("#" + tray.second->color).GetAsString(wxC2S_HTML_SYNTAX)) });
tray_config.set_key_value("filament_exist", new ConfigOptionBools{ tray.second->is_exists });
+ tray_config.set_key_value("filament_multi_colors", new ConfigOptionStrings{});
+ for (int i = 0; i < tray.second->cols.size(); ++i) {
+ tray_config.opt("filament_multi_colors")->values.push_back(into_u8(wxColour("#" + tray.second->cols[i]).GetAsString(wxC2S_HTML_SYNTAX)));
+ }
filament_ams_list.emplace(((n - 'A') * 4 + t - '1'), std::move(tray_config));
}
}
@@ -1619,6 +1627,17 @@ void Sidebar::sync_ams_list()
ams.set_key_value("filament_changed", new ConfigOptionBool{res == wxID_YES || list2[i] != filament_id});
list2[i] = filament_id;
}
+
+ // BBS:Record consumables information before synchronization
+ std::vector color_before_sync;
+ std::vector is_support_before;
+ DynamicPrintConfig& project_config = wxGetApp().preset_bundle->project_config;
+ ConfigOptionStrings* color_opt = project_config.option("filament_colour");
+ for (int i = 0; i < p->combos_filament.size(); ++i) {
+ is_support_before.push_back(is_support_filament(i));
+ color_before_sync.push_back(color_opt->values[i]);
+ }
+
unsigned int unknowns = 0;
auto n = wxGetApp().preset_bundle->sync_ams_list(unknowns);
if (n == 0) {
@@ -1637,13 +1656,32 @@ void Sidebar::sync_ams_list()
dlg.ShowModal();
}
wxGetApp().plater()->on_filaments_change(n);
- for (auto &c : p->combos_filament)
+ for (auto& c : p->combos_filament)
c->update();
wxGetApp().get_tab(Preset::TYPE_FILAMENT)->select_preset(wxGetApp().preset_bundle->filament_presets[0]);
wxGetApp().preset_bundle->export_selections(*wxGetApp().app_config);
dynamic_filament_list.update();
// Expand filament list
p->m_panel_filament_content->SetMaxSize({-1, -1});
+ // BBS:Synchronized consumables information
+ // auto calculation of flushing volumes
+ for (int i = 0; i < p->combos_filament.size(); ++i) {
+ if (i >= color_before_sync.size()) {
+ auto_calc_flushing_volumes(i);
+ }
+ else {
+ // if color changed
+ if (color_before_sync[i] != color_opt->values[i]) {
+ auto_calc_flushing_volumes(i);
+ }
+ // color don't change, but changes between supporting filament and non supporting filament
+ else {
+ bool flag = is_support_filament(i);
+ if (flag != is_support_before[i])
+ auto_calc_flushing_volumes(i);
+ }
+ }
+ }
Layout();
}
@@ -1810,71 +1848,103 @@ std::string& Sidebar::get_search_line()
return p->searcher.search_string();
}
-void Sidebar::auto_calc_flushing_volumes(const int modify_id) {
- auto& project_config = wxGetApp().preset_bundle->project_config;
- auto& printer_config = wxGetApp().preset_bundle->printers.get_edited_preset().config;
+void Sidebar::auto_calc_flushing_volumes(const int modify_id)
+{
+ auto& preset_bundle = wxGetApp().preset_bundle;
+ auto& project_config = preset_bundle->project_config;
+ auto& printer_config = preset_bundle->printers.get_edited_preset().config;
+ auto& ams_multi_color_filament = preset_bundle->ams_multi_color_filment;
+ auto& ams_filament_list = preset_bundle->filament_ams_list;
+
const std::vector& init_matrix = (project_config.option("flush_volumes_matrix"))->values;
const std::vector& init_extruders = (project_config.option("flush_volumes_vector"))->values;
ConfigOption* extra_flush_volume_opt = printer_config.option("nozzle_volume");
int extra_flush_volume = extra_flush_volume_opt ? (int)extra_flush_volume_opt->getFloat() : 0;
ConfigOptionFloat* flush_multi_opt = project_config.option("flush_multiplier");
float flush_multiplier = flush_multi_opt ? flush_multi_opt->getFloat() : 1.f;
- vector matrix = init_matrix;
+ std::vector matrix = init_matrix;
int m_min_flush_volume = extra_flush_volume;
int m_max_flush_volume = Slic3r::g_max_flush_volume;
unsigned int m_number_of_extruders = (int)(sqrt(init_matrix.size()) + 0.001);
+
const std::vector extruder_colours = wxGetApp().plater()->get_extruder_colors_from_plater_config();
- vector m_colours;
- for (const std::string& color : extruder_colours) {
- m_colours.push_back(wxColor(color));
+ std::vector> multi_colours;
+
+ // Support for multi-color filament
+ for (int i = 0; i < extruder_colours.size(); ++i) {
+ std::vector single_filament;
+ if (i < ams_multi_color_filament.size()) {
+ if (!ams_multi_color_filament[i].empty()) {
+ std::vector colors = ams_multi_color_filament[i];
+ for (int j = 0; j < colors.size(); ++j) {
+ single_filament.push_back(wxColour(colors[j]));
+ }
+ multi_colours.push_back(single_filament);
+ continue;
+ }
+ }
+
+ single_filament.push_back(wxColour(extruder_colours[i]));
+ multi_colours.push_back(single_filament);
}
- if (modify_id >= 0 && modify_id < m_colours.size()) {
- for (int i = 0; i < m_colours.size(); ++i) {
+
+ if (modify_id >= 0 && modify_id < multi_colours.size()) {
+ for (int i = 0; i < multi_colours.size(); ++i) {
+
+ Slic3r::FlushVolCalculator calculator(m_min_flush_volume, m_max_flush_volume);
+
+ // from to modify
int from_idx = i;
if (from_idx != modify_id) {
- const wxColour& from = m_colours[from_idx];
+ int flushing_volume = 0;
bool is_from_support = is_support_filament(from_idx);
- const wxColour& to = m_colours[modify_id];
bool is_to_support = is_support_filament(modify_id);
- int flushing_volume = 0;
if (is_to_support) {
flushing_volume = Slic3r::g_flush_volume_to_support;
}
else {
- const wxColour& to = m_colours[modify_id];
- Slic3r::FlushVolCalculator calculator(m_min_flush_volume, m_max_flush_volume);
- flushing_volume = calculator.calc_flush_vol(from.Alpha(), from.Red(), from.Green(), from.Blue(), to.Alpha(), to.Red(), to.Green(), to.Blue());
- if (is_from_support) {
- flushing_volume = std::max(Slic3r::g_min_flush_volume_from_support, flushing_volume);
+ for (int j = 0; j < multi_colours[from_idx].size(); ++j) {
+ const wxColour& from = multi_colours[from_idx][j];
+ for (int k = 0; k < multi_colours[modify_id].size(); ++k) {
+ const wxColour& to = multi_colours[modify_id][k];
+ int volume = calculator.calc_flush_vol(from.Alpha(), from.Red(), from.Green(), from.Blue(), to.Alpha(), to.Red(), to.Green(), to.Blue());
+ flushing_volume = std::max(flushing_volume, volume);
+ }
}
+ if (is_from_support)
+ flushing_volume = std::max(flushing_volume, Slic3r::g_min_flush_volume_from_support);
}
matrix[m_number_of_extruders * from_idx + modify_id] = flushing_volume;
}
+
+ // modify to to
int to_idx = i;
if (to_idx != modify_id) {
- const wxColour& from = m_colours[modify_id];
bool is_from_support = is_support_filament(modify_id);
- const wxColour& to = m_colours[to_idx];
bool is_to_support = is_support_filament(to_idx);
int flushing_volume = 0;
if (is_to_support) {
flushing_volume = Slic3r::g_flush_volume_to_support;
}
else {
- const wxColour& to = m_colours[to_idx];
- Slic3r::FlushVolCalculator calculator(m_min_flush_volume, m_max_flush_volume);
- flushing_volume = calculator.calc_flush_vol(from.Alpha(), from.Red(), from.Green(), from.Blue(), to.Alpha(), to.Red(), to.Green(), to.Blue());
- if (is_from_support) {
- flushing_volume = std::max(Slic3r::g_min_flush_volume_from_support, flushing_volume);
+ for (int j = 0; j < multi_colours[modify_id].size(); ++j) {
+ const wxColour& from = multi_colours[modify_id][j];
+ for (int k = 0; k < multi_colours[to_idx].size(); ++k) {
+ const wxColour& to = multi_colours[to_idx][k];
+ int volume = calculator.calc_flush_vol(from.Alpha(), from.Red(), from.Green(), from.Blue(), to.Alpha(), to.Red(), to.Green(), to.Blue());
+ flushing_volume = std::max(flushing_volume, volume);
+ }
}
+ if (is_from_support)
+ flushing_volume = std::max(flushing_volume, Slic3r::g_min_flush_volume_from_support);
+
+ matrix[m_number_of_extruders * modify_id + to_idx] = flushing_volume;
}
- matrix[m_number_of_extruders * modify_id + to_idx] = flushing_volume;
}
}
}
(project_config.option("flush_volumes_matrix"))->values = std::vector(matrix.begin(), matrix.end());
-
wxGetApp().preset_bundle->export_selections(*wxGetApp().app_config);
wxGetApp().plater()->update_project_dirty_from_presets();
@@ -2660,7 +2730,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
m_aui_mgr.Update();
}
- menus.init(q);
+ menus.init(main_frame);
// Events:
@@ -3412,7 +3482,7 @@ std::vector Plater::priv::load_files(const std::vector& input_
int progress_percent = static_cast(100.0f * static_cast(i) / static_cast(input_files.size()));
const auto real_filename = (strategy & LoadStrategy::Restore) ? input_files[++i].filename() : filename;
const auto dlg_info = _L("Loading file") + ": " + from_path(real_filename);
- BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": load file %1%") % filename;
+ BOOST_LOG_TRIVIAL(trace) << __FUNCTION__ << boost::format(": load file %1%") % filename;
dlg_cont = dlg.Update(progress_percent, dlg_info);
if (!dlg_cont) return empty_result;
@@ -5074,7 +5144,7 @@ void Plater::priv::export_gcode(fs::path output_path, bool output_path_on_remova
{
wxCHECK_RET(!(output_path.empty()), "export_gcode: output_path and upload_job empty");
- BOOST_LOG_TRIVIAL(info) << boost::format("export_gcode: output_path %1%")%output_path.string();
+ BOOST_LOG_TRIVIAL(trace) << boost::format("export_gcode: output_path %1%")%output_path.string();
if (model.objects.empty())
return;
@@ -6909,10 +6979,14 @@ void Plater::priv::on_filament_color_changed(wxCommandEvent &event)
{
//q->update_all_plate_thumbnails(true);
//q->get_preview_canvas3D()->update_plate_thumbnails();
+ int modify_id = event.GetInt();
if (wxGetApp().app_config->get("auto_calculate") == "true") {
- int modify_id = event.GetInt();
sidebar->auto_calc_flushing_volumes(modify_id);
}
+
+ auto& ams_multi_color_filment = wxGetApp().preset_bundle->ams_multi_color_filment;
+ if (modify_id >= 0 && modify_id < ams_multi_color_filment.size())
+ ams_multi_color_filment[modify_id].clear();
}
void Plater::priv::install_network_plugin(wxCommandEvent &event)
@@ -7257,7 +7331,7 @@ wxString Plater::priv::get_project_name()
//BBS
void Plater::priv::set_project_name(const wxString& project_name)
{
- BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << __LINE__ << " project is:" << project_name;
+ BOOST_LOG_TRIVIAL(trace) << __FUNCTION__ << __LINE__ << " project is:" << project_name;
m_project_name = project_name;
//update topbar title
wxGetApp().mainframe->SetTitle(m_project_name);
@@ -7287,7 +7361,7 @@ void Plater::priv::set_project_filename(const wxString& filename)
full_path.replace_extension("");
m_project_folder = full_path.parent_path();
- BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << __LINE__ << " project folder is:" << m_project_folder.string();
+ BOOST_LOG_TRIVIAL(trace) << __FUNCTION__ << __LINE__ << " project folder is:" << m_project_folder.string();
//BBS
wxString project_name = from_u8(full_path.filename().string());
@@ -7803,16 +7877,29 @@ void Plater::priv::on_modify_filament(SimpleEvent &evt)
{
FilamentInfomation *filament_info = static_cast(evt.GetEventObject());
int res;
+ std::shared_ptr need_edit_preset;
{
EditFilamentPresetDialog dlg(wxGetApp().mainframe, filament_info);
res = dlg.ShowModal();
+ need_edit_preset = dlg.get_need_edit_preset();
}
wxGetApp().mainframe->update_side_preset_ui();
update_ui_from_settings();
sidebar->update_all_preset_comboboxes();
if (wxID_EDIT == res) {
+ Tab *tab = wxGetApp().get_tab(Preset::Type::TYPE_FILAMENT);
+ //tab->restore_last_select_item();
+ if (tab == nullptr) { return; }
+ // Popup needs to be called before "restore_last_select_item", otherwise the page may not be updated
wxGetApp().params_dialog()->Popup();
+ tab->restore_last_select_item();
+ // Opening Studio and directly accessing the Filament settings interface through the edit preset button will not take effect and requires manual settings.
+ tab->set_just_edit(true);
+ tab->select_preset(need_edit_preset->name);
+ // when some preset have modified, if the printer is not need_edit_preset_name compatible printer, the preset will jump to other preset, need select again
+ if (!need_edit_preset->is_compatible) tab->select_preset(need_edit_preset->name);
}
+
}
void Plater::priv::enter_gizmos_stack()
@@ -8206,6 +8293,7 @@ void Plater::priv::record_start_print_preset(std::string action) {
// record start print preset
try {
json j;
+ j["user_mode"] = wxGetApp().get_mode_str();
int plate_count = partplate_list.get_plate_count();
j["plate_count"] = plate_count;
unsigned int obj_count = model.objects.size();
@@ -8314,6 +8402,11 @@ int Plater::new_project(bool skip_confirm, bool silent, const wxString& project_
get_notification_manager()->bbl_close_plateinfo_notification();
get_notification_manager()->bbl_close_preview_only_notification();
get_notification_manager()->bbl_close_3mf_warn_notification();
+ get_notification_manager()->close_notification_of_type(NotificationType::PlaterError);
+ get_notification_manager()->close_notification_of_type(NotificationType::PlaterWarning);
+ get_notification_manager()->close_notification_of_type(NotificationType::SlicingError);
+ get_notification_manager()->close_notification_of_type(NotificationType::SlicingSeriousWarning);
+ get_notification_manager()->close_notification_of_type(NotificationType::SlicingWarning);
if (!silent)
wxGetApp().mainframe->select_tab(MainFrame::tp3DEditor);
@@ -8366,6 +8459,7 @@ void Plater::load_project(wxString const& filename2,
wxString const& originfile)
{
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "filename is: " << filename2 << "and originfile is: " << originfile;
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__;
auto filename = filename2;
auto check = [&filename, this] (bool yes_or_no) {
if (!yes_or_no && !wxGetApp().check_and_save_current_preset_changes(_L("Load project"),
@@ -8399,6 +8493,11 @@ void Plater::load_project(wxString const& filename2,
get_notification_manager()->bbl_close_plateinfo_notification();
get_notification_manager()->bbl_close_preview_only_notification();
get_notification_manager()->bbl_close_3mf_warn_notification();
+ get_notification_manager()->close_notification_of_type(NotificationType::PlaterError);
+ get_notification_manager()->close_notification_of_type(NotificationType::PlaterWarning);
+ get_notification_manager()->close_notification_of_type(NotificationType::SlicingError);
+ get_notification_manager()->close_notification_of_type(NotificationType::SlicingSeriousWarning);
+ get_notification_manager()->close_notification_of_type(NotificationType::SlicingWarning);
auto path = into_path(filename);
@@ -8498,7 +8597,7 @@ int Plater::save_project(bool saveAs)
Slic3r::remove_backup(model(), false);
p->set_project_filename(filename);
- BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << __LINE__ << " call set_project_filename: " << filename;
+ BOOST_LOG_TRIVIAL(trace) << __FUNCTION__ << __LINE__ << " call set_project_filename: " << filename;
up_to_date(true, false);
up_to_date(true, true);
@@ -8521,7 +8620,7 @@ int Plater::save_project(bool saveAs)
//BBS import model by model id
void Plater::import_model_id(wxString download_info)
{
- BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << __LINE__ << " download info: " << download_info;
+ BOOST_LOG_TRIVIAL(trace) << __FUNCTION__ << __LINE__ << " download info: " << download_info;
wxString download_origin_url = download_info;
wxString download_url;
@@ -9359,7 +9458,8 @@ void Plater::load_gcode()
//BBS: remove GCodeViewer as seperate APP logic
void Plater::load_gcode(const wxString& filename)
{
- BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << __LINE__ << " entry and filename: " << filename;
+ BOOST_LOG_TRIVIAL(trace) << __FUNCTION__ << __LINE__ << " entry and filename: " << filename;
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__;
if (! is_gcode_file(into_u8(filename))
|| (m_last_loaded_gcode == filename && m_only_gcode)
)
@@ -10578,7 +10678,7 @@ void Plater::export_gcode(bool prefer_removable)
PresetBundle *preset_bundle = wxGetApp().preset_bundle;
if (preset_bundle) {
- j["Gcode_printer_model"] = preset_bundle->printers.get_edited_preset().get_printer_type(preset_bundle);
+ j["gcode_printer_model"] = preset_bundle->printers.get_edited_preset().get_printer_type(preset_bundle);
}
NetworkAgent *agent = wxGetApp().getAgent();
} catch (...) {}
@@ -10691,7 +10791,7 @@ TriangleMesh Plater::combine_mesh_fff(const ModelObject& mo, int instance_id, st
std::vector csgmesh;
csgmesh.reserve(2 * mo.volumes.size());
bool has_splitable_volume = csg::model_to_csgmesh(mo, Transform3d::Identity(), std::back_inserter(csgmesh),
- csg::mpartsPositive | csg::mpartsNegative | csg::mpartsDoSplits);
+ csg::mpartsPositive | csg::mpartsNegative);
if (csg::check_csgmesh_booleans(Range{ std::begin(csgmesh), std::end(csgmesh) }) == csgmesh.end()) {
try {
@@ -11085,9 +11185,12 @@ int Plater::export_3mf(const boost::filesystem::path& output_path, SaveStrategy
const std::string path_u8 = into_u8(path);
wxBusyCursor wait;
- BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": path=%1%, backup=%2%, export_plate_idx=%3%, SaveStrategy=%4%")
+ BOOST_LOG_TRIVIAL(trace) << __FUNCTION__ << boost::format(": path=%1%, backup=%2%, export_plate_idx=%3%, SaveStrategy=%4%")
%output_path.string()%(strategy & SaveStrategy::Backup)%export_plate_idx %(unsigned int)strategy;
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(": path=%1%, backup=%2%, export_plate_idx=%3%, SaveStrategy=%4%")
+ % std::string("") % (strategy & SaveStrategy::Backup) % export_plate_idx % (unsigned int)strategy;
+
//BBS: add plate logic for thumbnail generate
std::vector thumbnails;
std::vector calibration_thumbnails;
@@ -11241,7 +11344,7 @@ int Plater::export_3mf(const boost::filesystem::path& output_path, SaveStrategy
if (!(store_params.strategy & SaveStrategy::Silence)) {
// Success
p->set_project_filename(path);
- BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << __LINE__ << " call set_project_filename: " << path;
+ BOOST_LOG_TRIVIAL(trace) << __FUNCTION__ << __LINE__ << " call set_project_filename: " << path;
}
}
else {
diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp
index 40b3dc7fb3a..2ef0d3c96d4 100644
--- a/src/slic3r/GUI/Preferences.cpp
+++ b/src/slic3r/GUI/Preferences.cpp
@@ -664,6 +664,7 @@ wxBoxSizer *PreferencesDialog::create_item_checkbox(wxString title, wxWindow *pa
} else {
wxGetApp().stop_sync_user_preset();
}
+ BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " sync_user_preset: " << (sync ? "true" : "false");
}
#ifdef __WXMSW__
diff --git a/src/slic3r/GUI/PresetComboBoxes.cpp b/src/slic3r/GUI/PresetComboBoxes.cpp
index 2ecbb5e0826..d037a62394a 100644
--- a/src/slic3r/GUI/PresetComboBoxes.cpp
+++ b/src/slic3r/GUI/PresetComboBoxes.cpp
@@ -1424,7 +1424,7 @@ void GUI::CalibrateFilamentComboBox::load_tray(DynamicPrintConfig &config)
auto &filaments = m_collection->get_presets();
auto iter = std::find_if(filaments.begin(), filaments.end(), [this](auto &f) {
bool is_compatible = m_preset_bundle->calibrate_filaments.find(&f) != m_preset_bundle->calibrate_filaments.end();
- return is_compatible && f.is_system && f.filament_id == m_filament_id;
+ return is_compatible && f.filament_id == m_filament_id;
});
//if (iter == filaments.end() && !m_filament_type.empty()) {
// auto filament_type = "Generic " + m_filament_type;
diff --git a/src/slic3r/GUI/Printer/PrinterFileSystem.cpp b/src/slic3r/GUI/Printer/PrinterFileSystem.cpp
index 71483a6665e..aeba2483486 100644
--- a/src/slic3r/GUI/Printer/PrinterFileSystem.cpp
+++ b/src/slic3r/GUI/Printer/PrinterFileSystem.cpp
@@ -469,29 +469,6 @@ PrinterFileSystem::File const &PrinterFileSystem::GetFile(size_t index, bool &se
return m_file_list[m_group_month[index]];
}
-int PrinterFileSystem::RecvData(std::function const & callback)
-{
- int result = 0;
- while (true) {
- Bambu_Sample sample;
- result = Bambu_ReadSample(m_session.tunnel, &sample);
- if (result == Bambu_success) {
- result = callback(sample);
- if (result == 1)
- continue;
- } else if (result == Bambu_would_block) {
- boost::this_thread::sleep(boost::posix_time::seconds(1));
- continue;
- } else if (result == Bambu_stream_end) {
- result = 0;
- } else {
- result = ERROR_PIPE;
- }
- break;
- }
- return result;
-}
-
void PrinterFileSystem::Attached()
{
boost::unique_lock lock(m_mutex);
diff --git a/src/slic3r/GUI/Printer/PrinterFileSystem.h b/src/slic3r/GUI/Printer/PrinterFileSystem.h
index d648b785b35..2900685f8cf 100644
--- a/src/slic3r/GUI/Printer/PrinterFileSystem.h
+++ b/src/slic3r/GUI/Printer/PrinterFileSystem.h
@@ -280,8 +280,6 @@ class PrinterFileSystem : public wxEvtHandler, public boost::enable_shared_from_
void Reconnect(boost::unique_lock & l, int result);
- int RecvData(std::function const & callback);
-
template
void PostCallback(Callback const& callback, int result, T const& resp)
{
diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp
index 52227037f66..bb0127fe7ee 100644
--- a/src/slic3r/GUI/SelectMachine.cpp
+++ b/src/slic3r/GUI/SelectMachine.cpp
@@ -2822,8 +2822,10 @@ void SelectMachineDialog::on_send_print()
// update ota version
NetworkAgent* agent = wxGetApp().getAgent();
- if (agent)
- agent->track_update_property("dev_ota_version", obj_->get_ota_version());
+ if (agent) {
+ std::string dev_ota_str = "dev_ota_ver:" + obj_->dev_id;
+ agent->track_update_property(dev_ota_str, obj_->get_ota_version());
+ }
replace_job(*m_worker, std::move(m_print_job));
BOOST_LOG_TRIVIAL(info) << "print_job: start print job";
@@ -3442,15 +3444,16 @@ void SelectMachineDialog::update_show_status()
}
}
- if (has_timelapse_warning()) {
- show_status(PrintDialogStatus::PrintStatusTimelapseWarning);
- return;
- }
-
// no ams
if (!obj_->has_ams() || !m_checkbox_list["use_ams"]->GetValue()) {
- if (!has_tips(obj_))
- show_status(PrintDialogStatus::PrintStatusReadingFinished);
+ if (!has_tips(obj_)) {
+ if (has_timelapse_warning()) {
+ show_status(PrintDialogStatus::PrintStatusTimelapseWarning);
+ }
+ else {
+ show_status(PrintDialogStatus::PrintStatusReadingFinished);
+ }
+ }
return;
}
@@ -3458,7 +3461,14 @@ void SelectMachineDialog::update_show_status()
if (!m_checkbox_list["use_ams"]->GetValue()) {
m_ams_mapping_result.clear();
sync_ams_mapping_result(m_ams_mapping_result);
- show_status(PrintDialogStatus::PrintStatusDisableAms);
+
+ if (has_timelapse_warning()) {
+ show_status(PrintDialogStatus::PrintStatusTimelapseWarning);
+ }
+ else {
+ show_status(PrintDialogStatus::PrintStatusDisableAms);
+ }
+
return;
}
}
@@ -3477,7 +3487,14 @@ void SelectMachineDialog::update_show_status()
show_status(PrintDialogStatus::PrintStatusNeedUpgradingAms, params);
} else {
if (obj_->is_valid_mapping_result(m_ams_mapping_result)) {
- show_status(PrintDialogStatus::PrintStatusAmsMappingByOrder);
+
+ if (has_timelapse_warning()) {
+ show_status(PrintDialogStatus::PrintStatusTimelapseWarning);
+ }
+ else {
+ show_status(PrintDialogStatus::PrintStatusAmsMappingByOrder);
+ }
+
} else {
int mismatch_index = -1;
for (int i = 0; i < m_ams_mapping_result.size(); i++) {
@@ -3498,20 +3515,31 @@ void SelectMachineDialog::update_show_status()
}
if (m_ams_mapping_res) {
- show_status(PrintDialogStatus::PrintStatusAmsMappingSuccess);
+ if (has_timelapse_warning()) {
+ show_status(PrintDialogStatus::PrintStatusTimelapseWarning);
+ }
+ else {
+ show_status(PrintDialogStatus::PrintStatusAmsMappingSuccess);
+ }
return;
}
else {
if (obj_->is_valid_mapping_result(m_ams_mapping_result)) {
- if (!has_tips(obj_))
- show_status(PrintDialogStatus::PrintStatusAmsMappingValid);
- return;
+ if (!has_tips(obj_)){
+ if (has_timelapse_warning()) {
+ show_status(PrintDialogStatus::PrintStatusTimelapseWarning);
+ }
+ else {
+ show_status(PrintDialogStatus::PrintStatusAmsMappingValid);
+ }
+ return;
+ }
}
else {
show_status(PrintDialogStatus::PrintStatusAmsMappingInvalid);
return;
}
- }
+ }
}
bool SelectMachineDialog::has_timelapse_warning()
diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp
index 988f5e26cfb..2557b019493 100644
--- a/src/slic3r/GUI/StatusPanel.cpp
+++ b/src/slic3r/GUI/StatusPanel.cpp
@@ -2026,7 +2026,7 @@ void StatusPanel::update(MachineObject *obj)
m_project_task_panel->Thaw();
#if !BBL_RELEASE_TO_PUBLIC
- auto delay1 = std::chrono::duration_cast(obj->last_update_time - std::chrono::system_clock::now()).count();
+ auto delay1 = std::chrono::duration_cast(obj->last_utc_time - std::chrono::system_clock::now()).count();
auto delay2 = std::chrono::duration_cast(obj->last_push_time - std::chrono::system_clock::now()).count();
auto delay = wxString::Format(" %ld/%ld", delay1, delay2);
m_staticText_timelapse
@@ -3228,7 +3228,7 @@ void StatusPanel::on_axis_ctrl_e_down_10(wxCommandEvent &event)
void StatusPanel::on_start_unload(wxCommandEvent &event)
{
- if (obj) obj->command_unload_filament();
+ if (obj) obj->command_ams_switch(255);
}
void StatusPanel::on_set_bed_temp()
@@ -3504,7 +3504,7 @@ void StatusPanel::on_filament_edit(wxCommandEvent &event)
for (auto col : tray_it->second->cols) {
cols.push_back( AmsTray::decode_color(col));
}
-
+ m_filament_setting_dlg->set_ctype(tray_it->second->ctype);
m_filament_setting_dlg->ams_filament_id = tray_it->second->setting_id;
if (m_filament_setting_dlg->ams_filament_id.empty()) {
@@ -3512,6 +3512,7 @@ void StatusPanel::on_filament_edit(wxCommandEvent &event)
}
else {
m_filament_setting_dlg->set_color(color);
+ m_filament_setting_dlg->set_colors(cols);
}
m_filament_setting_dlg->m_is_third = !MachineObject::is_bbl_filament(tray_it->second->tag_uid);
@@ -3559,12 +3560,19 @@ void StatusPanel::on_ext_spool_edit(wxCommandEvent &event)
wxColor color = AmsTray::decode_color(obj->vt_tray.color);
m_filament_setting_dlg->ams_filament_id = obj->vt_tray.setting_id;
+ std::vector cols;
+ for (auto col : obj->vt_tray.cols) {
+ cols.push_back(AmsTray::decode_color(col));
+ }
+ m_filament_setting_dlg->set_ctype(obj->vt_tray.ctype);
if (m_filament_setting_dlg->ams_filament_id.empty()) {
m_filament_setting_dlg->set_empty_color(color);
}
else {
m_filament_setting_dlg->set_color(color);
+ m_filament_setting_dlg->set_colors(cols);
+
}
m_filament_setting_dlg->m_is_third = !MachineObject::is_bbl_filament(obj->vt_tray.tag_uid);
diff --git a/src/slic3r/GUI/UnsavedChangesDialog.cpp b/src/slic3r/GUI/UnsavedChangesDialog.cpp
index 710898e72f7..bb97e53d267 100644
--- a/src/slic3r/GUI/UnsavedChangesDialog.cpp
+++ b/src/slic3r/GUI/UnsavedChangesDialog.cpp
@@ -1370,6 +1370,9 @@ static wxString get_string_value(std::string opt_key, const DynamicPrintConfig&
else if (opt_key == "thumbnails") {
return get_thumbnails_string(config.option(opt_key)->values);
}
+ else if (opt_key == "head_wrap_detect_zone") {
+ return get_thumbnails_string(config.option(opt_key)->values);
+ }
Vec2d val = config.opt(opt_key)->get_at(opt_idx);
return from_u8((boost::format("[%1%]") % ConfigOptionPoint(val).serialize()).str());
}
diff --git a/src/slic3r/GUI/WebGuideDialog.cpp b/src/slic3r/GUI/WebGuideDialog.cpp
index 2ca91bd3b2c..52a0752996e 100644
--- a/src/slic3r/GUI/WebGuideDialog.cpp
+++ b/src/slic3r/GUI/WebGuideDialog.cpp
@@ -45,21 +45,50 @@ static wxString update_custom_filaments()
std::map> temp_filament_id_to_presets = preset_bundle->filaments.get_filament_presets();
std::vector> need_sort;
+ bool need_delete_some_filament = false;
for (std::pair> filament_id_to_presets : temp_filament_id_to_presets) {
std::string filament_id = filament_id_to_presets.first;
if (filament_id.empty()) continue;
+ if (filament_id == "null") {
+ need_delete_some_filament = true;
+ }
+ bool filament_with_base_id = false;
+ bool not_need_show = false;
+ std::string filament_name;
for (const Preset *preset : filament_id_to_presets.second) {
- if (preset->is_system || filament_id.empty() || "null" == filament_id || filament_id.size() != 8 || filament_id[0] != 'P') break;
- auto filament_vendor = dynamic_cast (const_cast(preset)->config.option("filament_vendor",false));
- if(filament_vendor&&filament_vendor->values.size()&&filament_vendor->values[0] == "Generic") break;
- std::string preset_name = preset->name;
- size_t index_at = preset_name.find(" @");
- if (std::string::npos != index_at) { preset_name = preset_name.substr(0, index_at); }
- need_sort.push_back(std::make_pair(preset_name, preset->filament_id));
- break;
+ if (preset->is_system) {
+ not_need_show = true;
+ break;
+ }
+ if (preset->inherits() != "") continue;
+ if (!preset->base_id.empty()) filament_with_base_id = true;
+
+ if (!not_need_show) {
+ auto filament_vendor = dynamic_cast(const_cast(preset)->config.option("filament_vendor", false));
+ if (filament_vendor && filament_vendor->values.size() && filament_vendor->values[0] == "Generic") not_need_show = true;
+ }
+
+ if (filament_name.empty()) {
+ std::string preset_name = preset->name;
+ size_t index_at = preset_name.find(" @");
+ if (std::string::npos != index_at) { preset_name = preset_name.substr(0, index_at); }
+ filament_name = preset_name;
+ }
+ }
+ if (not_need_show) continue;
+ if (!filament_name.empty()) {
+ if (filament_with_base_id) {
+ need_sort.push_back(std::make_pair("[Action Required] " + filament_name, filament_id));
+ } else {
+
+ need_sort.push_back(std::make_pair(filament_name, filament_id));
+ }
}
}
std::sort(need_sort.begin(), need_sort.end(), [](const std::pair &a, const std::pair &b) { return a.first < b.first; });
+ if (need_delete_some_filament) {
+ need_sort.push_back(std::make_pair("[Action Required]", "null"));
+ }
json temp_j;
for (std::pair &filament_name_to_id : need_sort) {
temp_j["name"] = filament_name_to_id.first;
@@ -162,7 +191,7 @@ GuideFrame::~GuideFrame()
void GuideFrame::load_url(wxString &url)
{
- BOOST_LOG_TRIVIAL(info) << __FUNCTION__<< " enter, url=" << url.ToStdString();
+ BOOST_LOG_TRIVIAL(trace) << __FUNCTION__<< " enter, url=" << url.ToStdString();
WebView::LoadUrl(m_browser, url);
m_browser->SetFocus();
UpdateState();
@@ -523,7 +552,7 @@ void GuideFrame::OnError(wxWebViewEvent &evt)
// Show the info bar with an error
// m_info->ShowMessage(_L("An error occurred loading ") + evt.GetURL() +
// "\n" + "'" + category + "'", wxICON_ERROR);
- BOOST_LOG_TRIVIAL(info) << "GuideFrame::OnError: An error occurred loading " << evt.GetURL() << category;
+ BOOST_LOG_TRIVIAL(trace) << "GuideFrame::OnError: An error occurred loading " << evt.GetURL() << category;
UpdateState();
}
@@ -1581,7 +1610,7 @@ bool GuideFrame::LoadFile(std::string jPath, std::string &sContent)
std::stringstream buffer;
buffer << t.rdbuf();
sContent=buffer.str();
- BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", load %1% into buffer")% jPath;
+ BOOST_LOG_TRIVIAL(trace) << __FUNCTION__ << boost::format(", load %1% into buffer")% jPath;
}
catch (std::exception &e)
{
diff --git a/src/slic3r/GUI/WebViewDialog.cpp b/src/slic3r/GUI/WebViewDialog.cpp
index 538ecf1e47d..98d24d4175a 100644
--- a/src/slic3r/GUI/WebViewDialog.cpp
+++ b/src/slic3r/GUI/WebViewDialog.cpp
@@ -220,7 +220,7 @@ WebViewPanel::WebViewPanel(wxWindow *parent)
WebViewPanel::~WebViewPanel()
{
- BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " Start";
+ BOOST_LOG_TRIVIAL(trace) << __FUNCTION__ << " Start";
SetEvtHandlerEnabled(false);
delete m_tools_menu;
@@ -230,7 +230,7 @@ WebViewPanel::~WebViewPanel()
delete m_LoginUpdateTimer;
m_LoginUpdateTimer = NULL;
}
- BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " End";
+ BOOST_LOG_TRIVIAL(trace) << __FUNCTION__ << " End";
}
@@ -459,9 +459,9 @@ void WebViewPanel::OpenModelDetail(std::string id, NetworkAgent *agent)
{
if (url.find("?") != std::string::npos)
{
- url += "&from=bambustudio";
+ url += "&from=orcaslicer";
} else {
- url += "?from=bambustudio";
+ url += "?from=orcaslicer";
}
wxLaunchDefaultBrowser(url);
@@ -536,7 +536,7 @@ void WebViewPanel::update_mode()
*/
void WebViewPanel::OnNavigationRequest(wxWebViewEvent& evt)
{
- BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": " << evt.GetTarget().ToUTF8().data();
+ BOOST_LOG_TRIVIAL(trace) << __FUNCTION__ << ": " << evt.GetTarget().ToUTF8().data();
const wxString &url = evt.GetURL();
if (url.StartsWith("File://") || url.StartsWith("file://")) {
if (!url.Contains("/web/homepage/index.html")) {
@@ -580,7 +580,7 @@ void WebViewPanel::OnNavigationComplete(wxWebViewEvent& evt)
{
m_browser->Show();
Layout();
- BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": " << evt.GetTarget().ToUTF8().data();
+ BOOST_LOG_TRIVIAL(trace) << __FUNCTION__ << ": " << evt.GetTarget().ToUTF8().data();
if (wxGetApp().get_mode() == comDevelop)
wxLogMessage("%s", "Navigation complete; url='" + evt.GetURL() + "'");
UpdateState();
@@ -591,7 +591,7 @@ void WebViewPanel::OnNavigationComplete(wxWebViewEvent& evt)
*/
void WebViewPanel::OnDocumentLoaded(wxWebViewEvent& evt)
{
- BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": " << evt.GetTarget().ToUTF8().data();
+ BOOST_LOG_TRIVIAL(trace) << __FUNCTION__ << ": " << evt.GetTarget().ToUTF8().data();
// Only notify if the document is the main frame, not a subframe
if (evt.GetURL() == m_browser->GetCurrentURL())
{
@@ -604,7 +604,7 @@ void WebViewPanel::OnDocumentLoaded(wxWebViewEvent& evt)
void WebViewPanel::OnTitleChanged(wxWebViewEvent &evt)
{
- BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": " << evt.GetString().ToUTF8().data();
+ BOOST_LOG_TRIVIAL(trace) << __FUNCTION__ << ": " << evt.GetString().ToUTF8().data();
// wxGetApp().CallAfter([this] { SendRecentList(); });
}
@@ -613,7 +613,7 @@ void WebViewPanel::OnTitleChanged(wxWebViewEvent &evt)
*/
void WebViewPanel::OnNewWindow(wxWebViewEvent& evt)
{
- BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": " << evt.GetURL().ToUTF8().data();
+ BOOST_LOG_TRIVIAL(trace) << __FUNCTION__ << ": " << evt.GetURL().ToUTF8().data();
wxString flag = " (other)";
if (evt.GetNavigationAction() == wxWEBVIEW_NAV_ACTION_USER)
@@ -634,7 +634,7 @@ void WebViewPanel::OnNewWindow(wxWebViewEvent& evt)
void WebViewPanel::OnScriptMessage(wxWebViewEvent& evt)
{
- BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": " << evt.GetString().ToUTF8().data();
+ BOOST_LOG_TRIVIAL(trace) << __FUNCTION__ << ": " << evt.GetString().ToUTF8().data();
// update login status
if (m_LoginUpdateTimer == nullptr) {
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << " Create Timer";
@@ -880,7 +880,7 @@ void WebViewPanel::OnError(wxWebViewEvent& evt)
WX_ERROR_CASE(wxWEBVIEW_NAV_ERR_OTHER);
}
- BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": [" << category << "] " << evt.GetString().ToUTF8().data();
+ BOOST_LOG_TRIVIAL(trace) << __FUNCTION__ << ": [" << category << "] " << evt.GetString().ToUTF8().data();
if (wxGetApp().get_mode() == comDevelop)
wxLogMessage("%s", "Error; url='" + evt.GetURL() + "', error='" + category + " (" + evt.GetString() + ")'");
diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp
index eb7367cb8dd..f70d16a7f11 100644
--- a/src/slic3r/GUI/Widgets/AMSControl.cpp
+++ b/src/slic3r/GUI/Widgets/AMSControl.cpp
@@ -49,6 +49,7 @@ bool AMSinfo::parse_ams_info(MachineObject *obj, Ams *ams, bool remain_flag, boo
if (it != ams->trayList.end() && it->second->is_exists) {
if (it->second->is_tray_info_ready()) {
info.can_id = it->second->id;
+ info.ctype = it->second->ctype;
info.material_name = it->second->get_display_filament_type();
if (!it->second->color.empty()) {
info.material_colour = AmsTray::decode_color(it->second->color);
@@ -78,6 +79,7 @@ bool AMSinfo::parse_ams_info(MachineObject *obj, Ams *ams, bool remain_flag, boo
} else {
info.can_id = it->second->id;
info.material_name = "";
+ info.ctype = 0;
info.material_colour = AMS_TRAY_DEFAULT_COL;
info.material_state = AMSCanType::AMS_CAN_TYPE_THIRDBRAND;
wxColour(255, 255, 255);
@@ -644,6 +646,7 @@ void AMSLib::create(wxWindow *parent, wxWindowID id, const wxPoint &pos, const w
m_bitmap_readonly = ScalableBitmap(this, "ams_readonly", 14);
m_bitmap_readonly_light = ScalableBitmap(this, "ams_readonly_light", 14);
m_bitmap_transparent = ScalableBitmap(this, "transparent_ams_lib", 68);
+ m_bitmap_transparent_def = ScalableBitmap(this, "transparent_ams_lib", 68);
m_bitmap_extra_tray_left = ScalableBitmap(this, "extra_ams_tray_left", 80);
m_bitmap_extra_tray_right = ScalableBitmap(this, "extra_ams_tray_right", 80);
@@ -857,6 +860,10 @@ void AMSLib::render_generic_text(wxDC &dc)
dc.SetFont(::Label::Body_13);
dc.SetTextForeground(temp_text_colour);
+ auto alpha = m_info.material_colour.Alpha();
+ if (alpha != 0 && alpha != 255) {
+ dc.SetTextForeground(*wxBLACK);
+ }
auto libsize = GetSize();
if (m_info.material_state == AMSCanType::AMS_CAN_TYPE_THIRDBRAND
@@ -903,6 +910,7 @@ void AMSLib::render_generic_text(wxDC &dc)
auto pot_top = wxPoint((libsize.x - line_top_tsize.x) / 2, (libsize.y - line_top_tsize.y) / 2 - line_top_tsize.y + FromDIP(6));
dc.DrawText(line_top, pot_top);
+
auto pot_bottom = wxPoint((libsize.x - line_bottom_tsize.x) / 2, (libsize.y - line_bottom_tsize.y) / 2 + FromDIP(4));
dc.DrawText(line_bottom, pot_bottom);
}
@@ -966,7 +974,7 @@ void AMSLib::render_extra_lib(wxDC& dc)
ScalableBitmap tray_bitmap_selected = m_can_index <= 1 ? m_bitmap_extra_tray_left_selected : m_bitmap_extra_tray_right_selected;
- auto tmp_lib_colour = m_info.material_colour;
+ auto tmp_lib_colour = m_info.material_colour;
auto temp_bitmap_third = m_bitmap_editable_light;
auto temp_bitmap_brand = m_bitmap_readonly_light;
@@ -1012,11 +1020,34 @@ void AMSLib::render_extra_lib(wxDC& dc)
temp_bitmap_brand = m_bitmap_readonly;
}
+ dc.SetPen(wxPen(*wxTRANSPARENT_PEN));
+ if (m_info.material_cols.size() > 1) {
+ int left = FromDIP(10);
+ int gwidth = std::round(size.x / (m_info.material_cols.size() - 1));
+ //gradient
+ if (m_info.ctype == 0) {
+ for (int i = 0; i < m_info.material_cols.size() - 1; i++) {
+ auto rect = wxRect(left, FromDIP(10), size.x - FromDIP(20), size.y - FromDIP(20));
+ dc.GradientFillLinear(rect, m_info.material_cols[i], m_info.material_cols[i + 1], wxEAST);
+ left += gwidth;
+ }
+ }
+ else {
+ int cols_size = m_info.material_cols.size();
+ for (int i = 0; i < cols_size; i++) {
+ dc.SetBrush(wxBrush(m_info.material_cols[i]));
+ float x = FromDIP(10) + ((float)size.x - FromDIP(20)) * i / cols_size;
+ dc.DrawRoundedRectangle(x, FromDIP(10), ((float)size.x - FromDIP(20)) / cols_size, size.y - FromDIP(20), 0);
+ }
+ dc.SetBrush(wxBrush(tmp_lib_colour));
+ }
+ }
+ else {
+ dc.SetBrush(wxBrush(tmp_lib_colour));
+ dc.DrawRoundedRectangle(FromDIP(10), FromDIP(10), size.x - FromDIP(20), size.y - FromDIP(20), 0);
+ }
dc.SetPen(wxPen(*wxTRANSPARENT_PEN));
dc.SetBrush(wxBrush(tmp_lib_colour));
- dc.DrawRoundedRectangle(FromDIP(10), FromDIP(10), size.x - FromDIP(20), size.y - FromDIP(20), 0);
-
-
if (!m_disable_mode) {
// edit icon
if (m_info.material_state != AMSCanType::AMS_CAN_TYPE_EMPTY && m_info.material_state != AMSCanType::AMS_CAN_TYPE_NONE)
@@ -1107,7 +1138,7 @@ void AMSLib::render_generic_lib(wxDC &dc)
//draw remain
int height = size.y - FromDIP(8);
- int curr_height = height * float(m_info.material_remain * 1.0 / 100.0);
+ int curr_height = height * float(m_info.material_remain * 1.0 / 100.0); dc.SetFont(::Label::Body_13);
int top = height - curr_height;
@@ -1116,24 +1147,60 @@ void AMSLib::render_generic_lib(wxDC &dc)
//transparent
auto alpha = m_info.material_colour.Alpha();
if (alpha == 0) {
- dc.DrawBitmap(m_bitmap_transparent.bmp(), FromDIP(4), FromDIP(4));
+ dc.DrawBitmap(m_bitmap_transparent_def.bmp(), FromDIP(4), FromDIP(4));
}
-
//gradient
if (m_info.material_cols.size() > 1) {
int left = FromDIP(4);
float total_width = size.x - FromDIP(8);
int gwidth = std::round(total_width / (m_info.material_cols.size() - 1));
+ //gradient
+ if (m_info.ctype == 0) {
+ for (int i = 0; i < m_info.material_cols.size() - 1; i++) {
- for (int i = 0; i < m_info.material_cols.size() - 1; i++) {
+ if ((left + gwidth) > (size.x - FromDIP(8))) {
+ gwidth = (size.x - FromDIP(4)) - left;
+ }
- if ((left + gwidth) > (size.x - FromDIP(8))) {
- gwidth = (size.x - FromDIP(4)) - left;
+ auto rect = wxRect(left, height - curr_height + FromDIP(4), gwidth, curr_height);
+ dc.GradientFillLinear(rect, m_info.material_cols[i], m_info.material_cols[i + 1], wxEAST);
+ left += gwidth;
+ }
+ }
+ else {
+ //multicolour
+ gwidth = std::round(total_width / m_info.material_cols.size());
+ for (int i = 0; i < m_info.material_cols.size(); i++) {
+ dc.SetPen(wxPen(*wxTRANSPARENT_PEN));
+ dc.SetBrush(wxBrush(m_info.material_cols[i]));
+ if (i == 0 || i == m_info.material_cols.size() - 1) {
+#ifdef __APPLE__
+ dc.DrawRoundedRectangle(left + gwidth * i, height - curr_height + FromDIP(4), gwidth, curr_height, m_radius);
+#else
+ dc.DrawRoundedRectangle(left + gwidth * i, height - curr_height + FromDIP(4), gwidth, curr_height, m_radius - 1);
+#endif
+ //add rectangle
+ int dr_gwidth = std::round(gwidth * 0.6);
+ if (i == 0) {
+ dc.DrawRectangle(left + gwidth - dr_gwidth, height - curr_height + FromDIP(4), dr_gwidth, curr_height);
+ }
+ else {
+ dc.DrawRectangle(left + gwidth*i, height - curr_height + FromDIP(4), dr_gwidth, curr_height);
+ }
+ }
+ else {
+ dc.DrawRectangle(left + gwidth * i, height - curr_height + FromDIP(4), gwidth, curr_height);
+ }
+ }
+ //reset pen and brush
+ if (m_selected || m_hover) {
+ dc.SetPen(wxPen(*wxTRANSPARENT_PEN));
+ dc.SetBrush(wxBrush(tmp_lib_colour));
+ }
+ else {
+ dc.SetPen(wxPen(tmp_lib_colour, 1, wxSOLID));
+ dc.SetBrush(wxBrush(tmp_lib_colour));
}
-
- auto rect = wxRect(left, height - curr_height + FromDIP(4), gwidth, curr_height);
- dc.GradientFillLinear(rect, m_info.material_cols[i], m_info.material_cols[i + 1], wxEAST);
- left += gwidth;
}
}
else {
@@ -1141,6 +1208,23 @@ void AMSLib::render_generic_lib(wxDC &dc)
dc.DrawRoundedRectangle(FromDIP(4), FromDIP(4) + top, size.x - FromDIP(8), curr_height, m_radius);
#else
dc.DrawRoundedRectangle(FromDIP(4), FromDIP(4) + top, size.x - FromDIP(8), curr_height, m_radius - 1);
+ if (alpha != 0 && alpha != 255) {
+ if (transparent_changed) {
+ std::string rgb = (tmp_lib_colour.GetAsString(wxC2S_HTML_SYNTAX)).ToStdString();
+ if (rgb.size() == 8) {
+ //delete alpha value
+ rgb= rgb.substr(0, rgb.size() - 2);
+ }
+ float alpha_f = 0.3 * tmp_lib_colour.Alpha() / 255.0;
+ std::vector replace;
+ replace.push_back(rgb);
+ std::string fill_replace = "fill-opacity=\"" + std::to_string(alpha_f);
+ replace.push_back(fill_replace);
+ m_bitmap_transparent = ScalableBitmap(this, "transparent_ams_lib", 68, false, false, true, replace);
+ transparent_changed = false;
+ }
+ dc.DrawBitmap(m_bitmap_transparent.bmp(), FromDIP(4), FromDIP(4));
+ }
#endif
}
}
@@ -1209,7 +1293,9 @@ void AMSLib::Update(Caninfo info, bool refresh)
if (dev->get_selected_machine() && dev->get_selected_machine() != m_obj) {
m_obj = dev->get_selected_machine();
}
-
+ if (info.material_colour.Alpha() != 0 && info.material_colour.Alpha() != 255 && m_info.material_colour != info.material_colour) {
+ transparent_changed = true;
+ }
m_info = info;
Layout();
if (refresh) Refresh();
@@ -1245,7 +1331,9 @@ bool AMSLib::Enable(bool enable) { return wxWindow::Enable(enable); }
void AMSLib::msw_rescale()
{
- m_bitmap_transparent.msw_rescale();
+ //m_bitmap_transparent.msw_rescale();
+ m_bitmap_transparent_def.msw_rescale();
+
}
/*************************************************
@@ -3182,6 +3270,10 @@ void AMSControl::update_vams_kn_value(AmsTray tray, MachineObject* obj)
m_vams_info.material_name = tray.get_display_filament_type();
m_vams_info.material_colour = tray.get_color();
m_vams_lib->m_info.material_name = tray.get_display_filament_type();
+ auto col= tray.get_color();
+ if (col.Alpha() != 0 && col.Alpha() != 255 && col.Alpha() != 254 && m_vams_lib->m_info.material_colour != col) {
+ m_vams_lib->transparent_changed = true;
+ }
m_vams_lib->m_info.material_colour = tray.get_color();
m_vams_lib->Refresh();
}
diff --git a/src/slic3r/GUI/Widgets/AMSControl.hpp b/src/slic3r/GUI/Widgets/AMSControl.hpp
index 67f0c0ce18a..2313f84f9a9 100644
--- a/src/slic3r/GUI/Widgets/AMSControl.hpp
+++ b/src/slic3r/GUI/Widgets/AMSControl.hpp
@@ -140,6 +140,7 @@ struct Caninfo
wxString material_name;
wxColour material_colour = {*wxWHITE};
AMSCanType material_state;
+ int ctype=0;
int material_remain = 100;
float k = 0.0f;
float n = 0.0f;
@@ -298,6 +299,7 @@ class AMSLib : public wxWindow
Caninfo m_info;
MachineObject* m_obj = {nullptr};
int m_can_index = 0;
+ bool transparent_changed = { false };
AMSModel m_ams_model;
void Update(Caninfo info, bool refresh = true);
@@ -322,6 +324,7 @@ class AMSLib : public wxWindow
ScalableBitmap m_bitmap_readonly;
ScalableBitmap m_bitmap_readonly_light;
ScalableBitmap m_bitmap_transparent;
+ ScalableBitmap m_bitmap_transparent_def;
ScalableBitmap m_bitmap_extra_tray_left;
ScalableBitmap m_bitmap_extra_tray_right;
@@ -338,6 +341,7 @@ class AMSLib : public wxWindow
bool m_hover = {false};
bool m_show_kn = {false};
bool m_support_cali = {false};
+
double m_radius = {4};
wxColour m_border_color;
diff --git a/src/slic3r/GUI/Widgets/WebView.cpp b/src/slic3r/GUI/Widgets/WebView.cpp
index 38afbfbd466..5cb6eb4503a 100644
--- a/src/slic3r/GUI/Widgets/WebView.cpp
+++ b/src/slic3r/GUI/Widgets/WebView.cpp
@@ -251,7 +251,7 @@ wxWebView* WebView::CreateWebView(wxWindow * parent, wxString const & url)
url2.Replace("\\", "/");
#endif
if (!url2.empty()) { url2 = wxURI(url2).BuildURI(); }
- BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": " << url2.ToUTF8();
+ BOOST_LOG_TRIVIAL(trace) << __FUNCTION__ << ": " << url2.ToUTF8();
#ifdef __WIN32__
wxWebView* webView = new WebViewEdge;
@@ -337,7 +337,7 @@ void WebView::LoadUrl(wxWebView * webView, wxString const &url)
url2.Replace("\\", "/");
#endif
if (!url2.empty()) { url2 = wxURI(url2).BuildURI(); }
- BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << url2.ToUTF8();
+ BOOST_LOG_TRIVIAL(trace) << __FUNCTION__ << url2.ToUTF8();
webView->LoadURL(url2);
}
diff --git a/src/slic3r/GUI/WipeTowerDialog.cpp b/src/slic3r/GUI/WipeTowerDialog.cpp
index 5f308366e65..eb5ea701ff7 100644
--- a/src/slic3r/GUI/WipeTowerDialog.cpp
+++ b/src/slic3r/GUI/WipeTowerDialog.cpp
@@ -11,10 +11,11 @@
#include "Widgets/Button.hpp"
#include "slic3r/Utils/ColorSpaceConvert.hpp"
#include "MainFrame.hpp"
+#include "libslic3r/Config.hpp"
#include
-
+using namespace Slic3r;
using namespace Slic3r::GUI;
int scale(const int val) { return val * Slic3r::GUI::wxGetApp().em_unit() / 10; }
@@ -766,10 +767,29 @@ void WipingPanel::update_warning_texts()
void WipingPanel::calc_flushing_volumes()
{
- for (int from_idx = 0; from_idx < m_colours.size(); from_idx++) {
- const wxColour& from = m_colours[from_idx];
+ auto& ams_multi_color_filament = wxGetApp().preset_bundle->ams_multi_color_filment;
+ std::vector> multi_colors;
+
+ // Support for multi-color filament
+ for (int i = 0; i < m_colours.size(); ++i) {
+ std::vector single_filament;
+ if (i < ams_multi_color_filament.size()) {
+ if (!ams_multi_color_filament[i].empty()) {
+ std::vector colors = ams_multi_color_filament[i];
+ for (int j = 0; j < colors.size(); ++j) {
+ single_filament.push_back(wxColour(colors[j]));
+ }
+ multi_colors.push_back(single_filament);
+ continue;
+ }
+ }
+ single_filament.push_back(wxColour(m_colours[i]));
+ multi_colors.push_back(single_filament);
+ }
+
+ for (int from_idx = 0; from_idx < multi_colors.size(); ++from_idx) {
bool is_from_support = is_support_filament(from_idx);
- for (int to_idx = 0; to_idx < m_colours.size(); to_idx++) {
+ for (int to_idx = 0; to_idx < multi_colors.size(); ++to_idx) {
bool is_to_support = is_support_filament(to_idx);
if (from_idx == to_idx) {
edit_boxes[to_idx][from_idx]->SetValue(std::to_string(0));
@@ -780,8 +800,15 @@ void WipingPanel::calc_flushing_volumes()
flushing_volume = Slic3r::g_flush_volume_to_support;
}
else {
- const wxColour& to = m_colours[to_idx];
- flushing_volume = calc_flushing_volume(from, to);
+ for (int i = 0; i < multi_colors[from_idx].size(); ++i) {
+ const wxColour& from = multi_colors[from_idx][i];
+ for (int j = 0; j < multi_colors[to_idx].size(); ++j) {
+ const wxColour& to = multi_colors[to_idx][j];
+ int volume = calc_flushing_volume(from, to);
+ flushing_volume = std::max(flushing_volume, volume);
+ }
+ }
+
if (is_from_support) {
flushing_volume = std::max(Slic3r::g_min_flush_volume_from_support, flushing_volume);
}
diff --git a/src/slic3r/GUI/wxExtensions.cpp b/src/slic3r/GUI/wxExtensions.cpp
index 092c7a582f8..b53573d0194 100644
--- a/src/slic3r/GUI/wxExtensions.cpp
+++ b/src/slic3r/GUI/wxExtensions.cpp
@@ -7,7 +7,6 @@
#include
-#include "BitmapCache.hpp"
#include "GUI.hpp"
#include "GUI_App.hpp"
#include "GUI_ObjectList.hpp"
@@ -432,10 +431,14 @@ wxBitmap create_scaled_bitmap( const std::string& bmp_name_in,
const bool grayscale/* = false*/,
const std::string& new_color/* = std::string()*/, // color witch will used instead of orange
const bool menu_bitmap/* = false*/,
- const bool resize/* = false*/)
+ const bool resize/* = false*/,
+ const bool bitmap2/* = false*/,
+ const vector& array_new_color/* = vector*/)//used for semi transparent material)
{
static Slic3r::GUI::BitmapCache cache;
-
+ if (bitmap2) {
+ return create_scaled_bitmap2(bmp_name_in, cache, win, px_cnt, grayscale, resize, array_new_color);
+ }
unsigned int width = 0;
unsigned int height = (unsigned int) (win->FromDIP(px_cnt) + 0.5f);
@@ -462,6 +465,25 @@ wxBitmap create_scaled_bitmap( const std::string& bmp_name_in,
return *bmp;
}
+wxBitmap create_scaled_bitmap2(const std::string& bmp_name_in, Slic3r::GUI::BitmapCache& cache, wxWindow* win/* = nullptr*/ ,
+ const int px_cnt/* = 16*/, const bool grayscale/* = false*/ , const bool resize/* = false*/ ,
+ const vector& array_new_color/* = vector()*/) // color witch will used instead of orange
+{
+ unsigned int width = 0;
+ unsigned int height = (unsigned int)(win->FromDIP(px_cnt) + 0.5f);
+
+ std::string bmp_name = bmp_name_in;
+ boost::replace_last(bmp_name, ".png", "");
+
+ wxBitmap* bmp = cache.load_svg2(bmp_name, width, height, grayscale, false, array_new_color, resize ? em_unit(win) * 0.1f : 0.f);
+ if (bmp == nullptr) {
+ // No SVG found
+ throw Slic3r::RuntimeError("Could not load bitmap: " + bmp_name);
+ }
+ return *bmp;
+}
+
+
wxBitmap* get_default_extruder_color_icon(bool thin_icon/* = false*/)
{
static Slic3r::GUI::BitmapCache bmp_cache;
@@ -858,11 +880,13 @@ ScalableBitmap::ScalableBitmap( wxWindow *parent,
const std::string& icon_name/* = ""*/,
const int px_cnt/* = 16*/,
const bool grayscale/* = false*/,
- const bool resize/* = false*/):
+ const bool resize/* = false*/,
+ const bool bitmap2/* = false*/,
+ const std::vector& new_color/* = vector*/) :
m_parent(parent), m_icon_name(icon_name),
m_px_cnt(px_cnt), m_grayscale(grayscale), m_resize(resize) // BBS: support resize by fill border
{
- m_bmp = create_scaled_bitmap(icon_name, parent, px_cnt, m_grayscale, std::string(), false, resize);
+ m_bmp = create_scaled_bitmap(icon_name, parent, px_cnt, m_grayscale, std::string(), false, resize, bitmap2, new_color);
if (px_cnt == 0) {
m_px_cnt = m_bmp.GetHeight(); // scale
unsigned int height = (unsigned int) (parent->FromDIP(m_px_cnt) + 0.5f);
diff --git a/src/slic3r/GUI/wxExtensions.hpp b/src/slic3r/GUI/wxExtensions.hpp
index 44e289ed09e..3859fb26f05 100644
--- a/src/slic3r/GUI/wxExtensions.hpp
+++ b/src/slic3r/GUI/wxExtensions.hpp
@@ -15,7 +15,7 @@
#include
#include
-
+#include "BitmapCache.hpp"
#include "Widgets/PopupWindow.hpp"
#ifdef __WXMSW__
@@ -59,7 +59,13 @@ wxBitmap create_menu_bitmap(const std::string& bmp_name);
wxBitmap create_scaled_bitmap(const std::string& bmp_name, wxWindow *win = nullptr,
const int px_cnt = 16, const bool grayscale = false,
const std::string& new_color = std::string(), // color witch will used instead of orange
- const bool menu_bitmap = false, const bool resize = false);
+ const bool menu_bitmap = false, const bool resize = false,
+ const bool bitmap2 = false,// for create_scaled_bitmap2
+ const std::vector& array_new_color = std::vector());
+//used for semi transparent material
+wxBitmap create_scaled_bitmap2(const std::string& bmp_name_in, Slic3r::GUI::BitmapCache& cache, wxWindow* win = nullptr,
+ const int px_cnt = 16, const bool grayscale = false, const bool resize = false,
+ const std::vector& array_new_color = std::vector()); // color witch will used instead of orange
#else
wxBitmap create_scaled_bitmap(const std::string& bmp_name, wxWindow *win = nullptr,
const int px_cnt = 16, const bool grayscale = false, const bool resize = false);
@@ -153,7 +159,9 @@ class ScalableBitmap
const std::string& icon_name = "",
const int px_cnt = 16,
const bool grayscale = false,
- const bool resize = false); // BBS: support resize by fill border
+ const bool resize = false,
+ const bool bitmap2 = false,
+ const std::vector& new_color = std::vector());// BBS: support resize by fill border
~ScalableBitmap() {}
diff --git a/src/slic3r/GUI/wxMediaCtrl2.cpp b/src/slic3r/GUI/wxMediaCtrl2.cpp
index 43c19271454..86703524504 100644
--- a/src/slic3r/GUI/wxMediaCtrl2.cpp
+++ b/src/slic3r/GUI/wxMediaCtrl2.cpp
@@ -245,7 +245,7 @@ WXLRESULT wxMediaCtrl2::MSWWindowProc(WXUINT nMsg,
}
}
}
- BOOST_LOG_TRIVIAL(info) << msg.ToUTF8().data();
+ BOOST_LOG_TRIVIAL(trace) << msg.ToUTF8().data();
return 0;
}
return wxMediaCtrl::MSWWindowProc(nMsg, wParam, lParam);
diff --git a/src/slic3r/Utils/PresetUpdater.cpp b/src/slic3r/Utils/PresetUpdater.cpp
index 98329c61583..e09bcbe227a 100644
--- a/src/slic3r/Utils/PresetUpdater.cpp
+++ b/src/slic3r/Utils/PresetUpdater.cpp
@@ -1060,29 +1060,13 @@ bool PresetUpdater::priv::install_bundles_rsrc(std::vector bundles,
updates.updates.emplace_back(std::move(path_in_rsrc), std::move(path_in_vendors), Version(), bundle, "", "");
//BBS: add directory support
- auto print_in_rsrc = (this->rsrc_path / bundle / PRESET_PRINT_NAME);
- auto print_in_vendors = (this->vendor_path / bundle / PRESET_PRINT_NAME);
+ auto print_in_rsrc = this->rsrc_path / bundle;
+ auto print_in_vendors = this->vendor_path / bundle;
fs::path print_folder(print_in_vendors);
if (fs::exists(print_folder))
fs::remove_all(print_folder);
fs::create_directories(print_folder);
updates.updates.emplace_back(std::move(print_in_rsrc), std::move(print_in_vendors), Version(), bundle, "", "", false, true);
-
- auto filament_in_rsrc = (this->rsrc_path / bundle / PRESET_FILAMENT_NAME);
- auto filament_in_vendors = (this->vendor_path / bundle / PRESET_FILAMENT_NAME);
- fs::path filament_folder(filament_in_vendors);
- if (fs::exists(filament_folder))
- fs::remove_all(filament_folder);
- fs::create_directories(filament_folder);
- updates.updates.emplace_back(std::move(filament_in_rsrc), std::move(filament_in_vendors), Version(), bundle, "", "", false, true);
-
- auto machine_in_rsrc = (this->rsrc_path / bundle / PRESET_PRINTER_NAME);
- auto machine_in_vendors = (this->vendor_path / bundle / PRESET_PRINTER_NAME);
- fs::path machine_folder(machine_in_vendors);
- if (fs::exists(machine_folder))
- fs::remove_all(machine_folder);
- fs::create_directories(machine_folder);
- updates.updates.emplace_back(std::move(machine_in_rsrc), std::move(machine_in_vendors), Version(), bundle, "", "", false, true);
}
return perform_updates(std::move(updates), snapshot);
@@ -1256,14 +1240,7 @@ Updates PresetUpdater::priv::get_config_updates(const Semver &old_slic3r_version
updates.updates.emplace_back(std::move(file_path), std::move(path_in_vendor.string()), std::move(version), vendor_name, changelog, "", force_update, false);
//BBS: add directory support
- auto print_in_vendors = (vendor_path / vendor_name / PRESET_PRINT_NAME);
- updates.updates.emplace_back(std::move(print_in_cache), std::move(print_in_vendors.string()), Version(), vendor_name, "", "", force_update, true);
-
- auto filament_in_vendors = (vendor_path / vendor_name / PRESET_FILAMENT_NAME);
- updates.updates.emplace_back(std::move(filament_in_cache), std::move(filament_in_vendors.string()), Version(), vendor_name, "", "", force_update, true);
-
- auto machine_in_vendors = (vendor_path / vendor_name / PRESET_PRINTER_NAME);
- updates.updates.emplace_back(std::move(machine_in_cache), std::move(machine_in_vendors.string()), Version(), vendor_name, "", "", force_update, true);
+ updates.updates.emplace_back(cache_path / vendor_name, vendor_path / vendor_name, Version(), vendor_name, "", "", force_update, true);
}
}
}
diff --git a/src/slic3r/Utils/bambu_networking.hpp b/src/slic3r/Utils/bambu_networking.hpp
index b91b4d382ca..b6aa30298f6 100644
--- a/src/slic3r/Utils/bambu_networking.hpp
+++ b/src/slic3r/Utils/bambu_networking.hpp
@@ -94,7 +94,8 @@ namespace BBL {
#define BAMBU_NETWORK_LIBRARY "bambu_networking"
#define BAMBU_NETWORK_AGENT_NAME "bambu_network_agent"
-#define BAMBU_NETWORK_AGENT_VERSION "01.07.09.02"
+
+#define BAMBU_NETWORK_AGENT_VERSION "01.08.04.01"
//iot preset type strings
#define IOT_PRINTER_TYPE_STRING "printer"
@@ -104,27 +105,13 @@ namespace BBL {
#define IOT_JSON_KEY_VERSION "version"
#define IOT_JSON_KEY_NAME "name"
#define IOT_JSON_KEY_TYPE "type"
-#define IOT_JSON_KEY_UPDATE_TIME "updated_time"
+#define IOT_JSON_KEY_UPDATE_TIME "update_time"
+#define IOT_JSON_KEY_UPDATED_TIME "updated_time"
#define IOT_JSON_KEY_BASE_ID "base_id"
#define IOT_JSON_KEY_SETTING_ID "setting_id"
#define IOT_JSON_KEY_FILAMENT_ID "filament_id"
#define IOT_JSON_KEY_USER_ID "user_id"
-#define IOT_JSON_KEY_SIGN_DATE "sign_date"
-#define IOT_JSON_KEY_CERT_START_DATE "cert_start_date"
-#define IOT_JSON_KEY_CERT_END_DATE "cert_end_date"
-#define IOT_JSON_KEY_CERT_ISSUE_NAME "issue_name"
-#define IOT_JSON_KEY_CERT_SUBJECT_NAME "subject_name"
-#define IOT_JSON_KEY_CERT_SERIAL_NUMBER "serial_number"
-#define IOT_JSON_KEY_CERT_HASH_VALUE "hash_value"
-#define IOT_JSON_KEY_CERT_VERIFY_RESULT "verify_result"
-
-#define EMBEDDED_ISSUER_NAME "GlobalSign GCC R45 EV CodeSigning CA 2020"
-#define EMBEDDED_SUBJECT_NAME "Shenzhen Tuozhu Technology Co., Ltd."
-#define EMBEDDED_SERIAL_NAME "0b209295a54b188466ad7478"
-#define EMBEDDED_HASH_NAME "9690647085f910ffe2098129bc1229956a51e250"
-
-
// user callbacks
typedef std::function OnUserLoginFn;
// printer callbacks
@@ -234,6 +221,14 @@ struct PublishParams {
std::string config_filename;
};
+struct CertificateInformation {
+ std::string issuer;
+ std::string sub_name;
+ std::string start_date;
+ std::string end_date;
+ std::string serial_number;
+};
+
}
#endif
diff --git a/version.inc b/version.inc
index 71abeaf37e0..29a14a137dd 100644
--- a/version.inc
+++ b/version.inc
@@ -17,5 +17,4 @@ set(ORCA_VERSION_MAJOR ${CMAKE_MATCH_1})
set(ORCA_VERSION_MINOR ${CMAKE_MATCH_2})
set(ORCA_VERSION_PATCH ${CMAKE_MATCH_3})
-# The build_version should start from 50 in master branch
-set(SLIC3R_VERSION "01.08.02.56")
+set(SLIC3R_VERSION "01.08.04.51")