diff --git a/bbl/i18n/OrcaSlicer.pot b/bbl/i18n/OrcaSlicer.pot index e6b0e5ad25..dfe8d99c54 100644 --- a/bbl/i18n/OrcaSlicer.pot +++ b/bbl/i18n/OrcaSlicer.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-29 23:15+0800\n" +"POT-Creation-Date: 2023-04-02 11:05+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -6832,6 +6832,12 @@ msgid "" "setup and Wipe into Object / Wipe into Infill." msgstr "" +msgid "Exclude objects" +msgstr "" + +msgid "Enable this option to add EXCLUDE OBJECT command in g-code" +msgstr "" + msgid "Verbose G-code" msgstr "" @@ -7271,6 +7277,9 @@ msgid "" "handle the retraction. This is only supported in recent Marlin." msgstr "" +msgid "Show auto-calibration marks" +msgstr "" + msgid "Seam position" msgstr "" diff --git a/bbl/i18n/de/OrcaSlicer_de.po b/bbl/i18n/de/OrcaSlicer_de.po index 484dd4141e..11f800d062 100644 --- a/bbl/i18n/de/OrcaSlicer_de.po +++ b/bbl/i18n/de/OrcaSlicer_de.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-29 23:15+0800\n" +"POT-Creation-Date: 2023-04-02 11:05+0800\n" "PO-Revision-Date: \n" "Last-Translator: Heiko Liebscher \n" "Language-Team: \n" @@ -7659,6 +7659,12 @@ msgstr "" "kompatibel mit der Einzeldruckerdüsen-Mehrmaterial-Konfiguration und mit der " "Option zum Wischen in das Objekt / in den Innenfüllbereich." +msgid "Exclude objects" +msgstr "" + +msgid "Enable this option to add EXCLUDE OBJECT command in g-code" +msgstr "" + msgid "Verbose G-code" msgstr "ausführlicher G-Code" @@ -8177,6 +8183,9 @@ msgstr "" "Firmware das Zurückziehen zu handhaben.Dies wird nur von aktuellen Marlin-" "Firmware unterstützt." +msgid "Show auto-calibration marks" +msgstr "" + msgid "Seam position" msgstr "Nahtposition" diff --git a/bbl/i18n/en/OrcaSlicer_en.po b/bbl/i18n/en/OrcaSlicer_en.po index b8fe6c9163..a84ad24035 100644 --- a/bbl/i18n/en/OrcaSlicer_en.po +++ b/bbl/i18n/en/OrcaSlicer_en.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-29 23:15+0800\n" +"POT-Creation-Date: 2023-04-02 11:05+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -7130,6 +7130,12 @@ msgid "" "setup and Wipe into Object / Wipe into Infill." msgstr "" +msgid "Exclude objects" +msgstr "" + +msgid "Enable this option to add EXCLUDE OBJECT command in g-code" +msgstr "" + msgid "Verbose G-code" msgstr "" @@ -7611,6 +7617,9 @@ msgid "" "handle the retraction. This is only supported in recent Marlin." msgstr "" +msgid "Show auto-calibration marks" +msgstr "" + msgid "Seam position" msgstr "Seam position" diff --git a/bbl/i18n/es/OrcaSlicer_es.po b/bbl/i18n/es/OrcaSlicer_es.po index a6f32e778d..ca006495ee 100644 --- a/bbl/i18n/es/OrcaSlicer_es.po +++ b/bbl/i18n/es/OrcaSlicer_es.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-29 23:15+0800\n" +"POT-Creation-Date: 2023-04-02 11:05+0800\n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -7230,6 +7230,12 @@ msgid "" "setup and Wipe into Object / Wipe into Infill." msgstr "" +msgid "Exclude objects" +msgstr "" + +msgid "Enable this option to add EXCLUDE OBJECT command in g-code" +msgstr "" + msgid "Verbose G-code" msgstr "" @@ -7722,6 +7728,9 @@ msgid "" "handle the retraction. This is only supported in recent Marlin." msgstr "" +msgid "Show auto-calibration marks" +msgstr "" + msgid "Seam position" msgstr "Posición de la costura" diff --git a/bbl/i18n/fr/OrcaSlicer_fr.po b/bbl/i18n/fr/OrcaSlicer_fr.po index a998a0e945..e0ad0ad9df 100644 --- a/bbl/i18n/fr/OrcaSlicer_fr.po +++ b/bbl/i18n/fr/OrcaSlicer_fr.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-29 23:15+0800\n" +"POT-Creation-Date: 2023-04-02 11:05+0800\n" "PO-Revision-Date: 2023-02-21 21:56+0200\n" "Last-Translator: 5axes <5axes@free.fr>\n" "Language-Team: 5axes\n" @@ -7556,6 +7556,12 @@ msgid "" "setup and Wipe into Object / Wipe into Infill." msgstr "" +msgid "Exclude objects" +msgstr "" + +msgid "Enable this option to add EXCLUDE OBJECT command in g-code" +msgstr "" + msgid "Verbose G-code" msgstr "" @@ -8078,6 +8084,9 @@ msgstr "" "Ce réglage expérimental utilise les commandes G10 et G11 pour que le " "firmware gère la rétraction. Ceci n'est supporté que dans les Marlin récents." +msgid "Show auto-calibration marks" +msgstr "" + msgid "Seam position" msgstr "Position de la jointure" diff --git a/bbl/i18n/hu/OrcaSlicer_hu.po b/bbl/i18n/hu/OrcaSlicer_hu.po index cecd118bc4..3c67d27886 100644 --- a/bbl/i18n/hu/OrcaSlicer_hu.po +++ b/bbl/i18n/hu/OrcaSlicer_hu.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-29 23:15+0800\n" +"POT-Creation-Date: 2023-04-02 11:05+0800\n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -7194,6 +7194,12 @@ msgid "" "setup and Wipe into Object / Wipe into Infill." msgstr "" +msgid "Exclude objects" +msgstr "" + +msgid "Enable this option to add EXCLUDE OBJECT command in g-code" +msgstr "" + msgid "Verbose G-code" msgstr "" @@ -7686,6 +7692,9 @@ msgid "" "handle the retraction. This is only supported in recent Marlin." msgstr "" +msgid "Show auto-calibration marks" +msgstr "" + msgid "Seam position" msgstr "Varrat pozíció" diff --git a/bbl/i18n/it/OrcaSlicer_it.po b/bbl/i18n/it/OrcaSlicer_it.po index 39781f59a3..99ba9b87d4 100644 --- a/bbl/i18n/it/OrcaSlicer_it.po +++ b/bbl/i18n/it/OrcaSlicer_it.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-29 23:15+0800\n" +"POT-Creation-Date: 2023-04-02 11:05+0800\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -7130,6 +7130,12 @@ msgid "" "setup and Wipe into Object / Wipe into Infill." msgstr "" +msgid "Exclude objects" +msgstr "" + +msgid "Enable this option to add EXCLUDE OBJECT command in g-code" +msgstr "" + msgid "Verbose G-code" msgstr "" @@ -7611,6 +7617,9 @@ msgid "" "handle the retraction. This is only supported in recent Marlin." msgstr "" +msgid "Show auto-calibration marks" +msgstr "" + msgid "Seam position" msgstr "Posizione giunzione" diff --git a/bbl/i18n/ja/OrcaSlicer_ja.po b/bbl/i18n/ja/OrcaSlicer_ja.po index ee9cb906b0..04b2d58972 100644 --- a/bbl/i18n/ja/OrcaSlicer_ja.po +++ b/bbl/i18n/ja/OrcaSlicer_ja.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-29 23:15+0800\n" +"POT-Creation-Date: 2023-04-02 11:05+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -7117,6 +7117,12 @@ msgid "" "setup and Wipe into Object / Wipe into Infill." msgstr "" +msgid "Exclude objects" +msgstr "" + +msgid "Enable this option to add EXCLUDE OBJECT command in g-code" +msgstr "" + msgid "Verbose G-code" msgstr "" @@ -7586,6 +7592,9 @@ msgid "" "handle the retraction. This is only supported in recent Marlin." msgstr "" +msgid "Show auto-calibration marks" +msgstr "" + msgid "Seam position" msgstr "継ぎ目位置" diff --git a/bbl/i18n/nl/OrcaSlicer_nl.po b/bbl/i18n/nl/OrcaSlicer_nl.po index 50f167fbbd..b6b1456b7c 100644 --- a/bbl/i18n/nl/OrcaSlicer_nl.po +++ b/bbl/i18n/nl/OrcaSlicer_nl.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-29 23:15+0800\n" +"POT-Creation-Date: 2023-04-02 11:05+0800\n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -7241,6 +7241,12 @@ msgid "" "setup and Wipe into Object / Wipe into Infill." msgstr "" +msgid "Exclude objects" +msgstr "" + +msgid "Enable this option to add EXCLUDE OBJECT command in g-code" +msgstr "" + msgid "Verbose G-code" msgstr "" @@ -7737,6 +7743,9 @@ msgid "" "handle the retraction. This is only supported in recent Marlin." msgstr "" +msgid "Show auto-calibration marks" +msgstr "" + msgid "Seam position" msgstr "Naad positie" diff --git a/bbl/i18n/sv/OrcaSlicer_sv.po b/bbl/i18n/sv/OrcaSlicer_sv.po index dd8a45ac8e..10662933cc 100644 --- a/bbl/i18n/sv/OrcaSlicer_sv.po +++ b/bbl/i18n/sv/OrcaSlicer_sv.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Orca Slicer\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-29 23:15+0800\n" +"POT-Creation-Date: 2023-04-02 11:05+0800\n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -7124,6 +7124,12 @@ msgid "" "setup and Wipe into Object / Wipe into Infill." msgstr "" +msgid "Exclude objects" +msgstr "" + +msgid "Enable this option to add EXCLUDE OBJECT command in g-code" +msgstr "" + msgid "Verbose G-code" msgstr "" @@ -7610,6 +7616,9 @@ msgid "" "handle the retraction. This is only supported in recent Marlin." msgstr "" +msgid "Show auto-calibration marks" +msgstr "" + msgid "Seam position" msgstr "Söm position" diff --git a/bbl/i18n/zh_cn/OrcaSlicer_zh_CN.po b/bbl/i18n/zh_cn/OrcaSlicer_zh_CN.po index c9cfed9c18..049890447f 100644 --- a/bbl/i18n/zh_cn/OrcaSlicer_zh_CN.po +++ b/bbl/i18n/zh_cn/OrcaSlicer_zh_CN.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Slic3rPE\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-29 23:15+0800\n" -"PO-Revision-Date: 2023-01-16 11:26+0800\n" +"POT-Creation-Date: 2023-04-02 11:05+0800\n" +"PO-Revision-Date: 2023-04-01 13:21+0800\n" "Last-Translator: Jiang Yue \n" "Language-Team: \n" "Language: zh_CN\n" @@ -7001,6 +7001,12 @@ msgid "" "setup and Wipe into Object / Wipe into Infill." msgstr "" +msgid "Exclude objects" +msgstr "对象排除" + +msgid "Enable this option to add EXCLUDE OBJECT command in g-code" +msgstr "开启此选项以支持对象排除" + msgid "Verbose G-code" msgstr "注释G-code" @@ -7458,6 +7464,9 @@ msgid "" "handle the retraction. This is only supported in recent Marlin." msgstr "" +msgid "Show auto-calibration marks" +msgstr "显示雷达标定线" + msgid "Seam position" msgstr "接缝位置" diff --git a/resources/i18n/zh_cn/OrcaSlicer.mo b/resources/i18n/zh_cn/OrcaSlicer.mo index 07ab946999..96e97de967 100644 Binary files a/resources/i18n/zh_cn/OrcaSlicer.mo and b/resources/i18n/zh_cn/OrcaSlicer.mo differ diff --git a/resources/profiles/BBL.json b/resources/profiles/BBL.json index f9e4543cc2..39db08cc5e 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.05.00.20", + "version": "01.06.00.01", "force_update": "0", "description": "the initial version of BBL configurations", "machine_model_list": [ diff --git a/resources/profiles/BBL/bbl-3dp-logo_cali_lines.svg b/resources/profiles/BBL/bbl-3dp-logo_cali_lines.svg new file mode 100644 index 0000000000..6957324c68 --- /dev/null +++ b/resources/profiles/BBL/bbl-3dp-logo_cali_lines.svg @@ -0,0 +1,353 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/profiles/BBL/machine/Bambu Lab P1P 0.4 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab P1P 0.4 nozzle.json index 575ed0d922..89142de5fb 100644 --- a/resources/profiles/BBL/machine/Bambu Lab P1P 0.4 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab P1P 0.4 nozzle.json @@ -22,7 +22,7 @@ "18x28", "0x28" ], - "extruder_clearance_max_radius": "56", + "extruder_clearance_radius": "56", "machine_pause_gcode": "M400 U1\n", "machine_start_gcode": ";===== machine: P1P ========================\n;===== date: 202230129 =====================\n;===== reset machine status =================\nG91\nM17 Z0.4 ; lower the z-motor current\nG0 Z12 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\nG0 Z-6;\nG90\nM17 X1.2 Y1.2 Z0.75 ; 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\nM1002 set_gcode_claim_speed_level : 5\nM221 X0 Y0 Z0 ; turn off soft endstop to prevent protential logic problem\nG29.1 Z{+0.0} ; clear z-trim value first\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n;===== prepare print temperature and material ==========\nM104 S[nozzle_temperature_initial_layer] ;set extruder temp\nG91\nG0 Z10 F1200\nG90\nG28 X\nM975 S1 ; turn on \nG1 X60 F12000\nG1 Y245\nG1 Y265 F3000\nM620 M\nM620 S[initial_tool]A ; switch material if AMS exist\n M109 S[nozzle_temperature_initial_layer]\n G1 X120 F12000\n\n G1 X20 Y50 F12000\n G1 Y-3\n T[initial_tool]\n G1 X54 F12000\n G1 Y265\n M400\nM621 S[initial_tool]A\n\nM412 S1 ; ===turn on filament runout detection===\n\nM109 S250 ;set nozzle to common flush temp\nM106 P1 S0\nG92 E0\nG1 E50 F200\nM400\nM104 S[nozzle_temperature_initial_layer]\nG92 E0\nG1 E50 F200\nM400\nM106 P1 S255\nG92 E0\nG1 E5 F300\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20} ; drop nozzle temp, make filament shink a bit\nG92 E0\nG1 E-0.5 F300\n\nG1 X70 F9000\nG1 X76 F15000\nG1 X65 F15000\nG1 X76 F15000\nG1 X65 F15000; shake to put down garbage\nG1 X80 F6000\nG1 X95 F15000\nG1 X80 F15000\nG1 X165 F15000; wipe and shake\nM400\nM106 P1 S0\n;===== prepare print temperature and material end =====\n\n\n;===== wipe nozzle ===============================\nM1002 gcode_claim_action : 14\nM975 S1\nM106 S255\nG1 X65 Y230 F18000\nG1 Y264 F6000\nM109 S{nozzle_temperature_initial_layer[initial_extruder]-20}\nG1 X100 F18000 ; first wipe mouth\n\nG0 X135 Y253 F20000 ; move to exposed steel surface edge\nG28 Z P0 T300; home z with low precision,permit 300deg temperature\nG29.2 S0 ; turn off ABL\nG0 Z5 F20000\n\nG1 X60 Y265\nG92 E0\nG1 E-0.5 F300 ; retrack more\nG1 X100 F5000; second wipe mouth\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X100 F5000\nG1 X70 F15000\nG1 X90 F5000\nG0 X128 Y261 Z-1.5 F20000 ; move to exposed steel surface and stop the nozzle\nM104 S140 ; set temp down to heatbed acceptable\nM106 S255 ; turn on fan (G28 has turn off fan)\n\nM221 S; push soft endstop status\nM221 Z0 ;turn off Z axis endstop\nG0 Z0.5 F20000\nG0 X125 Y259.5 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y262.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y260.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.5\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 Z0.5 F20000\nG0 X125 Y261.0\nG0 Z-1.01\nG0 X131 F211\nG0 X124\nG0 X128\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\nG2 I0.5 J0 F300\n\nM109 S140 ; wait nozzle temp down to heatbed acceptable\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\nG2 I0.5 J0 F3000\n\nM221 R; pop softend status\nG1 Z10 F1200\nM400\nG1 Z10\nG1 F30000\nG1 X230 Y15\nG29.2 S1 ; turn on ABL\n;G28 ; home again after hard wipe mouth\nM106 S0 ; turn off fan , too noisy\n;===== wipe nozzle end ================================\n\n\n;===== bed leveling ==================================\nM1002 judge_flag g29_before_print_flag\nM622 J1\n\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\n\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;===== home after wipe mouth end =======================\n\nM975 S1 ; turn on vibration supression\n\n\n;=============turn on fans to prevent PLA jamming=================\n{if filament_type[initial_tool]==\"PLA\"}\n {if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}\n M106 P3 S180\n {elsif (bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}\n M106 P3 S255\n {endif};Prevent PLA from jamming\n{endif}\nM106 P2 S100 ; turn on big fan ,to cool down toolhead\n\n\nM104 S{nozzle_temperature_initial_layer[initial_extruder]} ; set extrude temp earlier, to reduce wait time\n\n;===== mech mode fast check============================\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z10 F20000\nM400 P200\nM970.3 Q0 A7 B30 C90 Q0 H15 K0\nM974 Q0 S2 P0\n\nM975 S1\nG1 F30000\nG1 X230 Y15\nG28 X ; re-home XY \n;===== fmech mode fast check============================\n\n\n;===== noozle load line ===============================\nM975 S1\nG90 \nM83\nT1000\nG1 X18.0 Y1.0 Z0.8 F18000;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG1 Z0.2\nG0 E2 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nG0 Y11 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E0.2\nG0 Y1.5 E0.700\nG0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \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.04} ; for Textured PEI Plate\n{endif}\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\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", "scan_first_layer": "0", @@ -34,5 +34,6 @@ "upward_compatible_machine":[ "Bambu Lab X1 0.4 nozzle", "Bambu Lab X1 Carbon 0.4 nozzle" - ] + ], + "bbl_calib_mark_logo": "0" } diff --git a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon.json b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon.json index d07b2f8e63..9bae6a8a6f 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon.json @@ -7,7 +7,7 @@ "machine_tech": "FFF", "family": "BBL-3DP", "bed_model": "bbl-3dp-X1.stl", - "bed_texture": "bbl-3dp-logo.svg", + "bed_texture": "bbl-3dp-logo_cali_lines.svg", "hotend_model": "bbl-3dp-hotend.stl", "default_materials": "Generic PLA Silk;Generic PLA;Bambu PLA Matte @BBL X1C;Bambu PLA Basic @BBL X1C;Bambu ABS @BBL X1C;Bambu PC @BBL X1C;Bambu Support W @BBL X1C;Bambu TPU 95A @BBL X1C;PolyTerra PLA @BBL X1C;PolyLite PLA @BBL X1C;" } diff --git a/resources/profiles/BBL/machine/Bambu Lab X1.json b/resources/profiles/BBL/machine/Bambu Lab X1.json index bb36dcb722..5a5aff3eea 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1.json @@ -7,7 +7,7 @@ "machine_tech": "FFF", "family": "BBL-3DP", "bed_model": "bbl-3dp-X1.stl", - "bed_texture": "bbl-3dp-logo.svg", + "bed_texture": "bbl-3dp-logo_cali_lines.svg", "hotend_model": "bbl-3dp-hotend.stl", "default_materials": "Generic PLA Silk;Generic PLA;Bambu PLA Matte @BBL X1;Bambu PLA Basic @BBL X1;Bambu ABS @BBL X1C;Bambu PC @BBL X1C;Bambu Support W @BBL X1;Bambu TPU 95A @BBL X1;PolyTerra PLA @BBL X1;PolyLite PLA @BBL X1;" } diff --git a/resources/profiles/BBL/machine/fdm_bbl_3dp_001_common.json b/resources/profiles/BBL/machine/fdm_bbl_3dp_001_common.json index f6c9af1ae6..dcf62d84b7 100644 --- a/resources/profiles/BBL/machine/fdm_bbl_3dp_001_common.json +++ b/resources/profiles/BBL/machine/fdm_bbl_3dp_001_common.json @@ -110,8 +110,7 @@ "0.08" ], "printable_height": "250", - "extruder_clearance_radius": "57", - "extruder_clearance_max_radius": "68", + "extruder_clearance_radius": "68", "extruder_clearance_height_to_rod": "36", "extruder_clearance_height_to_lid": "90", "nozzle_volume": "107", diff --git a/resources/web/orca/missing_connection.html b/resources/web/orca/missing_connection.html new file mode 100644 index 0000000000..3556acaec0 --- /dev/null +++ b/resources/web/orca/missing_connection.html @@ -0,0 +1,33 @@ + + + + + + Printer Connection Required + + + +
+

Printer Connection

+

Please set up your printer connection to view the device.

+ Printer connection setup demonstration +
+ + diff --git a/resources/web/orca/setup_connection.gif b/resources/web/orca/setup_connection.gif new file mode 100644 index 0000000000..3e28ac8001 Binary files /dev/null and b/resources/web/orca/setup_connection.gif differ diff --git a/src/libslic3r/Format/bbs_3mf.cpp b/src/libslic3r/Format/bbs_3mf.cpp index 4a4829d76b..b622fdfe48 100644 --- a/src/libslic3r/Format/bbs_3mf.cpp +++ b/src/libslic3r/Format/bbs_3mf.cpp @@ -5494,7 +5494,8 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) date = date.substr(0, 10); metadata_item_map[BBL_CREATION_DATE_TAG] = date; metadata_item_map[BBL_MODIFICATION_TAG] = date; - metadata_item_map[BBL_APPLICATION_TAG] = (boost::format("%1%-%2%") % SLIC3R_APP_KEY % SLIC3R_VERSION).str(); + //SoftFever: write BambuStudio tag to keep it compatible + metadata_item_map[BBL_APPLICATION_TAG] = (boost::format("%1%-%2%") % "BambuStudio" % SLIC3R_VERSION).str(); } metadata_item_map[BBS_3MF_VERSION] = std::to_string(VERSION_BBS_3MF); diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index 66ec6e0d78..421c6f7c2a 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -1530,12 +1530,6 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato print.config().nozzle_temperature_initial_layer.get_at(0)); file.write("; CONFIG_BLOCK_END\n\n"); } else { - file.write_format("; hack-fix: write fake slicer info here so that " - "preprocess_cancellation can process.\n"); - file.write_format("; %s\n\n", std::string(std::string("generated by SuperSlicer " SoftFever_VERSION " on ") + - Slic3r::Utils::local_timestamp()) - .c_str()); - DoExport::export_thumbnails_to_file( thumbnail_cb, print.get_plate_index(), print.full_print_config().option("thumbnails")->values, [&file](const char *sz) { file.write(sz); }, @@ -1563,6 +1557,10 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato } file.write_format("; EXECUTABLE_BLOCK_START\n"); + + // SoftFever + file.write(set_object_info(&print)); + // adds tags for time estimators file.write_format(";%s\n", GCodeProcessor::reserved_tag(GCodeProcessor::ETags::First_Line_M73_Placeholder).c_str()); @@ -1791,13 +1789,6 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato // Write the custom start G-code file.writeln(machine_start_gcode); - if (print.config().gcode_flavor == gcfKlipper) { - - this->_print_first_layer_bed_temperature(file, print, "", - initial_extruder_id, true); - this->_print_first_layer_extruder_temperatures( - file, print, "", initial_extruder_id, false); - } //BBS: gcode writer doesn't know where the real position of extruder is after inserting custom gcode m_writer.set_current_position_clear(false); @@ -1810,7 +1801,8 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato file.writeln(this->placeholder_parser_process("filament_start_gcode", print.config().filament_start_gcode.values[initial_extruder_id], initial_extruder_id, &config)); } */ - this->_print_first_layer_extruder_temperatures(file, print, machine_start_gcode, initial_extruder_id, true); + if (is_bbl_printers) + this->_print_first_layer_extruder_temperatures(file, print, machine_start_gcode, initial_extruder_id, true); print.throw_if_canceled(); // Set other general things. @@ -2670,6 +2662,14 @@ namespace Skirt { } // namespace Skirt +inline std::string get_instance_name(const PrintObject *object, const PrintInstance &inst) { + return (boost::format("%1%_id_%2%_copy_%3%") % object->model_object()->name % object->get_id() % inst.id).str(); +} + +inline std::string get_instance_name(const PrintObject *object, size_t inst_id) { + return (boost::format("%1%_id_%2%_copy_%3%") % object->model_object()->name % object->get_id() % inst_id).str(); +} + // In sequential mode, process_layer is called once per each object and its copy, // therefore layers will contain a single entry and single_object_instance_idx will point to the copy of the object. // In non-sequential mode, process_layer is called per each print_z height with all object and support layers accumulated. @@ -3172,6 +3172,7 @@ GCode::LayerResult GCode::process_layer( if (is_anything_overridden && print_wipe_extrusions == 0) gcode+="; PURGING FINISHED\n"; for (InstanceToPrint &instance_to_print : instances_to_print) { + const auto& inst = instance_to_print.print_object.instances()[instance_to_print.instance_id]; const LayerToPrint &layer_to_print = layers[instance_to_print.layer_id]; // To control print speed of the 1st object layer printed over raft interface. bool object_layer_over_raft = layer_to_print.object_layer && layer_to_print.object_layer->id() > 0 && @@ -3181,15 +3182,23 @@ GCode::LayerResult GCode::process_layer( m_object_layer_over_raft = object_layer_over_raft; if (m_config.reduce_crossing_wall) m_avoid_crossing_perimeters.init_layer(*m_layer); + bool reset_e = false; if (this->config().gcode_label_objects) { - gcode += std::string("; printing object ") + instance_to_print.print_object.model_object()->name + " id:" + std::to_string(instance_to_print.layer_id) + " copy " + std::to_string(instance_to_print.instance_id) + "\n"; - if (!m_config.use_relative_e_distances) - gcode += m_writer.reset_e(true); + gcode += std::string("; printing object ") + instance_to_print.print_object.model_object()->name + " id:" + std::to_string(instance_to_print.print_object.get_id()) + " copy " + std::to_string(inst.id) + "\n"; + reset_e = true; } + if (this->config().exclude_object && print.config().gcode_flavor.value == gcfKlipper) { + gcode += std::string("EXCLUDE_OBJECT_START NAME=") + + get_instance_name(&instance_to_print.print_object, inst.id) + "\n"; + reset_e = true; + } + // ref to: https://github.com/SoftFever/OrcaSlicer/pull/205/commits/7f1fe0bd544077626080aa1a9a0576aa735da1a4#r1083470162 + if (reset_e && !m_config.use_relative_e_distances) + gcode += m_writer.reset_e(true); m_extrusion_quality_estimator.set_current_object(&instance_to_print.print_object); // When starting a new object, use the external motion planner for the first travel move. - const Point &offset = instance_to_print.print_object.instances()[instance_to_print.instance_id].shift; + const Point &offset = inst.shift; std::pair this_object_copy(&instance_to_print.print_object, offset); if (m_last_obj_copy != this_object_copy) m_avoid_crossing_perimeters.use_external_mp_once(); @@ -3274,10 +3283,16 @@ GCode::LayerResult GCode::process_layer( gcode += this->extrude_infill(print,by_region_specific, true); } if (this->config().gcode_label_objects) { - gcode += std::string("; stop printing object ") + instance_to_print.print_object.model_object()->name + " id:" + std::to_string(instance_to_print.layer_id) + " copy " + std::to_string(instance_to_print.instance_id) + "\n"; - if (!m_config.use_relative_e_distances) - gcode += m_writer.reset_e(true); + gcode += std::string("; stop printing object ") + instance_to_print.print_object.model_object()->name + " id:" + std::to_string(instance_to_print.print_object.get_id()) + " copy " + std::to_string(inst.id) + "\n"; + reset_e = true; } + if (this->config().exclude_object && print.config().gcode_flavor.value == gcfKlipper) { + gcode += std::string("EXCLUDE_OBJECT_END NAME=") + + get_instance_name(&instance_to_print.print_object, inst.id) + "\n"; + reset_e = true; + } + if (reset_e && !m_config.use_relative_e_distances) + gcode += m_writer.reset_e(true); } } } @@ -4591,6 +4606,37 @@ std::string GCode::set_extruder(unsigned int extruder_id, double print_z) return gcode; } +inline std::string polygon_to_string(const Polygon &polygon) { + std::ostringstream gcode; + gcode << "["; + for (const Point &p : polygon.points) { + gcode << "[" << unscaled(p.x()) << "," << unscaled(p.y()) << "],"; + } + gcode << "[" << unscaled(polygon.points.front().x()) << "," << unscaled(polygon.points.front().y()) << "]"; + gcode << "]"; + return gcode.str(); +} + // this function iterator PrintObject and assign a seqential id to each object. +// this id is used to generate unique object id for each object. +std::string GCode::set_object_info(Print* print) { + std::ostringstream gcode; + size_t object_id = 0; + for (PrintObject* object : print->objects()) { + object->set_id(object_id++); + size_t inst_id = 0; + for (PrintInstance &inst : object->instances()) { + inst.id = inst_id++; + if (this->config().exclude_object && print->config().gcode_flavor.value == gcfKlipper) { + auto bbox = inst.get_bounding_box(); + gcode << "EXCLUDE_OBJECT_DEFINE NAME=" << get_instance_name(object, inst) + << " CENTER=" << bbox.center().x() << "," << bbox.center().y() + << " POLYGON=" << polygon_to_string(inst.get_convex_hull_2d()) << "\n"; + } + } + } + return gcode.str(); +} + // convert a model-space scaled point into G-code coordinates Vec2d GCode::point_to_gcode(const Point &point) const { @@ -4714,4 +4760,9 @@ void GCode::ObjectByExtruder::Island::Region::append(const Type type, const Extr } } -} // namespace Slic3r + +// Index into std::vector, which contains Object and Support layers for the current print_z, collected for +// a single object, or for possibly multiple objects with multiple instances. + + +} // namespace Slic3r diff --git a/src/libslic3r/GCode.hpp b/src/libslic3r/GCode.hpp index 9c5716499e..d3cb7e541d 100644 --- a/src/libslic3r/GCode.hpp +++ b/src/libslic3r/GCode.hpp @@ -202,6 +202,9 @@ public: std::string unretract() { return m_writer.unlift() + m_writer.unretract(); } std::string set_extruder(unsigned int extruder_id, double print_z); + // SoftFever + std::string set_object_info(Print* print); + // append full config to the given string static void append_full_config(const Print& print, std::string& str); diff --git a/src/libslic3r/Model.cpp b/src/libslic3r/Model.cpp index 3d4d26fb86..e26c136b18 100644 --- a/src/libslic3r/Model.cpp +++ b/src/libslic3r/Model.cpp @@ -1286,18 +1286,21 @@ const BoundingBoxf3& ModelObject::raw_bounding_box() const } // This returns an accurate snug bounding box of the transformed object instance, without the translation applied. -BoundingBoxf3 ModelObject::instance_bounding_box(size_t instance_idx, bool dont_translate) const -{ - BoundingBoxf3 bb; - const Transform3d& inst_matrix = this->instances[instance_idx]->get_transformation().get_matrix(dont_translate); - for (ModelVolume *v : this->volumes) - { - if (v->is_model_part()) - bb.merge(v->mesh().transformed_bounding_box(inst_matrix * v->get_matrix())); - } - return bb; +BoundingBoxf3 ModelObject::instance_bounding_box(size_t instance_idx, bool dont_translate) const { + return instance_bounding_box(*this->instances[instance_idx], dont_translate); } +BoundingBoxf3 ModelObject::instance_bounding_box(const ModelInstance &instance, bool dont_translate) const { + BoundingBoxf3 bbox; + const auto& inst_mat = instance.get_transformation().get_matrix(dont_translate); + for (auto vol : this->volumes) { + if (vol->is_model_part()) + bbox.merge(vol->mesh().transformed_bounding_box(inst_mat * vol->get_matrix())); + } + return bbox; +} + + //BBS: add convex bounding box BoundingBoxf3 ModelObject::instance_convex_hull_bounding_box(size_t instance_idx, bool dont_translate) const { diff --git a/src/libslic3r/Model.hpp b/src/libslic3r/Model.hpp index 6b53a45af0..551a9072ee 100644 --- a/src/libslic3r/Model.hpp +++ b/src/libslic3r/Model.hpp @@ -345,6 +345,8 @@ public: const BoundingBoxf3& raw_bounding_box() const; // A snug bounding box around the transformed non-modifier object volumes. BoundingBoxf3 instance_bounding_box(size_t instance_idx, bool dont_translate = false) const; + BoundingBoxf3 instance_bounding_box(const ModelInstance& instance, bool dont_translate = false) const; + // A snug bounding box of non-transformed (non-rotated, non-scaled, non-translated) sum of non-modifier object volumes. const BoundingBoxf3& raw_mesh_bounding_box() const; // A snug bounding box of non-transformed (non-rotated, non-scaled, non-translated) sum of all object volumes. diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index 3acc9530bb..499f4e1d1c 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -755,7 +755,8 @@ static std::vector s_Preset_print_options { "role_based_wipe_speed", "wipe_speed", "accel_to_decel_enable", "accel_to_decel_factor", "wipe_on_loops", "bridge_density", "precise_outer_wall", "overhang_speed_classic", "bridge_acceleration", "sparse_infill_acceleration", "internal_solid_infill_acceleration", "tree_support_adaptive_layer_height", "tree_support_auto_brim", - "tree_support_brim_width", "gcode_comments", "gcode_label_objects", "initial_layer_travel_speed" + "tree_support_brim_width", "gcode_comments", "gcode_label_objects", + "initial_layer_travel_speed", "exclude_object" }; @@ -795,7 +796,7 @@ static std::vector s_Preset_printer_options { "printer_technology", "printable_area", "bed_exclude_area","bed_custom_texture", "bed_custom_model", "gcode_flavor", "single_extruder_multi_material", "machine_start_gcode", "machine_end_gcode", "before_layer_change_gcode", "layer_change_gcode", "change_filament_gcode", - "printer_model", "printer_variant", "printable_height", "extruder_clearance_radius", "extruder_clearance_max_radius","extruder_clearance_height_to_lid", "extruder_clearance_height_to_rod", + "printer_model", "printer_variant", "printable_height", "extruder_clearance_radius", "extruder_clearance_height_to_lid", "extruder_clearance_height_to_rod", "default_print_profile", "inherits", "silent_mode", // BBS @@ -805,9 +806,8 @@ static std::vector s_Preset_printer_options { "host_type", "print_host", "printhost_apikey", "print_host_webui", "printhost_cafile","printhost_port","printhost_authorization_type", - "printhost_user", "printhost_password", "printhost_ssl_ignore_revoke", - "thumbnails", "use_firmware_retraction", "use_relative_e_distances" -}; + "printhost_user", "printhost_password", "printhost_ssl_ignore_revoke", "thumbnails", + "use_firmware_retraction", "use_relative_e_distances", "bbl_calib_mark_logo"}; static std::vector s_Preset_sla_print_options { "layer_height", diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index 446d7ecde4..609da0a945 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -3512,9 +3512,9 @@ std::vector PresetBundle::export_current_configs(const std::string std::string file = path + "/" + preset->name + ".json"; if (boost::filesystem::exists(file) && overwrite < 2) { overwrite = override_confirm(preset->name); + if (overwrite == 0 || overwrite == 2) + continue; } - if (overwrite == 0 || overwrite == 2) - continue; preset->config.save_to_json(file, preset->name, "", preset->version.to_string()); result.push_back(file); } diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 2f3a32acfb..0a1bdfb32e 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -88,7 +88,6 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n "extruder_clearance_height_to_rod", "extruder_clearance_height_to_lid", "extruder_clearance_radius", - "extruder_clearance_max_radius", "extruder_colour", "extruder_offset", "filament_flow_ratio", @@ -159,7 +158,8 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n "accel_to_decel_factor", "wipe_on_loops", "gcode_comments", - "gcode_label_objects" + "gcode_label_objects", + "exclude_object" }; static std::unordered_set steps_ignore; @@ -491,7 +491,7 @@ StringObjectException Print::sequential_print_clearance_valid(const Print &print convex_hull = offset(convex_hull_no_offset, // Shrink the extruder_clearance_radius a tiny bit, so that if the object arrangement algorithm placed the objects // exactly by satisfying the extruder_clearance_radius, this test will not trigger collision. - float(scale_(0.5 * print.config().extruder_clearance_max_radius.value - EPSILON)), + float(scale_(0.5 * print.config().extruder_clearance_radius.value - EPSILON)), jtRound, scale_(0.1)).front(); // instance.shift is a position of a centered object, while model object may not be centered. // Convert the shift from the PrintObject's coordinates into ModelObject's coordinates by removing the centering offset. @@ -3329,4 +3329,14 @@ int Print::load_cached_data(const std::string& directory) return ret; } +BoundingBoxf3 PrintInstance::get_bounding_box() { + return print_object->model_object()->instance_bounding_box(*model_instance, false); +} + +Polygon PrintInstance::get_convex_hull_2d() { + Polygon poly = print_object->model_object()->convex_hull_2d(model_instance->get_matrix()); + poly.douglas_peucker(0.1); + return poly; +} + } // namespace Slic3r diff --git a/src/libslic3r/Print.hpp b/src/libslic3r/Print.hpp index 60704e8a38..413be11f05 100644 --- a/src/libslic3r/Print.hpp +++ b/src/libslic3r/Print.hpp @@ -191,6 +191,13 @@ struct PrintInstance const ModelInstance *model_instance; // Shift of this instance's center into the world coordinates. Point shift; + + BoundingBoxf3 get_bounding_box(); + Polygon get_convex_hull_2d(); + // SoftFever + // + // instance id + size_t id; }; typedef std::vector PrintInstances; @@ -292,6 +299,7 @@ public: Transform3d trafo_centered() const { Transform3d t = this->trafo(); t.pretranslate(Vec3d(- unscale(m_center_offset.x()), - unscale(m_center_offset.y()), 0)); return t; } const PrintInstances& instances() const { return m_instances; } + PrintInstances &instances() { return m_instances; } // Whoever will get a non-const pointer to PrintObject will be able to modify its layers. LayerPtrs& layers() { return m_layers; } @@ -417,7 +425,12 @@ public: // BBS: Boundingbox of the first layer BoundingBox firstLayerObjectBrimBoundingBox; -private: + + // SoftFever + size_t get_id() const { return m_id; } + void set_id(size_t id) { m_id = id; } + + private: // to be called from Print only. friend class Print; @@ -501,6 +514,12 @@ private: PrintObject* m_shared_object{ nullptr }; + + // SoftFever + // + // object id + size_t m_id; + public: //BBS: When printing multi-material objects, this settings will make slicer to clip the overlapping object parts one by the other. //(2nd part will be clipped by the 1st, 3rd part will be clipped by the 1st and 2nd etc). diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index cbf7060f94..22b8b89369 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -1146,14 +1146,6 @@ void PrintConfigDef::init_fff_params() def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(40)); - def = this->add("extruder_clearance_max_radius", coFloat); - def->label = L("Max Radius"); - def->tooltip = L("Max clearance radius around extruder. Used for collision avoidance in by-object printing."); - def->sidetext = L("mm"); - def->min = 0; - def->mode = comAdvanced; - def->set_default_value(new ConfigOptionFloat(68)); - def = this->add("extruder_colour", coStrings); def->label = L("Extruder Color"); def->tooltip = L("Only used as a visual help on UI"); @@ -1236,14 +1228,14 @@ void PrintConfigDef::init_fff_params() def->tooltip = L("Default filament color"); def->gui_type = ConfigOptionDef::GUIType::color; def->mode = comAdvanced; - def->set_default_value(new ConfigOptionStrings{""}); + def->set_default_value(new ConfigOptionStrings{"#F2754E"}); def = this->add("filament_colour", coStrings); def->label = L("Color"); def->tooltip = L("Only used as a visual help on UI"); def->gui_type = ConfigOptionDef::GUIType::color; def->mode = comAdvanced; - def->set_default_value(new ConfigOptionStrings{ "#009688" }); + def->set_default_value(new ConfigOptionStrings{ "#F2754E" }); //bbs def = this->add("required_nozzle_HRC", coInts); @@ -1813,7 +1805,13 @@ void PrintConfigDef::init_fff_params() "Single Extruder Multi Material setup and Wipe into Object / Wipe into Infill."); def->mode = comAdvanced; def->set_default_value(new ConfigOptionBool(1)); - + + def = this->add("exclude_object", coBool); + def->label = L("Exclude objects"); + def->tooltip = L("Enable this option to add EXCLUDE OBJECT command in g-code"); + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionBool(1)); + def = this->add("gcode_comments", coBool); def->label = L("Verbose G-code"); def->tooltip = L("Enable this to get a commented G-code file, with each line explained by a descriptive text. " @@ -2202,7 +2200,7 @@ void PrintConfigDef::init_fff_params() def->enum_values.push_back("repetier"); def->enum_values.push_back("mks"); def->enum_labels.push_back("PrusaLink"); - def->enum_labels.push_back("OctoPrint"); + def->enum_labels.push_back("Octo/Klipper"); def->enum_labels.push_back("Duet"); def->enum_labels.push_back("FlashAir"); def->enum_labels.push_back("AstroBox"); @@ -2218,7 +2216,7 @@ void PrintConfigDef::init_fff_params() def->tooltip = L("Volume of nozzle between the cutter and the end of nozzle"); def->sidetext = L("mm³"); def->mode = comAdvanced; - def->readonly = true; + def->readonly = false; def->set_default_value(new ConfigOptionFloat { 0.0 }); def = this->add("start_end_points", coPoints); @@ -2497,6 +2495,12 @@ void PrintConfigDef::init_fff_params() def->mode = comAdvanced; def->set_default_value(new ConfigOptionBool(false)); + def = this->add("bbl_calib_mark_logo", coBool); + def->label = L("Show auto-calibration marks"); + def->tooltip = ""; + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionBool(true)); + def = this->add("seam_position", coEnum); def->label = L("Seam position"); def->category = L("Quality"); diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index 79a2dc4009..eb1d84c4bf 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -881,6 +881,7 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionBool, accel_to_decel_enable)) ((ConfigOptionPercent, accel_to_decel_factor)) ((ConfigOptionFloatOrPercent, initial_layer_travel_speed)) + ((ConfigOptionBool, bbl_calib_mark_logo)) ) @@ -917,7 +918,6 @@ PRINT_CONFIG_CLASS_DERIVED_DEFINE( ((ConfigOptionFloat, extruder_clearance_height_to_rod))//BBs ((ConfigOptionFloat, extruder_clearance_height_to_lid))//BBS ((ConfigOptionFloat, extruder_clearance_radius)) - ((ConfigOptionFloat, extruder_clearance_max_radius)) ((ConfigOptionStrings, extruder_colour)) ((ConfigOptionPoints, extruder_offset)) ((ConfigOptionBools, reduce_fan_stop_start_freq)) @@ -1003,6 +1003,7 @@ PRINT_CONFIG_CLASS_DERIVED_DEFINE( // SoftFever ((ConfigOptionPercents, filament_shrink)) ((ConfigOptionBool, gcode_label_objects)) + ((ConfigOptionBool, exclude_object)) ((ConfigOptionBool, gcode_comments)) ) diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp index a970357337..f1cfea6d63 100644 --- a/src/slic3r/GUI/ConfigManipulation.cpp +++ b/src/slic3r/GUI/ConfigManipulation.cpp @@ -697,6 +697,9 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co toggle_line(el, gcflavor == gcfKlipper); if(gcflavor == gcfKlipper) toggle_field("accel_to_decel_factor", config->opt_bool("accel_to_decel_enable")); + + toggle_line("exclude_object", gcflavor == gcfKlipper); + } void ConfigManipulation::update_print_sla_config(DynamicPrintConfig* config, const bool is_global_config/* = false*/) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 1e12d94fa5..3d084d0a9e 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -3059,12 +3059,15 @@ void GLCanvas3D::on_char(wxKeyEvent& evt) case WXK_BACK: { post_event(SimpleEvent(EVT_GLTOOLBAR_DELETE)); break; } #endif case WXK_ESCAPE: { deselect_all(); break; } - //case WXK_F5: { - // if ((wxGetApp().is_editor() && !wxGetApp().plater()->model().objects.empty()) || - // (wxGetApp().is_gcode_viewer() && !wxGetApp().plater()->get_last_loaded_gcode().empty())) - // post_event(SimpleEvent(EVT_GLCANVAS_RELOAD_FROM_DISK)); - // break; - //} + case WXK_F5: { + if (wxGetApp().mainframe->is_printer_view()) + wxGetApp().mainframe->load_printer_url(); + + //if ((wxGetApp().is_editor() && !wxGetApp().plater()->model().objects.empty()) || + // (wxGetApp().is_gcode_viewer() && !wxGetApp().plater()->get_last_loaded_gcode().empty())) + // post_event(SimpleEvent(EVT_GLCANVAS_RELOAD_FROM_DISK)); + break; + } // BBS: use keypad to change extruder case '1': @@ -4968,7 +4971,7 @@ void GLCanvas3D::update_sequential_clearance() // the results are then cached for following displacements if (m_sequential_print_clearance_first_displacement) { m_sequential_print_clearance.m_hull_2d_cache.clear(); - float shrink_factor = static_cast(scale_(0.5 * fff_print()->config().extruder_clearance_max_radius.value - EPSILON)); + float shrink_factor = static_cast(scale_(0.5 * fff_print()->config().extruder_clearance_radius.value - EPSILON)); double mitter_limit = scale_(0.1); m_sequential_print_clearance.m_hull_2d_cache.reserve(m_model->objects.size()); for (size_t i = 0; i < m_model->objects.size(); ++i) { diff --git a/src/slic3r/GUI/Jobs/ArrangeJob.cpp b/src/slic3r/GUI/Jobs/ArrangeJob.cpp index 9b81736a66..81537f43e3 100644 --- a/src/slic3r/GUI/Jobs/ArrangeJob.cpp +++ b/src/slic3r/GUI/Jobs/ArrangeJob.cpp @@ -389,7 +389,7 @@ void ArrangeJob::prepare() 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; - params.cleareance_radius = print.config().extruder_clearance_max_radius.value; + params.cleareance_radius = print.config().extruder_clearance_radius.value; params.printable_height = print.config().printable_height.value; params.allow_rotations = settings.enable_rotation; params.allow_multi_materials_on_same_plate = settings.allow_multi_materials_on_same_plate; diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 94121fa6a3..2f525893c5 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -864,13 +864,13 @@ void MainFrame::show_option(bool show) } } -void MainFrame::init_tabpanel() -{ - // wxNB_NOPAGETHEME: Disable Windows Vista theme for the Notebook background. The theme performance is terrible on Windows 10 - // with multiple high resolution displays connected. - // BBS - wxBoxSizer* side_tools = create_side_tools(); - m_tabpanel = new Notebook(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, side_tools, wxNB_TOP | wxTAB_TRAVERSAL | wxNB_NOPAGETHEME); +void MainFrame::init_tabpanel() { + // wxNB_NOPAGETHEME: Disable Windows Vista theme for the Notebook background. The theme performance is terrible on + // Windows 10 with multiple high resolution displays connected. + // BBS + wxBoxSizer *side_tools = create_side_tools(); + m_tabpanel = new Notebook(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, side_tools, + wxNB_TOP | wxTAB_TRAVERSAL | wxNB_NOPAGETHEME); m_tabpanel->SetBackgroundColour(*wxWHITE); #ifndef __WXOSX__ // Don't call SetFont under OSX to avoid name cutting in ObjectList @@ -879,21 +879,32 @@ void MainFrame::init_tabpanel() m_tabpanel->Hide(); m_settings_dialog.set_tabpanel(m_tabpanel); - m_tabpanel->Bind(wxEVT_NOTEBOOK_PAGE_CHANGING, [this](wxBookCtrlEvent& e) { - int old_sel = e.GetOldSelection(); - int new_sel = e.GetSelection(); - if (wxGetApp().preset_bundle && - wxGetApp().preset_bundle->printers.get_edited_preset().is_bbl_vendor_preset(wxGetApp().preset_bundle) && - new_sel == tpMonitor) { - if (!wxGetApp().getAgent()) { - e.Veto(); - BOOST_LOG_TRIVIAL(info) << boost::format("skipped tab switch from %1% to %2%, lack of network plugins")%old_sel %new_sel; - if (m_plater) { - wxCommandEvent *evt = new wxCommandEvent(EVT_INSTALL_PLUGIN_HINT); - wxQueueEvent(m_plater, evt); - } - } + m_tabpanel->Bind(wxEVT_NOTEBOOK_PAGE_CHANGING, [this](wxBookCtrlEvent &e) { + int old_sel = e.GetOldSelection(); + int new_sel = e.GetSelection(); + if (wxGetApp().preset_bundle && + wxGetApp().preset_bundle->printers.get_edited_preset().is_bbl_vendor_preset(wxGetApp().preset_bundle) && + new_sel == tpMonitor) { + if (!wxGetApp().getAgent()) { + e.Veto(); + BOOST_LOG_TRIVIAL(info) << boost::format("skipped tab switch from %1% to %2%, lack of network plugins") % + old_sel % new_sel; + if (m_plater) { + wxCommandEvent *evt = new wxCommandEvent(EVT_INSTALL_PLUGIN_HINT); + wxQueueEvent(m_plater, evt); + } } + } else { + if (new_sel == tpMonitor && wxGetApp().preset_bundle != nullptr) { + auto cfg = wxGetApp().preset_bundle->printers.get_edited_preset().config; + wxString url = cfg.opt_string("print_host_webui").empty() ? cfg.opt_string("print_host") + : cfg.opt_string("print_host_webui"); + if (url.empty()) { + wxString url = wxString::Format("file://%s/web/orca/missing_connection.html", from_u8(resources_dir())); + m_printer_view->load_url(url); + } + } + } }); #ifdef __WXMSW__ @@ -3240,6 +3251,27 @@ void MainFrame::load_printer_url(wxString url) evt->SetString(url); wxQueueEvent(this, evt); } + +void MainFrame::load_printer_url() +{ + PresetBundle &preset_bundle = *wxGetApp().preset_bundle; + if (preset_bundle.printers.get_edited_preset().is_bbl_vendor_preset(&preset_bundle)) + return; + + auto cfg = preset_bundle.printers.get_edited_preset().config; + wxString url = + cfg.opt_string("print_host_webui").empty() ? cfg.opt_string("print_host") : cfg.opt_string("print_host_webui"); + if (!url.empty()) { + if (!url.Lower().starts_with("http")) + url = wxString::Format("http://%s", url); + + load_printer_url(url); + } +} + +bool MainFrame::is_printer_view() const { return m_tabpanel->GetSelection() == TabPosition::tpMonitor; } + + void MainFrame::refresh_plugin_tips() { if (m_webview != nullptr) diff --git a/src/slic3r/GUI/MainFrame.hpp b/src/slic3r/GUI/MainFrame.hpp index 046849a7bc..59c8c7f355 100644 --- a/src/slic3r/GUI/MainFrame.hpp +++ b/src/slic3r/GUI/MainFrame.hpp @@ -325,6 +325,8 @@ public: //BBS void load_url(wxString url); void load_printer_url(wxString url); + void load_printer_url(); + bool is_printer_view() const; void refresh_plugin_tips(); void RunScript(wxString js); diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index da331e37e1..382d9ffef3 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -1562,7 +1562,7 @@ void PartPlate::generate_plate_name_texture() auto text = m_name.empty()? _L("Untitled") : m_name; wxCoord w, h; auto* font = &Label::Head_48; - wxColour foreground(0x0, 0x96, 0x88, 0xff); + wxColour foreground(0xf2, 0x75, 0x4e, 0xff); if (!m_name_texture.generate_from_text_string(text.ToStdString(), *font, *wxBLACK, foreground)) BOOST_LOG_TRIVIAL(error) << "PartPlate::generate_plate_name_texture(): generate_from_text_string() failed"; auto bed_ext = get_extents(m_shape); @@ -2779,7 +2779,7 @@ void PartPlateList::generate_icon_textures() else file_name = std::to_string(i+1); - wxColour foreground(0x0, 0x96, 0x88, 0xff); + wxColour foreground(0xf2, 0x75, 0x4e, 0xff); if (!m_idx_textures[i].generate_from_text_string(file_name, *font, *wxBLACK, foreground)) { BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(":load file %1% failed") % file_name; } diff --git a/src/slic3r/GUI/PartPlate.hpp b/src/slic3r/GUI/PartPlate.hpp index 422fd521ad..6bfb430305 100644 --- a/src/slic3r/GUI/PartPlate.hpp +++ b/src/slic3r/GUI/PartPlate.hpp @@ -256,7 +256,7 @@ public: // SoftFever //get the plate's name - std::string get_plate_name() { return m_name; } + std::string get_plate_name() const { return m_name; } void generate_plate_name_texture(); //set the plate's name void set_plate_name(const std::string& name); @@ -640,6 +640,7 @@ public: int get_curr_plate_index() const { return m_current_plate; } PartPlate* get_curr_plate() { return m_plate_list[m_current_plate]; } + const PartPlate* get_curr_plate() const { return m_plate_list[m_current_plate]; } std::vector& get_plate_list() { return m_plate_list; }; diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index eb523caa08..fcac4bda99 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -2217,8 +2217,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) //BBS: add bed_exclude_area , config(Slic3r::DynamicPrintConfig::new_from_defaults_keys({ "printable_area", "bed_exclude_area", "bed_custom_texture", "bed_custom_model", "print_sequence", - "extruder_clearance_radius", "extruder_clearance_max_radius", - "extruder_clearance_height_to_lid", "extruder_clearance_height_to_rod", "skirt_loops", "skirt_distance", + "extruder_clearance_radius", "extruder_clearance_height_to_lid", "extruder_clearance_height_to_rod", "skirt_loops", "skirt_distance", "brim_width", "brim_object_gap", "brim_type", "nozzle_diameter", "single_extruder_multi_material", "enable_prime_tower", "wipe_tower_x", "wipe_tower_y", "prime_tower_width", "prime_tower_brim_width", "prime_volume", "extruder_colour", "filament_colour", "material_colour", "printable_height", "printer_model", "printer_technology", @@ -6568,8 +6567,12 @@ wxString Plater::priv::get_project_filename(const wxString& extension) const wxString Plater::priv::get_export_gcode_filename(const wxString& extension, bool only_filename, bool export_all) const { std::string plate_index_str; - if (partplate_list.get_plate_count() > 1) + auto plate_name = partplate_list.get_curr_plate()->get_plate_name(); + if (!plate_name.empty()) + plate_index_str = (boost::format("_%1%") % plate_name).str(); + else if (partplate_list.get_plate_count() > 1) plate_index_str = (boost::format("_plate_%1%") % std::to_string(partplate_list.get_curr_plate_index() + 1)).str(); + if (!m_project_folder.empty()) { if (!only_filename) { if (export_all) { @@ -6587,7 +6590,7 @@ wxString Plater::priv::get_export_gcode_filename(const wxString& extension, bool } } else { if (only_filename) { - if(m_project_name == L"Untitled") + if(m_project_name == _L("Untitled")) return fs::path(model.objects.front()->name).replace_extension().c_str() + wxString(plate_index_str) + extension; if (export_all) diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 40ba091a9d..afea7de50a 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -1644,8 +1644,10 @@ void Tab::on_presets_changed() wxGetApp().plater()->sidebar().update_presets(m_type); bool is_bbl_vendor_preset = wxGetApp().preset_bundle->printers.get_edited_preset().is_bbl_vendor_preset(wxGetApp().preset_bundle); + auto& printer_cfg = wxGetApp().preset_bundle->printers.get_edited_preset().config; if (is_bbl_vendor_preset) - wxGetApp().plater()->get_partplate_list().set_render_option(true, true); + wxGetApp().plater()->get_partplate_list().set_render_option( + !printer_cfg.option("bbl_calib_mark_logo")->value, true); else wxGetApp().plater()->get_partplate_list().set_render_option(false, true); @@ -2058,6 +2060,7 @@ void TabPrint::build() optgroup->append_single_option_line("gcode_add_line_number"); optgroup->append_single_option_line("gcode_comments"); optgroup->append_single_option_line("gcode_label_objects"); + optgroup->append_single_option_line("exclude_object"); Option option = optgroup->get_option("filename_format"); // option.opt.full_width = true; option.opt.is_code = true; @@ -2817,14 +2820,17 @@ void TabFilament::toggle_options() m_preset_bundle); } - if (m_active_page->title() == "Cooling") - { - bool cooling = m_config->opt_bool("slow_down_for_layer_cooling", 0); - toggle_option("slow_down_min_speed", cooling); + if (m_active_page->title() == "Cooling") { + bool cooling = m_config->opt_bool("slow_down_for_layer_cooling", 0); + toggle_option("slow_down_min_speed", cooling); - bool has_enable_overhang_bridge_fan = m_config->opt_bool("enable_overhang_bridge_fan", 0); - for (auto el : { "overhang_fan_speed", "overhang_fan_threshold" }) + bool has_enable_overhang_bridge_fan = m_config->opt_bool("enable_overhang_bridge_fan", 0); + for (auto el : {"overhang_fan_speed", "overhang_fan_threshold"}) toggle_option(el, has_enable_overhang_bridge_fan); + + toggle_option( + "additional_cooling_fan_speed", + m_preset_bundle->printers.get_edited_preset().config.option("auxiliary_fan")->value); } if (m_active_page->title() == "Filament") { @@ -2937,6 +2943,7 @@ void TabPrinter::build_fff() optgroup->append_single_option_line(option); // optgroup->append_single_option_line("printable_area"); optgroup->append_single_option_line("printable_height"); + optgroup->append_single_option_line("bbl_calib_mark_logo"); optgroup->append_single_option_line("nozzle_volume"); // BBS #if 0 @@ -3602,8 +3609,6 @@ void TabPrinter::toggle_options() //} if (m_active_page->title() == "Basic information") { toggle_option("single_extruder_multi_material", have_multiple_extruders); - // Hide relative extrusion option for BBL printers - toggle_line("use_relative_e_distances", !is_BBL_printer); auto flavor = m_config->option>("gcode_flavor")->value; bool is_marlin_flavor = flavor == gcfMarlinLegacy || flavor == gcfMarlinFirmware; @@ -3615,14 +3620,12 @@ void TabPrinter::toggle_options() // SoftFever: hide BBL specific settings for (auto el : - {"scan_first_layer", "machine_load_filament_time", - "machine_unload_filament_time", "nozzle_type"}) + {"scan_first_layer", "machine_load_filament_time", "machine_unload_filament_time", "nozzle_type", "bbl_calib_mark_logo"}) toggle_line(el, is_BBL_printer); // SoftFever: hide non-BBL settings - for (auto el : - { "use_firmware_retraction" }) - toggle_line(el, !is_BBL_printer); + for (auto el : {"use_firmware_retraction", "use_relative_e_distances"}) + toggle_line(el, !is_BBL_printer); } wxString extruder_number; diff --git a/src/slic3r/GUI/Widgets/TabCtrl.cpp b/src/slic3r/GUI/Widgets/TabCtrl.cpp index 8928a24afb..4600014ba3 100644 --- a/src/slic3r/GUI/Widgets/TabCtrl.cpp +++ b/src/slic3r/GUI/Widgets/TabCtrl.cpp @@ -302,7 +302,7 @@ void TabCtrl::doRender(wxDC& dc) #else dc.SetPen(wxPen(border_color.colorForStates(states), border_width)); dc.DrawLine(0, size.y - BS2, size.x, size.y - BS2); - wxColor c(0x968800); + wxColour c(0xf2, 0x75, 0x4e, 0xff); dc.SetPen(wxPen(c, 1)); dc.SetBrush(c); dc.DrawRoundedRectangle(x1 - radius, size.y - BS2 - border_width * 3, x2 + radius * 2 - x1, border_width * 3, radius); diff --git a/src/slic3r/Utils/OctoPrint.cpp b/src/slic3r/Utils/OctoPrint.cpp index 5116795c5e..9d9d7ef5a3 100644 --- a/src/slic3r/Utils/OctoPrint.cpp +++ b/src/slic3r/Utils/OctoPrint.cpp @@ -161,7 +161,7 @@ bool OctoPrint::test(wxString &msg) const wxString OctoPrint::get_test_ok_msg () const { - return _(L("Connection to OctoPrint works correctly.")); + return _(L("Connection to OctoPrint/Klipper works correctly.")); } wxString OctoPrint::get_test_failed_msg (wxString &msg) const diff --git a/version.inc b/version.inc index 1e3e2fd2e6..cc0b4c87ef 100644 --- a/version.inc +++ b/version.inc @@ -10,5 +10,5 @@ endif() if(NOT DEFINED BBL_INTERNAL_TESTING) set(BBL_INTERNAL_TESTING "1") endif() -set(SoftFever_VERSION "1.5.0") +set(SoftFever_VERSION "1.6.0") set(SLIC3R_VERSION "01.05.00.61")