From c778207bc2f02e0037b96296363cbe308258d386 Mon Sep 17 00:00:00 2001 From: "qing.zhang" Date: Wed, 14 Sep 2022 09:44:58 +0800 Subject: [PATCH 01/90] ENH: modify the start_code & virification temperature of PETG & TPU Signed-off-by: qing.zhang Change-Id: Ic2a6490d73b59b91a954d55827b84a0f0714d575 --- resources/profiles/BBL.json | 2 +- resources/profiles/BBL/filament/fdm_filament_pet.json | 2 +- resources/profiles/BBL/filament/fdm_filament_tpu.json | 2 +- resources/profiles/BBL/machine/Bambu Lab X1 0.2 nozzle.json | 2 +- resources/profiles/BBL/machine/Bambu Lab X1 0.4 nozzle.json | 4 +++- resources/profiles/BBL/machine/Bambu Lab X1 0.6 nozzle.json | 2 +- resources/profiles/BBL/machine/Bambu Lab X1 0.8 nozzle.json | 2 +- .../profiles/BBL/machine/Bambu Lab X1 Carbon 0.2 nozzle.json | 2 +- .../profiles/BBL/machine/Bambu Lab X1 Carbon 0.4 nozzle.json | 4 +++- .../profiles/BBL/machine/Bambu Lab X1 Carbon 0.6 nozzle.json | 2 +- .../profiles/BBL/machine/Bambu Lab X1 Carbon 0.8 nozzle.json | 2 +- 11 files changed, 15 insertions(+), 11 deletions(-) diff --git a/resources/profiles/BBL.json b/resources/profiles/BBL.json index 4259d7ae94a..5ca6110cc35 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.02.00.03", + "version": "01.02.00.05", "force_update": "0", "description": "the initial version of BBL configurations", "machine_model_list": [ diff --git a/resources/profiles/BBL/filament/fdm_filament_pet.json b/resources/profiles/BBL/filament/fdm_filament_pet.json index e32da824998..c6f4fc29602 100644 --- a/resources/profiles/BBL/filament/fdm_filament_pet.json +++ b/resources/profiles/BBL/filament/fdm_filament_pet.json @@ -68,7 +68,7 @@ "255" ], "temperature_vitrification": [ - "80" + "70" ], "nozzle_temperature_range_low": [ "220" diff --git a/resources/profiles/BBL/filament/fdm_filament_tpu.json b/resources/profiles/BBL/filament/fdm_filament_tpu.json index 2bbfefdd829..df97b1ccf4a 100644 --- a/resources/profiles/BBL/filament/fdm_filament_tpu.json +++ b/resources/profiles/BBL/filament/fdm_filament_tpu.json @@ -74,7 +74,7 @@ "240" ], "temperature_vitrification": [ - "30" + "35" ], "nozzle_temperature_range_low": [ "200" diff --git a/resources/profiles/BBL/machine/Bambu Lab X1 0.2 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1 0.2 nozzle.json index 900dc72690d..e7af6aed405 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1 0.2 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1 0.2 nozzle.json @@ -26,7 +26,7 @@ "retraction_minimum_travel": [ "5" ], - "machine_start_gcode": "\n;===== date: 202200815 =====================\n;===== reset machine status =================\nG91\nM17 Z0.3 ; lower the z-motor current\nG0 Z7 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\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\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\n{if bbl_bed_temperature_gcode}\nM1002 set_heatbed_surface_temp:[bed_temperature_initial_layer_vector] ;config bed temps\nM140 A S[bed_temperature_initial_layer_single] ;set bed temp\nM190 A S[bed_temperature_initial_layer_single] ;wait for bed temp\n{else}\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n{endif}\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\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 Z2 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 Z2 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;===== check scanner clarity ===========================\nM972 S5 P0 \nM400 S1\n;===== check scanner clarity end =======================\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{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \n{endif}\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 Z5 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z5 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 Y5.0 Z0.3 F18000;Move to start position\nM109 S{nozzle_temperature[initial_extruder]}\nG0 E3 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nG0 Y5.5 \nG0 X18 E15\nM400\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E0.933 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.018 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E0.933 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.091 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E1.080 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.238 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.403 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.183 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.403 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.201 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E1.061 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E0.659 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E0.769 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E0.732 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.256 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E0.732 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n T1000 \n M83 \n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F4800 \n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.160 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.080 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 ; use auto exposure by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.080 K0.160\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature[initial_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.08 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.08}\n M623 \n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\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\nG1 X128.0 Y253.0 Z0.2 F6000.0;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", + "machine_start_gcode": "\n;===== date: 202200907 =====================\n;===== reset machine status =================\nG91\nM17 Z0.3 ; lower the z-motor current\nG0 Z7 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\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\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\n{if bbl_bed_temperature_gcode}\nM1002 set_heatbed_surface_temp:[bed_temperature_initial_layer_vector] ;config bed temps\nM140 A S[bed_temperature_initial_layer_single] ;set bed temp\nM190 A S[bed_temperature_initial_layer_single] ;wait for bed temp\n{else}\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n{endif}\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\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 Z2 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 Z2 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;===== check scanner clarity ===========================\nM972 S5 P0 \nM400 S1\n;===== check scanner clarity end =======================\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{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \n{endif}\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 Z5 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z5 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 Y5.0 Z0.2 F18000;Move to start position\nM109 S{nozzle_temperature[initial_extruder]}\nG0 E3 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nG0 Y15 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E1\nG0 Y5.5 E0.700\nG0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nM400\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E0.933 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.018 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E0.933 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.091 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E1.080 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.238 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.403 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.183 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.403 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.201 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E1.061 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E0.659 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E0.769 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E0.732 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.256 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E0.732 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n T1000 \n M83 \n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F4800 \n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.160 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.080 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y10.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.080 K0.160\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature[initial_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.08 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.08}\n M623 \n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\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\nG1 X128.0 Y253.0 Z0.2 F6000.0;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", "nozzle_type": "stainless_steel" } \ No newline at end of file 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 bb8beb96df6..cb3f0384e9a 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 @@ -22,8 +22,10 @@ "18x28", "0x28" ], - "machine_start_gcode": "\n;===== date: 202200815 =====================\n;===== reset machine status =================\nG91\nM17 Z0.3 ; lower the z-motor current\nG0 Z7 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\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\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\n{if bbl_bed_temperature_gcode}\nM1002 set_heatbed_surface_temp:[bed_temperature_initial_layer_vector] ;config bed temps\nM140 A S[bed_temperature_initial_layer_single] ;set bed temp\nM190 A S[bed_temperature_initial_layer_single] ;wait for bed temp\n{else}\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n{endif}\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\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 Z2 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 Z2 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;===== check scanner clarity ===========================\nM972 S5 P0 \nM400 S1\n;===== check scanner clarity end =======================\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{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \n{endif}\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 Z5 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z5 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 Y5.0 Z0.3 F18000;Move to start position\nM109 S{nozzle_temperature[initial_extruder]}\nG0 E3 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nG0 Y5.5 \nG0 X18 E15\nM400\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E0.933 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.018 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E0.933 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.091 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E1.080 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.238 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.403 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.183 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.403 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.201 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E1.061 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E0.659 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E0.769 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E0.732 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.256 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E0.732 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n T1000 \n M83 \n\n ;G0 X18 Y28 F20000\n ;G0 Y0\n ;G0 Z0.3\n ;G0 X250 E18 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n ;G0 Y0.5\n ;G0 X18 E18 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.040 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.020 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 ; use auto exposure by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.020 K0.040\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature[initial_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.02 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.02}\n M623 \n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\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\nG1 X128.0 Y253.0 Z0.2 F6000.0;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", + + "machine_start_gcode": "\n;===== date: 202200907 =====================\n;===== reset machine status =================\nG91\nM17 Z0.3 ; lower the z-motor current\nG0 Z7 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\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\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\n{if bbl_bed_temperature_gcode}\nM1002 set_heatbed_surface_temp:[bed_temperature_initial_layer_vector] ;config bed temps\nM140 A S[bed_temperature_initial_layer_single] ;set bed temp\nM190 A S[bed_temperature_initial_layer_single] ;wait for bed temp\n{else}\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n{endif}\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\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 Z2 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 Z2 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;===== check scanner clarity ===========================\nM972 S5 P0 \nM400 S1\n;===== check scanner clarity end =======================\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{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \n{endif}\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 Z5 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z5 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 Y5.0 Z0.2 F18000;Move to start position\nM109 S{nozzle_temperature[initial_extruder]}\nG0 E3 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nG0 Y15 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E1\nG0 Y5.5 E0.700\nG0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nM400\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E0.933 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.018 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E0.933 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.091 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E1.080 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.238 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.403 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.183 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.403 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.201 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E1.061 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E0.659 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E0.769 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E0.732 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.256 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E0.732 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n T1000 \n M83 \n\n ;G0 X18 Y28 F20000\n ;G0 Y0\n ;G0 Z0.3\n ;G0 X250 E18 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n ;G0 Y0.5\n ;G0 X18 E18 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.040 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.020 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y10.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.020 K0.040\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature[initial_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.02 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.02}\n M623 \n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\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\nG1 X128.0 Y253.0 Z0.2 F6000.0;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", "machine_end_gcode": ";===== date: 202200913 =====================\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 X65 Y245 F12000 ; move to safe pos \nG1 Y265 F3000\n\nG1 X65 Y245 F12000\nG1 Y265 F3000\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\nG1 X100 F12000 ; wipe\n; pull back filament to AMS\nM620 S255\nG1 X20 Y50 F12000\nG1 Y-3\nT255\nG1 X65 F12000\nG1 Y265\nG1 X100 F12000 ; wipe\nM621 S255\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) < 250}\n G1 Z{max_layer_z + 100.0} F600\n G1 Z{max_layer_z +98.0}\n{else}\n G1 Z250 F600\n G1 Z248\n{endif}\nM400 P100\nM17 R ; restore z current\n\nG90\nG1 X128 Y250 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\nM17 X0.8 Y0.8 Z0.5 ; lower motor current to 45% power\n\n", + "scan_first_layer": "1", "machine_load_filament_time": "17", "machine_unload_filament_time": "16", diff --git a/resources/profiles/BBL/machine/Bambu Lab X1 0.6 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1 0.6 nozzle.json index 72f97d6de0b..7b3026c5dfa 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1 0.6 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1 0.6 nozzle.json @@ -26,6 +26,6 @@ "retraction_minimum_travel": [ "3" ], - "machine_start_gcode": "\n;===== date: 202200815 =====================\n;===== reset machine status =================\nG91\nM17 Z0.3 ; lower the z-motor current\nG0 Z7 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\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\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\n{if bbl_bed_temperature_gcode}\nM1002 set_heatbed_surface_temp:[bed_temperature_initial_layer_vector] ;config bed temps\nM140 A S[bed_temperature_initial_layer_single] ;set bed temp\nM190 A S[bed_temperature_initial_layer_single] ;wait for bed temp\n{else}\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n{endif}\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\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 Z2 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 Z2 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;===== check scanner clarity ===========================\nM972 S5 P0 \nM400 S1\n;===== check scanner clarity end =======================\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{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \n{endif}\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 Z5 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z5 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 Y5.0 Z0.3 F18000;Move to start position\nM109 S{nozzle_temperature[initial_extruder]}\nG0 E3 F300\nG0 X240 E25 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \nG0 Y5.5 \nG0 X18 E25\nM400\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E1.679 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.032 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E1.679 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.164 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E1.944 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.428 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.725 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.329 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.725 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.362 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E1.910 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E1.186 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E1.384 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E1.318 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.461 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E1.318 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n T1000 \n M83 \n\n ;G0 X18 Y28 F20000\n ;G0 Y0\n ;G0 Z0.3\n ;G0 X250 E25 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n ;G0 Y0.9\n ;G0 X18 E25 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n\n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X185.000 E16.9 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.030 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.015 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 ; use auto exposure by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.015 K0.030\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature[initial_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.015 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.015}\n M623 \n\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X185.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X190.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X195.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X200.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X205.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X210.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X215.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X220.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X225.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\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\nG1 X128.0 Y253.0 Z0.2 F6000.0;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", + "machine_start_gcode": "\n;===== date: 202200907 =====================\n;===== reset machine status =================\nG91\nM17 Z0.3 ; lower the z-motor current\nG0 Z7 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\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\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\n{if bbl_bed_temperature_gcode}\nM1002 set_heatbed_surface_temp:[bed_temperature_initial_layer_vector] ;config bed temps\nM140 A S[bed_temperature_initial_layer_single] ;set bed temp\nM190 A S[bed_temperature_initial_layer_single] ;wait for bed temp\n{else}\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n{endif}\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\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 Z2 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 Z2 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;===== check scanner clarity ===========================\nM972 S5 P0 \nM400 S1\n;===== check scanner clarity end =======================\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{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \n{endif}\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 Z5 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z5 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 Y5.0 Z0.2 F18000;Move to start position\nM109 S{nozzle_temperature[initial_extruder]}\nG0 E3 F300\nG0 X240 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nG0 Y15 E1.166 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E1.666\nG0 Y5.5 E1.166\nG0 X18 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nM400\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E1.679 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.032 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E1.679 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.164 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E1.944 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.428 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.725 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.329 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.725 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.362 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E1.910 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E1.186 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E1.384 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E1.318 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.461 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E1.318 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n T1000 \n M83 \n\n ;G0 X18 Y28 F20000\n ;G0 Y0\n ;G0 Z0.3\n ;G0 X250 E25 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n ;G0 Y0.9\n ;G0 X18 E25 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n\n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X185.000 E16.9 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.030 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.015 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y10.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.015 K0.030\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature[initial_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.015 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.015}\n M623 \n\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X185.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X190.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X195.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X200.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X205.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X210.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X215.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X220.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X225.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\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\nG1 X128.0 Y253.0 Z0.2 F6000.0;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", "nozzle_type": "hardened_steel" } \ No newline at end of file diff --git a/resources/profiles/BBL/machine/Bambu Lab X1 0.8 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1 0.8 nozzle.json index 940e33fc621..9960d39088c 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1 0.8 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1 0.8 nozzle.json @@ -29,7 +29,7 @@ "retract_length_toolchange": [ "3" ], - "machine_start_gcode": "\n;===== date: 202200815 =====================\n;===== reset machine status =================\nG91\nM17 Z0.3 ; lower the z-motor current\nG0 Z7 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\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\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\n{if bbl_bed_temperature_gcode}\nM1002 set_heatbed_surface_temp:[bed_temperature_initial_layer_vector] ;config bed temps\nM140 A S[bed_temperature_initial_layer_single] ;set bed temp\nM190 A S[bed_temperature_initial_layer_single] ;wait for bed temp\n{else}\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n{endif}\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\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 Z2 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 Z2 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;===== check scanner clarity ===========================\nM972 S5 P0 \nM400 S1\n;===== check scanner clarity end =======================\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{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \n{endif}\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 Z5 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z5 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 Y4.5 Z0.3 F18000;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 E3 F300\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \nG0 Y5.5 \nG0 X129 E15\nG0 X18 E15\nM400\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E1.8660 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.0360 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E1.8660 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.1820 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E2.1600 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.4760 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.8060 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.3660 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.8060 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.4020 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E2.1220 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E1.3180 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E1.5380 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E1.4640 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.5120 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E1.4640 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n\n T1000 \n M83 \n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X110.000 E9.35441 F4800 \n G0 X185.000 E9.35441 F4800 \n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.020 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.010 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 ; use auto exposure by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature_initial_layer[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.010 K0.020\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature_initial_layer[initial_extruder]} \n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.01 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14) *0.01}\n M623 \n\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X185.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X190.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X195.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X200.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X205.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X210.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X215.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X220.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X225.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\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\nG1 X128.0 Y253.0 Z0.2 F6000.0;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", + "machine_start_gcode": "\n;===== date: 202200907 =====================\n;===== reset machine status =================\nG91\nM17 Z0.3 ; lower the z-motor current\nG0 Z7 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\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\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\n{if bbl_bed_temperature_gcode}\nM1002 set_heatbed_surface_temp:[bed_temperature_initial_layer_vector] ;config bed temps\nM140 A S[bed_temperature_initial_layer_single] ;set bed temp\nM190 A S[bed_temperature_initial_layer_single] ;wait for bed temp\n{else}\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n{endif}\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\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 Z2 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 Z2 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;===== check scanner clarity ===========================\nM972 S5 P0 \nM400 S1\n;===== check scanner clarity end =======================\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{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \n{endif}\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 Z5 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z5 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 Y4.5 Z0.2 F18000;Move to start position\nM109 S{nozzle_temperature[initial_extruder]}\nG0 E3 F300\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \nG0 X240 E15\nG0 Y15 E1.500 F{outer_wall_volumetric_speed/(0.3*1.0)/ 4 * 60}\nG0 X239.5\nG0 E2\nG0 Y5.5 E1.500\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \nG0 X18 E15\nM400\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E1.8660 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.0360 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E1.8660 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.1820 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E2.1600 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.4760 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.8060 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.3660 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.8060 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.4020 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E2.1220 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E1.3180 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E1.5380 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E1.4640 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.5120 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E1.4640 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n\n T1000 \n M83 \n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X110.000 E9.35441 F4800 \n G0 X185.000 E9.35441 F4800 \n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.020 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.010 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y10.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature_initial_layer[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.010 K0.020\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature_initial_layer[initial_extruder]} \n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.01 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14) *0.01}\n M623 \n\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X185.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X190.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X195.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X200.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X205.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X210.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X215.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X220.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X225.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\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\nG1 X128.0 Y253.0 Z0.2 F6000.0;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", "nozzle_type": "hardened_steel" } \ No newline at end of file diff --git a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.2 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.2 nozzle.json index 74f6c6ee9ad..c8315c87cac 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.2 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.2 nozzle.json @@ -26,6 +26,6 @@ "retraction_minimum_travel": [ "5" ], - "machine_start_gcode": "\n;===== date: 202200815 =====================\n;===== reset machine status =================\nG91\nM17 Z0.3 ; lower the z-motor current\nG0 Z7 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\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\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\n{if bbl_bed_temperature_gcode}\nM1002 set_heatbed_surface_temp:[bed_temperature_initial_layer_vector] ;config bed temps\nM140 A S[bed_temperature_initial_layer_single] ;set bed temp\nM190 A S[bed_temperature_initial_layer_single] ;wait for bed temp\n{else}\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n{endif}\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\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 Z2 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 Z2 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;===== check scanner clarity ===========================\nM972 S5 P0 \nM400 S1\n;===== check scanner clarity end =======================\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{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \n{endif}\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 Z5 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z5 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 Y5.0 Z0.3 F18000;Move to start position\nM109 S{nozzle_temperature[initial_extruder]}\nG0 E3 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nG0 Y5.5 \nG0 X18 E15\nM400\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E0.933 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.018 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E0.933 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.091 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E1.080 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.238 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.403 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.183 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.403 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.201 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E1.061 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E0.659 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E0.769 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E0.732 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.256 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E0.732 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n T1000 \n M83 \n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F4800 \n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.160 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.080 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 ; use auto exposure by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.080 K0.160\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature[initial_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.08 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.08}\n M623 \n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\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\nG1 X128.0 Y253.0 Z0.2 F6000.0;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", + "machine_start_gcode": "\n;===== date: 202200907 =====================\n;===== reset machine status =================\nG91\nM17 Z0.3 ; lower the z-motor current\nG0 Z7 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\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\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\n{if bbl_bed_temperature_gcode}\nM1002 set_heatbed_surface_temp:[bed_temperature_initial_layer_vector] ;config bed temps\nM140 A S[bed_temperature_initial_layer_single] ;set bed temp\nM190 A S[bed_temperature_initial_layer_single] ;wait for bed temp\n{else}\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n{endif}\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\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 Z2 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 Z2 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;===== check scanner clarity ===========================\nM972 S5 P0 \nM400 S1\n;===== check scanner clarity end =======================\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{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \n{endif}\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 Z5 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z5 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 Y5.0 Z0.2 F18000;Move to start position\nM109 S{nozzle_temperature[initial_extruder]}\nG0 E3 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nG0 Y15 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E1\nG0 Y5.5 E0.700\nG0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nM400\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E0.933 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.018 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E0.933 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.091 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E1.080 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.238 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.403 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.183 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.403 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.201 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E1.061 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E0.659 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E0.769 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E0.732 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.256 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E0.732 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n T1000 \n M83 \n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F4800 \n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.160 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.080 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y10.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.080 K0.160\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature[initial_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.08 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.08}\n M623 \n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\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\nG1 X128.0 Y253.0 Z0.2 F6000.0;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", "nozzle_type": "stainless_steel" } diff --git a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.4 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.4 nozzle.json index 6a49665e9ed..39d096508db 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.4 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.4 nozzle.json @@ -22,8 +22,10 @@ "18x28", "0x28" ], - "machine_start_gcode": "\n;===== date: 202200815 =====================\n;===== reset machine status =================\nG91\nM17 Z0.3 ; lower the z-motor current\nG0 Z7 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\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\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\n{if bbl_bed_temperature_gcode}\nM1002 set_heatbed_surface_temp:[bed_temperature_initial_layer_vector] ;config bed temps\nM140 A S[bed_temperature_initial_layer_single] ;set bed temp\nM190 A S[bed_temperature_initial_layer_single] ;wait for bed temp\n{else}\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n{endif}\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\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 Z2 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 Z2 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;===== check scanner clarity ===========================\nM972 S5 P0 \nM400 S1\n;===== check scanner clarity end =======================\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{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \n{endif}\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 Z5 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z5 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 Y5.0 Z0.3 F18000;Move to start position\nM109 S{nozzle_temperature[initial_extruder]}\nG0 E3 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nG0 Y5.5 \nG0 X18 E15\nM400\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E0.933 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.018 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E0.933 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.091 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E1.080 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.238 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.403 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.183 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.403 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.201 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E1.061 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E0.659 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E0.769 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E0.732 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.256 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E0.732 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n T1000 \n M83 \n\n ;G0 X18 Y28 F20000\n ;G0 Y0\n ;G0 Z0.3\n ;G0 X250 E18 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n ;G0 Y0.5\n ;G0 X18 E18 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.040 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.020 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 ; use auto exposure by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.020 K0.040\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature[initial_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.02 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.02}\n M623 \n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\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\nG1 X128.0 Y253.0 Z0.2 F6000.0;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", + + "machine_start_gcode": "\n;===== date: 202200907 =====================\n;===== reset machine status =================\nG91\nM17 Z0.3 ; lower the z-motor current\nG0 Z7 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\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\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\n{if bbl_bed_temperature_gcode}\nM1002 set_heatbed_surface_temp:[bed_temperature_initial_layer_vector] ;config bed temps\nM140 A S[bed_temperature_initial_layer_single] ;set bed temp\nM190 A S[bed_temperature_initial_layer_single] ;wait for bed temp\n{else}\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n{endif}\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\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 Z2 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 Z2 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;===== check scanner clarity ===========================\nM972 S5 P0 \nM400 S1\n;===== check scanner clarity end =======================\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{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \n{endif}\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 Z5 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z5 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 Y5.0 Z0.2 F18000;Move to start position\nM109 S{nozzle_temperature[initial_extruder]}\nG0 E3 F300\nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nG0 Y15 E0.700 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E1\nG0 Y5.5 E0.700\nG0 X18 E15 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nM400\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E0.933 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.018 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E0.933 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.091 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E1.080 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.238 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.403 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.183 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.403 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.201 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E1.061 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E0.659 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E0.769 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E0.732 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.256 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E0.732 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n T1000 \n M83 \n\n ;G0 X18 Y28 F20000\n ;G0 Y0\n ;G0 Z0.3\n ;G0 X250 E18 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n ;G0 Y0.5\n ;G0 X18 E18 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X185.000 E9.35441 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.040 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.020 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y10.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.020 K0.040\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature[initial_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E1.24726 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.02 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.02}\n M623 \n\n G1 X140.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X185.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X190.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X195.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X200.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X205.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X210.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X215.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X220.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X225.000 E0.31181 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\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\nG1 X128.0 Y253.0 Z0.2 F6000.0;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4", "machine_end_gcode": ";===== date: 202200913 =====================\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 X65 Y245 F12000 ; move to safe pos \nG1 Y265 F3000\n\nG1 X65 Y245 F12000\nG1 Y265 F3000\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\nG1 X100 F12000 ; wipe\n; pull back filament to AMS\nM620 S255\nG1 X20 Y50 F12000\nG1 Y-3\nT255\nG1 X65 F12000\nG1 Y265\nG1 X100 F12000 ; wipe\nM621 S255\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) < 250}\n G1 Z{max_layer_z + 100.0} F600\n G1 Z{max_layer_z +98.0}\n{else}\n G1 Z250 F600\n G1 Z248\n{endif}\nM400 P100\nM17 R ; restore z current\n\nG90\nG1 X128 Y250 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\nM17 X0.8 Y0.8 Z0.5 ; lower motor current to 45% power\n\n", + "scan_first_layer": "1", "machine_load_filament_time": "17", "machine_unload_filament_time": "16", diff --git a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.6 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.6 nozzle.json index b7cf921fd35..d04f7c5926d 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.6 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.6 nozzle.json @@ -26,5 +26,5 @@ "retraction_minimum_travel": [ "3" ], - "machine_start_gcode": "\n;===== date: 202200815 =====================\n;===== reset machine status =================\nG91\nM17 Z0.3 ; lower the z-motor current\nG0 Z7 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\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\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\n{if bbl_bed_temperature_gcode}\nM1002 set_heatbed_surface_temp:[bed_temperature_initial_layer_vector] ;config bed temps\nM140 A S[bed_temperature_initial_layer_single] ;set bed temp\nM190 A S[bed_temperature_initial_layer_single] ;wait for bed temp\n{else}\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n{endif}\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\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 Z2 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 Z2 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;===== check scanner clarity ===========================\nM972 S5 P0 \nM400 S1\n;===== check scanner clarity end =======================\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{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \n{endif}\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 Z5 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z5 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 Y5.0 Z0.3 F18000;Move to start position\nM109 S{nozzle_temperature[initial_extruder]}\nG0 E3 F300\nG0 X240 E25 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \nG0 Y5.5 \nG0 X18 E25\nM400\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E1.679 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.032 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E1.679 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.164 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E1.944 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.428 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.725 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.329 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.725 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.362 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E1.910 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E1.186 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E1.384 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E1.318 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.461 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E1.318 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n T1000 \n M83 \n\n ;G0 X18 Y28 F20000\n ;G0 Y0\n ;G0 Z0.3\n ;G0 X250 E25 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n ;G0 Y0.9\n ;G0 X18 E25 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n\n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X185.000 E16.9 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.030 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.015 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 ; use auto exposure by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.015 K0.030\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature[initial_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.015 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.015}\n M623 \n\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X185.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X190.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X195.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X200.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X205.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X210.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X215.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X220.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X225.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\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\nG1 X128.0 Y253.0 Z0.2 F6000.0;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4" + "machine_start_gcode": "\n;===== date: 202200907 =====================\n;===== reset machine status =================\nG91\nM17 Z0.3 ; lower the z-motor current\nG0 Z7 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\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\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\n{if bbl_bed_temperature_gcode}\nM1002 set_heatbed_surface_temp:[bed_temperature_initial_layer_vector] ;config bed temps\nM140 A S[bed_temperature_initial_layer_single] ;set bed temp\nM190 A S[bed_temperature_initial_layer_single] ;wait for bed temp\n{else}\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n{endif}\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\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 Z2 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 Z2 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;===== check scanner clarity ===========================\nM972 S5 P0 \nM400 S1\n;===== check scanner clarity end =======================\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{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \n{endif}\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 Z5 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z5 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 Y5.0 Z0.2 F18000;Move to start position\nM109 S{nozzle_temperature[initial_extruder]}\nG0 E3 F300\nG0 X240 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nG0 Y15 E1.166 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\nG0 X239.5\nG0 E1.666\nG0 Y5.5 E1.166\nG0 X18 E25 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \nM400\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E1.679 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.032 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E1.679 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.164 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E1.944 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.428 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.725 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.329 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.725 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.362 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E1.910 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E1.186 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E1.384 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E1.318 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.461 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E1.318 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n T1000 \n M83 \n\n ;G0 X18 Y28 F20000\n ;G0 Y0\n ;G0 Z0.3\n ;G0 X250 E25 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n ;G0 Y0.9\n ;G0 X18 E25 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n\n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X185.000 E16.9 F{outer_wall_volumetric_speed/(0.3*0.9) * 60}\n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.030 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.015 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9)/ 4 * 60} \n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.9) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y10.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.015 K0.030\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature[initial_extruder]}\n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E2.25000 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60}\n G1 X70.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X75.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X80.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X85.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X90.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X95.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X100.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X105.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X110.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X115.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X120.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X125.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X130.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X135.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.015 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*0.015}\n M623 \n\n G1 X140.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X145.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X150.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X155.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X160.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X165.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X170.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X175.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X180.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X185.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X190.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X195.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X200.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X205.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X210.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X215.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n G1 X220.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5)/ 4 * 60} \n G1 X225.000 E0.56250 F{outer_wall_volumetric_speed/(0.3*0.5) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\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\nG1 X128.0 Y253.0 Z0.2 F6000.0;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4" } diff --git a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.8 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.8 nozzle.json index b02c38d6a99..1c6c9dd41e4 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.8 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1 Carbon 0.8 nozzle.json @@ -29,5 +29,5 @@ "retract_length_toolchange": [ "3" ], - "machine_start_gcode": "\n;===== date: 202200815 =====================\n;===== reset machine status =================\nG91\nM17 Z0.3 ; lower the z-motor current\nG0 Z7 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\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\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\n{if bbl_bed_temperature_gcode}\nM1002 set_heatbed_surface_temp:[bed_temperature_initial_layer_vector] ;config bed temps\nM140 A S[bed_temperature_initial_layer_single] ;set bed temp\nM190 A S[bed_temperature_initial_layer_single] ;wait for bed temp\n{else}\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n{endif}\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\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 Z2 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 Z2 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;===== check scanner clarity ===========================\nM972 S5 P0 \nM400 S1\n;===== check scanner clarity end =======================\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{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \n{endif}\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 Z5 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z5 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 Y4.5 Z0.3 F18000;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 E3 F300\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \nG0 X240 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \nG0 Y5.5 \nG0 X129 E15\nG0 X18 E15\nM400\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E1.8660 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.0360 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E1.8660 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.1820 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E2.1600 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.4760 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.8060 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.3660 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.8060 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.4020 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E2.1220 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E1.3180 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E1.5380 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E1.4640 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.5120 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E1.4640 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n\n T1000 \n M83 \n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X110.000 E9.35441 F4800 \n G0 X185.000 E9.35441 F4800 \n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.020 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.010 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 ; use auto exposure by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature_initial_layer[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.010 K0.020\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature_initial_layer[initial_extruder]} \n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.01 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14) *0.01}\n M623 \n\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X185.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X190.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X195.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X200.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X205.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X210.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X215.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X220.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X225.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\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\nG1 X128.0 Y253.0 Z0.2 F6000.0;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4" + "machine_start_gcode": "\n;===== date: 202200907 =====================\n;===== reset machine status =================\nG91\nM17 Z0.3 ; lower the z-motor current\nG0 Z7 F300 ; lower the hotbed , to prevent the nozzle is below the hotbed\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\n\n;===== heatbed preheat ====================\nM1002 gcode_claim_action : 2\n{if bbl_bed_temperature_gcode}\nM1002 set_heatbed_surface_temp:[bed_temperature_initial_layer_vector] ;config bed temps\nM140 A S[bed_temperature_initial_layer_single] ;set bed temp\nM190 A S[bed_temperature_initial_layer_single] ;wait for bed temp\n{else}\nM140 S[bed_temperature_initial_layer_single] ;set bed temp\nM190 S[bed_temperature_initial_layer_single] ;wait for bed temp\n{endif}\n\n{if scan_first_layer}\n;=========register first layer scan=====\nM977 S1 P60\n{endif}\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 Z2 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 Z2 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;===== check scanner clarity ===========================\nM972 S5 P0 \nM400 S1\n;===== check scanner clarity end =======================\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{if scan_first_layer}\n;start heatbed scan====================================\nM976 S2 P1 \n{endif}\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 Z5 F20000\nM400 P200\nM970.3 Q1 A7 B30 C80 H15 K0\nM974 Q1 S2 P0\n\nG1 X128 Y128 Z5 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 Y4.5 Z0.2 F18000;Move to start position\nM109 S{nozzle_temperature[initial_extruder]}\nG0 E3 F300\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \nG0 X240 E15\nG0 Y15 E1.500 F{outer_wall_volumetric_speed/(0.3*1.0)/ 4 * 60}\nG0 X239.5\nG0 E2\nG0 Y5.5 E1.500\nG0 X129 E15 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \nG0 X18 E15\nM400\n\n;===== draw extrinsic para cali paint =================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M1002 gcode_claim_action : 8\n\n T1000 \n G0 F3000 X28.000 Y19.500 Z0.200\n G1 F1200.0 X28.000 Y45.000 Z0.200 E1.8660 \n G1 F1200.0 X28.500 Y45.000 Z0.200 E0.0360 \n G1 F1200.0 X28.500 Y19.500 Z0.200 E1.8660 \n G1 F1200.0 X31.000 Y19.500 Z0.200 E0.1820 \n G1 F1200.0 X31.000 Y49.000 Z0.200 E2.1600 \n G1 F1200.0 X37.500 Y49.000 Z0.200 E0.4760 \n G1 F1200.0 X37.500 Y60.000 Z0.200 E0.8060 \n G1 F1200.0 X42.500 Y60.000 Z0.200 E0.3660 \n G1 F1200.0 X42.500 Y49.000 Z0.200 E0.8060 \n G1 F1200.0 X48.000 Y49.000 Z0.200 E0.4020 \n G1 F1200.0 X48.000 Y20.000 Z0.200 E2.1220 \n G1 F1200.0 X30.000 Y20.000 Z0.200 E1.3180 \n G1 F1200.0 X30.000 Y41.000 Z0.200 E1.5380 \n G1 F1200.0 X50.000 Y41.000 Z0.200 E1.4640 \n G1 F1200.0 X50.000 Y34.000 Z0.200 E0.5120 \n G1 F1200.0 X30.000 Y34.000 Z0.200 E1.4640 \n G1 F1500.000 E-0.800 \n\n ;=========== extruder cali extrusion ================== \n\n T1000 \n M83 \n G0 X35.000 Y18.000 Z0.300 F30000 E0\n G1 F1500.000 E0.800 \n M106 S0 ; turn off fan\n G0 X110.000 E9.35441 F4800 \n G0 X185.000 E9.35441 F4800 \n G0 X187 Z0\n G1 F1500.000 E-0.800 \n G0 Z1\n G0 X180 Z0.3 F18000\n \n M900 L1000.0 M1.0\n M900 K0.020 \n G0 X45.000 F30000 \n G0 Y20.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.010 \n G0 X45.000 F30000 \n G0 Y22.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 F1500.000 E-0.800 \n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n M400\n\n G0 X45.000 F30000 \n M900 K0.000 \n G0 X45.000 F30000 \n G0 Y24.000 F30000 \n G1 F1500.000 E0.800 \n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 F1500.000 E-0.800\n G1 X183 Z0.15 F30000\n G1 X185\n G1 Z1.0\n G0 Y18.000 F30000 ; move y to clear pos \n G1 Z0.3\n\n G0 X45.000 F30000 ; move to start point\n\nM623 ; end of \"draw extrinsic para cali paint\"\n\nM104 S140\n\n\n;=========== laser and rgb calibration =========== \nM400\nM18 E\nM500 R\n\nM973 S3 P14\n\nG1 X120 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\nT1100\nG1 X143.0 Y5.0 Z0.3 F18000.0;Move to first extrude line pos\n\nM400 P100\n\nM960 S1 P1\nM400 P100\nM973 S6 P0; use auto exposure for horizontal laser by xcam\nM960 S0 P0\n\nG1 X240.0 Y10.0 Z0.3 F18000.0;Move to vertical extrude line pos\nM960 S2 P1\nM400 P100\nM973 S6 P1; use auto exposure for vertical laser by xcam\nM960 S0 P0\n\n;=========== handeye calibration ======================\nM1002 judge_flag extrude_cali_flag\nM622 J1\n\n M973 S3 P1 ; camera start stream\n M400 P500\n M973 S1 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G0 F6000 X40.000 Y54.500 Z0.000 \n M960 S0 P1\n M973 S1\n M400 P800\n M971 S6 P0\n M973 S2 P16000\n M400 P500 \n G0 Z0.000 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P1 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P200 \n M971 S5 P3 \n G0 Z0.500 F12000\n M960 S0 P0\n M960 S1 P1 \n G0 Y37.50 \n M400 P200\n M971 S5 P2 \n M960 S0 P0\n M960 S2 P1 \n G0 Y54.50 \n M400 P500 \n M971 S5 P4 \n M963 S1 \n M400 P1500 \n M964 \n T1100 \n G1 Z3 F3000 \n\n M400\n M500 ; save cali data\n\n M104 S{nozzle_temperature_initial_layer[initial_extruder]} ; rise nozzle temp now ,to reduce temp waiting time.\n\n T1100 \n M400 P400 \n M960 S0 P0\n G0 F30000.000 Y22.000 X65.000 Z0.000\n M400 P400 \n M960 S1 P1 \n M400 P50 \n\n M969 S1 N3 A2000 \n G0 F360.000 X181.000 Z0.000\n M980.3 A70.000 B{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60/4} C5.000 D{outer_wall_volumetric_speed/(1.75*1.75/4*3.14)*60} E5.000 F175.000 H1.000 I0.000 J0.010 K0.020\n M400 P100 \n G0 F20000\n G0 Z1 ; rise nozzle up\n T1000 ; change to nozzle space\n G0 X45.000 Y16.000 F30000 ; move to test line pos\n M969 S0 ; turn off scanning\n M960 S0 P0\n\n\n G1 Z2 F20000 \n T1000 \n G0 X45.000 Y16.000 F30000 E0\n M109 S{nozzle_temperature_initial_layer[initial_extruder]} \n G0 Z0.3\n G1 F1500.000 E3.600 \n G1 X65.000 E2.4945 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60}\n G1 X70.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X75.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X80.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X85.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X90.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X95.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X100.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X105.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X110.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X115.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X120.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X125.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X130.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X135.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60}\n\n ; see if extrude cali success, if not ,use default value\n M1002 judge_last_extrude_cali_success\n M622 J0\n M400\n M900 K0.01 M{outer_wall_volumetric_speed/(1.75*1.75/4*3.14) *0.01}\n M623 \n\n G1 X140.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X145.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X150.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X155.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X160.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X165.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X170.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X175.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X180.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X185.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X190.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X195.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X200.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X205.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X210.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X215.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n G1 X220.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) / 4 * 60} \n G1 X225.000 E0.6236 F{outer_wall_volumetric_speed/(0.3*1.0) * 60} \n M973 S4 \n\nM623\n\n;========turn off light and wait extrude temperature =============\nM1002 gcode_claim_action : 0\nM973 S4 ; turn off scanner\nM400 ; wait all motion done before implement the emprical L parameters\n;M900 L500.0 ; Empirical parameters\nM109 S[nozzle_temperature_initial_layer]\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\nG1 X128.0 Y253.0 Z0.2 F6000.0;Move to start position\nM109 S{nozzle_temperature_initial_layer[initial_extruder]}\nG0 X253 E6.4 F{outer_wall_volumetric_speed/(0.3*0.6) * 60} \nG0 Y128 E6.4\nG0 X252.5\nG0 Y252.5 E6.4\nG0 X128 E6.4" } From 4ad4151a070370834f6ea75eb3783ef4af2ab2fd Mon Sep 17 00:00:00 2001 From: "qing.zhang" Date: Wed, 14 Sep 2022 12:51:12 +0800 Subject: [PATCH 02/90] ENH: modify the warning msg of virification temperature Signed-off-by: qing.zhang Change-Id: I77157ed65aedc9c114c40c2e1e72d323cf4a46b8 --- bbl/i18n/BambuStudio.pot | 6 ++++-- bbl/i18n/de/BambuStudio_de.po | 18 +++++++++++++----- bbl/i18n/en/BambuStudio_en.po | 18 +++++++++++++----- bbl/i18n/es/BambuStudio_es.po | 18 +++++++++++++----- bbl/i18n/fr/BambuStudio_fr.po | 18 +++++++++++++----- bbl/i18n/hu/BambuStudio_hu.po | 18 +++++++++++++----- bbl/i18n/nl/BambuStudio_nl.po | 17 +++++++++++++---- bbl/i18n/sv/BambuStudio_sv.po | 22 +++++++++++++++------- bbl/i18n/zh_cn/BambuStudio_zh_CN.po | 18 ++++++++++++++---- resources/i18n/de/BambuStudio.mo | Bin 162536 -> 162196 bytes resources/i18n/en/BambuStudio.mo | Bin 148982 -> 148666 bytes resources/i18n/es/BambuStudio.mo | Bin 163133 -> 162785 bytes resources/i18n/fr/BambuStudio.mo | Bin 166203 -> 165858 bytes resources/i18n/hu/BambuStudio.mo | Bin 164783 -> 164444 bytes resources/i18n/nl/BambuStudio.mo | Bin 161745 -> 161420 bytes resources/i18n/sv/BambuStudio.mo | Bin 153077 -> 152744 bytes resources/i18n/zh_cn/BambuStudio.mo | Bin 152817 -> 152984 bytes src/slic3r/GUI/ConfigManipulation.cpp | 2 +- 18 files changed, 112 insertions(+), 43 deletions(-) diff --git a/bbl/i18n/BambuStudio.pot b/bbl/i18n/BambuStudio.pot index 77e6a0e4721..93426e1ca27 100644 --- a/bbl/i18n/BambuStudio.pot +++ b/bbl/i18n/BambuStudio.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-09-09 11:50+0800\n" +"POT-Creation-Date: 2022-09-14 12:48+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1535,7 +1535,9 @@ msgstr "" msgid "" "Bed temperature is higher than vitrification temperature of this filament.\n" -"This may cause nozzle blocked and printing failure" +"This may cause nozzle blocked and printing failure\n" +"Please keep the printer open during the printing process to ensure air " +"circulation or reduce the temperature of the hot bed" msgstr "" msgid "" diff --git a/bbl/i18n/de/BambuStudio_de.po b/bbl/i18n/de/BambuStudio_de.po index 5fa6ef20655..ff445ea8cfe 100644 --- a/bbl/i18n/de/BambuStudio_de.po +++ b/bbl/i18n/de/BambuStudio_de.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-09-09 11:50+0800\n" +"POT-Creation-Date: 2022-09-14 12:48+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -1644,11 +1644,10 @@ msgstr "" msgid "" "Bed temperature is higher than vitrification temperature of this filament.\n" -"This may cause nozzle blocked and printing failure" +"This may cause nozzle blocked and printing failure\n" +"Please keep the printer open during the printing process to ensure air " +"circulation or reduce the temperature of the hot bed" msgstr "" -"Die Temperatur des Druckbett ist höher als die Verglasungstemperatur dieses " -"Filaments.\n" -"Dies kann zu einer Verstopfung der Düse und zu Druckfehlern führen" msgid "" "Too small layer height.\n" @@ -6827,6 +6826,15 @@ msgstr "Support: Löcher in Schicht %d repairieren" msgid "Support: propagate branches at layer %d" msgstr "Support: Verbreiten von Zweigen auf Ebene %d" +#~ msgid "" +#~ "Bed temperature is higher than vitrification temperature of this " +#~ "filament.\n" +#~ "This may cause nozzle blocked and printing failure" +#~ msgstr "" +#~ "Die Temperatur des Druckbett ist höher als die Verglasungstemperatur " +#~ "dieses Filaments.\n" +#~ "Dies kann zu einer Verstopfung der Düse und zu Druckfehlern führen" + #~ msgid "0%" #~ msgstr "0%" diff --git a/bbl/i18n/en/BambuStudio_en.po b/bbl/i18n/en/BambuStudio_en.po index fb2b3341cc5..3154d6a6148 100644 --- a/bbl/i18n/en/BambuStudio_en.po +++ b/bbl/i18n/en/BambuStudio_en.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-09-09 11:50+0800\n" +"POT-Creation-Date: 2022-09-14 12:48+0800\n" "Language: en\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -1605,11 +1605,10 @@ msgstr "" msgid "" "Bed temperature is higher than vitrification temperature of this filament.\n" -"This may cause nozzle blocked and printing failure" +"This may cause nozzle blocked and printing failure\n" +"Please keep the printer open during the printing process to ensure air " +"circulation or reduce the temperature of the hot bed" msgstr "" -"The bed temperature is higher than the vitrification temperature of this " -"filament.\n" -"This may cause a nozzle blockage or print failure" msgid "" "Too small layer height.\n" @@ -6681,6 +6680,15 @@ msgstr "Support: fix holes at layer %d" msgid "Support: propagate branches at layer %d" msgstr "Support: propagate branches at layer %d" +#~ msgid "" +#~ "Bed temperature is higher than vitrification temperature of this " +#~ "filament.\n" +#~ "This may cause nozzle blocked and printing failure" +#~ msgstr "" +#~ "The bed temperature is higher than the vitrification temperature of this " +#~ "filament.\n" +#~ "This may cause a nozzle blockage or print failure" + #~ msgid "Enter a search term" #~ msgstr "Enter a search term" diff --git a/bbl/i18n/es/BambuStudio_es.po b/bbl/i18n/es/BambuStudio_es.po index f9398fef44a..e628835722c 100644 --- a/bbl/i18n/es/BambuStudio_es.po +++ b/bbl/i18n/es/BambuStudio_es.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-09-09 11:50+0800\n" +"POT-Creation-Date: 2022-09-14 12:48+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -1636,11 +1636,10 @@ msgstr "" msgid "" "Bed temperature is higher than vitrification temperature of this filament.\n" -"This may cause nozzle blocked and printing failure" +"This may cause nozzle blocked and printing failure\n" +"Please keep the printer open during the printing process to ensure air " +"circulation or reduce the temperature of the hot bed" msgstr "" -"La temperatura del lecho es superior a la temperatura de vitrificación de " -"este filamento.\n" -"Esto puede causar el bloqueo de la boquilla y el fracaso de la impresión" msgid "" "Too small layer height.\n" @@ -6811,6 +6810,15 @@ msgstr "Soporte: arreglar huecos en la capa %d" msgid "Support: propagate branches at layer %d" msgstr "Soporte: propagar ramas en la capa %d" +#~ msgid "" +#~ "Bed temperature is higher than vitrification temperature of this " +#~ "filament.\n" +#~ "This may cause nozzle blocked and printing failure" +#~ msgstr "" +#~ "La temperatura del lecho es superior a la temperatura de vitrificación de " +#~ "este filamento.\n" +#~ "Esto puede causar el bloqueo de la boquilla y el fracaso de la impresión" + #~ msgid "0%" #~ msgstr "0%" diff --git a/bbl/i18n/fr/BambuStudio_fr.po b/bbl/i18n/fr/BambuStudio_fr.po index fffb33956ba..a1cf3bac6c1 100644 --- a/bbl/i18n/fr/BambuStudio_fr.po +++ b/bbl/i18n/fr/BambuStudio_fr.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-09-09 11:50+0800\n" +"POT-Creation-Date: 2022-09-14 12:48+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -1629,11 +1629,10 @@ msgstr "" msgid "" "Bed temperature is higher than vitrification temperature of this filament.\n" -"This may cause nozzle blocked and printing failure" +"This may cause nozzle blocked and printing failure\n" +"Please keep the printer open during the printing process to ensure air " +"circulation or reduce the temperature of the hot bed" msgstr "" -"La température du lit est supérieure à la température de vitrification de ce " -"filament. Cela peut entraîner le blocage de la buse et l'échec de " -"l'impression" msgid "" "Too small layer height.\n" @@ -6814,6 +6813,15 @@ msgstr "Support : Correction des trous dans la couche %d" msgid "Support: propagate branches at layer %d" msgstr "Support : propagation des branches à la couche %d" +#~ msgid "" +#~ "Bed temperature is higher than vitrification temperature of this " +#~ "filament.\n" +#~ "This may cause nozzle blocked and printing failure" +#~ msgstr "" +#~ "La température du lit est supérieure à la température de vitrification de " +#~ "ce filament. Cela peut entraîner le blocage de la buse et l'échec de " +#~ "l'impression" + #~ msgid "0%" #~ msgstr "0%" diff --git a/bbl/i18n/hu/BambuStudio_hu.po b/bbl/i18n/hu/BambuStudio_hu.po index 1daff4cb120..f5a46f4ed78 100644 --- a/bbl/i18n/hu/BambuStudio_hu.po +++ b/bbl/i18n/hu/BambuStudio_hu.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-09-09 11:50+0800\n" +"POT-Creation-Date: 2022-09-14 12:48+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -1636,11 +1636,10 @@ msgstr "" msgid "" "Bed temperature is higher than vitrification temperature of this filament.\n" -"This may cause nozzle blocked and printing failure" +"This may cause nozzle blocked and printing failure\n" +"Please keep the printer open during the printing process to ensure air " +"circulation or reduce the temperature of the hot bed" msgstr "" -"Az asztalhőmérséklet magasabb, mint ennek a filamentnek az üvegesedési " -"hőmérséklete.\n" -"Ez a fúvóka eltömődését és nyomtatási hibákat okozhat" msgid "" "Too small layer height.\n" @@ -6771,6 +6770,15 @@ msgstr "Support: fix holes at layer %d" msgid "Support: propagate branches at layer %d" msgstr "Support: propagate branches at layer %d" +#~ msgid "" +#~ "Bed temperature is higher than vitrification temperature of this " +#~ "filament.\n" +#~ "This may cause nozzle blocked and printing failure" +#~ msgstr "" +#~ "Az asztalhőmérséklet magasabb, mint ennek a filamentnek az üvegesedési " +#~ "hőmérséklete.\n" +#~ "Ez a fúvóka eltömődését és nyomtatási hibákat okozhat" + #~ msgid "0%" #~ msgstr "0%" diff --git a/bbl/i18n/nl/BambuStudio_nl.po b/bbl/i18n/nl/BambuStudio_nl.po index 93559f720d5..871ad95c189 100644 --- a/bbl/i18n/nl/BambuStudio_nl.po +++ b/bbl/i18n/nl/BambuStudio_nl.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-09-09 11:50+0800\n" +"POT-Creation-Date: 2022-09-14 12:48+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -1639,10 +1639,10 @@ msgstr "" msgid "" "Bed temperature is higher than vitrification temperature of this filament.\n" -"This may cause nozzle blocked and printing failure" +"This may cause nozzle blocked and printing failure\n" +"Please keep the printer open during the printing process to ensure air " +"circulation or reduce the temperature of the hot bed" msgstr "" -"De bedtemperatuur is hoger dan de verglazingstemperatuur van dit filament. " -"Hierdoor kan de nozzle verstopt raken en kan het printen mislukken" msgid "" "Too small layer height.\n" @@ -6830,6 +6830,15 @@ msgstr "Support: repareer gaten op laag %d" msgid "Support: propagate branches at layer %d" msgstr "Support: verspreid takken op laag %d" +#~ msgid "" +#~ "Bed temperature is higher than vitrification temperature of this " +#~ "filament.\n" +#~ "This may cause nozzle blocked and printing failure" +#~ msgstr "" +#~ "De bedtemperatuur is hoger dan de verglazingstemperatuur van dit " +#~ "filament. Hierdoor kan de nozzle verstopt raken en kan het printen " +#~ "mislukken" + #~ msgid "0%" #~ msgstr "0%" diff --git a/bbl/i18n/sv/BambuStudio_sv.po b/bbl/i18n/sv/BambuStudio_sv.po index de2671d7f99..db40b04aa63 100644 --- a/bbl/i18n/sv/BambuStudio_sv.po +++ b/bbl/i18n/sv/BambuStudio_sv.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-09-09 11:50+0800\n" +"POT-Creation-Date: 2022-09-14 12:48+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -1613,11 +1613,10 @@ msgstr "" msgid "" "Bed temperature is higher than vitrification temperature of this filament.\n" -"This may cause nozzle blocked and printing failure" +"This may cause nozzle blocked and printing failure\n" +"Please keep the printer open during the printing process to ensure air " +"circulation or reduce the temperature of the hot bed" msgstr "" -"Byggplattans temperatur överstiger kristalliserings temperaturen av detta " -"filament.\n" -"Detta kan orsaka att nozzeln blockeras och utskriften misslyckas" msgid "" "Too small layer height.\n" @@ -6253,8 +6252,8 @@ msgid "" "interface is Concentric" msgstr "" "Linje mönster för support gränssnittsytan .Standardmönstret för olösligt " -"(material) support gränssnittet är Räta medan standardmönstret för lösligt" -"(material) stödgränssnittet är koncentriskt" +"(material) support gränssnittet är Räta medan standardmönstret för " +"lösligt(material) stödgränssnittet är koncentriskt" msgid "Base pattern spacing" msgstr "Basens mönster mellanrum" @@ -6676,6 +6675,15 @@ msgstr "Support: åtgärda hål vid lager %d" msgid "Support: propagate branches at layer %d" msgstr "Support: föröka grenar vid lager %d" +#~ msgid "" +#~ "Bed temperature is higher than vitrification temperature of this " +#~ "filament.\n" +#~ "This may cause nozzle blocked and printing failure" +#~ msgstr "" +#~ "Byggplattans temperatur överstiger kristalliserings temperaturen av detta " +#~ "filament.\n" +#~ "Detta kan orsaka att nozzeln blockeras och utskriften misslyckas" + #~ msgid "0%" #~ msgstr "0%" diff --git a/bbl/i18n/zh_cn/BambuStudio_zh_CN.po b/bbl/i18n/zh_cn/BambuStudio_zh_CN.po index 73be42f5fa7..69b3cb8da7b 100644 --- a/bbl/i18n/zh_cn/BambuStudio_zh_CN.po +++ b/bbl/i18n/zh_cn/BambuStudio_zh_CN.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Slic3rPE\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-09-09 11:50+0800\n" +"POT-Creation-Date: 2022-09-14 12:48+0800\n" "PO-Revision-Date: 2022-09-05 14:22+0800\n" "Last-Translator: Jiang Yue \n" "Language-Team: \n" @@ -1565,10 +1565,12 @@ msgstr "" msgid "" "Bed temperature is higher than vitrification temperature of this filament.\n" -"This may cause nozzle blocked and printing failure" +"This may cause nozzle blocked and printing failure\n" +"Please keep the printer open during the printing process to ensure air " +"circulation or reduce the temperature of the hot bed" msgstr "" -"热床温度已高于这个耗材的软化温度。\n" -"这可能导致堵头和打印失败" +"热床温度超过了耗材丝的软化温度,材料软化可能造成喷头堵塞。\n" +"请保持打印机在打印过程中敞开,保证空气流通或降低热床温度" msgid "" "Too small layer height.\n" @@ -6417,6 +6419,14 @@ msgstr "支撑:正在修补层%d的空洞" msgid "Support: propagate branches at layer %d" msgstr "支撑:正在生长层%d的树枝" +#~ msgid "" +#~ "Bed temperature is higher than vitrification temperature of this " +#~ "filament.\n" +#~ "This may cause nozzle blocked and printing failure" +#~ msgstr "" +#~ "热床温度已高于这个耗材的软化温度。\n" +#~ "这可能导致堵头和打印失败" + #~ msgid "Waiting" #~ msgstr "等待中" diff --git a/resources/i18n/de/BambuStudio.mo b/resources/i18n/de/BambuStudio.mo index 6919270a0ab35953c20c98ce26bd1de51666a369..12c26fa0c21181c1c41f30ea0a4ecbcbc16326a3 100644 GIT binary patch delta 36645 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 delta 36930 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 EAAAJJod5s; diff --git a/resources/i18n/en/BambuStudio.mo b/resources/i18n/en/BambuStudio.mo index 4f2f5d3feedef6bf525651e5153d932f1a902e9a..195047a22412b682f97e157b5fe49fbc16b8171c 100644 GIT binary patch delta 36119 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 delta 36352 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 b$2=H&bN;2Fhqg~_>6w#k`}v`scAx(bj^TZ{ delta 36891 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 O)^LyQw}yK*@%$f6Eqvzy delta 36883 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 diff --git a/resources/i18n/hu/BambuStudio.mo b/resources/i18n/hu/BambuStudio.mo index eaee8cdfc9374271f372d128bdd02a234ff4fa39..9d7ed27c2d2e0975915fb9baead6fb983ac28f31 100644 GIT binary patch delta 37512 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∾kr*K z0ZmM#+Ry6>;m6eQqxMtGOVc4__8@&4cMaRB%5Nn;o-*Yr(?$tgsksl>;q1Xs^7k{E zL8xmjX+y9m2gNBsV_k_%r$B7(No1a+pdV@3i2uCG*~+!CFasV*#|;TbQy?jA)FZsh zmOo3{b;_*bZbM!GdB1W0dj0J#%SLsjz$OZ=!|fzCqF^?{lWk+`ZN)jiG*FK`AMQQ2 zOe+R6j{NCZonA)M-etn=>?)|^S)}P2LAk@^>B_Gk_UCh7vjtDkv94IQv-~za9Tl!p zt|lG!Cp?MUpE483--MOPn@o5$ZXlivS5sz|t*EQI>P5kk0SmXcVglrsoR~j z0P2Mk->*;FYeZU+ah!yCWJcJYW--z)#2=D3$1d}F%CxZIe+ehGVOzxsu%jMCy=COh zCVqkXX(%w9LHJQ8Ie7=k`@nrhFNzjqr032-W=RU~WDk9Za;ET@ns@w~*3 z)8JuM;3{NoNH{U+n~C3|{5I;ZBP|~F`r#wu5AZ4Z8EB&y;r5gZ#>J@1)sxIYw!u$! zbjt82tt9p&t*jEba@&FSrh}n`b5SNC`JT41^prVIJd*sMR~E{pAU~e1d(M`9O}TIS z*CxFP=vvHupYUxeAE!`98c$EWf~~lKcrf>`*JL97DgTUBh@h+w;qA6eBU?}9zmnG5 z#@pKdh7ez<7xg+S4JPu8Li=baGx3px$57CpfkfC5tD!8Ut)=Ws%5^3EcbnG)_fe-H z>Bp$At0Cnc*!*(BO{Ai(*yJ@K{5$zCxesyc`jx7B;U{}(~9^3;?Kx?MZJUgmGnh~UCXGHlY~UJf^EwQCGeHB z*bJZxcLgf^Ls~~1fO~Dh1>{YmTwU%ZLw zn{Bv0?JOl6pTSJEY3_>rBNl1yi~gN86wI#}zJ&ucTE=!#8Z(j>i@dzH(qzJ02nTa# zwhcEUoPo}NUgd3B#n;frPRwn~rlkG@!aGQJ&7smU?)J8FOEPs8!IapJ!IUO1Ch_Z3 z*u?#TG+j4HuWQ4KpR;W!e2VlSI$6j-{HYVdy`J>Zl*vl^bn^H9{G!%@gzIDuv<=)K zGn1V`I34FAe2oTl4WX<PRo}is;uh rJTf>kdWousg+wpu931J@wR4=V{W}InI^||}+2-NBbK(?_3-A6vTY(?| diff --git a/resources/i18n/nl/BambuStudio.mo b/resources/i18n/nl/BambuStudio.mo index faf37dd6a3b64a021abcbadbc95e7ce54a2eb210..bd58758274b277bf9bb9ee0b08f774b05ae1ba83 100644 GIT binary patch delta 36627 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 awr>+@MoheOSocmnI+D3L(O{3hZ~hP21m7C~ diff --git a/resources/i18n/sv/BambuStudio.mo b/resources/i18n/sv/BambuStudio.mo index 4aefbd5418c11e1e9f33bb9c7089bf8d3fef5879..fec07726e57c3aa392ace99956befb159068cb68 100644 GIT binary patch delta 36565 zcmZAA1#}h1 zJa%$pVJw1WZ~*4QlUM{pk9C|#SQ33$6_s8ci{TUua2(gUP9QT0p~i7zc8rKQF&h@a za@Yy;;9ksvUoZit8}B%gu^1-8%BYTpU|j5q>hNfcj#E(imSQ;CcMcMWO2P?L!`D$2 zJi;*e+WG<2&^H?oKfyeYiW+Hb)JXj?G^RjxAT7qmg7$ee%t|~MtI@tQgg_O%j+&y3 z6CEcZwnN2-qh{s=ssm>*3f{zw_zX3|c$3U?e~d>w6IRC(SQBTUX5cMqfT37;S0j%? zAPy!*Zwb&_0#t)VPz_eZXjspthhPliJy0DOiK=*#eLe?c5nqY1aWBTii>Rf0GMV`g zN5D75R1g6bkBRC?LQINDF$osHG*}nakpb8MCt!X257mK6Q%%0wr~&k|j<(J~?YX5> zng418E|Z{!(oZvMRtB~9jZkab0@WMW z)NT*K4LBRM2`kU`j-l%`CZLA;pfb)vRd@>3&@~*64{UndIp%cqz+|LPLQVN5)UmsQ zyvv-MsF6NEb@Ux3!N_w>2hw92o&S6U`tqO&Cc}H!34QY%Cj)lDkvJcRVW#zze87Q+uhIp(dzy2BSJU554ohfqRb?ZscTJ1s= zJc%lB9#!BrhQ|k}f-g{0_z_hu+;WpY9_j^?64l|H7zZn&M&8WoqUxWqocUKpOGwa& zwxTx62~2jgQB!&e$KeZ%gnd?--8&rB;8M(j+ff5}YM*~ajWqshGn0WBNIVZV!M2zY&syCd z1k{1_YfO*wqB>9t(_sV5io;M1ZAY!?aSV^=P&08I+urXi$Ru2{-nSWEqelAE8fK%JsmK_U^u(ALv!EI%kE!u5)RK+C zh&Thai5H_@Kr65e9>s(@|1me22bnNA@p4!a+hT0ogxbZ&FdW{&Soj2E<2Q_g(KoYS zFexfuq%CG(u`mX4e^ke_qh_!Ky6Ryg0aT4k{?m~6!4r;(pw=w@(tM??RBhGeSrw|P_6FpE3^vC!( z2DKTNVlI4$@i6fY^YNPl)#3K22D(`XpgJ%bqv1MCi2Gau8u<;>n!Z9!wck#2PW@3G zselDB7}MhKGeugp(?(J-jZQ;;%`t5l-Oftqym;D-W-*_4m0C6)G2v_RdxQO>@`#02oLe# zZ`4%h*k>|Uz`Vpep{8^Vs-xRcBR!5I@h+-kA^Xjec0tW(f7H@WMs3zbsCu?|=`Npo z1hnbSqV~ciOo#U{Ax1i2He(trLOdgCCfcFavJ0w#!KnO`Fh8!vruYIila&v$96nxj zSc>=zMq7#Yo%;mZV)nz1^9$#pdN}VN^Cnw~>d;-($Ri#xBS~bikgw$sI?!5uBLD?fi$=i!{U9L;VC8~{?n!>J!&>#YRo`-GgQOlQ03;Lj@J?l zhwCr}Zo}eu12tp*$4vgL$5?+Q zOhDXs+~iM$T9S0AdW)l8Je5%OwK&fFD??`zRPk8Ud0v1T!46b~2T%>(L~Wv%7!iM2 zBc3oLkAvY!PloDv0D1#Nl`Dl2u(nNa>e@gjR09LCAWlMchf z=0m+mO4;-_sF8O-%}h^JzQHy=9yP#OsQOnUGvYcs31}0ZvKb!WP~z_~HTFJZj?n_t z?hSj^j4UCl1DQ}$TLo25Q%r|Fur)5k&KUKanW2HGflkBDwC^k+pz|N^yqS{3){Ln1 z{HWbs1XZv!YEM+P&qFXe@eZhw4?yjy(Wt3jhMK`csC+k2Gw?!j+IPMZ$c&LLm<)L_ z74dTD4s}b*b(R_UVgL)q8lKH-n8#PmPkavsI&&G>i<`a*2Yt+)DyTyj*t>=+93Txb3@k^&^Cf%2$$LyU~=unqRYzWBtZx42$yKDA9Zq(XWKuu*`)ZPd| zf9#K{Z~+d-<)|4Ayl2+DB&u93)Y7ydn-L(FP{=~!H zHx;GDq{Q=~^4CF4c}Mh)BWlx)Ms;8=YM|>dmd^hX0-AvvsEnU5Ax3y$I+6-C^?6Yp zDTSG^9_GRks2MweYTz7tn-f*;ne`J+CLa2ssb>a8p?zm9fo!-N)$`Y=3VxwR7VeQr zPlKA$oHkwt)zR8E-WgSH5Gvm&42^S9Yre>)uSUI^_n{kxz)1q?>3P%)+(E6;e>OeL zW3w4!qS6bXrnU-(#d@eEY--axpc?Lt+RXh?^^U}_INPQ#dd&Q*$7@JXfi3pIPE-Sj zQ8RKD)8bvsjp3h|wJw57h}Xsx==^KSr9>@hW@}m0v1@@T(Zy7_@L%R%4~~+cO?MA9 zl252j66UE%PmG$O?AAi45tYY4Y=Al~6YTS&sPdOE55B-~nC6)=GiqQtT>_fYlBf>U zLG9x9s0N3jHr-^@=30U3@J>{@i>UnnVnlSFo0*J+5r{@dZO(+KJ&_L8aDG&Iw>$y$ ztP!e$zc37TLUo{rbqHoAJ`qFV0aOG3pvs*^KfHme?>4Hz$EX?og6c@P7iK_lk@BvS zfq*Iq!mwBv8(}F_L(5Q8y$UtbJ-87sqjvv@m!`tSsFCfk9=Be%K0__ZS8I${inIO! zUVyJhs7+J@Ghh$YW?76G@faqTw%&RR$6{I?>Y zk#x6Cw63up!y-I?h|w_3e|Ga&OImASFwa|{mT(tpMh~Et>X?mRK+WuRbTy^738>jz?)ToLhr`LF$HK_C z{5|upwcSF3d|-|K!Ndz-9MW5(mZ%@<_{~Iha1*Lyr!hKSMGfGoO@E7;>hGwIIv-8G zFc_O?T$eyD0vS-prYRP}HmIpui5k&%R6~bROL7Kd;B(Zm`+?f5&L^{!sZbrwfvK?q zs$-o{Gu|8ZVseKPNJn75eefJLH6Kw8hWcz~APTC3DN!TIfLimcs1D{r?V)0*j#oo9 z)EJ9l2oAz^sB%GHJY6S0ftVx|Lsd`%2Vx7G{tN?&|G=V{?W_6x?~H1AGOEG(s2N#{ zd2m1K)AO4(;Wsl=c~Bk5k1=%qixJ3ALa>*>I~=u^i?B6r#S?DLhVncRr6a5rkNox>(N|33++M~#1&iBw81KUs?IA+r?qmJn4nl8=D+|ffyuBP zsv~1i9hri9AIwGVfii-N$o0OngNspSOwIhc*rLL(T9IRJ~KsJJ$C3c9(z}*o%qr zBqqV9m>I)`@p+piCu$QlMUA{IY9_i``=UlT1hqM5pzI z6L^QYFh^LQ_eZHAn40);RL|d_o`(tN^EPJz%tX8+*2HdO<+G*kjr zUoaNH`luP1iQe!3=X(KuBY|UhupO^p=}10j5&B0q9XX6DcpfX`RV2tl!l8yw8ya;OTDq}aShnn(>sF7Vq z9m^M}8T$`a;WyMwg^K0#-ubbxD)H>7Ju?_}s!pKle`@^@i}SCk@x?Y3$3(^BVSEfg zHBiK+mqArf2Q_moQ16XS_W4-U%*;cLa3gA|cG%}b$mSZk_ zjygsudx*Gu8#Q2l}EP4nysYk*E%gLrwim)KaZO4RE(jKjpkLpq3fvK{{(evA|y03kPOwKtf-Eb zK=0@OvIJC7E!0RGpekyP8c9bR?}MsvgiW7^+H5OP1K5MwjF(X(eT#Z?`X%yt--zN` zE2Gj!psTpd$j;=;^WUqaG6g8ul ztT#~g-9vTYn~g_E%K6t6rc7!w!4<|1E#~Ss1D6Tb!3TkpG!a)ucI2egIa=Dr~+S6Q|0*kysu~xQSlVI(CauGrYyd|G@^tub^hq&6(WvxEN}e*FkN%A*c$*qdK?%)$^q`eLt2aejYnv zq7-ItjK%E4SD*%P3)P_qs8{fF)W>jyl-__`rxXFLNnfmwqfop2nbk>UdKwp1VM-fM zhgFE@M0Io+&c*4N5%Z+>Id!oG2I2wKX8(uF_<&%ss&@=u2ldbvDdQ`%Xgw>hTyNSSOBV{4NxNbOPB;Pd{{T4GdsYgBqK8y}6@8*^;@3F?%6MlD&SjOJ9-&&c`L zlnf<7FP5#SsXC83MlUcahRWn~{4oWl!D6WVt!;cT>iw|_)8bK7hu)x;)GxEyWARXX zE44LWX4mKa>{rDmjKP6qScGagAdAoYal902YKNjW>u%J{oIroPfjZ~kQA?L5tNBn0 zLgmkmI<6&A9jl6Z&opxhs7L)#Q$7`I;#};DpKum-&E|9FW324v!(}s$Cw>L>VrmuW z^ZtV2HXKGgd=AsG@mPZR2Gp_pj4GEi$b9O$M+sCWA!1H5g1V^9I2iNe2JC^aQES>N zm)YeTu&j^Y1LQX6x@#Vv)0^j$P%{-HubIJ8sN>fHQ{fEEfqRjkIbG*Hfz%{q$j1*N zR9FS+q%$GE`CfmdfO+#}FX(f6k*^hMM31nx$`vx3YA`DO3YNztRMrGrqxQ@xRQh|I zfklewW1RDMlYqXNI7Q9cq(p6^AS{FRQ57u3YIqtoq7=o= z1ii2d@ma`-omUuusY_5^=f5HWy^+S^20V@01N}>y^lPZy9lw;%xr90J7)C7ZbN1my zT!@p)n0Ox6r4aG2sCx63Gb8VTivNRWFid&Q|0@EQ2&jjLD)_v=L>jlEX{ajdjTTVJ z?DqMn7sz@nhFefm{uTA1RJgKvUKaJ0tP<+8q$-BT`lyCmp!Pz}Dx80v&$?C2l($Dc zn1)Kl&NB1NDkMjWO^B>ioaNF!%#iE>tyh-eaR0PJu-+1LnhasDZ4&u(-)3 zpf}!5R0Ef6{5~co{@t3Oy7`Wm6ZL~hMN|h{q8jRis<=0*V?$6gHwD$fnW#7Bd>h|| z%I_Yqfs?2Lmr)JeK!1FXsvu6Vnd(HS22x^j3`C72*rwOB@eou4oosp^R0l?*I=l=i z=Q`^NXl=HkJ|vEyHq~|1tJA-RS(?nKwJVA`hBdJiu0$=#J8PJlCSN>My%|yU?XLjpRNJyA=r-e%Z?yoa2lm=cepK9pXeIufRqnURDTKs*Je!E&e>>xi1s z?x>OXL2bHes1C2eJUajT2xu37wGaGin+&m0UzyUN&VO;#)HOmKt5&FnI-|<>w9f}% zHsT{u_3y^pSfGx1VzWH|A7TXd(iK#Ge1M@~}h+ z(KA#9Z%{Mm*T_7NhuR~_P)k+}mA^6iV@n$!hAKY>RsTGffOhFdRKo|X7pxDhA5i(i zHZ~Q+K}~U5)W|ZTMjVKGkrhTA)9R>KaWhndEv-FK<=xRXVFIdw#i)*KLT$Rks2<-# zeW`qhYA|UNV`|izX0&ESHJAg{KrU4N{5D?9TH2($P6Yzm)zwjJUEe%#2B1bX97o_3 zR7a9GHRnDMHKJaq2F9R{>txgnOhqlpO4Pv4pf>MqEQSf2siT~a1_YF$F>1})qblr* z8bKe_ZXJM{($T0_^K8^<*?}6sQA~m7Q16NNsE$NxZaSI_bvm-6+9{3R@BbHVu5vY7)QA;otH3N%LQ@aMW zRGUyEJ%lRv4{AwHpkB#$+PG$lzmkxLgdbQGbA|YvI@lBSmFW^D#n^4l)CZzwrZZ|2 zc1MkPBx;7Hp*nKRrk_DIcoX$v`-F|Lx!caH;StnGFQ7(r8&&ZOoBj*c^N4?&DNTxs z2cf3Cj7@K7?TVVg(Ws@Hh58-QdejT*7$!&e34zoEBDD88{+I>z@mSef2Q{_LP*d0z zwNxEZYdZ=v;6l_=p22!}&swm9nVFfGne=6-d{>OF^VBAM!@N9*($P$PX;e=aq6+Ls zb?gFas&8QcKC|huI+>YFg36x`D`P&?NJpV&b`563U07D<{}lmEWuDGv(^SBw#OtHJ zFziQdwo|BvFQJy|zD<9L`t@Y{BTb550f?=bTNrhw9;5 zQ~{@}nc8%ycrd2KzNii?KrP8?RK*)m1KEY@_*v8*x{2!GYt#V3cQeN~4!YAw2qvHh zuTWF|4O3x)?mnj$7DTP}R8+n-I0JX0I$WcN*%QsspLk!?8*(m&$6ct79Y&p^YpBim zxd-Q88Kd_!Q<4ca(t@aOE-g_beuC{WQZMtvX>Zi=T#h|3bZ@hCeNmfp4C=ToLp6L5 zH6vG0Gw}emN51#w{HuYeeN2zDqk2{e{jntu$6+`XWA-(FMzjJC6VF5W-uMd#V()%F zr$0LVO}PO$hiK#hK4&7XL^WJ!pqb$+E&(;z6?IO>pf<-s)EjRT>SK7PeSQVC)-O;a z{fJt!=z~nfnNjr=M(vSc)cc_kYAL$fbQd)GB%C`+QBL`8h+OwDw@1RB+ceq*OOsF?(Rn$y($Nbm_|E7Is2Z218euR0@ z3{~NL)Qqe{bzm2!#j}_lKchyRVWb&Re$eRGE9q)mt zdX}QM$1oJ}J>xjH=?EMkp#r`@70f%{e3z?%nvou;Ju(;dVtHcqn_#9q3F?@oMQz3c zsHLfjpRplsviH&HY1J|s|sz%$eu7MW}^2BVgw32Lf3pr*WwwKuB5 zfmi^?p(;L&Dt8%^<0I5D4L8NiKtfc9Qeq07|BCiO2h<3AqSkUEYGxMW0Njn5!opL{ z%#=ap4@PyM9qN3qLY2FZI%Z!{9nUq*lq+a0iy3tOYuJPV=zVygUa8AaJ^u%_w%1Un znK$X9aTGBVx?-)+!Kl}`{*`lL1S0Jvyil|NU z1(#s-ndUfdMQyI|v&` z4n(~Hui{30jOzJ}Ip*_w2^J=P7`0i$&NU;Afm(BaT#ZFhFQhl9d|y#Z6K0;NKgm4K zzjkW|5;SFnQ6sB>8c_rE&M|6j2cni}J8Dy2K&|l=RQ}lW&E83ZswWHTloUq2G3#R! z9EX~rck^9#y^jnF%&*U@FEqb^ScD;D2(^g4!1MN~5sX=EemONARpA}f8pm8>8cuEv zMD3jtsLfXk)$xX?CF+41z*v`nx7$&##Kou)Z^o2(4z*SvP{;Et>V*__sY%a)!-?m? zGJ)P<15tECRlDd zoF27F^P)yv1yx@&)YA4rou&z>fv!Wnzz!e-cAfhKG&OHcf)ja#8DU~n1w~OaQWLcV zozNfqqB=4cH8bl_oAeMW-&yMo)C@dE&CF}mO#ejh@Bc+zX-4jkYA`)&B!y5FSH)7; z0{w9fX2Ub6DfF!}Q(qmmG`%n{&bR3|F@Sie)n;Zg;w9oGu%ym^qBZ7weiPJGj=|)( z7&XEpsE%E=@t3G6{D~TA(zRw}=};ffxl!--`lyjNMdb@Y%}_TRABf(+|38L+)_690 zYmaL1AZp64qR#UZ%z=~F`J6_095q83)|(|NgjtE#Mb$G3RnH>Kh}%)G^2exwx7xt@ z*V;baV0sv4qxmD0=&0i{2=!hVhFY`9sMD|*HL?|`5p6_G@m|!f{}}uA=d30D2x?}!Z8iB; zp+E66I1Ark7973Jd>`12n(-~}cC%K8P-}D?_23ffN2Lcg-EW84JW)_1OM^KvFREMz z)J*lpgE$;DYKOgQz9Ejcjh$c|brJ-=o(28>-@8sM8Q-x7mcLP)iet zwXqn^#Mw4I&mOZ>Wl;I*qUvp9?TBi)hkf1`1GEjt5YULX;tRZj+9Zee8tlYRE|e=U=^zTUR1err~$k|osuYreBQrV9T)ZCbHn-{x~d@DVY3+$ zqNXSiwFJ3QZ?uxAr3gW-)qnKpe5rXqeAH51QJGaB|EQ!Wi^lNPX+Ms2=o|8V}j zDI`I=(?wM<9o5igRF6;D^anQm7pjBtj+p1EF+1^msAJd;_2yiN+6$XdGkXa2LOX4r z-#WtiUqiwx64dbQqvk!Z9dj!qYHGtBGb2cVdeNjpy)P=D$~8d^q%Ud-#-qxuLyi0Z z>Xe;AosR3M&3V@)pq@QJjp#p{;TNi4nB!&y(NPupquzMgF&h>{O=WvjJ;PBAOho0I zZqpZ|_QG15z718Mdx(H~av4>@EgOG=s_2zXe~;?WPt?>#IAOk^B*enR3!=A#c#8OR zOoJ^?nsQ@M&!?ll4{Ss>vFn^8pk4j~{W01pv%9mR_CPt*nl(ig?1-A;ai}R>i+UmL zLN#y}GvPA~#Q3Mp%$7&ZR2|HZoiM!4|2hJif$gY<_Mt|22DR(&qIUBq)C|NsV;W3> z%AXU}u@b0L(9}8%HKVIhr)n#z{4UhgAHldf|JMj;^SnWAs!(T5hvK6uNQPRwbg12& z9W^sWF$n9R8W@LKvdO4&GtmzhqXxJP)$m%>%on9%&v6NOpU0@FU5A>|O{gh8hkC(0wdrB5 znBAWO(~@2Ub$VK%%8kO*xE!^FXHa|U25OVOu|~aW;%-I)%1{=yNgARGwm^NzbhPo& zsC?5=$7l_z<3~_0t~03ew@?Flh}vxbqDJ}^)zQ$`Oun?p%(+fx0_S;95LHo(>t-#J zS<72{SeKwWb^&$VUZKu?tQ+Q-WIInaO+8SkhV*)u9Hc5%)kfFcP(S$D&TxdQ?XbpDNT?piL{*R)hhY$EgnLk%>@2FoA5pL5%y&%#6;LmjTBwdRN4=;zp*G=iRQ@A( zIsbY?Jtjdte~N104HiYedu9zwpwjDLFAPDQ_kU4S8t1+lVHVVzG9Rkp;x@f1dP{^F zXb;rP_P_6%cl(Rr(3Go)dVd6? zW}+2p09{cH4@1rHRF{Ab+0{waMC{-u)d>`MaS; zxDeIAO4O#^gPNJ+sJ(IlHAC(-o8bxSMf1*Pi1yeNjDwoGuKB{(u6{6HoTcbmT2+_lJINW+oaY(D_e6z#AEAD$AoXRzb~3J=AgQ zj@fVqYD6bd?}x9bH4gp4OnnU0j3huUtv_lha@h1z){2-;=RcT$*3?B+I2H8`Wj+?d z+o(;M^rd;n4?=xGnUB?Q18PaazA~FME7m1m8`ZJRsHHf7dShNh?X@rH{r%r)ugw(4 zM|B_*YM16h%|J<;-UPL2LQu!9Czi)am=f<{F%0v@{IOga>`we3>cc7je`bbiqXy9U zKhA#;fsQ0->X)IWezkQQjv#&z?_kBZK4&FnerL}Ab=0m7_ul+oFFGoJCsap&VgZc& z!OTEe%tyQ)YKEtM;QVX1ULrxCPOng#EyhPPb!kvN4MeSBaT~9RYWOeAjvde+7ole6 zFltZTK~4Q@RQ*1~fbp!1*pyD3=B+6Xn(ZBaAO&&G$LUcEC> z9oUXq)n7 z`PQS>_BaOOb=0R|)Su>4t|Vq9-rKqwwI^<)j^AfgeMx@NQJw#61oTF$gxY*{t?f~p zWUzfc)4J5AZ$ypc7^=f}Q8V)#y%|6?9E;Cb?^vT|HW#Yivgqo3HzJ@nR&P|sfmj+x zqdtZ&V_r<)^Ycbt9hJWsDt{Z)Om(sGzUW7M7;0~fMD307s3n<$TDrA9KlAs0c9Woy zoI&;QF{)!<&>!RY`FWc$Cn{eF%!Bn%yMGGm6m3K`cn7oKBh+S&6Uxuq{h3hlN~oD` z8OrtZ)}l8FdI60?^=vX~vn)haxDqwR>#e&`BRPUv%d0m11!^;XLJcHBXw$*Os0Q<( zW}+f$M(er+^hTP3I&SAt72HEj@jFz3uc);Q7sgbS9QE;=6Ey?DsLj<8)$ysQrJ0Kw zz;e_vT#H)!GpG)_j|gZtf3}7XYaYZ$f6_CcMpz!TsT!fCwy%A@2364+495GY4&@GK z1{92X-V8Ov-K@Ql0l7|p0vh>D)bUz@nyP~)gL4)2>U@hDah&jGiE>~?;zdyvkGJtD zsF6QHHT)ViK)(oPW@4iDN<#F0{x3;DJ+5R8K^@28sE$oWt^Fd@RIau0%~*u^KJ*%h zXgU@XwWR*2^m?cz2|;zJvvsJ{`JX|c8LmdHb<9X+CX%6EB)L(WvK4CWx}iEU8Z|Q$ zQF~?!R>z|_29reg^FEeWp+=YIpC(`gj`k;gd0{ zu@tI9O;8oJN9FH{^Kc~Um}QLS=l$)M;;0#UfITo-bU*KV!}RE!f9>kWBos#{hS{Yh za4ga0sOKM06-0|^Mp_R2iPy(;*cY{TmZ3(tA2mZKu^*ntTUafY*(=#%n-1oT&H2yB zgNh_*ih7~qOKtojYBTZ%@W;H4@y+Q-k6P1GmS^eNe%^oSEDu{l<;u@~`HI29kE zj#-~1W+oyh_49t0oCzzCeiIvE`ec6Im(r1_j>Pr%^S;&xqW9;2od^u#!4A~NZlUCU z-Y<=Yp+@ikHN|mK_<7%E3*tE9y|E!iN$KbPc-|KO_VMF5YIC+o?dScM54)o_;Y-vK zq)g-IeQ_y(ZgLVj5KsdXF%9m*;`l&uDhx==F~dp$rokTROa<4lEBT_N_w)Xq&>$>F z{1R#)$upQ^+Zsy}UxF?0B?e;kjGX_P1cqhwbC%&)Bj(4Ks7;(ctDpC8!4}QR`L9C4d=m7Adxu3ZYBoRb z_y3h~AMxQBjAgT%isqqq`z<_--*GP<2=sGa;(#1xFSHNx(|_{ENtV-W>bSX#jj zt6T#5k?9*Q$3nT;Buw>FtV29(Uh_?-F+LzZ6WOzlo6o$0e_<%%QSzIqkAWIceboD8 zEr!PJ);-9va}J_jQ0_Sbmk8X(9Jr}~+5Jy3H}RjS&6BI3dEvB0y@&>)j^jvFMGH`; zW-Y3LL#Pg%M;+^%s7?6+!(zBX-f`u>|4cx~E(vN0@}SOVbyNe*Q3ZQrcpQT|?^A7j zB`W_Wn|>J8z%|qx@Gh!@?@%3b3Y!^0zJGwJt?rqR29JOROi*x?fftNNz_!8zDOL8no zdI{8&4?Ujp#6z9j3*aS7TLr_aN7PU09t&8pR)u;|{LA~mq;5!U)OPjA) zjmnrF?m_MDLpFXDHO0449e9uW5D8P(?Cum8Ks*Rlt^sPZbwthB0Msd(iR$PEOp7~F zo6&thKvVJrwK<+)6a0jFwbm);=lx=01%?ohTi$eNAZm%GV?(@Z({oqw^Iqu{Q8Tdw zHT7#yGrGyfcN$%1KLPdd2x^44QJds7YDB(@X0ydXJ>c^{c!_o#20M(6^x*F=|=)8=u|QOD{uRY3#Po3g!)kHVb9=b#$C zglhN(YNYqAk5Nnf3|0S2RKB<9D&dQL@Y6mBRmDtgMAT-9i7Jp6wabg(EUbhY(F-ht zzfc1yQ`Ia%ebh)>ppN-psHGZ++NATVa{jf+){{^Sebr14OQ1$v7S(V)Yg5!nTcc*C zJt|*sOpRkuFQ`qZy>ZZ{pFl0yf2bvmP~CJiS#{38UL1iWXwy_cWvGFwAOyA9I%9I| zi<-)LsF_=c8etOVdnyi9Z@IE66IU?3?Q6p`wI*D1iH9ZMF2dtn5{GaXMFS4W}K7l-1N?ivj z$9GnzCH1*kDUgRiSu&Ntr({TuLg`{gM@!!`(Tdo%k z{k|p>?n8Pe?gA#S>%^y0T^mX8w-xBc5|Q-l6o^6xV{@nC)|Hlyc2WlkKP2rUWf~El z&aG=Wm479Vt{XgG#q+!B3~BGcpE`e$w#e&PU1j6X0Bk3sk@2?ofHfvlXDXP^y+IY& zs{|F@BEA-@l4k^Wcfx#w`~R-@6UT?da!>Q54LM@-G!v~frQ{&OLv8MfJR3&~>By(6 zJjNvL4BPlUcs~I6xvL95#ernV6Wy>6l|xa5NZ5S>Xf98ew4pSUS0e))A^TleK_mBj7*noN>+PYfvY%l5gY2^1cow%-k)RB>UhWYYNugJ8NyD0ZR zG?d7Wt~8lSQK8;N;W0IFT}N%hr%9VlnI5FCCcK-wF=cm>_KU{mVMpTW2_Lm}s{A<8 z>k{9?3)lOP+9|OSg@0ds`}eM&wh-?%CktWz=*cNYWB>594e|4&pC+7_^vb4)lZ>?E zG?XakjCn`=&dK&Ju_IWJI{CPDcy)t?0&`uItw>yL!OKc=O1*-5+S54C95N}V#SLr!_ zbmUa#Za};f&xeo}i#r;X_9guu>DRoH`YkLoMfwin{G{hyg{g}_8E|4y?=S8ercKvL zNusWiWSn8cyLlLe3bs*^uKGM1Z7WiIKKX)qevjuVZ2DC__~Qys9iMnUhP3y#p60fG zW!vs`fc4iWq^@o})PMh5KiXHc1(bf9hPn|yLqm(XlkxmIX^**eO(%Yt^c7}A{EnH8 zY#uo+d8X?)&vh*|cs~S(A^%sce*{}_3z?Twcr)^+HBL{Sou$Bj3irloJgbjKcovsu z;qmuXlz2qyDazf6d`Y<@lXi{!3Yq5qkymAY@LZSsmI5ic8*;ZNaS-YX#LN`Vh^r}_ zh42IJ8g!;2@yp~1;OJFVgB052W6&Ha!pdU-PVh=@9?J8v;{# zIGzVv?KFiVUYkOt$k>~WQyfE)F9^5TJg04ig-u0HDe_I?u1I=W?tjSF+CHP0chw+X z*^ay?;XM3-t9QjFaSr!!TWM`N6W(T2hERn0N!|N(Z5sT^^FOcNl$%Gw2s%)Syv3+| z8F?~rCna3l*897RAL)M7)6J!TuHt0cMZp2w0i><74Xh)*7V$l{f|ht+1@Jldbn?x$ zbxb18UnTQ?w=~M8DQhC?)b*X`gUSDp_(0-M2)idKplg9G@HY=5(lcH9nQs@Xr`@AQBI26242u zncTIgD1f^&&qh$7G2xiD6Jc$oGsr)P`w+LTCic0)f9W4wgDAHRH&W+e!oRP}p=rOX z?a?J3WV2yE!qLcl8YkGaxs)19HsZ8f0*fdo<|BntdBz%**0qMiYSA~2< zsB=B{KGH{dKXCA{2oK)b5vh{Qga?sUmW)5hSPhdAA4pi&3LH&^TL||goSC~Loe6`< zD7&A$`FNIzdnxI&@fh;AK)mZN&l?f<=Km0Za8%Zg!nw)N8wU~BRf@QN$Jm-Yx~^Hf z67EHqU&c86H3TOw`7hA$Y~qG2I5%=Z|9Dx&;L;*B&LwAOoXSB zxj()8^Gaho^M-t(dDe%Dbxom?huqQa^D?BRC%lO~D+%8tUuo_Zl&eJgQR@G~vzS<# z+Z%sv$+evOBZ=$Ce2}{_aeiOvEFdidmGGA?oaz+bKsfl9?SxxX$7}BEgmvAdju9@E{(1c%Ljel?zFOIl9kUI@z#Wu%_eY-9WFAbu(3D+d z^9>;!i#+;CzMO5NHlDH-f5ROZ(~ts*9-V$AGYy*wx>P04gcjMeA z<6jpX*{o^JCO(J38CCBw<^ zgN$$OgNc}o^tM!_YZ`IY_aFagU@M+Q+6kT?;9gH&6&-`R8j+_k2@{Er#{iptns9O2 zT90igmot<%e*Q8akxAUT)>@ZP=q%wFHm+xF=smyDbPiKVLejGlZ%0^H7aBd!otJwI z&pKgK@}9EKhmcoSPHanB9m0Y7mhhN{nsL9f8NFQm;~&xvQ^`~O^SVf-OKjddJQ&H{ zf;=_3%W-$$`R~i0z&`4DPTC2|9HnEi?86(Rxlu{bBn+ouf5Q36+{b1}iie0VrQjCq z&2wGb2&bZOUpij_r}8|m9bI3ZcO$-t`gE-%Z*0mfCv7HST?^G26Ly`lM7DFE<3R~B z=_)~7*Dxv>!F`VO+$PEU=U@uAwGAraHTeswbGG~{FBfZV>-k_Cu1I=!%4Owl&8>ee z=YQ8GJGz}Va~R@NxucPzJ{2#evgU+4+DccFHk#+B$RCMLo+W;SJ0;JXkS`r!T^+D9 z&sTB}Bc6qZ8{0Z!YyDGGNiN&yLBcr*r?GKWu#AFlY-PlM^Ck}^r{ zvl-Sbq_-nHhi3`6`Axca^|#M`b`W#14)vw|{aXU%sz>H0BgH>73t&xTX`*>-61@HGR^D^T_D_xv?bJ?m%4LNrlzgqKd*DFe@QasAkj}F z#z?lpoYt|Vz2k01fdn{#N>burDm;Y0ue$_J+DIbmy2rDN)Lp|4DiY6@*yk;6xl#I- zu#*gbqo2(fNT#|pHk%G4rJ{x0c?gFh?F$|wZ$r}B63#_M>AaDcn#U3DL|PJ}-*}!4 z(_(e%UdO$h@MCUW*{Q?bOeBkKxDW{`xv$WGuKZNg5C105Le%dNi;{N=ja0RjkmNKV z?UL=pMbZmWhpx{y&wc7E&E1~#N9K|D&w*ih^|U5fLz$_hD3xr+nPeW1<47M%B|cku zC^}S+XBkmfFzH=+e#1naQ8xV+=@BTet25z@gf9`^MtC*%@2jES|Gg45P!vej4XpGpO5fBoA>eW3b4LSQ_?reFVwFk zD%xK27ss9c#D8CRsb~|Cm!$Q=GCWUDnyy5YDTW*W=-?3=Ek=4|@)zSSY3n*j`bo-# zC7zHwGo3hq>MCTPDO^SW;9B-a;|Yj=Aa6(NdVxcU z-@xKD9-n+|318s;^QxosAKj*0Bjf+QKH9XFG~Sfn-l6h(n1Q=0x30L{eW`dbjbyeR zDr6ff%d;JJaLRknpkiF{Y0!_m77hO5?oCA%XlOon8^V)Ft4Vkc>dHgf zHYyFE%xx@#d%5%TtQq$#W%}bfPG??H)}L}iu)H>07%J?J>B#t+3>&zg5ZAQ|gKV!8 zQt>qI_BP&52Y{@lN>sAL{aBoEJZ1TY)5{_GujTUCA}V%>-sB9Y#;*Gd3tBlP*pYT}n zRj}Q-Ph8h0;!_F7w@se=qv;IfKTn=pnu9oGd`2WI{zZY(WNe4y>GvGcT5zXQja+v~ z??A^gkru&L7+JGxuQsH`<5_&}L^RUTrnjP;uH=+$#@&NEHFx^oXJ8fubd|PVu?3X2 zoJxmKS!eF;q$eY-4uy3!r||(iziQ*hNqa+{v&6eo*DAu52ye8VeZcd-N#BqCNFS^3 zKnd&!BH#&|k>}258XRgnq_$X_wTD0dE@ZxCJ8C9Bk>p1^-Ot5Q#G4N zZ$Y}QRJ4_p=k84sAJ|4$+X@SlmX%Dc@H%NjDKv?AA>#i~(_gkzuhf9zRQ7;pjR_|s z{E7VA38%36I*`_gTh|%#rNK1hd840Px=%beG**N?WbMnNdJ|s`P2~OiVo??2UP#8Y z+`6jJ;1@bnggZASn(+J?X;W;+ix7WAdN|_U376;Am6-D9NpDX)vK_3_yV>WH>0C|H zTi`t=MbDh~6c~kLsqC$n!hs_ki$Z?}k4bd`kLr z%KS~*eVbmEcsSByQhqII4a3m>3@SNBBrFdibN?hBn~X7VG521=Nob%Ag=*k9?oQ;t zPToJSKpTHbN5=9XKV{Dm?n3!iJllo+xMPy`h4P8WGg=?a2M8>tQe9PfpzE5o0GTUM zXaLX4<1FF@D5GmKVO;}l!&_~zrNO%EnbS99`K zAzjxwJAh&O^V9}p*hIok3M?Z-H8QM29amlXNdH7UgbHSpwh%{iKjGOk($7=&t8MHX zbzSsI@wL;MfoGja-)bAJOC4n>AH}Pm^-sWq3RE{aJIOqq%u}f-H_s>9 zXa4vf@fEg=@~8MCtax_HvtFi$vNQ8j3?!VC593$LNDuF+)v^Quds|9e#VSjD>s$udc(6S z>I}XzN!~xh*gF5UY2LrD^us33qR0KIAQuHU+lrb{K?^cB!VBa(OrB}P^AZkcE15z5 z_Jre6CNyDPy9lSTGgZdcHH9)qY*=}^5RR+!Kax>RqhMSt$i0A!4`@)=1fGAhg|d^D zlxMF<%g6nlZ~~siBz+$7U091Ud%co;=35hyrvUZ$z`RO}m^xc(|5ly+JOBOn#_yv) j$C;RPU$l+=7hT%F)otM$o?zFNyWAJ~qTPs2T8P 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 CJEI~1 diff --git a/resources/i18n/zh_cn/BambuStudio.mo b/resources/i18n/zh_cn/BambuStudio.mo index a875dd33341c4d800dc49796ee0e5870b7813e8e..5255e7579fd6396f61250d89278d762ca6076139 100644 GIT binary patch delta 27850 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 vitrification || bed_temp > vitrification) { - const wxString msg_text = wxString::Format(_L("Bed temperature is higher than vitrification temperature of this filament.\nThis may cause nozzle blocked and printing failure")); + const wxString msg_text = wxString::Format(_L("Bed temperature is higher than vitrification temperature of this filament.\nThis may cause nozzle blocked and printing failure\nPlease keep the printer open during the printing process to ensure air circulation or reduce the temperature of the hot bed")); MessageDialog dialog(m_msg_dlg_parent, msg_text, "", wxICON_WARNING | wxOK); is_msg_dlg_already_exist = true; dialog.ShowModal(); From 2e9174500dcbc5ba9ee7262a52b07368fec4f40f Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Wed, 14 Sep 2022 12:21:17 +0800 Subject: [PATCH 03/90] FIX: add tips for timelapse add tips when both print by object and smooth mode are selected Change-Id: I13f4cc14f2ff7c33c23dcd1708fdb784aef5afa3 (cherry picked from commit a0bfe48df21d4eecf105d41387838f14b22fff3c) --- src/libslic3r/Print.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 900ccc04d2a..bd84d2082fa 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -749,6 +749,9 @@ StringObjectException Print::validate(StringObjectException *warning, Polygons* } if (m_config.print_sequence == PrintSequence::ByObject) { + if (m_config.timelapse_type == TimelapseType::tlSmooth) + return {L("Smooth mode of timelapse is not supported when \"by object\" sequence is enabled.")}; + //BBS: refine seq-print validation logic auto ret = sequential_print_clearance_valid(*this, collison_polygons, height_polygons); if (!ret.string.empty()) From 56fddf988a6c40541f144eb2a8b2b452ab823e0b Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Tue, 13 Sep 2022 17:58:26 +0800 Subject: [PATCH 04/90] ENH: add reload from disk and replace with stl Change-Id: I23088c023141c2f8b76ee6d2de663fb4b311f1f5 (cherry picked from commit d4e4b5eb6ef01ea3a3d097809b229c438ee18169) --- src/libslic3r/Technologies.hpp | 2 + src/slic3r/GUI/GUI_Factories.cpp | 14 +- src/slic3r/GUI/Plater.cpp | 262 ++++++++++++++++++++++++++----- 3 files changed, 241 insertions(+), 37 deletions(-) diff --git a/src/libslic3r/Technologies.hpp b/src/libslic3r/Technologies.hpp index 8056dfc33a7..aa014a6dc9c 100644 --- a/src/libslic3r/Technologies.hpp +++ b/src/libslic3r/Technologies.hpp @@ -38,6 +38,8 @@ // Enable style editor in develop mode #define ENABLE_IMGUI_STYLE_EDITOR 0 +// Enable rework of Reload from disk command +#define ENABLE_RELOAD_FROM_DISK_REWORK 1 //==================== // 2.4.0.beta1 techs diff --git a/src/slic3r/GUI/GUI_Factories.cpp b/src/slic3r/GUI/GUI_Factories.cpp index b5f404e9362..eafdef67b56 100644 --- a/src/slic3r/GUI/GUI_Factories.cpp +++ b/src/slic3r/GUI/GUI_Factories.cpp @@ -652,12 +652,18 @@ void MenuFactory::append_menu_item_export_stl(wxMenu* menu, bool is_mulity_menu) void MenuFactory::append_menu_item_reload_from_disk(wxMenu* menu) { - // BBS: change "Reload from disk" to "Reload item" - append_menu_item(menu, wxID_ANY, _L("Reload item"), _L("Reload items"), + append_menu_item(menu, wxID_ANY, _L("Reload from disk"), _L("Reload the selected volumes from disk"), [](wxCommandEvent&) { plater()->reload_from_disk(); }, "", menu, []() { return plater()->can_reload_from_disk(); }, m_parent); } +void MenuFactory::append_menu_item_replace_with_stl(wxMenu *menu) +{ + append_menu_item(menu, wxID_ANY, _L("Replace with STL"), _L("Replace the selected volume with new STL"), + [](wxCommandEvent &) { plater()->replace_with_stl(); }, "", menu, + []() { return plater()->can_replace_with_stl(); }, m_parent); +} + void MenuFactory::append_menu_item_change_extruder(wxMenu* menu) { // BBS @@ -915,6 +921,8 @@ void MenuFactory::create_bbl_object_menu() // Enter per object parameters append_menu_item_per_object_settings(&m_object_menu); m_object_menu.AppendSeparator(); + append_menu_item_reload_from_disk(&m_object_menu); + append_menu_item_replace_with_stl(&m_object_menu); append_menu_item_export_stl(&m_object_menu); } @@ -992,6 +1000,8 @@ void MenuFactory::create_bbl_part_menu() menu->AppendSeparator(); append_menu_item_per_object_settings(menu); append_menu_item_change_type(menu); + append_menu_item_reload_from_disk(menu); + append_menu_item_replace_with_stl(menu); } void MenuFactory::create_bbl_assemble_part_menu() diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 3941a366c21..2c93e416e11 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -4242,55 +4242,91 @@ bool Plater::priv::replace_volume_with_stl(int object_idx, int volume_idx, const void Plater::priv::replace_with_stl() { - // BBS do not support replace with STL - //if (! q->get_view3D_canvas3D()->get_gizmos_manager().check_gizmos_closed_except(GLGizmosManager::EType::Undefined)) - // return; + if (! q->get_view3D_canvas3D()->get_gizmos_manager().check_gizmos_closed_except(GLGizmosManager::EType::Undefined)) + return; - //const Selection& selection = get_selection(); + const Selection& selection = get_selection(); - //if (selection.is_wipe_tower() || get_selection().get_volume_idxs().size() != 1) - // return; + if (selection.is_wipe_tower() || get_selection().get_volume_idxs().size() != 1) + return; - //const GLVolume* v = selection.get_volume(*selection.get_volume_idxs().begin()); - //int object_idx = v->object_idx(); - //int volume_idx = v->volume_idx(); + const GLVolume* v = selection.get_volume(*selection.get_volume_idxs().begin()); + int object_idx = v->object_idx(); + int volume_idx = v->volume_idx(); - //// collects paths of files to load + // collects paths of files to load - //const ModelObject* object = model.objects[object_idx]; - //const ModelVolume* volume = object->volumes[volume_idx]; + const ModelObject* object = model.objects[object_idx]; + const ModelVolume* volume = object->volumes[volume_idx]; - //fs::path input_path; - //if (!volume->source.input_file.empty() && fs::exists(volume->source.input_file)) - // input_path = volume->source.input_file; + fs::path input_path; + if (!volume->source.input_file.empty() && fs::exists(volume->source.input_file)) + input_path = volume->source.input_file; - //wxString title = _L("Select the new file"); - //title += ":"; - //wxFileDialog dialog(q, title, "", from_u8(input_path.filename().string()), file_wildcards(FT_MODEL), wxFD_OPEN | wxFD_FILE_MUST_EXIST); - //if (dialog.ShowModal() != wxID_OK) - // return; + wxString title = _L("Select the new file"); + title += ":"; + wxFileDialog dialog(q, title, "", from_u8(input_path.filename().string()), file_wildcards(FT_MODEL), wxFD_OPEN | wxFD_FILE_MUST_EXIST); + if (dialog.ShowModal() != wxID_OK) + return; - //fs::path out_path = dialog.GetPath().ToUTF8().data(); - //if (out_path.empty()) { - // MessageDialog dlg(q, _L("File for the replace wasn't selected"), _L("Error during replace"), wxOK | wxOK_DEFAULT | wxICON_WARNING); - // dlg.ShowModal(); - // return; - //} + fs::path out_path = dialog.GetPath().ToUTF8().data(); + if (out_path.empty()) { + MessageDialog dlg(q, _L("File for the replace wasn't selected"), _L("Error during replace"), wxOK | wxOK_DEFAULT | wxICON_WARNING); + dlg.ShowModal(); + return; + } - //if (!replace_volume_with_stl(object_idx, volume_idx, out_path, "Replace with STL")) - // return; + if (!replace_volume_with_stl(object_idx, volume_idx, out_path, "Replace with STL")) + return; - //// update 3D scene - //update(); + // update 3D scene + update(); - //// new GLVolumes have been created at this point, so update their printable state - //for (size_t i = 0; i < model.objects.size(); ++i) { - // view3D->get_canvas3d()->update_instance_printable_state_for_object(i); - //} + // new GLVolumes have been created at this point, so update their printable state + for (size_t i = 0; i < model.objects.size(); ++i) { + view3D->get_canvas3d()->update_instance_printable_state_for_object(i); + } } +#if ENABLE_RELOAD_FROM_DISK_REWORK +static std::vector> reloadable_volumes(const Model &model, const Selection &selection) +{ + std::vector> ret; + const std::set & selected_volumes_idxs = selection.get_volume_idxs(); + for (unsigned int idx : selected_volumes_idxs) { + const GLVolume &v = *selection.get_volume(idx); + const int o_idx = v.object_idx(); + if (0 <= o_idx && o_idx < int(model.objects.size())) { + const ModelObject *obj = model.objects[o_idx]; + const int v_idx = v.volume_idx(); + if (0 <= v_idx && v_idx < int(obj->volumes.size())) { + const ModelVolume *vol = obj->volumes[v_idx]; + if (!vol->source.is_from_builtin_objects && !vol->source.input_file.empty() && !fs::path(vol->source.input_file).extension().string().empty()) + ret.push_back({o_idx, v_idx}); + } + } + } + return ret; +} +#endif // ENABLE_RELOAD_FROM_DISK_REWORK + void Plater::priv::reload_from_disk() { +#if ENABLE_RELOAD_FROM_DISK_REWORK + // collect selected reloadable ModelVolumes + std::vector> selected_volumes = reloadable_volumes(model, get_selection()); + + // nothing to reload, return + if (selected_volumes.empty()) + return; + + std::sort(selected_volumes.begin(), selected_volumes.end(), [](const std::pair &v1, const std::pair &v2) { + return (v1.first < v2.first) || (v1.first == v2.first && v1.second < v2.second); + }); + selected_volumes.erase(std::unique(selected_volumes.begin(), selected_volumes.end(), [](const std::pair &v1, const std::pair &v2) { + return (v1.first == v2.first) && (v1.second == v2.second); + }), selected_volumes.end()); +#else Plater::TakeSnapshot snapshot(q, "Reload from disk"); const Selection& selection = get_selection(); @@ -4323,10 +4359,36 @@ void Plater::priv::reload_from_disk() } std::sort(selected_volumes.begin(), selected_volumes.end()); selected_volumes.erase(std::unique(selected_volumes.begin(), selected_volumes.end()), selected_volumes.end()); +#endif // ENABLE_RELOAD_FROM_DISK_REWORK // collects paths of files to load std::vector input_paths; std::vector missing_input_paths; +#if ENABLE_RELOAD_FROM_DISK_REWORK + std::vector> replace_paths; + for (auto [obj_idx, vol_idx] : selected_volumes) { + const ModelObject *object = model.objects[obj_idx]; + const ModelVolume *volume = object->volumes[vol_idx]; + if (fs::exists(volume->source.input_file)) + input_paths.push_back(volume->source.input_file); + else { + // searches the source in the same folder containing the object + bool found = false; + if (!object->input_file.empty()) { + fs::path object_path = fs::path(object->input_file).remove_filename(); + if (!object_path.empty()) { + object_path /= fs::path(volume->source.input_file).filename(); + if (fs::exists(object_path)) { + input_paths.push_back(object_path); + found = true; + } + } + } + if (!found) + missing_input_paths.push_back(volume->source.input_file); + } + } +#else std::vector replace_paths; for (const SelectedVolume& v : selected_volumes) { const ModelObject* object = model.objects[v.object_idx]; @@ -4356,6 +4418,7 @@ void Plater::priv::reload_from_disk() else if (!object->input_file.empty() && volume->is_model_part() && !volume->name.empty() && !volume->source.is_from_builtin_objects) missing_input_paths.push_back(volume->name); } +#endif // ENABLE_RELOAD_FROM_DISK_REWORK std::sort(missing_input_paths.begin(), missing_input_paths.end()); missing_input_paths.erase(std::unique(missing_input_paths.begin(), missing_input_paths.end()), missing_input_paths.end()); @@ -4397,7 +4460,11 @@ void Plater::priv::reload_from_disk() wxString message = _devL("Do you want to replace it") + " ?"; MessageDialog dlg(q, message, wxMessageBoxCaptionStr, wxYES_NO | wxYES_DEFAULT | wxICON_QUESTION); if (dlg.ShowModal() == wxID_YES) - replace_paths.push_back(sel_filename_path); +#if ENABLE_RELOAD_FROM_DISK_REWORK + replace_paths.emplace_back(search, sel_filename_path); +#else + replace_paths.emplace_back(sel_filename_path); +#endif // ENABLE_RELOAD_FROM_DISK_REWORK missing_input_paths.pop_back(); } } @@ -4408,6 +4475,10 @@ void Plater::priv::reload_from_disk() std::sort(replace_paths.begin(), replace_paths.end()); replace_paths.erase(std::unique(replace_paths.begin(), replace_paths.end()), replace_paths.end()); +#if ENABLE_RELOAD_FROM_DISK_REWORK + Plater::TakeSnapshot snapshot(q, "Reload from disk"); +#endif // ENABLE_RELOAD_FROM_DISK_REWORK + std::vector fail_list; // load one file at a time @@ -4448,6 +4519,93 @@ void Plater::priv::reload_from_disk() return; } +#if ENABLE_RELOAD_FROM_DISK_REWORK + for (auto [obj_idx, vol_idx] : selected_volumes) { + ModelObject *old_model_object = model.objects[obj_idx]; + ModelVolume *old_volume = old_model_object->volumes[vol_idx]; + + bool sinking = old_model_object->bounding_box().min.z() < SINKING_Z_THRESHOLD; + + bool has_source = !old_volume->source.input_file.empty() && + boost::algorithm::iequals(fs::path(old_volume->source.input_file).filename().string(), fs::path(path).filename().string()); + bool has_name = !old_volume->name.empty() && boost::algorithm::iequals(old_volume->name, fs::path(path).filename().string()); + if (has_source || has_name) { + int new_volume_idx = -1; + int new_object_idx = -1; + bool match_found = false; + // take idxs from the matching volume + if (has_source && old_volume->source.object_idx < int(new_model.objects.size())) { + const ModelObject *obj = new_model.objects[old_volume->source.object_idx]; + if (old_volume->source.volume_idx < int(obj->volumes.size())) { + if (obj->volumes[old_volume->source.volume_idx]->name == old_volume->name) { + new_volume_idx = old_volume->source.volume_idx; + new_object_idx = old_volume->source.object_idx; + match_found = true; + } + } + } + + if (!match_found && has_name) { + // take idxs from the 1st matching volume + for (size_t o = 0; o < new_model.objects.size(); ++o) { + ModelObject *obj = new_model.objects[o]; + bool found = false; + for (size_t v = 0; v < obj->volumes.size(); ++v) { + if (obj->volumes[v]->name == old_volume->name) { + new_volume_idx = (int) v; + new_object_idx = (int) o; + found = true; + break; + } + } + if (found) break; + } + } + + if (new_object_idx < 0 || int(new_model.objects.size()) <= new_object_idx) { + fail_list.push_back(from_u8(has_source ? old_volume->source.input_file : old_volume->name)); + continue; + } + ModelObject *new_model_object = new_model.objects[new_object_idx]; + if (new_volume_idx < 0 || int(new_model_object->volumes.size()) <= new_volume_idx) { + fail_list.push_back(from_u8(has_source ? old_volume->source.input_file : old_volume->name)); + continue; + } + + old_model_object->add_volume(*new_model_object->volumes[new_volume_idx]); + ModelVolume *new_volume = old_model_object->volumes.back(); + new_volume->set_new_unique_id(); + new_volume->config.apply(old_volume->config); + new_volume->set_type(old_volume->type()); + new_volume->set_material_id(old_volume->material_id()); +#if 0// ENABLE_WORLD_COORDINATE + new_volume->set_transformation(Geometry::translation_transform(old_volume->source.transform.get_offset()) * + old_volume->get_transformation().get_matrix_no_offset() * old_volume->source.transform.get_matrix_no_offset()); + new_volume->translate(new_volume->get_transformation().get_matrix_no_offset() * (new_volume->source.mesh_offset - old_volume->source.mesh_offset)); +#else + new_volume->set_transformation(Geometry::assemble_transform(old_volume->source.transform.get_offset()) * old_volume->get_transformation().get_matrix(true) * + old_volume->source.transform.get_matrix(true)); + new_volume->translate(new_volume->get_transformation().get_matrix(true) * (new_volume->source.mesh_offset - old_volume->source.mesh_offset)); +#endif // ENABLE_WORLD_COORDINATE + new_volume->source.object_idx = old_volume->source.object_idx; + new_volume->source.volume_idx = old_volume->source.volume_idx; + assert(!old_volume->source.is_converted_from_inches || !old_volume->source.is_converted_from_meters); + if (old_volume->source.is_converted_from_inches) + new_volume->convert_from_imperial_units(); + else if (old_volume->source.is_converted_from_meters) + new_volume->convert_from_meters(); + std::swap(old_model_object->volumes[vol_idx], old_model_object->volumes.back()); + old_model_object->delete_volume(old_model_object->volumes.size() - 1); + if (!sinking) old_model_object->ensure_on_bed(); + old_model_object->sort_volumes(wxGetApp().app_config->get("order_volumes") == "1"); + + sla::reproject_points_and_holes(old_model_object); + + // Fix warning icon in object list + wxGetApp().obj_list()->update_item_error_icon(obj_idx, vol_idx); + } + } +#else // update the selected volumes whose source is the current file for (const SelectedVolume& sel_v : selected_volumes) { ModelObject* old_model_object = model.objects[sel_v.object_idx]; @@ -4517,8 +4675,17 @@ void Plater::priv::reload_from_disk() sla::reproject_points_and_holes(old_model_object); } } +#endif // ENABLE_RELOAD_FROM_DISK_REWORK } +#if ENABLE_RELOAD_FROM_DISK_REWORK + for (auto [src, dest] : replace_paths) { + for (auto [obj_idx, vol_idx] : selected_volumes) { + if (boost::algorithm::iequals(model.objects[obj_idx]->volumes[vol_idx]->source.input_file, src.string())) + replace_volume_with_stl(obj_idx, vol_idx, dest, ""); + } + } +#else for (size_t i = 0; i < replace_paths.size(); ++i) { const auto& path = replace_paths[i].string(); for (const SelectedVolume& sel_v : selected_volumes) { @@ -4530,6 +4697,7 @@ void Plater::priv::reload_from_disk() } } } +#endif // ENABLE_RELOAD_FROM_DISK_REWORK if (!fail_list.empty()) { wxString message = _devL("Unable to reload:") + "\n"; @@ -5976,6 +6144,13 @@ bool Plater::priv::can_replace_with_stl() const bool Plater::priv::can_reload_from_disk() const { +#if ENABLE_RELOAD_FROM_DISK_REWORK + // collect selected reloadable ModelVolumes + std::vector> selected_volumes = reloadable_volumes(model, get_selection()); + // nothing to reload, return + if (selected_volumes.empty()) + return false; +#else // struct to hold selected ModelVolumes by their indices struct SelectedVolume { @@ -6001,6 +6176,22 @@ bool Plater::priv::can_reload_from_disk() const selected_volumes.push_back({ o_idx, v_idx }); } } +#endif // ENABLE_RELOAD_FROM_DISK_REWORK + +#if ENABLE_RELOAD_FROM_DISK_REWORK + std::sort(selected_volumes.begin(), selected_volumes.end(), [](const std::pair &v1, const std::pair &v2) { + return (v1.first < v2.first) || (v1.first == v2.first && v1.second < v2.second); + }); + selected_volumes.erase(std::unique(selected_volumes.begin(), selected_volumes.end(), [](const std::pair &v1, const std::pair &v2) { + return (v1.first == v2.first) && (v1.second == v2.second); + }), selected_volumes.end()); + + // collects paths of files to load + std::vector paths; + for (auto [obj_idx, vol_idx] : selected_volumes) { + paths.push_back(model.objects[obj_idx]->volumes[vol_idx]->source.input_file); + } +#else std::sort(selected_volumes.begin(), selected_volumes.end()); selected_volumes.erase(std::unique(selected_volumes.begin(), selected_volumes.end()), selected_volumes.end()); @@ -6014,6 +6205,7 @@ bool Plater::priv::can_reload_from_disk() const else if (!object->input_file.empty() && !volume->name.empty() && !volume->source.is_from_builtin_objects) paths.push_back(volume->name); } +#endif // ENABLE_RELOAD_FROM_DISK_REWORK std::sort(paths.begin(), paths.end()); paths.erase(std::unique(paths.begin(), paths.end()), paths.end()); From 084ea583fbde43cb540b602fe2e0a932d0304409 Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Tue, 13 Sep 2022 14:36:51 +0800 Subject: [PATCH 05/90] FIX: support to import color in standard 3mf Change-Id: I631e3f62c4d996924efafdfe9352d1585ad4d130 (cherry picked from commit ec08a5194b45a98973eb53ab0022a0799238134c) --- src/libslic3r/Format/bbs_3mf.cpp | 74 ++++++++++++++++++++++++++++++++ src/libslic3r/Model.cpp | 10 +++-- src/slic3r/GUI/Plater.cpp | 24 +++++------ 3 files changed, 93 insertions(+), 15 deletions(-) diff --git a/src/libslic3r/Format/bbs_3mf.cpp b/src/libslic3r/Format/bbs_3mf.cpp index 697a07730f5..6a29d81968a 100644 --- a/src/libslic3r/Format/bbs_3mf.cpp +++ b/src/libslic3r/Format/bbs_3mf.cpp @@ -160,6 +160,8 @@ const unsigned int METADATA_STR_LEN = 9; static constexpr const char* MODEL_TAG = "model"; static constexpr const char* RESOURCES_TAG = "resources"; +static constexpr const char* COLOR_GROUP_TAG = "m:colorgroup"; +static constexpr const char* COLOR_TAG = "m:color"; static constexpr const char* OBJECT_TAG = "object"; static constexpr const char* MESH_TAG = "mesh"; static constexpr const char* MESH_STAT_TAG = "mesh_stat"; @@ -193,6 +195,7 @@ static constexpr const char* SLICE_HEADER_ITEM_TAG = "header_item"; // BBS: encrypt static constexpr const char* RELATIONSHIP_TAG = "Relationship"; +static constexpr const char* PID_ATTR = "pid"; static constexpr const char* PUUID_ATTR = "p:uuid"; static constexpr const char* PPATH_ATTR = "p:path"; static constexpr const char* OBJECT_UUID_SUFFIX = "-41cb-4c03-9d28-80fed5dfa1dc"; @@ -203,6 +206,7 @@ static constexpr const char* RELS_TYPE_ATTR = "Type"; static constexpr const char* UNIT_ATTR = "unit"; static constexpr const char* NAME_ATTR = "name"; +static constexpr const char* COLOR_ATTR = "color"; static constexpr const char* TYPE_ATTR = "type"; static constexpr const char* ID_ATTR = "id"; static constexpr const char* X_ATTR = "x"; @@ -549,6 +553,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) //int subobject_id; std::string name; std::string uuid; + int pid{-1}; //bool is_model_object; CurrentObject() { reset(); } @@ -713,6 +718,9 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) PlateData* m_curr_plater; CurrentInstance m_curr_instance; + int m_current_color_group{-1}; + std::map m_group_id_to_color; + public: _BBS_3MF_Importer(); ~_BBS_3MF_Importer(); @@ -778,6 +786,12 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) bool _handle_start_object(const char** attributes, unsigned int num_attributes); bool _handle_end_object(); + bool _handle_start_color_group(const char **attributes, unsigned int num_attributes); + bool _handle_end_color_group(); + + bool _handle_start_color(const char **attributes, unsigned int num_attributes); + bool _handle_end_color(); + bool _handle_start_mesh(const char** attributes, unsigned int num_attributes); bool _handle_end_mesh(); @@ -1314,6 +1328,20 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) } } + std::map color_group_id_to_extruder_id_map; + std::map color_to_extruder_id_map; + int extruder_id = 0; + for (auto group_iter = m_group_id_to_color.begin(); group_iter != m_group_id_to_color.end(); ++group_iter) { + auto color_iter = color_to_extruder_id_map.find(group_iter->second); + if (color_iter == color_to_extruder_id_map.end()) { + ++extruder_id; + color_to_extruder_id_map[group_iter->second] = extruder_id; + color_group_id_to_extruder_id_map[group_iter->first] = extruder_id; + } else { + color_group_id_to_extruder_id_map[group_iter->first] = color_iter->second; + } + } + for (const IdToModelObjectMap::value_type& object : m_objects) { if (object.second >= int(m_model->objects.size())) { add_error("invalid object, id: "+std::to_string(object.first.second)); @@ -1383,6 +1411,18 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) volumes.emplace_back(object_id.second); } + IdToCurrentObjectMap::const_iterator current_object = m_current_objects.find(object.first); + if (current_object != m_current_objects.end()) { + // get name + model_object->name = current_object->second.name; + + // get color + auto extruder_itor = color_group_id_to_extruder_id_map.find(current_object->second.pid); + if (extruder_itor != color_group_id_to_extruder_id_map.end()) { + model_object->config.set_key_value("extruder", new ConfigOptionInt(extruder_itor->second)); + } + } + // select as volumes volumes_ptr = &volumes; } @@ -2213,6 +2253,10 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) res = _handle_start_resources(attributes, num_attributes); else if (::strcmp(OBJECT_TAG, name) == 0) res = _handle_start_object(attributes, num_attributes); + else if (::strcmp(COLOR_GROUP_TAG, name) == 0) + res = _handle_start_color_group(attributes, num_attributes); + else if (::strcmp(COLOR_TAG, name) == 0) + res = _handle_start_color(attributes, num_attributes); else if (::strcmp(MESH_TAG, name) == 0) res = _handle_start_mesh(attributes, num_attributes); else if (::strcmp(VERTICES_TAG, name) == 0) @@ -2251,6 +2295,10 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) res = _handle_end_resources(); else if (::strcmp(OBJECT_TAG, name) == 0) res = _handle_end_object(); + else if (::strcmp(COLOR_GROUP_TAG, name) == 0) + res = _handle_end_color_group(); + else if (::strcmp(COLOR_TAG, name) == 0) + res = _handle_end_color(); else if (::strcmp(MESH_TAG, name) == 0) res = _handle_end_mesh(); else if (::strcmp(VERTICES_TAG, name) == 0) @@ -2434,6 +2482,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) m_curr_object->name = bbs_get_attribute_value_string(attributes, num_attributes, NAME_ATTR); m_curr_object->uuid = bbs_get_attribute_value_string(attributes, num_attributes, PUUID_ATTR); + m_curr_object->pid = bbs_get_attribute_value_int(attributes, num_attributes, PID_ATTR); } return true; @@ -2543,6 +2592,31 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) return true; } + bool _BBS_3MF_Importer::_handle_start_color_group(const char **attributes, unsigned int num_attributes) + { + m_current_color_group = bbs_get_attribute_value_int(attributes, num_attributes, ID_ATTR); + return true; + } + + bool _BBS_3MF_Importer::_handle_end_color_group() + { + // do nothing + return true; + } + + bool _BBS_3MF_Importer::_handle_start_color(const char **attributes, unsigned int num_attributes) + { + std::string color = bbs_get_attribute_value_string(attributes, num_attributes, COLOR_ATTR); + m_group_id_to_color[m_current_color_group] = color; + return true; + } + + bool _BBS_3MF_Importer::_handle_end_color() + { + // do nothing + return true; + } + bool _BBS_3MF_Importer::_handle_start_mesh(const char** attributes, unsigned int num_attributes) { // reset current geometry diff --git a/src/libslic3r/Model.cpp b/src/libslic3r/Model.cpp index ba5516ba4e3..3d74e789759 100644 --- a/src/libslic3r/Model.cpp +++ b/src/libslic3r/Model.cpp @@ -608,11 +608,15 @@ void Model::convert_multipart_object(unsigned int max_extruders) // Revert the centering operation. trafo_volume.set_offset(trafo_volume.get_offset() - o->origin_translation); int counter = 1; - auto copy_volume = [o, max_extruders, &counter, &extruder_counter](ModelVolume *new_v) { + auto copy_volume = [o, v, max_extruders, &counter, &extruder_counter](ModelVolume *new_v) { assert(new_v != nullptr); new_v->name = (counter > 1) ? o->name + "_" + std::to_string(counter++) : o->name; - //BBS: use default extruder id - //new_v->config.set("extruder", auto_extruder_id(max_extruders, extruder_counter)); + //BBS: Use extruder priority: volumn > object > default + if (v->config.option("extruder")) + new_v->config.set("extruder", v->config.extruder()); + else if (o->config.option("extruder")) + new_v->config.set("extruder", o->config.extruder()); + return new_v; }; if (o->instances.empty()) { diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 2c93e416e11..9059c05376b 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -2709,8 +2709,8 @@ std::vector Plater::priv::load_files(const std::vector& input_ project_presets.size() % (en_3mf_file_type == En3mfType::From_BBS) % file_version.to_string(); // 1. add extruder for prusa model if the number of existing extruders is not enough - // 2. add extruder for BBS model if only import geometry - if (en_3mf_file_type == En3mfType::From_Prusa || (en_3mf_file_type == En3mfType::From_BBS && load_model && !load_config)) { + // 2. add extruder for BBS or Other model if only import geometry + if (en_3mf_file_type == En3mfType::From_Prusa || (load_model && !load_config)) { std::set extruderIds; for (ModelObject *o : model.objects) { if (o->config.option("extruder")) extruderIds.insert(o->config.extruder()); @@ -3082,16 +3082,16 @@ std::vector Plater::priv::load_files(const std::vector& input_ // convert_model_if(model, answer_convert_from_imperial_units == wxID_YES); } - // if (model.looks_like_multipart_object()) { - // MessageDialog msg_dlg(q, _L( - // "This file contains several objects positioned at multiple heights.\n" - // "Instead of considering them as multiple objects, should \n" - // "the file be loaded as a single object having multiple parts?") + "\n", - // _L("Multi-part object detected"), wxICON_WARNING | wxYES | wxNO); - // if (msg_dlg.ShowModal() == wxID_YES) { - // model.convert_multipart_object(filaments_cnt); - // } - //} + if (model.looks_like_multipart_object()) { + MessageDialog msg_dlg(q, _L( + "This file contains several objects positioned at multiple heights.\n" + "Instead of considering them as multiple objects, should \n" + "the file be loaded as a single object having multiple parts?") + "\n", + _L("Multi-part object detected"), wxICON_WARNING | wxYES | wxNO); + if (msg_dlg.ShowModal() == wxID_YES) { + model.convert_multipart_object(filaments_cnt); + } + } } // else if ((wxGetApp().get_mode() == comSimple) && (type_3mf || type_any_amf) && model_has_advanced_features(model)) { // MessageDialog msg_dlg(q, _L("This file cannot be loaded in a simple mode. Do you want to switch to an advanced mode?")+"\n", From e05f28d0fb8e618447a65701f24a91f2ba7b66bb Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Wed, 14 Sep 2022 17:00:37 +0800 Subject: [PATCH 06/90] FIX: modify the translation Change-Id: I8f894012660ec9877fb3af9f87be370d78859c76 --- bbl/i18n/BambuStudio.pot | 35 +++++++++++++++++-- bbl/i18n/de/BambuStudio_de.po | 39 +++++++++++++++++++--- bbl/i18n/en/BambuStudio_en.po | 39 +++++++++++++++++++--- bbl/i18n/es/BambuStudio_es.po | 39 +++++++++++++++++++--- bbl/i18n/fr/BambuStudio_fr.po | 39 +++++++++++++++++++--- bbl/i18n/hu/BambuStudio_hu.po | 39 +++++++++++++++++++--- bbl/i18n/nl/BambuStudio_nl.po | 39 +++++++++++++++++++--- bbl/i18n/sv/BambuStudio_sv.po | 43 ++++++++++++++++++++---- bbl/i18n/zh_cn/BambuStudio_zh_CN.po | 50 ++++++++++++++++++++-------- resources/i18n/de/BambuStudio.mo | Bin 162196 -> 162143 bytes resources/i18n/en/BambuStudio.mo | Bin 148666 -> 148609 bytes resources/i18n/es/BambuStudio.mo | Bin 162785 -> 162724 bytes resources/i18n/fr/BambuStudio.mo | Bin 165858 -> 165795 bytes resources/i18n/hu/BambuStudio.mo | Bin 164444 -> 164370 bytes resources/i18n/nl/BambuStudio.mo | Bin 161420 -> 161323 bytes resources/i18n/sv/BambuStudio.mo | Bin 152744 -> 152684 bytes resources/i18n/zh_cn/BambuStudio.mo | Bin 152984 -> 154025 bytes src/slic3r/GUI/GUI_Factories.cpp | 4 +-- src/slic3r/GUI/Plater.cpp | 2 +- 19 files changed, 311 insertions(+), 57 deletions(-) diff --git a/bbl/i18n/BambuStudio.pot b/bbl/i18n/BambuStudio.pot index 93426e1ca27..d7b2c34c18d 100644 --- a/bbl/i18n/BambuStudio.pot +++ b/bbl/i18n/BambuStudio.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-09-14 12:48+0800\n" +"POT-Creation-Date: 2022-09-14 17:04+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -668,10 +668,16 @@ msgstr "" msgid "Export as STL" msgstr "" -msgid "Reload item" +msgid "Reload from disk" msgstr "" -msgid "Reload items" +msgid "Reload the selected parts from disk" +msgstr "" + +msgid "Replace with STL" +msgstr "" + +msgid "Replace the selected part with new STL" msgstr "" msgid "Change filament" @@ -2909,6 +2915,15 @@ msgstr "" msgid "Object too small" msgstr "" +msgid "" +"This file contains several objects positioned at multiple heights.\n" +"Instead of considering them as multiple objects, should \n" +"the file be loaded as a single object having multiple parts?" +msgstr "" + +msgid "Multi-part object detected" +msgstr "" + msgid "Load these files as a single object with multiple parts?\n" msgstr "" @@ -2938,6 +2953,15 @@ msgstr "" msgid "Another export job is running." msgstr "" +msgid "Select a new file" +msgstr "" + +msgid "File for the replace wasn't selected" +msgstr "" + +msgid "Error during replace" +msgstr "" + msgid "Please select a file" msgstr "" @@ -4514,6 +4538,11 @@ msgstr "" msgid "No extrusions under current settings." msgstr "" +msgid "" +"Smooth mode of timelapse is not supported when \"by object\" sequence is " +"enabled." +msgstr "" + msgid "" "Please select \"By object\" print sequence to print multiple objects in " "spiral vase mode." diff --git a/bbl/i18n/de/BambuStudio_de.po b/bbl/i18n/de/BambuStudio_de.po index ff445ea8cfe..feca16ffc29 100644 --- a/bbl/i18n/de/BambuStudio_de.po +++ b/bbl/i18n/de/BambuStudio_de.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-09-14 12:48+0800\n" +"POT-Creation-Date: 2022-09-14 17:04+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -689,11 +689,17 @@ msgstr "Modell reparieren" msgid "Export as STL" msgstr "Als STL exportieren" -msgid "Reload item" -msgstr "Element neu laden" +msgid "Reload from disk" +msgstr "" + +msgid "Reload the selected parts from disk" +msgstr "" + +msgid "Replace with STL" +msgstr "" -msgid "Reload items" -msgstr "Elemente neu laden" +msgid "Replace the selected part with new STL" +msgstr "" msgid "Change filament" msgstr "Filament wechseln" @@ -3087,6 +3093,15 @@ msgstr "" msgid "Object too small" msgstr "Objekt zu klein" +msgid "" +"This file contains several objects positioned at multiple heights.\n" +"Instead of considering them as multiple objects, should \n" +"the file be loaded as a single object having multiple parts?" +msgstr "" + +msgid "Multi-part object detected" +msgstr "" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Diese Dateien als ein einziges Objekt mit mehreren Teilen laden?\n" @@ -3116,6 +3131,15 @@ msgstr "Das ausgewählte Objekt konnte nicht geteilt werden." msgid "Another export job is running." msgstr "Ein weiterer Exportauftrag läuft gerade." +msgid "Select a new file" +msgstr "" + +msgid "File for the replace wasn't selected" +msgstr "" + +msgid "Error during replace" +msgstr "" + msgid "Please select a file" msgstr "Bitte wählen Sie eine Datei" @@ -4813,6 +4837,11 @@ msgstr "" msgid "No extrusions under current settings." msgstr "Keine Extrusion unter den aktuellen Einstellungen." +msgid "" +"Smooth mode of timelapse is not supported when \"by object\" sequence is " +"enabled." +msgstr "" + msgid "" "Please select \"By object\" print sequence to print multiple objects in " "spiral vase mode." diff --git a/bbl/i18n/en/BambuStudio_en.po b/bbl/i18n/en/BambuStudio_en.po index 3154d6a6148..209b4f49829 100644 --- a/bbl/i18n/en/BambuStudio_en.po +++ b/bbl/i18n/en/BambuStudio_en.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-09-14 12:48+0800\n" +"POT-Creation-Date: 2022-09-14 17:04+0800\n" "Language: en\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -678,11 +678,17 @@ msgstr "Fix Model" msgid "Export as STL" msgstr "Export as STL" -msgid "Reload item" -msgstr "Reload item" +msgid "Reload from disk" +msgstr "" + +msgid "Reload the selected parts from disk" +msgstr "" + +msgid "Replace with STL" +msgstr "" -msgid "Reload items" -msgstr "Reload items" +msgid "Replace the selected part with new STL" +msgstr "" msgid "Change filament" msgstr "Change filament" @@ -3040,6 +3046,15 @@ msgstr "" msgid "Object too small" msgstr "Object too small" +msgid "" +"This file contains several objects positioned at multiple heights.\n" +"Instead of considering them as multiple objects, should \n" +"the file be loaded as a single object having multiple parts?" +msgstr "" + +msgid "Multi-part object detected" +msgstr "" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Load these files as a single object with multiple parts?\n" @@ -3069,6 +3084,15 @@ msgstr "The selected object couldn't be split." msgid "Another export job is running." msgstr "Another export job is running." +msgid "Select a new file" +msgstr "" + +msgid "File for the replace wasn't selected" +msgstr "" + +msgid "Error during replace" +msgstr "" + msgid "Please select a file" msgstr "Please select a file" @@ -4716,6 +4740,11 @@ msgstr "" msgid "No extrusions under current settings." msgstr "No extrusions under current settings." +msgid "" +"Smooth mode of timelapse is not supported when \"by object\" sequence is " +"enabled." +msgstr "" + msgid "" "Please select \"By object\" print sequence to print multiple objects in " "spiral vase mode." diff --git a/bbl/i18n/es/BambuStudio_es.po b/bbl/i18n/es/BambuStudio_es.po index e628835722c..ab81588b688 100644 --- a/bbl/i18n/es/BambuStudio_es.po +++ b/bbl/i18n/es/BambuStudio_es.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-09-14 12:48+0800\n" +"POT-Creation-Date: 2022-09-14 17:04+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -691,11 +691,17 @@ msgstr "Fijar el modelo" msgid "Export as STL" msgstr "Exportar como STL" -msgid "Reload item" -msgstr "Volver a cargar el objeto" +msgid "Reload from disk" +msgstr "" + +msgid "Reload the selected parts from disk" +msgstr "" + +msgid "Replace with STL" +msgstr "" -msgid "Reload items" -msgstr "Recarga de objetos" +msgid "Replace the selected part with new STL" +msgstr "" msgid "Change filament" msgstr "Cambiar el filamento" @@ -3088,6 +3094,15 @@ msgstr "" msgid "Object too small" msgstr "Objeto demasiado pequeño" +msgid "" +"This file contains several objects positioned at multiple heights.\n" +"Instead of considering them as multiple objects, should \n" +"the file be loaded as a single object having multiple parts?" +msgstr "" + +msgid "Multi-part object detected" +msgstr "" + msgid "Load these files as a single object with multiple parts?\n" msgstr "¿Cargar estos archivos como un objeto único con múltiples partes?\n" @@ -3117,6 +3132,15 @@ msgstr "El objeto seleccionado no ha podido ser dividido." msgid "Another export job is running." msgstr "Otro trabajo de exportación está en marcha." +msgid "Select a new file" +msgstr "" + +msgid "File for the replace wasn't selected" +msgstr "" + +msgid "Error during replace" +msgstr "" + msgid "Please select a file" msgstr "Por favor, seleccione un archivo" @@ -4802,6 +4826,11 @@ msgstr "" msgid "No extrusions under current settings." msgstr "No hay extrusiones con los ajustes actuales." +msgid "" +"Smooth mode of timelapse is not supported when \"by object\" sequence is " +"enabled." +msgstr "" + msgid "" "Please select \"By object\" print sequence to print multiple objects in " "spiral vase mode." diff --git a/bbl/i18n/fr/BambuStudio_fr.po b/bbl/i18n/fr/BambuStudio_fr.po index a1cf3bac6c1..0a93dff7a65 100644 --- a/bbl/i18n/fr/BambuStudio_fr.po +++ b/bbl/i18n/fr/BambuStudio_fr.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-09-14 12:48+0800\n" +"POT-Creation-Date: 2022-09-14 17:04+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -690,11 +690,17 @@ msgstr "Réparer le modèle" msgid "Export as STL" msgstr "Exporter en STL" -msgid "Reload item" -msgstr "Recharger l'élément" +msgid "Reload from disk" +msgstr "" + +msgid "Reload the selected parts from disk" +msgstr "" + +msgid "Replace with STL" +msgstr "" -msgid "Reload items" -msgstr "Recharger les éléments" +msgid "Replace the selected part with new STL" +msgstr "" msgid "Change filament" msgstr "Changer de filament" @@ -3057,6 +3063,15 @@ msgstr "" msgid "Object too small" msgstr "Objet trop petit" +msgid "" +"This file contains several objects positioned at multiple heights.\n" +"Instead of considering them as multiple objects, should \n" +"the file be loaded as a single object having multiple parts?" +msgstr "" + +msgid "Multi-part object detected" +msgstr "" + msgid "Load these files as a single object with multiple parts?\n" msgstr "" "Charger ces fichiers en tant qu'objet unique avec plusieurs parties ?\n" @@ -3087,6 +3102,15 @@ msgstr "L'objet sélectionné n'a pas pu être divisé." msgid "Another export job is running." msgstr "Une autre tâche d'exportation est en cours d'exécution." +msgid "Select a new file" +msgstr "" + +msgid "File for the replace wasn't selected" +msgstr "" + +msgid "Error during replace" +msgstr "" + msgid "Please select a file" msgstr "Veuillez sélectionner un fichier" @@ -4785,6 +4809,11 @@ msgstr "" msgid "No extrusions under current settings." msgstr "Aucune extrusion dans les paramètres actuels." +msgid "" +"Smooth mode of timelapse is not supported when \"by object\" sequence is " +"enabled." +msgstr "" + msgid "" "Please select \"By object\" print sequence to print multiple objects in " "spiral vase mode." diff --git a/bbl/i18n/hu/BambuStudio_hu.po b/bbl/i18n/hu/BambuStudio_hu.po index f5a46f4ed78..4aede49f945 100644 --- a/bbl/i18n/hu/BambuStudio_hu.po +++ b/bbl/i18n/hu/BambuStudio_hu.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-09-14 12:48+0800\n" +"POT-Creation-Date: 2022-09-14 17:04+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -688,11 +688,17 @@ msgstr "Model javítása" msgid "Export as STL" msgstr "Exportálás STL-ként" -msgid "Reload item" -msgstr "Tárgy újbóli betöltése" +msgid "Reload from disk" +msgstr "" + +msgid "Reload the selected parts from disk" +msgstr "" + +msgid "Replace with STL" +msgstr "" -msgid "Reload items" -msgstr "Tárgyak újbóli betöltése" +msgid "Replace the selected part with new STL" +msgstr "" msgid "Change filament" msgstr "Filament csere" @@ -3078,6 +3084,15 @@ msgstr "" msgid "Object too small" msgstr "Object too small" +msgid "" +"This file contains several objects positioned at multiple heights.\n" +"Instead of considering them as multiple objects, should \n" +"the file be loaded as a single object having multiple parts?" +msgstr "" + +msgid "Multi-part object detected" +msgstr "" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Load these files as a single object with multiple parts?\n" @@ -3107,6 +3122,15 @@ msgstr "The selected object couldn't be split." msgid "Another export job is running." msgstr "Egy másik exportálási feladat is fut." +msgid "Select a new file" +msgstr "" + +msgid "File for the replace wasn't selected" +msgstr "" + +msgid "Error during replace" +msgstr "" + msgid "Please select a file" msgstr "Kérjük, válassz egy fájlt" @@ -4783,6 +4807,11 @@ msgstr "" msgid "No extrusions under current settings." msgstr "No extrusions under current settings." +msgid "" +"Smooth mode of timelapse is not supported when \"by object\" sequence is " +"enabled." +msgstr "" + msgid "" "Please select \"By object\" print sequence to print multiple objects in " "spiral vase mode." diff --git a/bbl/i18n/nl/BambuStudio_nl.po b/bbl/i18n/nl/BambuStudio_nl.po index 871ad95c189..b2e53e52608 100644 --- a/bbl/i18n/nl/BambuStudio_nl.po +++ b/bbl/i18n/nl/BambuStudio_nl.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-09-14 12:48+0800\n" +"POT-Creation-Date: 2022-09-14 17:04+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -686,11 +686,17 @@ msgstr "Repareer model" msgid "Export as STL" msgstr "Exporteer als STL bestand" -msgid "Reload item" -msgstr "Onderdeel opnieuw laden" +msgid "Reload from disk" +msgstr "" + +msgid "Reload the selected parts from disk" +msgstr "" + +msgid "Replace with STL" +msgstr "" -msgid "Reload items" -msgstr "Onderdelen opnieuw laden" +msgid "Replace the selected part with new STL" +msgstr "" msgid "Change filament" msgstr "Verander filament" @@ -3088,6 +3094,15 @@ msgstr "" msgid "Object too small" msgstr "He tobject is te klein" +msgid "" +"This file contains several objects positioned at multiple heights.\n" +"Instead of considering them as multiple objects, should \n" +"the file be loaded as a single object having multiple parts?" +msgstr "" + +msgid "Multi-part object detected" +msgstr "" + msgid "Load these files as a single object with multiple parts?\n" msgstr "" "Wilt u deze bestanden laden als een enkel object bestaande uit meerdere " @@ -3119,6 +3134,15 @@ msgstr "Het geselecteerde object kan niet opgesplitst worden." msgid "Another export job is running." msgstr "Er is reeds een export taak actief." +msgid "Select a new file" +msgstr "" + +msgid "File for the replace wasn't selected" +msgstr "" + +msgid "Error during replace" +msgstr "" + msgid "Please select a file" msgstr "Selecteer een bestand" @@ -4815,6 +4839,11 @@ msgstr "" msgid "No extrusions under current settings." msgstr "Geen extrusion onder de huidige instellingen" +msgid "" +"Smooth mode of timelapse is not supported when \"by object\" sequence is " +"enabled." +msgstr "" + msgid "" "Please select \"By object\" print sequence to print multiple objects in " "spiral vase mode." diff --git a/bbl/i18n/sv/BambuStudio_sv.po b/bbl/i18n/sv/BambuStudio_sv.po index db40b04aa63..4ea1d27e9d5 100644 --- a/bbl/i18n/sv/BambuStudio_sv.po +++ b/bbl/i18n/sv/BambuStudio_sv.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-09-14 12:48+0800\n" +"POT-Creation-Date: 2022-09-14 17:04+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -682,11 +682,17 @@ msgstr "Fixa modell" msgid "Export as STL" msgstr "Exportera som STL" -msgid "Reload item" -msgstr "Ladda om objektet" +msgid "Reload from disk" +msgstr "" + +msgid "Reload the selected parts from disk" +msgstr "" + +msgid "Replace with STL" +msgstr "" -msgid "Reload items" -msgstr "Ladda om objekten" +msgid "Replace the selected part with new STL" +msgstr "" msgid "Change filament" msgstr "Byta filament" @@ -3044,6 +3050,15 @@ msgstr "" msgid "Object too small" msgstr "För litet objekt" +msgid "" +"This file contains several objects positioned at multiple heights.\n" +"Instead of considering them as multiple objects, should \n" +"the file be loaded as a single object having multiple parts?" +msgstr "" + +msgid "Multi-part object detected" +msgstr "" + msgid "Load these files as a single object with multiple parts?\n" msgstr "Ladda dessa filer som ett enkelt objekt med multipla delar?\n" @@ -3073,6 +3088,15 @@ msgstr "Det valda objektet kan inte delas." msgid "Another export job is running." msgstr "En annan exportering pågår." +msgid "Select a new file" +msgstr "" + +msgid "File for the replace wasn't selected" +msgstr "" + +msgid "Error during replace" +msgstr "" + msgid "Please select a file" msgstr "Välj en fil" @@ -4721,6 +4745,11 @@ msgstr "" msgid "No extrusions under current settings." msgstr "Nuvarande inställning har ingen extrudering." +msgid "" +"Smooth mode of timelapse is not supported when \"by object\" sequence is " +"enabled." +msgstr "" + msgid "" "Please select \"By object\" print sequence to print multiple objects in " "spiral vase mode." @@ -6252,8 +6281,8 @@ msgid "" "interface is Concentric" msgstr "" "Linje mönster för support gränssnittsytan .Standardmönstret för olösligt " -"(material) support gränssnittet är Räta medan standardmönstret för " -"lösligt(material) stödgränssnittet är koncentriskt" +"(material) support gränssnittet är Räta medan standardmönstret för lösligt" +"(material) stödgränssnittet är koncentriskt" msgid "Base pattern spacing" msgstr "Basens mönster mellanrum" diff --git a/bbl/i18n/zh_cn/BambuStudio_zh_CN.po b/bbl/i18n/zh_cn/BambuStudio_zh_CN.po index 69b3cb8da7b..67e66c81f39 100644 --- a/bbl/i18n/zh_cn/BambuStudio_zh_CN.po +++ b/bbl/i18n/zh_cn/BambuStudio_zh_CN.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Slic3rPE\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-09-14 12:48+0800\n" +"POT-Creation-Date: 2022-09-14 17:04+0800\n" "PO-Revision-Date: 2022-09-05 14:22+0800\n" "Last-Translator: Jiang Yue \n" "Language-Team: \n" @@ -673,11 +673,17 @@ msgstr "修复模型" msgid "Export as STL" msgstr "导出为 STL" -msgid "Reload item" -msgstr "重新加载所选项" +msgid "Reload from disk" +msgstr "从磁盘重新加载" -msgid "Reload items" -msgstr "重新加载所选项" +msgid "Reload the selected parts from disk" +msgstr "从磁盘重新加载选中的零件" + +msgid "Replace with STL" +msgstr "替换为STL" + +msgid "Replace the selected part with new STL" +msgstr "用新的STL替换选中的零件" msgid "Change filament" msgstr "更换耗材丝" @@ -2985,6 +2991,17 @@ msgstr "" msgid "Object too small" msgstr "对象尺寸过小" +msgid "" +"This file contains several objects positioned at multiple heights.\n" +"Instead of considering them as multiple objects, should \n" +"the file be loaded as a single object having multiple parts?" +msgstr "" +"该文件包含多个位于不同高度的对象。\n" +"是否将文件加载为一个由多个零件组合而成的对象,而非多个单零件的对象?" + +msgid "Multi-part object detected" +msgstr "检测到多部分对象" + msgid "Load these files as a single object with multiple parts?\n" msgstr "将这些文件加载为一个多零件对象?\n" @@ -3014,6 +3031,15 @@ msgstr "选中的模型不可分裂。" msgid "Another export job is running." msgstr "有其他导出任务正在进行中。" +msgid "Select a new file" +msgstr "选择新文件" + +msgid "File for the replace wasn't selected" +msgstr "未选择替换文件" + +msgid "Error during replace" +msgstr "替换时发生错误" + msgid "Please select a file" msgstr "请选择一个文件" @@ -4622,6 +4648,11 @@ msgstr "" msgid "No extrusions under current settings." msgstr "根据当前设置,不会生成任何打印。" +msgid "" +"Smooth mode of timelapse is not supported when \"by object\" sequence is " +"enabled." +msgstr "平滑模式的延时摄影不支持在逐件打印模式下使用。" + msgid "" "Please select \"By object\" print sequence to print multiple objects in " "spiral vase mode." @@ -8648,9 +8679,6 @@ msgstr "支撑:正在生长层%d的树枝" #~ msgid "Unable to replace with more than one volume" #~ msgstr "超过1个零件,无法替换" -#~ msgid "Error during replace" -#~ msgstr "替换时发生错误" - #~ msgid "Do you want to replace it" #~ msgstr "您是否要替换" @@ -9221,9 +9249,6 @@ msgstr "支撑:正在生长层%d的树枝" #~ msgid "Please check your object list before preset changing." #~ msgstr "请在预设更改之前检查对象列表。" -#~ msgid "Reload from disk" -#~ msgstr "从磁盘重新加载" - #~ msgid "Convert from imperial units" #~ msgstr "从英制转换" @@ -9749,9 +9774,6 @@ msgstr "支撑:正在生长层%d的树枝" #~ msgid "Fix through the Netfabb" #~ msgstr "通过Netfabb修复" -#~ msgid "Reload the selected volumes from disk" -#~ msgstr "从磁盘重新加载选中的零件" - #~ msgid "Change extruder" #~ msgstr "更换挤出机" diff --git a/resources/i18n/de/BambuStudio.mo b/resources/i18n/de/BambuStudio.mo index 12c26fa0c21181c1c41f30ea0a4ecbcbc16326a3..f3d13b298bf3d147c486cb3dc7f92417b17d33ae 100644 GIT binary patch delta 33113 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�=9_9J-eeKKidco*V5 z(mmHF(9^}e*C#Y*UfL~B+1=C&B)ovK4XM`!=eps217nMj%1>wfvwVELqmPv2W+UE) z^tAZjD~=jX-L`#0{MS&jwmYV8oc~%{p6~AL8ydBn&@@U{rBrL)dUc?MTfD=G7a}hc zWoEeV`i7KWN(*`g($`^1q~^Vk_a;i{wHWtPYZ&kIgnw4pj^#mew{5>bw@<(1zIWe# zp#hz!dWoi%x}Wu{kZl%?=cYnFQuG>1ZWrDM+~@rQt9(L8uR=7d2ftn|ZOM@~uM@Rr zl7EFRC!$^t4bENidb&0GhXyUQIrZ&iRG_UpvVUmoX4}pR>K~=l-@K=i){yu~!dnUF z$Hmm#<(}*x9eak9ySzVRB$e$%ZxDY=xD`FtrnFvFNGs@u4+zY;mby(yO=okClcU#J zY~VH+5bRmub{!CsGlp{C+cJ5uGiCT2Aih^kcjbWS@Oidolr41@pV04lJC2F&lL4U# z`u|v5Z>l+0sL_OYGfEVot>nbB+R_&ZUuMK9u`TAOoL+g|Is-!ju9Mn>SYNmAz);UJ zch11Toa-p@i?0k9#WmjiQGDNE=}#@wIO zO}s}Ceoe_t)Y?Y4H{n{O&!xT6y!jya{W(?%>Mbx0I^*4>L80+oDLsmkdL1J?oA(AA zZ%bIOuC&^e7S|H?cee~`7O;vO52ebxX$OaTj=HgfLzBi*Dhp{-DES>Fd)nG+fxqbE zj3K^*_s_(Cws{i?&m^x1b@CDZgz?p)ovEbhb%1dXCN0q2FgP;pX>ywL{*HGq_xj+- zsLyEU5_OYPt_tCL)C(n7uPLPIRhIZqZtRfYpzgF(j?z`}0+vuo_md%^#WItk*Bt84 zrJe7|EkoLFO7IufoKcvA^o*oOs}`>T?v^1T-i@R-qeLH4$I)X4;s>#@Ddc=gUNTy` zN!okTCQvS%_z$!cMV@}1%1PQXTu53A^45{AmzVHgCg||DW1JDZf23>)$|c}o{ntyc z>@?Sqpw}y0${_xGHMHsf#ZOZ?4-M-zl5!)kI<9o*3=Q%7;O}l7nk#;aZQx_vNCQ>r zxi@wvu5XB~Y++PB(m5VA5;K_oOqudXw`F@oKb_!gfBKykOoL zNZ0ExYSy!1#d}e<2mLH0y@u^)0OfO0W~Mu5SYX<7Y280$N4`x5G>rg+5=PDQ!(yjv1p&HJERZg@zxRfNVfCVg>CZTo3OIM(euJS6BPx$Vfk zP0uZOhtp?kcjfT7Vna!-Oe~%fcNm3UKVx;`jc8|^ZR;aD-|5u;$n_tQJKzZ=^lInE zj|hxkOsqcjex)tF24Y9vDXCwCx~<7?jDx5jK)L?zz!8yAiztzv67_AZ+>}~oM-fi= z7^V9W|HVBvBGh|<6uq|cKJN?hWr?(vw7Z7*CQ7HIrC!7%Xmzhzwd2=M00l_@jJIC; zS?MwF6}G-dLT-j%iw64t9dW&V4u z)i`~vuUJ&Et4%zEYV8cKb=X7Uaujh~F2K;GL4e@?l(q_^WegmV2!;|Emd zQ-A(=KD%9>dKCK0c6tCOQTPP@Wb=tSVQ&1Wz<}8dnZH)z)NwuI0^K&FQUxub!8pp^ zuw{o6&f|_872=uiel{w%e|z$OcMpv!5j2jvZ;73t`)fFwH;+qiu;*VluQxR6Cu)|V zmC2-kPZ=-q(fA$jt+w?&K{VN z-|oQC(P^_#Pd^-XCMBo4Wpr@B5JER;^_qKnba2MX#Pl16IrOjBIQQk~+zI7KZA6)t zq^`y`c#ro~-Y+RtleAle^-5r#U-Mp0Pot@)S4sDiF`-pj+Ss4ubf(7NA~ujKJJ@|;2L{xQMX{vjuccL8!g(3iihImmr7CbZN*V%aFW z0~4^f9a$;DFKBBz>E9B*M0$E^>y?c$oOG*)qwU!$KL zS0VBpTGneb>0gpwpZ97v{3wQ>(eaDA*2D>xHN7is@ zT(3VU-VzgeKc$g7>WIA0sM?gY{Ji@S|C_v8H81gz$V+=JC-7yoQ8&tNXQ&A$T4G*MNdK;c( z`&2_;Q>MLbQNQ_UO-sd@GQWv&I-_0@?z;)0Rnn2ugLgf0O3_jlYS!hQoHV`KF_zt! ziCXt;PkRYRQoa#o_?yno1h?(Pz>EvYT}?^_{D%_B+zAsy)4H_v-)oq=ePU?B9#Rfb z%g^R4q0TzO?`*s<^^GoJfy!lV$7 z>n2T#^UQH)Ov)Xfj+_Dib&r*Zd#JUL_e$bvY+g}XDMTNo-P@A_lm4RAZ^Rn&{+xDS zk~^0)y>c;v0o0BreG6f|f{AaZOkUEm5bj6Wk)-ptIi2RDU$u2r_KDkIa%jd=q;x0N z-L}xg9WyyFs0XRrNom0Q8|qb|y-(c@lXC|Qr`2M-L)@PxhbHZ(+*D$dX@5Lrejpyj zyEU^FevaJNhi$-9i$B2q(n45jt5Y9xn0^uB#UuZ{E!S)tI-Asf_@xE-^-R8zm z5BBVIYfR6bHy0`Xe3uh*}%ecARqiZb^}ze@Ueo8OAO#+1oP z{2KnlJM4ejpG`i0b=g^O%4c_qk#L5{KwD@5YOamkpJs&C*;n+f@V&jX3#g`~usAzPdl7$NG RzTL^we)I0Gfqv1Q{tsPD^C18L delta 33147 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 O|DUuwZ-8H}4*v(%&I5t~ diff --git a/resources/i18n/en/BambuStudio.mo b/resources/i18n/en/BambuStudio.mo index 195047a22412b682f97e157b5fe49fbc16b8171c..0cc07618e87658569442a9a94b8d6eaa17420da3 100644 GIT binary patch delta 36240 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 O?e~7{b}Fu|^Zx*MQ&Kws delta 36284 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 F{|CNyWRm~@ diff --git a/resources/i18n/es/BambuStudio.mo b/resources/i18n/es/BambuStudio.mo index 6dfec11a645f9719d981987c0055fb9d5835d7cf..b271886c4ec9904e8c72992cb2d481810c5bb36d 100644 GIT binary patch delta 33124 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 X66H#i*!NQpPtcxyx%2pa-S__hYdQMs delta 33172 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�x#80_(V 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 diff --git a/resources/i18n/hu/BambuStudio.mo b/resources/i18n/hu/BambuStudio.mo index 9d7ed27c2d2e0975915fb9baead6fb983ac28f31..046bb8f4aaeecf86a9f782f5adf98e9a674bcf46 100644 GIT binary patch delta 33908 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 delta 33978 zcmZwQcYMv)1OM^Q4MA*zG$N9Sh#)Z{_KLmt-Z84NW3RYo?RlwDvr3Jk_N=Wotx>eK z)o7{Rn)Q3V?>YVbzJL7g<8i;wvp#2^bFWB!XOBz!+qksu>seFIb$FdkeP=mNT}(ofoqd=Sk7F9VgO%_R*23u7j#Cl`V?1uebodNi_`#-s#43*C zcH%vblb?+77=s%y1zy9ncngc-BdmkD=QvJj?2d);YYfDTm>&PaAbf}FZ~(*0fnlf) zm%_{#k3qEWG$xRmgx;7D2ca4skE&oM`r<sM!121M!plX<1zFu0eY7J)!-vkgKsbsre0vu127Bmyr>S8K-F8( z=GQ`h;>}Sr&>gd)djazwNMJSzT7qv;6>PQf?@=8∈Lw2IB+Fhp85tjznX7;^na& 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 diff --git a/resources/i18n/nl/BambuStudio.mo b/resources/i18n/nl/BambuStudio.mo index bd58758274b277bf9bb9ee0b08f774b05ae1ba83..f773458b256666825f7b4baff8c4ee233d627829 100644 GIT binary patch delta 36724 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 diff --git a/resources/i18n/sv/BambuStudio.mo b/resources/i18n/sv/BambuStudio.mo index fec07726e57c3aa392ace99956befb159068cb68..6243824f9a2364385167da0d4ebcd4fc8ba22c48 100644 GIT binary patch delta 36576 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 WoG&u`{G$$`~Lw06I1d4 delta 36677 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 delta 38861 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 diff --git a/src/slic3r/GUI/GUI_Factories.cpp b/src/slic3r/GUI/GUI_Factories.cpp index eafdef67b56..a8cd41fa934 100644 --- a/src/slic3r/GUI/GUI_Factories.cpp +++ b/src/slic3r/GUI/GUI_Factories.cpp @@ -652,14 +652,14 @@ void MenuFactory::append_menu_item_export_stl(wxMenu* menu, bool is_mulity_menu) void MenuFactory::append_menu_item_reload_from_disk(wxMenu* menu) { - append_menu_item(menu, wxID_ANY, _L("Reload from disk"), _L("Reload the selected volumes from disk"), + append_menu_item(menu, wxID_ANY, _L("Reload from disk"), _L("Reload the selected parts from disk"), [](wxCommandEvent&) { plater()->reload_from_disk(); }, "", menu, []() { return plater()->can_reload_from_disk(); }, m_parent); } void MenuFactory::append_menu_item_replace_with_stl(wxMenu *menu) { - append_menu_item(menu, wxID_ANY, _L("Replace with STL"), _L("Replace the selected volume with new STL"), + append_menu_item(menu, wxID_ANY, _L("Replace with STL"), _L("Replace the selected part with new STL"), [](wxCommandEvent &) { plater()->replace_with_stl(); }, "", menu, []() { return plater()->can_replace_with_stl(); }, m_parent); } diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 9059c05376b..19d4270a55c 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -4263,7 +4263,7 @@ void Plater::priv::replace_with_stl() if (!volume->source.input_file.empty() && fs::exists(volume->source.input_file)) input_path = volume->source.input_file; - wxString title = _L("Select the new file"); + wxString title = _L("Select a new file"); title += ":"; wxFileDialog dialog(q, title, "", from_u8(input_path.filename().string()), file_wildcards(FT_MODEL), wxFD_OPEN | wxFD_FILE_MUST_EXIST); if (dialog.ShowModal() != wxID_OK) From d9d88b8022b9944ef99bc70a9ea1a3dac88ba39b Mon Sep 17 00:00:00 2001 From: "lane.wei" Date: Wed, 14 Sep 2022 16:12:12 +0800 Subject: [PATCH 07/90] change the main thread name to bambustu_main the max length of linux's thread name could only be 16 bytes bambustudio_main can not be set by pthread_setname_np Change-Id: Idab83896c81787b32f6a4dde869b101da1d69e5c --- src/BambuStudio.cpp | 4 ++-- src/BambuStudio_app_msvc.cpp | 14 +++++++------- src/libslic3r/AppConfig.cpp | 4 ++-- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/BambuStudio.cpp b/src/BambuStudio.cpp index 6585ece0a87..578cc660f6b 100644 --- a/src/BambuStudio.cpp +++ b/src/BambuStudio.cpp @@ -95,7 +95,7 @@ static void glfw_callback(int error_code, const char* description) int CLI::run(int argc, char **argv) { // Mark the main thread for the debugger and for runtime checks. - set_current_thread_name("bambustudio_main"); + set_current_thread_name("bambustu_main"); #ifdef __WXGTK__ // On Linux, wxGTK has no support for Wayland, and the app crashes on @@ -1736,7 +1736,7 @@ LONG WINAPI VectoredExceptionHandler(PEXCEPTION_POINTERS pExceptionInfo) #if defined(_MSC_VER) || defined(__MINGW32__) extern "C" { - __declspec(dllexport) int __stdcall bambustudio_main(int argc, wchar_t **argv) + __declspec(dllexport) int __stdcall bambustu_main(int argc, wchar_t **argv) { // Convert wchar_t arguments to UTF8. std::vector argv_narrow; diff --git a/src/BambuStudio_app_msvc.cpp b/src/BambuStudio_app_msvc.cpp index 5dfc4c4635d..41fee090120 100644 --- a/src/BambuStudio_app_msvc.cpp +++ b/src/BambuStudio_app_msvc.cpp @@ -204,7 +204,7 @@ bool OpenGLVersionCheck::message_pump_exit = false; extern "C" { typedef int (__stdcall *Slic3rMainFunc)(int argc, wchar_t **argv); - Slic3rMainFunc bambustudio_main = nullptr; + Slic3rMainFunc bambustu_main = nullptr; } extern "C" { @@ -295,19 +295,19 @@ int wmain(int argc, wchar_t **argv) } // resolve function address here - bambustudio_main = (Slic3rMainFunc)GetProcAddress(hInstance_Slic3r, + bambustu_main = (Slic3rMainFunc)GetProcAddress(hInstance_Slic3r, #ifdef _WIN64 // there is just a single calling conversion, therefore no mangling of the function name. - "bambustudio_main" + "bambustu_main" #else // stdcall calling convention declaration - "_bambustudio_main@8" + "_bambustu_main@8" #endif ); - if (bambustudio_main == nullptr) { - printf("could not locate the function bambustudio_main in BambuStudio.dll\n"); + if (bambustu_main == nullptr) { + printf("could not locate the function bambustu_main in BambuStudio.dll\n"); return -1; } // argc minus the trailing nullptr of the argv - return bambustudio_main((int)argv_extended.size() - 1, argv_extended.data()); + return bambustu_main((int)argv_extended.size() - 1, argv_extended.data()); } } diff --git a/src/libslic3r/AppConfig.cpp b/src/libslic3r/AppConfig.cpp index 03b42cfe5d3..47bc7dbf1ac 100644 --- a/src/libslic3r/AppConfig.cpp +++ b/src/libslic3r/AppConfig.cpp @@ -525,7 +525,7 @@ void AppConfig::save() { // Returns "undefined" if the thread naming functionality is not supported by the operating system. std::optional current_thread_name = get_current_thread_name(); - if (current_thread_name && *current_thread_name != "bambustudio_main") + if (current_thread_name && *current_thread_name != "bambustu_main") throw CriticalException("Calling AppConfig::save() from a worker thread!"); } @@ -777,7 +777,7 @@ void AppConfig::save() { // Returns "undefined" if the thread naming functionality is not supported by the operating system. std::optional current_thread_name = get_current_thread_name(); - if (current_thread_name && *current_thread_name != "bambustudio_main") + if (current_thread_name && *current_thread_name != "bambustu_main") throw CriticalException("Calling AppConfig::save() from a worker thread!"); } From 1b07874ea3e1bb418f886df1e0759da23483059a Mon Sep 17 00:00:00 2001 From: "lane.wei" Date: Wed, 14 Sep 2022 16:59:12 +0800 Subject: [PATCH 08/90] add release notes files for current version Change-Id: I4153ed48f1242832e02bc73feb8022185924ab78 --- doc/release_notes_cn.md | 18 ++++++++++++++++++ doc/release_notes_en.md | 18 ++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 doc/release_notes_cn.md create mode 100644 doc/release_notes_en.md diff --git a/doc/release_notes_cn.md b/doc/release_notes_cn.md new file mode 100644 index 00000000000..b5c3b9b3915 --- /dev/null +++ b/doc/release_notes_cn.md @@ -0,0 +1,18 @@ +**新功能** +1. 3D文字工具 +2. 对象和拷贝间的数据共享 +3. 参数表格 +4. 用户指南 +5. 支持Arachne特性 + +**改进** +1. 支持导出通用的3mf格式,兼容其他切片软件 +2. 优化混合支撑和树状支撑的生成速度 +3. 支持不停靠工具头的延迟摄影 +4. 支持纹理PEI热床 +5. 支持导入和导出预设 +6. 支持随机位置的接缝设置 +7. 支持匈牙利语 +8. 一些关键问题修复 + +详细信息请查看:https://github.com/bambulab/BambuStudio/releases diff --git a/doc/release_notes_en.md b/doc/release_notes_en.md new file mode 100644 index 00000000000..89d801b2d4f --- /dev/null +++ b/doc/release_notes_en.md @@ -0,0 +1,18 @@ +**New Features** +1. 3D text tool +2. Shared data between an object and its copies +3. Parameter table +4. User manual +5. Arachne feature + +**Improvements** +1. Added support for exporting generic 3mf that is compatible with other slicers +2. Optimized the performance of hybrid and tree support +3. Added traditional timelapse mode +4. Added support for Textured PEI plate +5. Added support for export/import preset +6. Added random seam position +7. Added Magyar translations +8. Fixed some known bugs + +For details, please check https://github.com/bambulab/BambuStudio/releases From d4854c0df77e7d38dd13f244c19b97898d5763a7 Mon Sep 17 00:00:00 2001 From: "salt.wei" Date: Wed, 14 Sep 2022 21:54:33 +0800 Subject: [PATCH 09/90] ENH: fix empty infill layers This is fix for github issue #216 that sometimes the infill layer is empty. Signed-off-by: salt.wei Change-Id: Ie3be08b75506e48f5ae9dd6aae2ae729ba666e01 --- src/libslic3r/Layer.cpp | 8 ++++++-- src/libslic3r/Layer.hpp | 3 ++- src/libslic3r/LayerRegion.cpp | 9 ++++----- src/libslic3r/PerimeterGenerator.cpp | 2 +- src/libslic3r/PerimeterGenerator.hpp | 9 ++++++--- 5 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/libslic3r/Layer.cpp b/src/libslic3r/Layer.cpp index b60acff7817..cb8e393d53b 100644 --- a/src/libslic3r/Layer.cpp +++ b/src/libslic3r/Layer.cpp @@ -190,7 +190,7 @@ void Layer::make_perimeters() if (layerms.size() == 1) { // optimization (*layerm)->fill_surfaces.surfaces.clear(); - (*layerm)->make_perimeters((*layerm)->slices, &(*layerm)->fill_surfaces); + (*layerm)->make_perimeters((*layerm)->slices, &(*layerm)->fill_surfaces, &(*layerm)->fill_no_overlap_expolygons); (*layerm)->fill_expolygons = to_expolygons((*layerm)->fill_surfaces.surfaces); } else { SurfaceCollection new_slices; @@ -212,7 +212,9 @@ void Layer::make_perimeters() // make perimeters SurfaceCollection fill_surfaces; - layerm_config->make_perimeters(new_slices, &fill_surfaces); + //BBS + ExPolygons fill_no_overlap; + layerm_config->make_perimeters(new_slices, &fill_surfaces, &fill_no_overlap); // assign fill_surfaces to each layer if (!fill_surfaces.surfaces.empty()) { @@ -221,6 +223,8 @@ void Layer::make_perimeters() ExPolygons expp = intersection_ex(fill_surfaces.surfaces, (*l)->slices.surfaces); (*l)->fill_expolygons = expp; (*l)->fill_surfaces.set(std::move(expp), fill_surfaces.surfaces.front()); + //BBS: Separate fill_no_overlap + (*l)->fill_no_overlap_expolygons = intersection_ex((*l)->slices.surfaces, fill_no_overlap); } } } diff --git a/src/libslic3r/Layer.hpp b/src/libslic3r/Layer.hpp index 66cc0b5893b..41461978811 100644 --- a/src/libslic3r/Layer.hpp +++ b/src/libslic3r/Layer.hpp @@ -68,7 +68,8 @@ class LayerRegion void slices_to_fill_surfaces_clipped(); void prepare_fill_surfaces(); - void make_perimeters(const SurfaceCollection &slices, SurfaceCollection* fill_surfaces); + //BBS + void make_perimeters(const SurfaceCollection &slices, SurfaceCollection* fill_surfaces, ExPolygons* fill_no_overlap); void process_external_surfaces(const Layer *lower_layer, const Polygons *lower_layer_covered); double infill_area_threshold() const; // Trim surfaces by trimming polygons. Used by the elephant foot compensation at the 1st layer. diff --git a/src/libslic3r/LayerRegion.cpp b/src/libslic3r/LayerRegion.cpp index e57648237eb..d11c3d7126a 100644 --- a/src/libslic3r/LayerRegion.cpp +++ b/src/libslic3r/LayerRegion.cpp @@ -63,7 +63,7 @@ void LayerRegion::slices_to_fill_surfaces_clipped() } } -void LayerRegion::make_perimeters(const SurfaceCollection &slices, SurfaceCollection* fill_surfaces) +void LayerRegion::make_perimeters(const SurfaceCollection &slices, SurfaceCollection* fill_surfaces, ExPolygons* fill_no_overlap) { this->perimeters.clear(); this->thin_fills.clear(); @@ -90,7 +90,9 @@ void LayerRegion::make_perimeters(const SurfaceCollection &slices, SurfaceCollec // output: &this->perimeters, &this->thin_fills, - fill_surfaces + fill_surfaces, + //BBS + fill_no_overlap ); if (this->layer()->lower_layer != nullptr) @@ -105,9 +107,6 @@ void LayerRegion::make_perimeters(const SurfaceCollection &slices, SurfaceCollec g.solid_infill_flow = this->flow(frSolidInfill); g.process(); - - // BBS - this->fill_no_overlap_expolygons = g.fill_no_overlap; } //#define EXTERNAL_SURFACES_OFFSET_PARAMETERS ClipperLib::jtMiter, 3. diff --git a/src/libslic3r/PerimeterGenerator.cpp b/src/libslic3r/PerimeterGenerator.cpp index 7649fea9ee1..c997ec713cd 100644 --- a/src/libslic3r/PerimeterGenerator.cpp +++ b/src/libslic3r/PerimeterGenerator.cpp @@ -763,7 +763,7 @@ void PerimeterGenerator::process() double(-inset - infill_peri_overlap)); if (!top_fills.empty()) polyWithoutOverlap = union_ex(polyWithoutOverlap, top_infill_exp); - this->fill_no_overlap.insert(this->fill_no_overlap.end(), polyWithoutOverlap.begin(), polyWithoutOverlap.end()); + this->fill_no_overlap->insert(this->fill_no_overlap->end(), polyWithoutOverlap.begin(), polyWithoutOverlap.end()); } } // for each island diff --git a/src/libslic3r/PerimeterGenerator.hpp b/src/libslic3r/PerimeterGenerator.hpp index 3b70bfd7768..2d64de497e9 100644 --- a/src/libslic3r/PerimeterGenerator.hpp +++ b/src/libslic3r/PerimeterGenerator.hpp @@ -29,13 +29,14 @@ class PerimeterGenerator { ExtrusionEntityCollection *loops; ExtrusionEntityCollection *gap_fill; SurfaceCollection *fill_surfaces; + //BBS + ExPolygons *fill_no_overlap; //BBS Flow smaller_ext_perimeter_flow; std::map m_lower_polygons_series; std::map m_external_lower_polygons_series; std::map m_smaller_external_lower_polygons_series; - ExPolygons fill_no_overlap; PerimeterGenerator( // Input: @@ -52,14 +53,16 @@ class PerimeterGenerator { // Gaps without the thin walls ExtrusionEntityCollection* gap_fill, // Infills without the gap fills - SurfaceCollection* fill_surfaces) + SurfaceCollection* fill_surfaces, + //BBS + ExPolygons* fill_no_overlap) : slices(slices), upper_slices(nullptr), lower_slices(nullptr), layer_height(layer_height), layer_id(-1), perimeter_flow(flow), ext_perimeter_flow(flow), overhang_flow(flow), solid_infill_flow(flow), config(config), object_config(object_config), print_config(print_config), m_spiral_vase(spiral_mode), m_scaled_resolution(scaled(print_config->resolution.value > EPSILON ? print_config->resolution.value : EPSILON)), - loops(loops), gap_fill(gap_fill), fill_surfaces(fill_surfaces), + loops(loops), gap_fill(gap_fill), fill_surfaces(fill_surfaces), fill_no_overlap(fill_no_overlap), m_ext_mm3_per_mm(-1), m_mm3_per_mm(-1), m_mm3_per_mm_overhang(-1), m_ext_mm3_per_mm_smaller_width(-1) {} From 014152f078e27cb5a4061e70b9a6189e8fdbedfc Mon Sep 17 00:00:00 2001 From: "salt.wei" Date: Thu, 15 Sep 2022 10:04:16 +0800 Subject: [PATCH 10/90] ENH: wrong == in brim code Typo, Should be fixed. Signed-off-by: salt.wei Change-Id: I576b15df9bc738ef2c4440356afc06c9132bd9eb --- src/libslic3r/Brim.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/libslic3r/Brim.cpp b/src/libslic3r/Brim.cpp index cd22476f3a6..5fe753dcdd0 100644 --- a/src/libslic3r/Brim.cpp +++ b/src/libslic3r/Brim.cpp @@ -337,7 +337,7 @@ static ExPolygons top_level_outer_brim_area(const Print& print, const ConstPrint no_brim_area_object.emplace_back(ex_poly.contour); } - brimToWrite.at(object->id()).obj == false; + brimToWrite.at(object->id()).obj = false; for (const PrintInstance& instance : object->instances()) { if (!brim_area_object.empty()) append_and_translate(brim_area, brim_area_object, instance, print, brimAreaMap); @@ -375,7 +375,7 @@ static ExPolygons top_level_outer_brim_area(const Print& print, const ConstPrint no_brim_area_support.emplace_back(ex_poly.contour); } } - brimToWrite.at(object->id()).sup == false; + brimToWrite.at(object->id()).sup = false; for (const PrintInstance& instance : object->instances()) { if (!brim_area_support.empty()) append_and_translate(brim_area, brim_area_support, instance, print, supportBrimAreaMap); @@ -521,7 +521,7 @@ static ExPolygons inner_brim_area(const Print& print, const ConstPrintObjectPtrs append(holes_object, ex_poly.holes); } append(no_brim_area_object, offset_ex(object->layers().front()->lslices, brim_offset)); - brimToWrite.at(object->id()).obj == false; + brimToWrite.at(object->id()).obj = false; for (const PrintInstance& instance : object->instances()) { if (!brim_area_object.empty()) append_and_translate(brim_area, brim_area_object, instance, print, innerBrimAreaMap); @@ -564,7 +564,7 @@ static ExPolygons inner_brim_area(const Print& print, const ConstPrintObjectPtrs } } } - brimToWrite.at(object->id()).sup == false; + brimToWrite.at(object->id()).sup = false; for (const PrintInstance& instance : object->instances()) { if (!brim_area_support.empty()) append_and_translate(brim_area, brim_area_support, instance, print, innerSupportBrimAreaMap); @@ -1386,7 +1386,7 @@ static void make_inner_island_brim(const Print& print, const ConstPrintObjectPtr for (const PrintInstance& instance : object->instances()) append_and_translate(islands_area_ex, islands_area_ex_object, instance); } - brimToWrite.at(object->id()).obj == false; + brimToWrite.at(object->id()).obj = false; } else { for (auto it = hole_island_pair.begin(); it != hole_island_pair.end(); it++) { @@ -1406,7 +1406,7 @@ static void make_inner_island_brim(const Print& print, const ConstPrintObjectPtr for (const PrintInstance& instance : object->instances()) append_and_translate(islands_area_ex, islands_area_ex_object, instance, print, innerbrimAreaMap); } - brimToWrite.at(object->id()).obj == false; + brimToWrite.at(object->id()).obj = false; } if (innerbrimAreaMap.find(object->id()) != innerbrimAreaMap.end()) expolygons_append(islands_area_ex, innerbrimAreaMap[object->id()]); @@ -1422,7 +1422,7 @@ static void make_inner_island_brim(const Print& print, const ConstPrintObjectPtr for (const PrintInstance& instance : object->instances()) append_and_translate(islands_area_ex, islands_area_ex_support, instance); } - brimToWrite.at(object->id()).sup == false; + brimToWrite.at(object->id()).sup = false; } else { for (auto it = hole_island_pair_supports.begin(); it != hole_island_pair_supports.end(); it++) { @@ -1443,7 +1443,7 @@ static void make_inner_island_brim(const Print& print, const ConstPrintObjectPtr append_and_translate(islands_area_ex, islands_area_ex_support, instance, print, innerSupportBrimAreaMap); } - brimToWrite.at(object->id()).sup == false; + brimToWrite.at(object->id()).sup = false; } if (innerSupportBrimAreaMap.find(object->id()) != innerSupportBrimAreaMap.end()) expolygons_append(islands_area_ex, innerSupportBrimAreaMap[object->id()]); From f5a4862da52fc68f77b5201ddf330a9800d83228 Mon Sep 17 00:00:00 2001 From: DeftDawg Date: Fri, 12 Aug 2022 23:57:54 -0400 Subject: [PATCH 11/90] Add Linux related build scripts including following changes: - Linux build scripts from SuperSlicer project; - Update BuildLinux dev dependencies, remove unused bits; - Update BuildLinuxImage to use nproc for cpus; - CMake: render BuildLinuxImage and build_appimage templates; - Fix "DSO missing" linking problems; - Add Podman Containerfile for building; - Update BuildLinux.sh to work better in container build; - fixes to create AppImage inside container; - add env to build environment; - Update build instructions in Containerfile; Change-Id: I73e30ab488cda8c1b0886cd34858e125596f282b (cherry picked from commit 83fc26670ca592c91c7af1d4033a04b587cfd4cd) --- BuildLinux.sh | 227 ++++++++++++++++++++++++ CMakeLists.txt | 5 + Containerfile | 44 +++++ src/CMakeLists.txt | 2 + src/platform/unix/BuildLinuxImage.sh.in | 57 ++++++ src/platform/unix/build_appimage.sh.in | 30 ++++ src/slic3r/CMakeLists.txt | 11 ++ 7 files changed, 376 insertions(+) create mode 100755 BuildLinux.sh create mode 100644 Containerfile create mode 100644 src/platform/unix/BuildLinuxImage.sh.in create mode 100644 src/platform/unix/build_appimage.sh.in diff --git a/BuildLinux.sh b/BuildLinux.sh new file mode 100755 index 00000000000..51f1d4c1198 --- /dev/null +++ b/BuildLinux.sh @@ -0,0 +1,227 @@ +#!/bin/bash +set -e # exit on first error + +export ROOT=`pwd` +export NCORES=`nproc --all` +FOUND_GTK2=$(dpkg -l libgtk* | grep gtk2) +FOUND_GTK3=$(dpkg -l libgtk* | grep gtk-3) + +unset name +while getopts ":dsiuhgb" opt; do + case ${opt} in + u ) + UPDATE_LIB="1" + ;; + i ) + BUILD_IMAGE="1" + ;; + d ) + BUILD_DEPS="1" + ;; + s ) + BUILD_BAMBU_STUDIO="1" + ;; + b ) + BUILD_DEBUG="1" + ;; + g ) + FOUND_GTK3="" + ;; + h ) echo "Usage: ./BuildLinux.sh [-i][-u][-d][-s][-b][-g]" + echo " -i: Generate appimage (optional)" + echo " -g: force gtk2 build" + echo " -b: build in debug mode" + echo " -d: build deps (optional)" + echo " -s: build bambu-studio (optional)" + echo " -u: only update clock & dependency packets (optional and need sudo)" + echo "For a first use, you want to 'sudo ./BuildLinux.sh -u'" + echo " and then './BuildLinux.sh -dsi'" + exit 0 + ;; + esac +done + +if [ $OPTIND -eq 1 ] +then + echo "Usage: ./BuildLinux.sh [-i][-u][-d][-s][-b][-g]" + echo " -i: Generate appimage (optional)" + echo " -g: force gtk2 build" + echo " -b: build in debug mode" + echo " -d: build deps (optional)" + echo " -s: build bambu-studio (optional)" + echo " -u: only update clock & dependency packets (optional and need sudo)" + echo "For a first use, you want to 'sudo ./BuildLinux.sh -u'" + echo " and then './BuildLinux.sh -dsi'" + exit 0 +fi + +# mkdir build +if [ ! -d "build" ] +then + mkdir build +fi + +# Addtional Dev packages for BambuStudio +export REQUIRED_DEV_PACKAGES="libmspack-dev libgstreamerd-3-dev libsecret-1-dev libwebkit2gtk-4.0-dev libosmesa6-dev libssl-dev libcurl4-openssl-dev eglexternalplatform-dev libudev-dev libdbus-1-dev" +# libwebkit2gtk-4.1-dev ?? +export DEV_PACKAGES_COUNT=$(echo ${REQUIRED_DEV_PACKAGES} | wc -w) +if [ $(dpkg --get-selections | grep -E "$(echo ${REQUIRED_DEV_PACKAGES} | tr ' ' '|')" | wc -l) -lt ${DEV_PACKAGES_COUNT} ]; then + sudo apt install -y ${REQUIRED_DEV_PACKAGES} git cmake wget file +fi + +#FIXME: require root for -u option +if [[ -n "$UPDATE_LIB" ]] +then + echo -n -e "Updating linux ...\n" + # hwclock -s # DeftDawg: Why does SuperSlicer want to do this? + apt update + if [[ -z "$FOUND_GTK3" ]] + then + echo -e "\nInstalling: libgtk2.0-dev libglew-dev libudev-dev libdbus-1-dev cmake git\n" + apt install -y libgtk2.0-dev libglew-dev libudev-dev libdbus-1-dev cmake git + else + echo -e "\nFind libgtk-3, installing: libgtk-3-dev libglew-dev libudev-dev libdbus-1-dev cmake git\n" + apt install -y libgtk-3-dev libglew-dev libudev-dev libdbus-1-dev cmake git + fi + # for ubuntu 22.04: + ubu_version="$(cat /etc/issue)" + if [[ $ubu_version == "Ubuntu 22.04"* ]] + then + apt install -y curl libssl-dev libcurl4-openssl-dev m4 + fi + if [[ -n "$BUILD_DEBUG" ]] + then + echo -e "\nInstalling: libssl-dev libcurl4-openssl-dev\n" + apt install -y libssl-dev libcurl4-openssl-dev + fi + echo -e "done\n" + exit 0 +fi + +FOUND_GTK2_DEV=$(dpkg -l libgtk* | grep gtk2.0-dev || echo '') +FOUND_GTK3_DEV=$(dpkg -l libgtk* | grep gtk-3-dev || echo '') +echo "FOUND_GTK2=$FOUND_GTK2)" +if [[ -z "$FOUND_GTK2_DEV" ]] +then +if [[ -z "$FOUND_GTK3_DEV" ]] +then + echo "Error, you must install the dependencies before." + echo "Use option -u with sudo" + exit 0 +fi +fi + +echo "[1/9] Updating submodules..." +{ + # update submodule profiles + pushd resources/profiles + git submodule update --init + popd +} + +echo "[2/9] Changing date in version..." +{ + # change date in version + sed -i "s/+UNKNOWN/_$(date '+%F')/" version.inc +} +echo "done" + +# mkdir in deps +if [ ! -d "deps/build" ] +then + mkdir deps/build +fi + +if [[ -n "$BUILD_DEPS" ]] +then + echo "[3/9] Configuring dependencies..." + BUILD_ARGS="" + if [[ -n "$FOUND_GTK3_DEV" ]] + then + BUILD_ARGS="-DDEP_WX_GTK3=ON" + fi + if [[ -n "$BUILD_DEBUG" ]] + then + # have to build deps with debug & release or the cmake won't find evrything it needs + mkdir deps/build/release + pushd deps/build/release + cmake ../.. -DDESTDIR="../destdir" $BUILD_ARGS + make -j$NCORES + popd + BUILD_ARGS="${BUILD_ARGS} -DCMAKE_BUILD_TYPE=Debug" + fi + + # cmake deps + pushd deps/build + cmake .. $BUILD_ARGS + echo "done" + + # make deps + echo "[4/9] Building dependencies..." + make -j$NCORES + echo "done" + + # rename wxscintilla # TODO: DeftDawg: Does BambuStudio need this? + # echo "[5/9] Renaming wxscintilla library..." + # pushd destdir/usr/local/lib + # if [[ -z "$FOUND_GTK3_DEV" ]] + # then + # cp libwxscintilla-3.1.a libwx_gtk2u_scintilla-3.1.a + # else + # cp libwxscintilla-3.1.a libwx_gtk3u_scintilla-3.1.a + # fi + # popd + # echo "done" + + # FIXME: only clean deps if compiling succeeds; otherwise reruns waste tonnes of time! + # clean deps + # echo "[6/9] Cleaning dependencies..." + # rm -rf dep_* + popd + echo "done" +fi + +if [[ -n "$BUILD_BAMBU_STUDIO" ]] +then + echo "[7/9] Configuring Slic3r..." + BUILD_ARGS="" + if [[ -n "$FOUND_GTK3_DEV" ]] + then + BUILD_ARGS="-DSLIC3R_GTK=3" + fi + if [[ -n "$BUILD_DEBUG" ]] + then + BUILD_ARGS="${BUILD_ARGS} -DCMAKE_BUILD_TYPE=Debug" + fi + + # cmake + pushd build + cmake .. -DCMAKE_PREFIX_PATH="$PWD/../deps/build/destdir/usr/local" -DSLIC3R_STATIC=1 ${BUILD_ARGS} + echo "done" + + # make Slic3r + echo "[8/9] Building Slic3r..." + make -j$NCORES BambuStudio # Slic3r + + # make .mo + # make gettext_po_to_mo # FIXME: DeftDawg: complains about msgfmt not existing even in SuperSlicer, did this ever work? + + popd + echo "done" +fi + +if [[ -e $ROOT/build/src/BuildLinuxImage.sh ]]; then +# Give proper permissions to script +chmod 755 $ROOT/build/src/BuildLinuxImage.sh + +echo "[9/9] Generating Linux app..." + pushd build + if [[ -n "$BUILD_IMAGE" ]] + then + $ROOT/build/src/BuildLinuxImage.sh -i + else + $ROOT/build/src/BuildLinuxImage.sh + fi + popd +echo "done" +fi diff --git a/CMakeLists.txt b/CMakeLists.txt index 4db9ea5514e..7d15c3e5c23 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -675,6 +675,11 @@ if(SLIC3R_BUILD_TESTS) add_subdirectory(tests) endif() +if (NOT WIN32 AND NOT APPLE) + set(SLIC3R_APP_CMD "bambu-studio") + configure_file(${LIBDIR}/platform/unix/build_appimage.sh.in ${CMAKE_CURRENT_BINARY_DIR}/build_appimage.sh @ONLY) +endif() + option(BUILD_BBS_TEST_TOOLS "Build bbs test tools" OFF) if(BUILD_BBS_TEST_TOOLS) add_subdirectory(bbs_test_tools) diff --git a/Containerfile b/Containerfile new file mode 100644 index 00000000000..4f68d4309aa --- /dev/null +++ b/Containerfile @@ -0,0 +1,44 @@ +# Build Bambu Slicer in a container +# +# Build an AppImage: +# rm -rf build; sudo podman build .. -t bambu-studio && sudo podman run --rm localhost/bambu-studio /bin/bash -c 'tar -c $(find build | grep ubu64.AppImage | head -1)' | tar -xv +# +# Troubleshooting: +# sudo podman run -it localhost/bambu-studio /bin/bash + +FROM docker.io/ubuntu:kinetic +LABEL maintainer "DeftDawg " + +# Add a deb-src +RUN echo deb-src http://archive.ubuntu.com/ubuntu \ + $(cat /etc/*release | grep VERSION_CODENAME | cut -d= -f2) main universe>> /etc/apt/sources.list + +RUN apt-get update && apt-get install -y \ + git \ + build-essential \ + autoconf \ + cmake \ + libglu1-mesa-dev \ + libgtk-3-dev \ + libdbus-1-dev \ + curl \ + wget \ + sudo + +COPY ../BambuStudio BambuStudio + +WORKDIR BambuStudio + +# These can run together, but we run them seperate for podman caching +# Update System dependencies +RUN ./BuildLinux.sh -u + +# Build dependencies in ./deps +RUN ./BuildLinux.sh -d + +# Build slic3r +RUN ./BuildLinux.sh -s + +# Build AppImage +ENV container podman +RUN ./BuildLinux.sh -i diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 2ff18959ca2..9c5cb96a973 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -118,6 +118,8 @@ endif (MINGW) if (NOT WIN32 AND NOT APPLE) # Binary name on unix like systems (Linux, Unix) set_target_properties(BambuStudio PROPERTIES OUTPUT_NAME "bambu-studio") + set(SLIC3R_APP_CMD "bambu-studio") + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/platform/unix/BuildLinuxImage.sh.in ${CMAKE_CURRENT_BINARY_DIR}/BuildLinuxImage.sh @ONLY) endif () target_link_libraries(BambuStudio libslic3r cereal) diff --git a/src/platform/unix/BuildLinuxImage.sh.in b/src/platform/unix/BuildLinuxImage.sh.in new file mode 100644 index 00000000000..c61ad3c56fc --- /dev/null +++ b/src/platform/unix/BuildLinuxImage.sh.in @@ -0,0 +1,57 @@ +#!/bin/bash + +export ROOT=$(echo $ROOT | grep . || pwd) +export NCORES=`nproc --all` + +while getopts ":ih" opt; do + case ${opt} in + i ) + export BUILD_IMAGE="1" + ;; + h ) echo "Usage: ./BuildLinuxImage.sh [-i]" + echo " -i: Generate Appimage (optional)" + exit 0 + ;; + esac +done + +echo -n "[9/9] Generating Linux app..." +#{ + # create directory and copy into it + if [ -d "package" ] + then + rm -rf package/* + rm -rf package/.* 2&>/dev/null + else + mkdir package + fi + mkdir package/bin + + # copy Resources + cp -Rf ../resources package/resources + cp -f src/@SLIC3R_APP_CMD@ package/bin/@SLIC3R_APP_CMD@ + # remove unneeded po from resources + ## find package/resources/localization -name "*.po" -type f -delete ## FIXME: DD - do we need this? + + # create bin + echo -e '#!/bin/bash\nDIR=$(readlink -f "$0" | xargs dirname)\nexport LD_LIBRARY_PATH="$DIR/bin"\nexec "$DIR/bin/@SLIC3R_APP_CMD@" "$@"' >@SLIC3R_APP_CMD@ + chmod ug+x @SLIC3R_APP_CMD@ + cp -f @SLIC3R_APP_CMD@ package/@SLIC3R_APP_CMD@ + pushd package + tar -cvf ../@SLIC3R_APP_KEY@.tar . &>/dev/null + popd +#} &> $ROOT/Build.log # Capture all command output +echo "done" + +if [[ -n "$BUILD_IMAGE" ]] +then +echo -n "Creating Appimage for distribution..." +#{ + pushd package + chmod +x ../build_appimage.sh + ../build_appimage.sh + popd + mv package/"@SLIC3R_APP_KEY@_ubu64.AppImage" "@SLIC3R_APP_KEY@_ubu64.AppImage" +#} &> $ROOT/Build.log # Capture all command output +echo "done" +fi diff --git a/src/platform/unix/build_appimage.sh.in b/src/platform/unix/build_appimage.sh.in new file mode 100644 index 00000000000..0e12d85f785 --- /dev/null +++ b/src/platform/unix/build_appimage.sh.in @@ -0,0 +1,30 @@ +#!/bin/sh +APPIMAGETOOLURL="https://github.com/AppImage/AppImageKit/releases/latest/download/appimagetool-x86_64.AppImage" + + +APP_IMAGE="@SLIC3R_APP_KEY@_ubu64.AppImage" + +wget ${APPIMAGETOOLURL} -O ../appimagetool.AppImage +chmod +x ../appimagetool.AppImage + +sed -i -e 's#/usr#././#g' bin/@SLIC3R_APP_CMD@ +mv @SLIC3R_APP_CMD@ AppRun +chmod +x AppRun + +cp resources/images/@SLIC3R_APP_KEY@_192px.png @SLIC3R_APP_KEY@.png +mkdir -p usr/share/icons/hicolor/192x192/apps +cp resources/images/@SLIC3R_APP_KEY@_192px.png usr/share/icons/hicolor/192x192/apps/@SLIC3R_APP_KEY@.png +cat < @SLIC3R_APP_KEY@.desktop +[Desktop Entry] +Name=@SLIC3R_APP_KEY@ +Exec=AppRun %F +Icon=@SLIC3R_APP_KEY@ +Type=Application +Categories=Utility; +MimeType=model/stl;application/vnd.ms-3mfdocument;application/prs.wavefront-obj;application/x-amf; +EOF + + +../appimagetool.AppImage . $([ ! -z "${container}" ] && echo '--appimage-extract-and-run') +mv @SLIC3R_APP_KEY@-x86_64.AppImage ${APP_IMAGE} +chmod +x ${APP_IMAGE} diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt index 208bcc96955..07be68a79c1 100644 --- a/src/slic3r/CMakeLists.txt +++ b/src/slic3r/CMakeLists.txt @@ -416,7 +416,18 @@ target_link_libraries(libslic3r_gui libslic3r cereal imgui minilzo GLEW::GLEW Op if (MSVC) target_link_libraries(libslic3r_gui Setupapi.lib) elseif (CMAKE_SYSTEM_NAME STREQUAL "Linux") + FIND_LIBRARY(WAYLAND_SERVER_LIBRARIES NAMES wayland-server) + FIND_LIBRARY(WAYLAND_EGL_LIBRARIES NAMES wayland-egl) + FIND_LIBRARY(WAYLAND_CLIENT_LIBRARIES NAMES wayland-client) + find_package(CURL REQUIRED) target_link_libraries(libslic3r_gui ${DBUS_LIBRARIES} OSMesa) + target_link_libraries(libslic3r_gui + OpenGL::EGL + ${WAYLAND_SERVER_LIBRARIES} + ${WAYLAND_EGL_LIBRARIES} + ${WAYLAND_CLIENT_LIBRARIES} + ${CURL_LIBRARIES} + ) elseif (APPLE) target_link_libraries(libslic3r_gui ${DISKARBITRATION_LIBRARY}) endif() From b71917b28c2f25f2e7fe69e3798d2372777aee9a Mon Sep 17 00:00:00 2001 From: "lane.wei" Date: Sat, 17 Sep 2022 08:57:01 +0800 Subject: [PATCH 12/90] add extra-cmake-modules required in buildlinux.sh for linux building patch picked from deftdawg, thanks deftdawg Change-Id: I0049131fccffb3e018834f9613b10c57dcfd13e5 --- BuildLinux.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BuildLinux.sh b/BuildLinux.sh index 51f1d4c1198..1df77f6c6f2 100755 --- a/BuildLinux.sh +++ b/BuildLinux.sh @@ -62,7 +62,7 @@ then fi # Addtional Dev packages for BambuStudio -export REQUIRED_DEV_PACKAGES="libmspack-dev libgstreamerd-3-dev libsecret-1-dev libwebkit2gtk-4.0-dev libosmesa6-dev libssl-dev libcurl4-openssl-dev eglexternalplatform-dev libudev-dev libdbus-1-dev" +export REQUIRED_DEV_PACKAGES="libmspack-dev libgstreamerd-3-dev libsecret-1-dev libwebkit2gtk-4.0-dev libosmesa6-dev libssl-dev libcurl4-openssl-dev eglexternalplatform-dev libudev-dev libdbus-1-dev extra-cmake-modules" # libwebkit2gtk-4.1-dev ?? export DEV_PACKAGES_COUNT=$(echo ${REQUIRED_DEV_PACKAGES} | wc -w) if [ $(dpkg --get-selections | grep -E "$(echo ${REQUIRED_DEV_PACKAGES} | tr ' ' '|')" | wc -l) -lt ${DEV_PACKAGES_COUNT} ]; then From 9edc90704a453beabadb660d6adbaf41369f0a23 Mon Sep 17 00:00:00 2001 From: Arthur Date: Fri, 9 Sep 2022 16:36:00 +0800 Subject: [PATCH 13/90] ENH: unify multi-object copy with single copy Also adapt empty cell stride with object size plus 1mm. Change-Id: I47ac98bede196d636ebb3da549c16e393756de0a --- src/slic3r/GUI/GLCanvas3D.cpp | 10 +++++----- src/slic3r/GUI/GLCanvas3D.hpp | 6 +++--- src/slic3r/GUI/Selection.cpp | 15 +++++++++------ 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 279a80ecee7..47101320257 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -4074,15 +4074,15 @@ double GLCanvas3D::get_size_proportional_to_max_bed_size(double factor) const } //BBS -std::vector GLCanvas3D::get_empty_cells(const Vec2f start_point) +std::vector GLCanvas3D::get_empty_cells(const Vec2f start_point, const Vec2f step) { PartPlate* plate = wxGetApp().plater()->get_partplate_list().get_curr_plate(); BoundingBoxf3 build_volume = plate->get_build_volume(); Vec2d vmin(build_volume.min.x(), build_volume.min.y()), vmax(build_volume.max.x(), build_volume.max.y()); BoundingBoxf bbox(vmin, vmax); std::vector cells; - for (float x = bbox.min.x(); x < bbox.max.x(); x+=10) - for (float y = bbox.min.y(); y < bbox.max.y(); y += 10) + for (float x = bbox.min.x(); x < bbox.max.x(); x += step(0)) + for (float y = bbox.min.y(); y < bbox.max.y(); y += step(1)) { cells.emplace_back(x, y); } @@ -4124,9 +4124,9 @@ std::vector GLCanvas3D::get_empty_cells(const Vec2f start_point) return cells; } -Vec2f GLCanvas3D::get_nearest_empty_cell(const Vec2f start_point) +Vec2f GLCanvas3D::get_nearest_empty_cell(const Vec2f start_point, const Vec2f step) { - std::vector empty_cells = get_empty_cells(start_point); + std::vector empty_cells = get_empty_cells(start_point, step); if (!empty_cells.empty()) return empty_cells.front(); else { diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp index a09f4333b67..186f96c22eb 100644 --- a/src/slic3r/GUI/GLCanvas3D.hpp +++ b/src/slic3r/GUI/GLCanvas3D.hpp @@ -831,11 +831,11 @@ class GLCanvas3D double get_size_proportional_to_max_bed_size(double factor) const; // BBS: get empty cells to put new object - // start_point={-1,-1} means sort from bed center - std::vector get_empty_cells(const Vec2f start_point); + // start_point={-1,-1} means sort from bed center, step is the unscaled x,y stride + std::vector get_empty_cells(const Vec2f start_point, const Vec2f step = {10, 10}); // BBS: get the nearest empty cell // start_point={-1,-1} means sort from bed center - Vec2f get_nearest_empty_cell(const Vec2f start_point); + Vec2f get_nearest_empty_cell(const Vec2f start_point, const Vec2f step = {10, 10}); void set_cursor(ECursorType type); void msw_rescale(); diff --git a/src/slic3r/GUI/Selection.cpp b/src/slic3r/GUI/Selection.cpp index 6f0ecd9b02b..c0abf6ba8c6 100644 --- a/src/slic3r/GUI/Selection.cpp +++ b/src/slic3r/GUI/Selection.cpp @@ -2619,6 +2619,7 @@ void Selection::paste_objects_from_clipboard() //BBS: if multiple objects are selected, move them as a whole after copy Vec2d shift_all = {0, 0}; + Vec2f empty_cell_all = {0, 0}; if (src_objects.size() > 1) { BoundingBoxf3 bbox_all; for (const ModelObject *src_object : src_objects) { @@ -2632,25 +2633,27 @@ void Selection::paste_objects_from_clipboard() shift_all = {0, bbox_all.size().y()}; } - for (const ModelObject* src_object : src_objects) + for (size_t i=0;iadd_object(*src_object); // BBS: find an empty cell to put the copied object BoundingBoxf3 bbox = src_object->instance_convex_hull_bounding_box(0); Vec3d displacement; + bool in_current = plate->intersects(bbox); + auto start_point = in_current ? bbox.center() : plate->get_build_volume().center(); if (shift_all(0) != 0 || shift_all(1) != 0) { // BBS: if multiple objects are selected, move them as a whole after copy - auto start_point = bbox.center(); - displacement = {shift_all.x() + start_point.x(), shift_all.y() + start_point.y(), start_point(2)}; + if (i == 0) empty_cell_all = wxGetApp().plater()->canvas3D()->get_nearest_empty_cell({start_point(0), start_point(1)}, {bbox.size()(0)+1,bbox.size()(1)+1}); + auto instance_shift = src_object->instances.front()->get_offset() - src_objects[0]->instances.front()->get_offset(); + displacement = {shift_all.x() + empty_cell_all.x()+instance_shift.x(), shift_all.y() + empty_cell_all.y()+instance_shift.y(), start_point(2)}; } else { // BBS: if only one object is copied, find an empty cell to put it - bool in_current = plate->intersects(bbox); - auto start_point = in_current ? bbox.center() : plate->get_build_volume().center(); auto start_offset = in_current ? src_object->instances.front()->get_offset() : plate->get_build_volume().center(); auto point_offset = start_offset - start_point; - auto empty_cell = wxGetApp().plater()->canvas3D()->get_nearest_empty_cell({start_point(0), start_point(1)}); + auto empty_cell = wxGetApp().plater()->canvas3D()->get_nearest_empty_cell({start_point(0), start_point(1)}, {bbox.size()(0)+1, bbox.size()(1)+1}); displacement = {empty_cell.x() + point_offset.x(), empty_cell.y() + point_offset.y(), start_point(2)}; } From 3e0f26c296327e0509c9438468366ffd32330339 Mon Sep 17 00:00:00 2001 From: "salt.wei" Date: Thu, 15 Sep 2022 16:38:19 +0800 Subject: [PATCH 14/90] ENH: remove old typo Delete some useless and wrong code Signed-off-by: salt.wei Change-Id: If103e5ced2c930340e6291a63e2226ecf577f19e --- src/libslic3r/PrintConfig.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 3958b36db84..d960fe8678d 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -3442,8 +3442,6 @@ void PrintConfigDef::handle_legacy(t_config_option_key &opt_key, std::string &va //But now these key-value must be absolute value. //Reset to default value by erasing these key to avoid parsing error. opt_key = ""; - } else if (opt_key == "filament_type" && value == "PA-CF") { - value == "PA"; } else if (opt_key == "inherits_cummulative") { opt_key = "inherits_group"; } else if (opt_key == "compatible_printers_condition_cummulative") { From 09e1c0a1af9fbb6f04c528b48044bbd4e3aeff6e Mon Sep 17 00:00:00 2001 From: Stone Li Date: Thu, 15 Sep 2022 10:59:13 +0800 Subject: [PATCH 15/90] FIX: do not display use_ams checkbox when no ams Change-Id: I5be4843b22e019111264922f1721787e2dd5111b Signed-off-by: Stone Li --- src/slic3r/GUI/SelectMachine.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index 9419be5e7b6..1876844846e 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -1927,7 +1927,7 @@ void SelectMachineDialog::on_selection_changed(wxCommandEvent &event) void SelectMachineDialog::update_ams_check(MachineObject* obj) { - if (obj && obj->ams_support_use_ams) { + if (obj && obj->ams_support_use_ams && obj->has_ams()) { select_use_ams->Show(); } else { select_use_ams->Hide(); From 62da568e0bb0e6e7d01ccc8685186f61b9a6496c Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Wed, 14 Sep 2022 19:13:27 +0800 Subject: [PATCH 16/90] FIX: check int value invalid in Choise Field Change-Id: I75cbe55b36dd75480903b6991f234c02ad8de5cc --- src/slic3r/GUI/Field.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/slic3r/GUI/Field.cpp b/src/slic3r/GUI/Field.cpp index 90d97ee43f8..968d43e9e7a 100644 --- a/src/slic3r/GUI/Field.cpp +++ b/src/slic3r/GUI/Field.cpp @@ -224,9 +224,19 @@ static wxString na_value() { return _(L("N/A")); } void Field::get_value_by_opt_type(wxString& str, const bool check_value/* = true*/) { switch (m_opt.type) { - case coInt: - m_value = wxAtoi(str); - break; + case coInt: { + long val = 0; + if (!str.ToLong(&val)) { + if (!check_value) { + m_value.clear(); + break; + } + show_error(m_parent, _(L("Invalid numeric."))); + set_value(int(val), true); + } + m_value = int(val); + break; + } case coPercent: case coPercents: case coFloats: From 31ba41ec3e452f7fe34a6ce598507d4cd6686562 Mon Sep 17 00:00:00 2001 From: "tao.jin" Date: Thu, 8 Sep 2022 18:55:26 +0800 Subject: [PATCH 17/90] NEW: move selected model to the center of selected plate Change-Id: I7af49e98e83f5eef690f7d30d10a2cc240046466 --- src/slic3r/GUI/GLCanvas3D.cpp | 8 ++++++ src/slic3r/GUI/GLCanvas3D.hpp | 1 + src/slic3r/GUI/GUI_Factories.cpp | 24 ++++++++++++++++ src/slic3r/GUI/GUI_Factories.hpp | 1 + src/slic3r/GUI/GUI_Preview.cpp | 6 ++++ src/slic3r/GUI/GUI_Preview.hpp | 1 + src/slic3r/GUI/PartPlate.cpp | 2 +- src/slic3r/GUI/Plater.cpp | 7 +++++ src/slic3r/GUI/Plater.hpp | 1 + src/slic3r/GUI/Selection.cpp | 47 ++++++++++++++++++++++++++++++++ src/slic3r/GUI/Selection.hpp | 2 ++ 11 files changed, 99 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 47101320257..c948b351df6 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -3889,6 +3889,14 @@ void GLCanvas3D::do_flatten(const Vec3d& normal, const std::string& snapshot_typ do_rotate(""); // avoid taking another snapshot } +void GLCanvas3D::do_center() +{ + if (m_model == nullptr) + return; + + m_selection.center(); +} + void GLCanvas3D::do_mirror(const std::string& snapshot_type) { if (m_model == nullptr) diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp index 186f96c22eb..9dddcec17e6 100644 --- a/src/slic3r/GUI/GLCanvas3D.hpp +++ b/src/slic3r/GUI/GLCanvas3D.hpp @@ -784,6 +784,7 @@ class GLCanvas3D void do_rotate(const std::string& snapshot_type); void do_scale(const std::string& snapshot_type); void do_flatten(const Vec3d& normal, const std::string& snapshot_type); + void do_center(); void do_mirror(const std::string& snapshot_type); void update_gizmos_on_off_state(); diff --git a/src/slic3r/GUI/GUI_Factories.cpp b/src/slic3r/GUI/GUI_Factories.cpp index a8cd41fa934..11e434cf3ed 100644 --- a/src/slic3r/GUI/GUI_Factories.cpp +++ b/src/slic3r/GUI/GUI_Factories.cpp @@ -892,6 +892,8 @@ void MenuFactory::create_bbl_object_menu() append_menu_item_fix_through_netfabb(&m_object_menu); // Object Simplify append_menu_item_simplify(&m_object_menu); + // Object Center + append_menu_item_center(&m_object_menu); // Object Split wxMenu* split_menu = new wxMenu(); if (!split_menu) @@ -983,6 +985,7 @@ void MenuFactory::create_bbl_part_menu() append_menu_item_delete(menu); append_menu_item_fix_through_netfabb(menu); append_menu_item_simplify(menu); + append_menu_item_center(menu); append_menu_items_mirror(menu); wxMenu* split_menu = new wxMenu(); if (!split_menu) @@ -1182,6 +1185,7 @@ wxMenu* MenuFactory::multi_selection_menu() append_menu_item_merge_to_multipart_object(menu); index++; } + append_menu_item_center(menu); append_menu_item_fix_through_netfabb(menu); //append_menu_item_simplify(menu); append_menu_item_delete(menu); @@ -1196,6 +1200,7 @@ wxMenu* MenuFactory::multi_selection_menu() append_menu_item_export_stl(menu, true); } else { + append_menu_item_center(menu); append_menu_item_fix_through_netfabb(menu); //append_menu_item_simplify(menu); append_menu_item_delete(menu); @@ -1279,6 +1284,25 @@ void MenuFactory::append_menu_item_simplify(wxMenu* menu) []() {return plater()->can_simplify(); }, m_parent); } +void MenuFactory::append_menu_item_center(wxMenu* menu) +{ + append_menu_item(menu, wxID_ANY, _L("Center") , "", + [this](wxCommandEvent&) { + plater()->center_selection(); + }, "", nullptr, + []() { + if (plater()->canvas3D()->get_canvas_type() != GLCanvas3D::ECanvasType::CanvasView3D) + return false; + else { + Selection& selection = plater()->get_view3D_canvas3D()->get_selection(); + PartPlate* plate = plater()->get_partplate_list().get_selected_plate(); + Vec3d model_pos = selection.get_bounding_box().center(); + Vec3d center_pos = plate->get_center_origin(); + return !( (model_pos.x() == center_pos.x()) && (model_pos.y() == center_pos.y()) ); + } //disable if model is at center / not in View3D + }, m_parent); +} + void MenuFactory::append_menu_item_per_object_settings(wxMenu* menu) { const std::vector names = { _L("Edit in Parameter Table"), _L("Edit print parameters for a single object") }; diff --git a/src/slic3r/GUI/GUI_Factories.hpp b/src/slic3r/GUI/GUI_Factories.hpp index 6d4484e75eb..1200729dd91 100644 --- a/src/slic3r/GUI/GUI_Factories.hpp +++ b/src/slic3r/GUI/GUI_Factories.hpp @@ -138,6 +138,7 @@ class MenuFactory //BBS add bbl menu item void append_menu_item_clone(wxMenu* menu); void append_menu_item_simplify(wxMenu* menu); + void append_menu_item_center(wxMenu* menu); void append_menu_item_per_object_settings(wxMenu* menu); void append_menu_item_change_filament(wxMenu* menu); void append_menu_item_set_printable(wxMenu* menu); diff --git a/src/slic3r/GUI/GUI_Preview.cpp b/src/slic3r/GUI/GUI_Preview.cpp index c0dae74de62..26b9f5104c3 100644 --- a/src/slic3r/GUI/GUI_Preview.cpp +++ b/src/slic3r/GUI/GUI_Preview.cpp @@ -148,6 +148,12 @@ void View3D::delete_selected() m_canvas->delete_selected(); } +void View3D::center_selected() +{ + if (m_canvas != nullptr) + m_canvas->do_center(); +} + void View3D::mirror_selection(Axis axis) { if (m_canvas != nullptr) diff --git a/src/slic3r/GUI/GUI_Preview.hpp b/src/slic3r/GUI/GUI_Preview.hpp index 8bd26bdc507..a61faf157f6 100644 --- a/src/slic3r/GUI/GUI_Preview.hpp +++ b/src/slic3r/GUI/GUI_Preview.hpp @@ -63,6 +63,7 @@ class View3D : public wxPanel void select_all(); void deselect_all(); void delete_selected(); + void center_selected(); void mirror_selection(Axis axis); bool is_dragging() const; diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index 4f3fc0ce074..bfd1b11a55d 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -1250,7 +1250,7 @@ Vec3d PartPlate::get_center_origin() Vec3d origin; origin(0) = (m_bounding_box.min(0) + m_bounding_box.max(0)) / 2;//m_origin.x() + m_width / 2; - origin(1) = (m_bounding_box.min(0) + m_bounding_box.max(0)) / 2; //m_origin.y() + m_depth / 2; + origin(1) = (m_bounding_box.min(1) + m_bounding_box.max(1)) / 2; //m_origin.y() + m_depth / 2; origin(2) = m_origin.z(); return origin; diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 19d4270a55c..fe0938ad849 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -1676,6 +1676,7 @@ struct Plater::priv void delete_object_from_model(size_t obj_idx, bool refresh_immediately = true); //BBS void delete_all_objects_from_model(); void reset(bool apply_presets_change = false); + void center_selection(); void mirror(Axis axis); void split_object(); void split_volume(); @@ -3696,6 +3697,11 @@ void Plater::priv::reset(bool apply_presets_change) m_saved_timestamp = m_backup_timestamp = size_t(-1); } +void Plater::priv::center_selection() +{ + view3D->center_selected(); +} + void Plater::priv::mirror(Axis axis) { view3D->mirror_selection(axis); @@ -9456,6 +9462,7 @@ void Plater::suppress_background_process(const bool stop_background_process) this->p->suppressed_backround_processing_update = true; } +void Plater::center_selection() { p->center_selection(); } void Plater::mirror(Axis axis) { p->mirror(axis); } void Plater::split_object() { p->split_object(); } void Plater::split_volume() { p->split_volume(); } diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index 724520787c0..2d24bae3a90 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -411,6 +411,7 @@ class Plater: public wxPanel void paste_from_clipboard(); //BBS: add clone logic void clone_selection(); + void center_selection(); void search(bool plater_is_active, Preset::Type type, wxWindow *tag, wxTextCtrl *etag, wxWindow *stag); void mirror(Axis axis); void split_object(); diff --git a/src/slic3r/GUI/Selection.cpp b/src/slic3r/GUI/Selection.cpp index c0abf6ba8c6..b949bfd0250 100644 --- a/src/slic3r/GUI/Selection.cpp +++ b/src/slic3r/GUI/Selection.cpp @@ -450,6 +450,20 @@ void Selection::clone(int numbers) } } +void Selection::center() +{ + PartPlate* plate = wxGetApp().plater()->get_partplate_list().get_selected_plate(); + + // calc distance + Vec3d src_pos = this->get_bounding_box().center(); + Vec3d tar_pos = plate->get_center_origin(); + Vec3d distance = Vec3d(tar_pos.x() - src_pos.x(), tar_pos.y() - src_pos.y(), 0); + + this->move_to_center(distance); + wxGetApp().plater()->get_view3D_canvas3D()->do_move(L("Move Object")); + return; +} + //BBS void Selection::set_printable(bool printable) { @@ -806,6 +820,39 @@ void Selection::start_dragging() set_caches(); } +void Selection::move_to_center(const Vec3d& displacement, bool local) +{ + if (!m_valid) + return; + + EMode translation_type = m_mode; + //BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": %1%, displacement {%2%, %3%, %4%}") % __LINE__ % displacement(X) % displacement(Y) % displacement(Z); + + set_caches(); + for (unsigned int i : m_list) { + GLVolume& v = *(*m_volumes)[i]; + if (m_mode == Volume) { + if (local) + v.set_volume_offset(m_cache.volumes_data[i].get_volume_position() + displacement); + else { + const Vec3d local_displacement = (m_cache.volumes_data[i].get_instance_rotation_matrix() * m_cache.volumes_data[i].get_instance_scale_matrix() * m_cache.volumes_data[i].get_instance_mirror_matrix()).inverse() * displacement; + v.set_volume_offset(m_cache.volumes_data[i].get_volume_position() + local_displacement); + } + } + else if (m_mode == Instance) { + if (is_from_fully_selected_instance(i)) { + v.set_instance_offset(m_cache.volumes_data[i].get_instance_position() + displacement); + } + else { + const Vec3d local_displacement = (m_cache.volumes_data[i].get_instance_rotation_matrix() * m_cache.volumes_data[i].get_instance_scale_matrix() * m_cache.volumes_data[i].get_instance_mirror_matrix()).inverse() * displacement; + v.set_volume_offset(m_cache.volumes_data[i].get_volume_position() + local_displacement); + translation_type = Volume; + } + } + } + this->set_bounding_boxes_dirty(); +} + void Selection::translate(const Vec3d& displacement, bool local) { if (!m_valid) diff --git a/src/slic3r/GUI/Selection.hpp b/src/slic3r/GUI/Selection.hpp index 96a98e5ab5b..5c1669b1b9b 100644 --- a/src/slic3r/GUI/Selection.hpp +++ b/src/slic3r/GUI/Selection.hpp @@ -262,6 +262,7 @@ class Selection void add_curr_plate(); void remove_curr_plate(); void clone(int numbers = 1); + void center(); void set_printable(bool printable); void add_all(); @@ -330,6 +331,7 @@ class Selection bool is_dragging() const { return m_dragging; } void translate(const Vec3d& displacement, bool local = false); + void move_to_center(const Vec3d& displacement, bool local = false); void rotate(const Vec3d& rotation, TransformationType transformation_type); void flattening_rotate(const Vec3d& normal); void scale(const Vec3d& scale, TransformationType transformation_type); From df321f8cd9a6c5cbd00339fb3c8dbdfbf5a27367 Mon Sep 17 00:00:00 2001 From: "liz.li" Date: Wed, 7 Sep 2022 17:57:38 +0800 Subject: [PATCH 18/90] NEW:show speed and flow in gcodeviewer Change-Id: I107f8be06820bc7859aee5654f264397331726b6 --- src/slic3r/GUI/GCodeViewer.cpp | 49 ++++++++++++++++++++++++++-------- src/slic3r/GUI/GCodeViewer.hpp | 5 ++-- 2 files changed, 41 insertions(+), 13 deletions(-) diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index 24a2ffe4f0a..7be8eb46637 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -302,7 +302,7 @@ void GCodeViewer::SequentialView::Marker::set_world_position(const Vec3f& positi } //BBS: GUI refactor: add canvas size from parameters -void GCodeViewer::SequentialView::Marker::render(int canvas_width, int canvas_height) const +void GCodeViewer::SequentialView::Marker::render(int canvas_width, int canvas_height, const EViewType& view_type, const std::vector& moves, uint64_t curr_line_id) const { if (!m_visible) return; @@ -331,7 +331,7 @@ void GCodeViewer::SequentialView::Marker::render(int canvas_width, int canvas_he static float last_window_width = 0.0f; static size_t last_text_length = 0; - if (wxGetApp().get_mode() == ConfigOptionMode::comDevelop) { + //if (wxGetApp().get_mode() == ConfigOptionMode::comDevelop) { ImGuiWrapper& imgui = *wxGetApp().imgui(); //BBS: GUI refactor: add canvas size from parameters //Size cnv_size = wxGetApp().plater()->get_current_canvas3D()->get_canvas_size(); @@ -339,9 +339,9 @@ void GCodeViewer::SequentialView::Marker::render(int canvas_width, int canvas_he imgui.set_next_window_pos(0.5f * static_cast(canvas_width), static_cast(canvas_height), ImGuiCond_Always, 0.5f, 1.0f); ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f); ImGui::SetNextWindowBgAlpha(0.25f); - imgui.begin(std::string("ExtruderPosition"), ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoMove); - imgui.text_colored(ImGuiWrapper::COL_ORANGE_LIGHT, _u8L("Extruder position") + ":"); - ImGui::SameLine(); + imgui.begin(std::string("ExtruderPosition"), ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoTitleBar); + //imgui.text_colored(ImGuiWrapper::COL_ORANGE_LIGHT, _u8L("Extruder position") + ":"); + //ImGui::SameLine(); char buf[1024]; //BBS: minus the plate offset when show tool position PartPlateList& partplate_list = wxGetApp().plater()->get_partplate_list(); @@ -349,7 +349,35 @@ void GCodeViewer::SequentialView::Marker::render(int canvas_width, int canvas_he const Vec3f position = m_world_position + m_world_offset; sprintf(buf, "X: %.3f, Y: %.3f, Z: %.3f", position.x() - plate->get_origin().x(), position.y() - plate->get_origin().y(), position.z()); imgui.text(std::string(buf)); - + //gcode_result.moves[i]; + if (view_type == EViewType::Feedrate) { + auto it = std::find_if(moves.begin(), moves.end(), [&curr_line_id](auto move) { + if (move.gcode_id == curr_line_id) + return true; + else + return false; + }); + if (it != moves.end()) { + sprintf(buf, _u8L("Speed: %.f").c_str(), it->feedrate); + ImGui::NewLine(); + ImGui::SameLine((ImGui::GetWindowWidth() - ImGui::CalcTextSize(buf).x) / 2); + imgui.text(buf); + } + } + if (view_type == EViewType::VolumetricRate) { + auto it = std::find_if(moves.begin(), moves.end(), [&curr_line_id](auto move) { + if (move.gcode_id == curr_line_id) + return true; + else + return false; + }); + if (it != moves.end()) { + sprintf(buf, _u8L("Flow: %.f").c_str(), it->volumetric_rate()); + ImGui::NewLine(); + ImGui::SameLine((ImGui::GetWindowWidth() - ImGui::CalcTextSize(buf).x) / 2); + imgui.text(buf); + } + } // force extra frame to automatically update window size float width = ImGui::GetWindowWidth(); size_t length = strlen(buf); @@ -366,7 +394,7 @@ void GCodeViewer::SequentialView::Marker::render(int canvas_width, int canvas_he imgui.end(); ImGui::PopStyleVar(); - } + //} } void GCodeViewer::SequentialView::GCodeWindow::load_gcode(const std::string& filename, std::vector &&lines_ends) @@ -561,11 +589,10 @@ void GCodeViewer::SequentialView::GCodeWindow::stop_mapping_file() BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": finished mapping file " << m_filename; } } - //BBS: GUI refactor: move to the right -void GCodeViewer::SequentialView::render(float legend_height, int canvas_width, int canvas_height) const +void GCodeViewer::SequentialView::render(float legend_height, int canvas_width, int canvas_height, const EViewType& view_type, const std::vector& moves) const { - marker.render(canvas_width, canvas_height); + marker.render(canvas_width, canvas_height, view_type, moves, static_cast(gcode_ids[current.last])); //float bottom = wxGetApp().plater()->get_current_canvas3D()->get_canvas_size().get_height(); // BBS #if 0 @@ -1125,7 +1152,7 @@ void GCodeViewer::render(int canvas_width, int canvas_height, int right_margin) m_sequential_view.marker.set_world_position(m_sequential_view.current_position); m_sequential_view.marker.set_world_offset(m_sequential_view.current_offset); //BBS fixed buttom margin. m_moves_slider.pos_y - m_sequential_view.render(legend_height, canvas_width - right_margin, canvas_height - bottom_margin); + m_sequential_view.render(legend_height, canvas_width - right_margin, canvas_height - bottom_margin, m_view_type, m_gcode_result->moves); //} #if ENABLE_GCODE_VIEWER_STATISTICS render_statistics(); diff --git a/src/slic3r/GUI/GCodeViewer.hpp b/src/slic3r/GUI/GCodeViewer.hpp index 2d07b6b06a1..46d2c895170 100644 --- a/src/slic3r/GUI/GCodeViewer.hpp +++ b/src/slic3r/GUI/GCodeViewer.hpp @@ -600,6 +600,7 @@ class GCodeViewer #endif // ENABLE_GCODE_VIEWER_STATISTICS public: + enum class EViewType : unsigned char; struct SequentialView { class Marker @@ -626,7 +627,7 @@ class GCodeViewer void set_visible(bool visible) { m_visible = visible; } //BBS: GUI refactor: add canvas size - void render(int canvas_width, int canvas_height) const; + void render(int canvas_width, int canvas_height, const EViewType& view_type, const std::vector& moves, uint64_t curr_line_id) const; }; class GCodeWindow @@ -685,7 +686,7 @@ class GCodeViewer std::vector gcode_ids; //BBS: GUI refactor: add canvas size - void render(float legend_height, int canvas_width, int canvas_height) const; + void render(float legend_height, int canvas_width, int canvas_height, const EViewType& view_type, const std::vector& moves) const; }; struct ETools From db9ade22579ece1e2b4529758f66eb7de986b01a Mon Sep 17 00:00:00 2001 From: "salt.wei" Date: Fri, 16 Sep 2022 21:40:41 +0800 Subject: [PATCH 19/90] ENH: enable arachne for concentric pattern Enable arachne for concentric pattern by referring to PrusaSlicer Also remove useless pattern we added. Signed-off-by: salt.wei Change-Id: Ie2574f7fc4751ebdf1caab4de52013f3101e104f --- src/libslic3r/CMakeLists.txt | 2 - src/libslic3r/Fill/Fill.cpp | 7 + src/libslic3r/Fill/FillBase.cpp | 37 +++-- src/libslic3r/Fill/FillBase.hpp | 11 ++ src/libslic3r/Fill/FillConcentric.cpp | 82 +++++++++++ src/libslic3r/Fill/FillConcentric.hpp | 11 ++ src/libslic3r/Fill/FillConcentricWGapFill.cpp | 135 ------------------ src/libslic3r/Fill/FillConcentricWGapFill.hpp | 21 --- src/libslic3r/Polyline.hpp | 12 ++ src/libslic3r/PrintConfig.hpp | 2 +- 10 files changed, 153 insertions(+), 167 deletions(-) delete mode 100644 src/libslic3r/Fill/FillConcentricWGapFill.cpp delete mode 100644 src/libslic3r/Fill/FillConcentricWGapFill.hpp diff --git a/src/libslic3r/CMakeLists.txt b/src/libslic3r/CMakeLists.txt index dbb79a1d865..6203a0725b9 100644 --- a/src/libslic3r/CMakeLists.txt +++ b/src/libslic3r/CMakeLists.txt @@ -67,8 +67,6 @@ set(lisbslic3r_sources Fill/FillBase.hpp Fill/FillConcentric.cpp Fill/FillConcentric.hpp - Fill/FillConcentricWGapFill.cpp - Fill/FillConcentricWGapFill.hpp Fill/FillConcentricInternal.cpp Fill/FillConcentricInternal.hpp Fill/FillHoneycomb.cpp diff --git a/src/libslic3r/Fill/Fill.cpp b/src/libslic3r/Fill/Fill.cpp index 7aae8da1526..3d2be9cf395 100644 --- a/src/libslic3r/Fill/Fill.cpp +++ b/src/libslic3r/Fill/Fill.cpp @@ -12,6 +12,7 @@ #include "FillBase.hpp" #include "FillRectilinear.hpp" #include "FillConcentricInternal.hpp" +#include "FillConcentric.hpp" #define NARROW_INFILL_AREA_THRESHOLD 3 @@ -407,6 +408,11 @@ void Layer::make_fills(FillAdaptive::Octree* adaptive_fill_octree, FillAdaptive: assert(fill_concentric != nullptr); fill_concentric->print_config = &this->object()->print()->config(); fill_concentric->print_object_config = &this->object()->config(); + } else if (surface_fill.params.pattern == ipConcentric) { + FillConcentric *fill_concentric = dynamic_cast(f.get()); + assert(fill_concentric != nullptr); + fill_concentric->print_config = &this->object()->print()->config(); + fill_concentric->print_object_config = &this->object()->config(); } // calculate flow spacing for infill pattern generation @@ -434,6 +440,7 @@ void Layer::make_fills(FillAdaptive::Octree* adaptive_fill_octree, FillAdaptive: params.anchor_length = surface_fill.params.anchor_length; params.anchor_length_max = surface_fill.params.anchor_length_max; params.resolution = resolution; + params.use_arachne = surface_fill.params.pattern == ipConcentric; // BBS params.flow = surface_fill.params.flow; diff --git a/src/libslic3r/Fill/FillBase.cpp b/src/libslic3r/Fill/FillBase.cpp index 74ffdc372b7..ae4811ca87f 100644 --- a/src/libslic3r/Fill/FillBase.cpp +++ b/src/libslic3r/Fill/FillBase.cpp @@ -9,6 +9,7 @@ #include "../PrintConfig.hpp" #include "../Surface.hpp" #include "../libslic3r.h" +#include "../VariableWidth.hpp" #include "FillBase.hpp" #include "FillConcentric.hpp" @@ -21,7 +22,6 @@ #include "FillAdaptive.hpp" #include "FillLightning.hpp" // BBS: new infill pattern header -#include "FillConcentricWGapFill.hpp" #include "FillConcentricInternal.hpp" // #define INFILL_DEBUG_OUTPUT @@ -58,7 +58,6 @@ Fill* Fill::new_from_type(const InfillPattern type) case ipLightning: return new FillLightning::Filler(); #endif // HAS_LIGHTNING_INFILL // BBS: for internal solid infill only - case ipConcentricGapFill: return new FillConcentricWGapFill(); case ipConcentricInternal: return new FillConcentricInternal(); // BBS: for bottom and top surface only case ipMonotonicLine: return new FillMonotonicLineWGapFill(); @@ -107,16 +106,31 @@ Polylines Fill::fill_surface(const Surface *surface, const FillParams ¶ms) return polylines_out; } +ThickPolylines Fill::fill_surface_arachne(const Surface* surface, const FillParams& params) +{ + // Perform offset. + Slic3r::ExPolygons expp = offset_ex(surface->expolygon, float(scale_(this->overlap - 0.5 * this->spacing))); + // Create the infills for each of the regions. + ThickPolylines thick_polylines_out; + for (ExPolygon& expoly : expp) + _fill_surface_single(params, surface->thickness_layers, _infill_direction(surface), std::move(expoly), thick_polylines_out); + return thick_polylines_out; +} + // BBS: this method is used to fill the ExtrusionEntityCollection. It call fill_surface by default void Fill::fill_surface_extrusion(const Surface* surface, const FillParams& params, ExtrusionEntitiesPtr& out) { Polylines polylines; + ThickPolylines thick_polylines; try { - polylines = this->fill_surface(surface, params); + if (params.use_arachne) + thick_polylines = this->fill_surface_arachne(surface, params); + else + polylines = this->fill_surface(surface, params); } catch (InfillFailedException&) {} - if (!polylines.empty()) { + if (!polylines.empty() || !thick_polylines.empty()) { // calculate actual flow from spacing (which might have been adjusted by the infill // pattern generator) double flow_mm3_per_mm = params.flow.mm3_per_mm(); @@ -136,10 +150,17 @@ void Fill::fill_surface_extrusion(const Surface* surface, const FillParams& para out.push_back(eec = new ExtrusionEntityCollection()); // Only concentric fills are not sorted. eec->no_sort = this->no_sort(); - extrusion_entities_append_paths( - eec->entities, std::move(polylines), - params.extrusion_role, - flow_mm3_per_mm, float(flow_width), params.flow.height()); + if (params.use_arachne) { + Flow new_flow = params.flow.with_spacing(float(this->spacing)); + variable_width(thick_polylines, params.extrusion_role, new_flow, eec->entities); + thick_polylines.clear(); + } + else { + extrusion_entities_append_paths( + eec->entities, std::move(polylines), + params.extrusion_role, + flow_mm3_per_mm, float(flow_width), params.flow.height()); + } } } diff --git a/src/libslic3r/Fill/FillBase.hpp b/src/libslic3r/Fill/FillBase.hpp index fb444494a82..74a3f630e16 100644 --- a/src/libslic3r/Fill/FillBase.hpp +++ b/src/libslic3r/Fill/FillBase.hpp @@ -63,6 +63,9 @@ struct FillParams // in this case we don't try to make more continuous paths bool complete { false }; + // For Concentric infill, to switch between Classic and Arachne. + bool use_arachne{ false }; + // BBS Flow flow; ExtrusionRole extrusion_role{ ExtrusionRole(0) }; @@ -121,6 +124,7 @@ class Fill // Perform the fill. virtual Polylines fill_surface(const Surface *surface, const FillParams ¶ms); + virtual ThickPolylines fill_surface_arachne(const Surface* surface, const FillParams& params); // BBS: this method is used to fill the ExtrusionEntityCollection. // It call fill_surface by default @@ -149,6 +153,13 @@ class Fill ExPolygon /* expolygon */, Polylines & /* polylines_out */) {}; + // Used for concentric infill to generate ThickPolylines using Arachne. + virtual void _fill_surface_single(const FillParams& params, + unsigned int thickness_layers, + const std::pair& direction, + ExPolygon expolygon, + ThickPolylines& thick_polylines_out) {} + virtual float _layer_angle(size_t idx) const { return (idx & 1) ? float(M_PI/2.) : 0; } virtual std::pair _infill_direction(const Surface *surface) const; diff --git a/src/libslic3r/Fill/FillConcentric.cpp b/src/libslic3r/Fill/FillConcentric.cpp index d5997552b97..fe9b79e09ba 100644 --- a/src/libslic3r/Fill/FillConcentric.cpp +++ b/src/libslic3r/Fill/FillConcentric.cpp @@ -1,6 +1,8 @@ #include "../ClipperUtils.hpp" #include "../ExPolygon.hpp" #include "../Surface.hpp" +#include "../VariableWidth.hpp" +#include "Arachne/WallToolPaths.hpp" #include "FillConcentric.hpp" @@ -61,4 +63,84 @@ void FillConcentric::_fill_surface_single( // We want the loops to be split inside the G-code generator to get optimum path planning. } +void FillConcentric::_fill_surface_single(const FillParams& params, + unsigned int thickness_layers, + const std::pair& direction, + ExPolygon expolygon, + ThickPolylines& thick_polylines_out) +{ + assert(params.use_arachne); + assert(this->print_config != nullptr && this->print_object_config != nullptr); + + // no rotation is supported for this infill pattern + Point bbox_size = expolygon.contour.bounding_box().size(); + coord_t min_spacing = scaled(this->spacing); + + if (params.density > 0.9999f && !params.dont_adjust) { + coord_t loops_count = std::max(bbox_size.x(), bbox_size.y()) / min_spacing + 1; + Polygons polygons = offset(expolygon, float(min_spacing) / 2.f); + + double min_nozzle_diameter = *std::min_element(print_config->nozzle_diameter.values.begin(), print_config->nozzle_diameter.values.end()); + Arachne::WallToolPathsParams input_params; + input_params.min_bead_width = 0.85 * min_nozzle_diameter; + input_params.min_feature_size = 0.1; + input_params.wall_transition_length = 1.0 * min_nozzle_diameter; + input_params.wall_transition_angle = 10; + input_params.wall_transition_filter_deviation = 0.25 * min_nozzle_diameter; + input_params.wall_distribution_count = 1; + input_params.wall_add_middle_threshold = 0.75; + input_params.wall_split_middle_threshold = 0.5; + + Arachne::WallToolPaths wallToolPaths(polygons, min_spacing, min_spacing, loops_count, 0, input_params); + + std::vector loops = wallToolPaths.getToolPaths(); + std::vector all_extrusions; + for (Arachne::VariableWidthLines& loop : loops) { + if (loop.empty()) + continue; + for (const Arachne::ExtrusionLine& wall : loop) + all_extrusions.emplace_back(&wall); + } + + // Split paths using a nearest neighbor search. + size_t firts_poly_idx = thick_polylines_out.size(); + Point last_pos(0, 0); + for (const Arachne::ExtrusionLine* extrusion : all_extrusions) { + if (extrusion->empty()) + continue; + + ThickPolyline thick_polyline = Arachne::to_thick_polyline(*extrusion); + if (extrusion->is_closed && thick_polyline.points.front() == thick_polyline.points.back() && thick_polyline.width.front() == thick_polyline.width.back()) { + thick_polyline.points.pop_back(); + assert(thick_polyline.points.size() * 2 == thick_polyline.width.size()); + int nearest_idx = last_pos.nearest_point_index(thick_polyline.points); + std::rotate(thick_polyline.points.begin(), thick_polyline.points.begin() + nearest_idx, thick_polyline.points.end()); + std::rotate(thick_polyline.width.begin(), thick_polyline.width.begin() + 2 * nearest_idx, thick_polyline.width.end()); + thick_polyline.points.emplace_back(thick_polyline.points.front()); + } + thick_polylines_out.emplace_back(std::move(thick_polyline)); + last_pos = thick_polylines_out.back().last_point(); + } + + // clip the paths to prevent the extruder from getting exactly on the first point of the loop + // Keep valid paths only. + size_t j = firts_poly_idx; + for (size_t i = firts_poly_idx; i < thick_polylines_out.size(); ++i) { + thick_polylines_out[i].clip_end(this->loop_clipping); + if (thick_polylines_out[i].is_valid()) { + if (j < i) + thick_polylines_out[j] = std::move(thick_polylines_out[i]); + ++j; + } + } + if (j < thick_polylines_out.size()) + thick_polylines_out.erase(thick_polylines_out.begin() + int(j), thick_polylines_out.end()); + } + else { + Polylines polylines; + this->_fill_surface_single(params, thickness_layers, direction, expolygon, polylines); + append(thick_polylines_out, to_thick_polylines(std::move(polylines), min_spacing)); + } +} + } // namespace Slic3r diff --git a/src/libslic3r/Fill/FillConcentric.hpp b/src/libslic3r/Fill/FillConcentric.hpp index 8bf01d11d29..2e63dcdc882 100644 --- a/src/libslic3r/Fill/FillConcentric.hpp +++ b/src/libslic3r/Fill/FillConcentric.hpp @@ -19,7 +19,18 @@ class FillConcentric : public Fill ExPolygon expolygon, Polylines &polylines_out) override; + void _fill_surface_single(const FillParams& params, + unsigned int thickness_layers, + const std::pair& direction, + ExPolygon expolygon, + ThickPolylines& thick_polylines_out) override; + bool no_sort() const override { return true; } + + const PrintConfig* print_config = nullptr; + const PrintObjectConfig* print_object_config = nullptr; + + friend class Layer; }; } // namespace Slic3r diff --git a/src/libslic3r/Fill/FillConcentricWGapFill.cpp b/src/libslic3r/Fill/FillConcentricWGapFill.cpp deleted file mode 100644 index 8f037fc9a5b..00000000000 --- a/src/libslic3r/Fill/FillConcentricWGapFill.cpp +++ /dev/null @@ -1,135 +0,0 @@ -#include "../ClipperUtils.hpp" -#include "../ExPolygon.hpp" -#include "../Surface.hpp" -#include "../VariableWidth.hpp" -#include "../ShortestPath.hpp" - -#include "FillConcentricWGapFill.hpp" - -namespace Slic3r { - -const float concentric_overlap_threshold = 0.02; - -void FillConcentricWGapFill::fill_surface_extrusion(const Surface* surface, const FillParams& params, ExtrusionEntitiesPtr& out) -{ - //BBS: FillConcentricWGapFill.cpp is absolutely newly add by BBL for narrow internal solid infill area to reduce vibration - // Because the area is narrow, we should not use the surface->expolygon which has overlap with perimeter, but - // use no_overlap_expolygons instead to avoid overflow in narrow area. - //Slic3r::ExPolygons expp = offset_ex(surface->expolygon, double(scale_(0 - 0.5 * this->spacing))); - float min_spacing = this->spacing * (1 - concentric_overlap_threshold); - Slic3r::ExPolygons expp = offset2_ex(this->no_overlap_expolygons, -double(scale_(0.5 * this->spacing + 0.5 * min_spacing) - 1), - +double(scale_(0.5 * min_spacing) - 1)); - // Create the infills for each of the regions. - Polylines polylines_out; - for (size_t i = 0; i < expp.size(); ++i) { - ExPolygon expolygon = expp[i]; - - coord_t distance = scale_(this->spacing / params.density); - if (params.density > 0.9999f && !params.dont_adjust) { - distance = scale_(this->spacing); - } - - ExPolygons gaps; - Polygons loops = (Polygons)expolygon; - ExPolygons last = { expolygon }; - bool first = true; - while (!last.empty()) { - ExPolygons next_onion = offset2_ex(last, -double(distance + scale_(this->spacing) / 2), +double(scale_(this->spacing) / 2)); - for (auto it = next_onion.begin(); it != next_onion.end(); it++) { - Polygons temp_loops = (Polygons)(*it); - loops.insert(loops.end(), temp_loops.begin(), temp_loops.end()); - } - append(gaps, diff_ex( - offset(last, -0.5f * distance), - offset(next_onion, 0.5f * distance + 10))); // 10 is safty offset - last = next_onion; - if (first && !this->no_overlap_expolygons.empty()) { - gaps = intersection_ex(gaps, this->no_overlap_expolygons); - } - first = false; - } - - ExtrusionRole good_role = params.extrusion_role; - ExtrusionEntityCollection *coll_nosort = new ExtrusionEntityCollection(); - coll_nosort->no_sort = this->no_sort(); //can be sorted inside the pass - extrusion_entities_append_loops( - coll_nosort->entities, std::move(loops), - good_role, - params.flow.mm3_per_mm(), - params.flow.width(), - params.flow.height()); - - //BBS: add internal gapfills between infill loops - if (!gaps.empty() && params.density >= 1) { - double min = 0.2 * distance * (1 - INSET_OVERLAP_TOLERANCE); - double max = 2. * distance; - ExPolygons gaps_ex = diff_ex( - offset2_ex(gaps, -float(min / 2), float(min / 2)), - offset2_ex(gaps, -float(max / 2), float(max / 2)), - ApplySafetyOffset::Yes); - //BBS: sort the gap_ex to avoid mess travel - Points ordering_points; - ordering_points.reserve(gaps_ex.size()); - ExPolygons gaps_ex_sorted; - gaps_ex_sorted.reserve(gaps_ex.size()); - for (const ExPolygon &ex : gaps_ex) - ordering_points.push_back(ex.contour.first_point()); - std::vector order = chain_points(ordering_points); - for (size_t i : order) - gaps_ex_sorted.emplace_back(std::move(gaps_ex[i])); - - ThickPolylines polylines; - for (ExPolygon& ex : gaps_ex_sorted) { - //BBS: Use DP simplify to avoid duplicated points and accelerate medial-axis calculation as well. - ex.douglas_peucker(SCALED_RESOLUTION * 0.1); - ex.medial_axis(max, min, &polylines); - } - - if (!polylines.empty() && !is_bridge(good_role)) { - ExtrusionEntityCollection gap_fill; - variable_width(polylines, erGapFill, params.flow, gap_fill.entities); - coll_nosort->append(std::move(gap_fill.entities)); - } - } - - if (!coll_nosort->entities.empty()) - out.push_back(coll_nosort); - else - delete coll_nosort; - } - - //BBS: add external gapfill between perimeter and infill - ExPolygons external_gaps = diff_ex(this->no_overlap_expolygons, offset_ex(expp, double(scale_(0.5 * this->spacing))), ApplySafetyOffset::Yes); - external_gaps = union_ex(external_gaps); - if (!this->no_overlap_expolygons.empty()) - external_gaps = intersection_ex(external_gaps, this->no_overlap_expolygons); - - if (!external_gaps.empty()) { - double min = 0.4 * scale_(params.flow.nozzle_diameter()) * (1 - INSET_OVERLAP_TOLERANCE); - double max = 2. * params.flow.scaled_width(); - //BBS: collapse, be sure we don't gapfill where the perimeters are already touching each other (negative spacing). - min = std::max(min, (double)Flow::rounded_rectangle_extrusion_width_from_spacing((float)EPSILON, (float)params.flow.height())); - ExPolygons external_gaps_collapsed = offset2_ex(external_gaps, double(-min / 2), double(+min / 2)); - - ThickPolylines polylines; - for (ExPolygon& ex : external_gaps_collapsed) { - //BBS: Use DP simplify to avoid duplicated points and accelerate medial-axis calculation as well. - ex.douglas_peucker(SCALED_RESOLUTION * 0.1); - ex.medial_axis(max, min, &polylines); - } - - ExtrusionEntityCollection* coll_external_gapfill = new ExtrusionEntityCollection(); - coll_external_gapfill->no_sort = this->no_sort(); - if (!polylines.empty() && !is_bridge(params.extrusion_role)) { - ExtrusionEntityCollection gap_fill; - variable_width(polylines, erGapFill, params.flow, gap_fill.entities); - coll_external_gapfill->append(std::move(gap_fill.entities)); - } - if (!coll_external_gapfill->entities.empty()) - out.push_back(coll_external_gapfill); - else - delete coll_external_gapfill; - } -} - -} \ No newline at end of file diff --git a/src/libslic3r/Fill/FillConcentricWGapFill.hpp b/src/libslic3r/Fill/FillConcentricWGapFill.hpp deleted file mode 100644 index 6bf5cdb5d6c..00000000000 --- a/src/libslic3r/Fill/FillConcentricWGapFill.hpp +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef slic3r_FillConcentricWGapFil_hpp_ -#define slic3r_FillConcentricWGapFil_hpp_ - -#include "FillBase.hpp" - -namespace Slic3r { - -class FillConcentricWGapFill : public Fill -{ -public: - ~FillConcentricWGapFill() override = default; - void fill_surface_extrusion(const Surface *surface, const FillParams ¶ms, ExtrusionEntitiesPtr &out) override; - -protected: - Fill* clone() const override { return new FillConcentricWGapFill(*this); }; - bool no_sort() const override { return true; } -}; - -} // namespace Slic3r - -#endif // slic3r_FillConcentricWGapFil_hpp_ diff --git a/src/libslic3r/Polyline.hpp b/src/libslic3r/Polyline.hpp index 45361f68e27..ac00888d312 100644 --- a/src/libslic3r/Polyline.hpp +++ b/src/libslic3r/Polyline.hpp @@ -239,6 +239,18 @@ class ThickPolyline : public Polyline { std::pair endpoints; }; +inline ThickPolylines to_thick_polylines(Polylines&& polylines, const coordf_t width) +{ + ThickPolylines out; + out.reserve(polylines.size()); + for (Polyline& polyline : polylines) { + out.emplace_back(); + out.back().width.assign((polyline.points.size() - 1) * 2, width); + out.back().points = std::move(polyline.points); + } + return out; +} + class Polyline3 : public MultiPoint3 { public: diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index 64dbc4a62ea..76e3ecc2178 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -46,7 +46,7 @@ enum class FuzzySkinType { enum InfillPattern : int { ipConcentric, ipRectilinear, ipGrid, ipLine, ipCubic, ipTriangles, ipStars, ipGyroid, ipHoneycomb, ipAdaptiveCubic, ipMonotonic, ipMonotonicLine, ipAlignedRectilinear, ip3DHoneycomb, - ipHilbertCurve, ipArchimedeanChords, ipOctagramSpiral, ipSupportCubic, ipSupportBase, ipConcentricGapFill, ipConcentricInternal, + ipHilbertCurve, ipArchimedeanChords, ipOctagramSpiral, ipSupportCubic, ipSupportBase, ipConcentricInternal, #if HAS_LIGHTNING_INFILL ipLightning, #endif // HAS_LIGHTNING_INFILL From 6d8887e858734855cb29414c9807c0b3b05cc359 Mon Sep 17 00:00:00 2001 From: "salt.wei" Date: Mon, 19 Sep 2022 15:59:20 +0800 Subject: [PATCH 20/90] ENH: handle github issue 254 and 286 1 add back Aligned Rectilinear infill pattern 2 allow wall loop to be 0 Signed-off-by: salt.wei Change-Id: Id2873b9107b7b269466a8db1768dfead9ebdad0d --- src/libslic3r/PrintConfig.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index d960fe8678d..173c5e62db4 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -793,15 +793,15 @@ void PrintConfigDef::init_fff_params() def->enum_values.push_back("zig-zag"); def->enum_values.push_back("monotonic"); def->enum_values.push_back("monotonicline"); - //def->enum_values.push_back("alignedrectilinear"); + def->enum_values.push_back("alignedrectilinear"); //def->enum_values.push_back("hilbertcurve"); //def->enum_values.push_back("archimedeanchords"); //def->enum_values.push_back("octagramspiral"); def->enum_labels.push_back(L("Concentric")); - def->enum_labels.push_back(L("Zig zag")); + def->enum_labels.push_back(L("Rectilinear")); def->enum_labels.push_back(L("Monotonic")); def->enum_labels.push_back(L("Monotonic line")); - //def->enum_labels.push_back(L("Aligned Rectilinear")); + def->enum_labels.push_back(L("Aligned Rectilinear")); //def->enum_labels.push_back(L("Hilbert Curve")); //def->enum_labels.push_back(L("Archimedean Chords")); //def->enum_labels.push_back(L("Octagram Spiral")); @@ -1099,7 +1099,7 @@ void PrintConfigDef::init_fff_params() def->enum_values.push_back("gyroid"); def->enum_values.push_back("honeycomb"); def->enum_values.push_back("adaptivecubic"); - //def->enum_values.push_back("alignedrectilinear"); + def->enum_values.push_back("alignedrectilinear"); //def->enum_values.push_back("3dhoneycomb"); //def->enum_values.push_back("hilbertcurve"); //def->enum_values.push_back("archimedeanchords"); @@ -1109,7 +1109,7 @@ void PrintConfigDef::init_fff_params() //def->enum_values.push_back("lightning"); #endif // HAS_LIGHTNING_INFILL def->enum_labels.push_back(L("Concentric")); - def->enum_labels.push_back(L("Zig zag")); + def->enum_labels.push_back(L("Rectilinear")); def->enum_labels.push_back(L("Grid")); def->enum_labels.push_back(L("Line")); def->enum_labels.push_back(L("Cubic")); @@ -1118,7 +1118,7 @@ void PrintConfigDef::init_fff_params() def->enum_labels.push_back(L("Gyroid")); def->enum_labels.push_back(L("Honeycomb")); def->enum_labels.push_back(L("Adaptive Cubic")); - //def->enum_labels.push_back(L("Aligned Rectilinear")); + def->enum_labels.push_back(L("Aligned Rectilinear")); //def->enum_labels.push_back(L("3D Honeycomb")); //def->enum_labels.push_back(L("Hilbert Curve")); //def->enum_labels.push_back(L("Archimedean Chords")); @@ -1756,7 +1756,7 @@ void PrintConfigDef::init_fff_params() def->label = L("Wall loops"); def->category = L("Strength"); def->tooltip = L("Number of walls of every layer"); - def->min = 1; + def->min = 0; def->max = 1000; def->set_default_value(new ConfigOptionInt(2)); From fac58ccefae594e74213f85384f61663d01feabe Mon Sep 17 00:00:00 2001 From: "salt.wei" Date: Mon, 19 Sep 2022 18:44:04 +0800 Subject: [PATCH 21/90] ENH: reduce infill margin for small nozzle Small nozzle has higher print accuracy. Reduce infill margin to improve bridge overlap quality. Signed-off-by: salt.wei Change-Id: I5321c2fe1fe5c3d6422c5f11e8c9f0b82b9ba5bd --- src/libslic3r/LayerRegion.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/libslic3r/LayerRegion.cpp b/src/libslic3r/LayerRegion.cpp index d11c3d7126a..608d5208331 100644 --- a/src/libslic3r/LayerRegion.cpp +++ b/src/libslic3r/LayerRegion.cpp @@ -116,7 +116,9 @@ void LayerRegion::make_perimeters(const SurfaceCollection &slices, SurfaceCollec void LayerRegion::process_external_surfaces(const Layer *lower_layer, const Polygons *lower_layer_covered) { const bool has_infill = this->region().config().sparse_infill_density.value > 0.; - const float margin = float(scale_(EXTERNAL_INFILL_MARGIN)); + //BBS + auto nozzle_diameter = this->region().nozzle_dmr_avg(this->layer()->object()->print()->config()); + const float margin = std::min(float(scale_(EXTERNAL_INFILL_MARGIN)), float(scale_(nozzle_diameter * EXTERNAL_INFILL_MARGIN / 0.4))); // BBS const PrintObjectConfig& object_config = this->layer()->object()->config(); From ec347aba3ad074c68f98abf1d7c665bd4c0a9be0 Mon Sep 17 00:00:00 2001 From: "salt.wei" Date: Wed, 21 Sep 2022 11:07:22 +0800 Subject: [PATCH 22/90] ENH: po change to add some translation As title Signed-off-by: salt.wei Change-Id: I25acd3ff199ac04f5f86f21859dec441c90e6925 --- bbl/i18n/BambuStudio.pot | 33 +++++++++----- bbl/i18n/de/BambuStudio_de.po | 57 +++++++++++++++++------- bbl/i18n/en/BambuStudio_en.po | 55 ++++++++++++++++------- bbl/i18n/es/BambuStudio_es.po | 57 +++++++++++++++++------- bbl/i18n/fr/BambuStudio_fr.po | 57 +++++++++++++++++------- bbl/i18n/hu/BambuStudio_hu.po | 55 ++++++++++++++++------- bbl/i18n/nl/BambuStudio_nl.po | 55 ++++++++++++++++------- bbl/i18n/sv/BambuStudio_sv.po | 59 +++++++++++++++++-------- bbl/i18n/zh_cn/BambuStudio_zh_CN.po | 61 ++++++++++++++++++-------- resources/i18n/de/BambuStudio.mo | Bin 162143 -> 161676 bytes resources/i18n/en/BambuStudio.mo | Bin 148609 -> 148194 bytes resources/i18n/es/BambuStudio.mo | Bin 162724 -> 162241 bytes resources/i18n/fr/BambuStudio.mo | Bin 165795 -> 165318 bytes resources/i18n/hu/BambuStudio.mo | Bin 164370 -> 163962 bytes resources/i18n/nl/BambuStudio.mo | Bin 161323 -> 160876 bytes resources/i18n/sv/BambuStudio.mo | Bin 152684 -> 152262 bytes resources/i18n/zh_cn/BambuStudio.mo | Bin 154025 -> 153993 bytes src/slic3r/GUI/ConfigManipulation.cpp | 4 +- 18 files changed, 344 insertions(+), 149 deletions(-) diff --git a/bbl/i18n/BambuStudio.pot b/bbl/i18n/BambuStudio.pot index d7b2c34c18d..37cfbb26d9c 100644 --- a/bbl/i18n/BambuStudio.pot +++ b/bbl/i18n/BambuStudio.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-09-14 17:04+0800\n" +"POT-Creation-Date: 2022-09-21 11:05+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -816,6 +816,9 @@ msgstr "" msgid "Reduce Triangles" msgstr "" +msgid "Center" +msgstr "" + msgid "Edit in Parameter Table" msgstr "" @@ -1622,8 +1625,8 @@ msgid "%1% infill pattern doesn't support 100%% density." msgstr "" msgid "" -"Switch to zig-zag pattern?\n" -"Yes - switch to zig-zag pattern automaticlly\n" +"Switch to rectilinear pattern?\n" +"Yes - switch to rectilinear pattern automaticlly\n" "No - reset density to default non 100% value automaticlly\n" msgstr "" @@ -1738,11 +1741,11 @@ msgstr "" msgid "N/A" msgstr "" -#, possible-c-format, possible-boost-format -msgid "%s can't be percentage" +msgid "Invalid numeric." msgstr "" -msgid "Invalid numeric." +#, possible-c-format, possible-boost-format +msgid "%s can't be percentage" msgstr "" #, possible-c-format, possible-boost-format @@ -1784,7 +1787,12 @@ msgstr "" msgid "Tool" msgstr "" -msgid "Extruder position" +#, possible-c-format, possible-boost-format +msgid "Speed: %.f" +msgstr "" + +#, possible-c-format, possible-boost-format +msgid "Flow: %.f" msgstr "" msgid "Loading G-codes" @@ -3059,6 +3067,9 @@ msgstr "" msgid "Save Sliced file as:" msgstr "" +msgid "preparing, export 3mf failed!" +msgstr "" + msgid "" "Print By Object: \n" "Suggest to use auto-arrange to avoid collisions when printing." @@ -4937,7 +4948,7 @@ msgstr "" msgid "Concentric" msgstr "" -msgid "Zig zag" +msgid "Rectilinear" msgstr "" msgid "Monotonic" @@ -4946,6 +4957,9 @@ msgstr "" msgid "Monotonic line" msgstr "" +msgid "Aligned Rectilinear" +msgstr "" + msgid "Bottom surface pattern" msgstr "" @@ -5862,9 +5876,6 @@ msgstr "" msgid "Line pattern of support" msgstr "" -msgid "Rectilinear" -msgstr "" - msgid "Rectilinear grid" msgstr "" diff --git a/bbl/i18n/de/BambuStudio_de.po b/bbl/i18n/de/BambuStudio_de.po index feca16ffc29..45509578d23 100644 --- a/bbl/i18n/de/BambuStudio_de.po +++ b/bbl/i18n/de/BambuStudio_de.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-09-14 17:04+0800\n" +"POT-Creation-Date: 2022-09-21 11:05+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -839,6 +839,9 @@ msgstr "Klonen" msgid "Reduce Triangles" msgstr "Dreiecke reduzieren" +msgid "Center" +msgstr "" + msgid "Edit in Parameter Table" msgstr "" @@ -1773,14 +1776,10 @@ msgid "%1% infill pattern doesn't support 100%% density." msgstr "Das %1%-Infill-Muster unterstützt keine 100%% Dichte." msgid "" -"Switch to zig-zag pattern?\n" -"Yes - switch to zig-zag pattern automaticlly\n" +"Switch to rectilinear pattern?\n" +"Yes - switch to rectilinear pattern automaticlly\n" "No - reset density to default non 100% value automaticlly\n" msgstr "" -"Umschalten auf Zick-Zack-Muster?\n" -"Ja - automatisch zum Zick-Zack-Muster wechseln\n" -"Nein - setzt die Dichte automatisch auf den Standardwert von nicht 100% " -"zurück\n" msgid "Auto bed leveling" msgstr "Automatische Druckbettnivellierung" @@ -1893,13 +1892,13 @@ msgstr "" msgid "N/A" msgstr "N/A" +msgid "Invalid numeric." +msgstr "Ungültige Zahl." + #, c-format, boost-format msgid "%s can't be percentage" msgstr "%s kann nicht Prozent sein" -msgid "Invalid numeric." -msgstr "Ungültige Zahl." - #, c-format, boost-format msgid "Value %s is out of range, continue?" msgstr "Wert %s ist außerhalb der Reichweite, fortfahren?" @@ -1942,8 +1941,13 @@ msgstr "Fluss" msgid "Tool" msgstr "Werkzeug" -msgid "Extruder position" -msgstr "Extruderposition" +#, c-format, boost-format +msgid "Speed: %.f" +msgstr "" + +#, c-format, boost-format +msgid "Flow: %.f" +msgstr "" msgid "Loading G-codes" msgstr "Laden von G-Codes" @@ -3241,6 +3245,9 @@ msgstr "Speichere G-Code Datei als:" msgid "Save Sliced file as:" msgstr "Geslicte Datei speichern unter:" +msgid "preparing, export 3mf failed!" +msgstr "" + msgid "" "Print By Object: \n" "Suggest to use auto-arrange to avoid collisions when printing." @@ -5330,8 +5337,8 @@ msgstr "Linienmuster der Füllung der oberen Oberfläche" msgid "Concentric" msgstr "Konzentrisch" -msgid "Zig zag" -msgstr "Zick-Zack" +msgid "Rectilinear" +msgstr "Geradlinig" msgid "Monotonic" msgstr "Monotonisch" @@ -5339,6 +5346,9 @@ msgstr "Monotonisch" msgid "Monotonic line" msgstr "Monotone Linie" +msgid "Aligned Rectilinear" +msgstr "" + msgid "Bottom surface pattern" msgstr "Muster der unteren Oberfläche" @@ -6401,9 +6411,6 @@ msgstr "Basismuster" msgid "Line pattern of support" msgstr "Linienmuster der Supports" -msgid "Rectilinear" -msgstr "Geradlinig" - msgid "Rectilinear grid" msgstr "Rechtwinkliges Gitter" @@ -6855,6 +6862,22 @@ msgstr "Support: Löcher in Schicht %d repairieren" msgid "Support: propagate branches at layer %d" msgstr "Support: Verbreiten von Zweigen auf Ebene %d" +#~ msgid "" +#~ "Switch to zig-zag pattern?\n" +#~ "Yes - switch to zig-zag pattern automaticlly\n" +#~ "No - reset density to default non 100% value automaticlly\n" +#~ msgstr "" +#~ "Umschalten auf Zick-Zack-Muster?\n" +#~ "Ja - automatisch zum Zick-Zack-Muster wechseln\n" +#~ "Nein - setzt die Dichte automatisch auf den Standardwert von nicht 100% " +#~ "zurück\n" + +#~ msgid "Extruder position" +#~ msgstr "Extruderposition" + +#~ msgid "Zig zag" +#~ msgstr "Zick-Zack" + #~ msgid "" #~ "Bed temperature is higher than vitrification temperature of this " #~ "filament.\n" diff --git a/bbl/i18n/en/BambuStudio_en.po b/bbl/i18n/en/BambuStudio_en.po index 209b4f49829..2e795af16a4 100644 --- a/bbl/i18n/en/BambuStudio_en.po +++ b/bbl/i18n/en/BambuStudio_en.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-09-14 17:04+0800\n" +"POT-Creation-Date: 2022-09-21 11:05+0800\n" "Language: en\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -826,6 +826,9 @@ msgstr "Clone" msgid "Reduce Triangles" msgstr "Reduce Triangles" +msgid "Center" +msgstr "" + msgid "Edit in Parameter Table" msgstr "" @@ -1729,13 +1732,10 @@ msgid "%1% infill pattern doesn't support 100%% density." msgstr "%1% infill pattern doesn't support 100%% density." msgid "" -"Switch to zig-zag pattern?\n" -"Yes - switch to zig-zag pattern automaticlly\n" +"Switch to rectilinear pattern?\n" +"Yes - switch to rectilinear pattern automaticlly\n" "No - reset density to default non 100% value automaticlly\n" msgstr "" -"Switch to zig-zag pattern?\n" -"Yes - Switch to zig-zag pattern automatically\n" -"No - Reset density to default non-100% value automatically\n" msgid "Auto bed leveling" msgstr "Auto bed leveling" @@ -1848,13 +1848,13 @@ msgstr "" msgid "N/A" msgstr "N/A" +msgid "Invalid numeric." +msgstr "Invalid numeric." + #, c-format, boost-format msgid "%s can't be percentage" msgstr "%s can’t be a percentage" -msgid "Invalid numeric." -msgstr "Invalid numeric." - #, c-format, boost-format msgid "Value %s is out of range, continue?" msgstr "Value %s is out of range, continue?" @@ -1897,8 +1897,13 @@ msgstr "Flow" msgid "Tool" msgstr "Tool" -msgid "Extruder position" -msgstr "Extruder position" +#, c-format, boost-format +msgid "Speed: %.f" +msgstr "" + +#, c-format, boost-format +msgid "Flow: %.f" +msgstr "" msgid "Loading G-codes" msgstr "Loading G-codes" @@ -3192,6 +3197,9 @@ msgstr "Save G-code file as:" msgid "Save Sliced file as:" msgstr "Save Sliced file as:" +msgid "preparing, export 3mf failed!" +msgstr "" + msgid "" "Print By Object: \n" "Suggest to use auto-arrange to avoid collisions when printing." @@ -5217,8 +5225,8 @@ msgstr "This is the line pattern for top surface infill." msgid "Concentric" msgstr "Concentric" -msgid "Zig zag" -msgstr "Zig zag" +msgid "Rectilinear" +msgstr "Rectilinear" msgid "Monotonic" msgstr "Monotonic" @@ -5226,6 +5234,9 @@ msgstr "Monotonic" msgid "Monotonic line" msgstr "Monotonic line" +msgid "Aligned Rectilinear" +msgstr "" + msgid "Bottom surface pattern" msgstr "Bottom surface pattern" @@ -6270,9 +6281,6 @@ msgstr "Base pattern" msgid "Line pattern of support" msgstr "This is the line pattern for support." -msgid "Rectilinear" -msgstr "Rectilinear" - msgid "Rectilinear grid" msgstr "Rectilinear grid" @@ -6709,6 +6717,21 @@ msgstr "Support: fix holes at layer %d" msgid "Support: propagate branches at layer %d" msgstr "Support: propagate branches at layer %d" +#~ msgid "" +#~ "Switch to zig-zag pattern?\n" +#~ "Yes - switch to zig-zag pattern automaticlly\n" +#~ "No - reset density to default non 100% value automaticlly\n" +#~ msgstr "" +#~ "Switch to zig-zag pattern?\n" +#~ "Yes - Switch to zig-zag pattern automatically\n" +#~ "No - Reset density to default non-100% value automatically\n" + +#~ msgid "Extruder position" +#~ msgstr "Extruder position" + +#~ msgid "Zig zag" +#~ msgstr "Zig zag" + #~ msgid "" #~ "Bed temperature is higher than vitrification temperature of this " #~ "filament.\n" diff --git a/bbl/i18n/es/BambuStudio_es.po b/bbl/i18n/es/BambuStudio_es.po index ab81588b688..1b2f8bdcbe7 100644 --- a/bbl/i18n/es/BambuStudio_es.po +++ b/bbl/i18n/es/BambuStudio_es.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-09-14 17:04+0800\n" +"POT-Creation-Date: 2022-09-21 11:05+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -840,6 +840,9 @@ msgstr "Clonar" msgid "Reduce Triangles" msgstr "Reducir los triángulos" +msgid "Center" +msgstr "" + msgid "Edit in Parameter Table" msgstr "" @@ -1768,14 +1771,10 @@ msgid "%1% infill pattern doesn't support 100%% density." msgstr "El patrón de relleno %1% no soporta el 100%% de densidad." msgid "" -"Switch to zig-zag pattern?\n" -"Yes - switch to zig-zag pattern automaticlly\n" +"Switch to rectilinear pattern?\n" +"Yes - switch to rectilinear pattern automaticlly\n" "No - reset density to default non 100% value automaticlly\n" msgstr "" -"¿Cambiar al patrón en zig-zag?\n" -"Sí - cambia automáticamente al patrón en zig-zag\n" -"No - restablecer automáticamente la densidad al valor por defecto que no es " -"del 100%.\n" msgid "Auto bed leveling" msgstr "Nivelación de cama automática" @@ -1891,13 +1890,13 @@ msgstr "" msgid "N/A" msgstr "N/A" +msgid "Invalid numeric." +msgstr "Numérico inválido." + #, c-format, boost-format msgid "%s can't be percentage" msgstr "%s no puede ser un porcentaje" -msgid "Invalid numeric." -msgstr "Numérico inválido." - #, c-format, boost-format msgid "Value %s is out of range, continue?" msgstr "El valor %s está fuera de rango, ¿continuar?" @@ -1940,8 +1939,13 @@ msgstr "Flujo" msgid "Tool" msgstr "Herramienta" -msgid "Extruder position" -msgstr "Posición del extrusor" +#, c-format, boost-format +msgid "Speed: %.f" +msgstr "" + +#, c-format, boost-format +msgid "Flow: %.f" +msgstr "" msgid "Loading G-codes" msgstr "Carga de códigos G" @@ -3241,6 +3245,9 @@ msgstr "Guardar archivo Código G como:" msgid "Save Sliced file as:" msgstr "Guardar el archivo rebanado como:" +msgid "preparing, export 3mf failed!" +msgstr "" + msgid "" "Print By Object: \n" "Suggest to use auto-arrange to avoid collisions when printing." @@ -5314,8 +5321,8 @@ msgstr "Patrón de líneas del relleno de la superficie superior" msgid "Concentric" msgstr "Concéntrico" -msgid "Zig zag" -msgstr "Zig zag" +msgid "Rectilinear" +msgstr "Rectilíneo" msgid "Monotonic" msgstr "Monotónico" @@ -5323,6 +5330,9 @@ msgstr "Monotónico" msgid "Monotonic line" msgstr "Linea continua" +msgid "Aligned Rectilinear" +msgstr "" + msgid "Bottom surface pattern" msgstr "Patrón de la superficie inferior" @@ -6389,9 +6399,6 @@ msgstr "Patrón de base" msgid "Line pattern of support" msgstr "Patrón lineal de apoyo" -msgid "Rectilinear" -msgstr "Rectilíneo" - msgid "Rectilinear grid" msgstr "Rejilla rectilínea" @@ -6839,6 +6846,22 @@ msgstr "Soporte: arreglar huecos en la capa %d" msgid "Support: propagate branches at layer %d" msgstr "Soporte: propagar ramas en la capa %d" +#~ msgid "" +#~ "Switch to zig-zag pattern?\n" +#~ "Yes - switch to zig-zag pattern automaticlly\n" +#~ "No - reset density to default non 100% value automaticlly\n" +#~ msgstr "" +#~ "¿Cambiar al patrón en zig-zag?\n" +#~ "Sí - cambia automáticamente al patrón en zig-zag\n" +#~ "No - restablecer automáticamente la densidad al valor por defecto que no " +#~ "es del 100%.\n" + +#~ msgid "Extruder position" +#~ msgstr "Posición del extrusor" + +#~ msgid "Zig zag" +#~ msgstr "Zig zag" + #~ msgid "" #~ "Bed temperature is higher than vitrification temperature of this " #~ "filament.\n" diff --git a/bbl/i18n/fr/BambuStudio_fr.po b/bbl/i18n/fr/BambuStudio_fr.po index 0a93dff7a65..d39c7faabb3 100644 --- a/bbl/i18n/fr/BambuStudio_fr.po +++ b/bbl/i18n/fr/BambuStudio_fr.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-09-14 17:04+0800\n" +"POT-Creation-Date: 2022-09-21 11:05+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -839,6 +839,9 @@ msgstr "Cloner" msgid "Reduce Triangles" msgstr "Réduire les triangles" +msgid "Center" +msgstr "" + msgid "Edit in Parameter Table" msgstr "" @@ -1746,14 +1749,10 @@ msgstr "" "Le motif de remplissage %1% ne prend pas en charge une densité de 100%%." msgid "" -"Switch to zig-zag pattern?\n" -"Yes - switch to zig-zag pattern automaticlly\n" +"Switch to rectilinear pattern?\n" +"Yes - switch to rectilinear pattern automaticlly\n" "No - reset density to default non 100% value automaticlly\n" msgstr "" -"Passer au motif en zigzag?\n" -"Oui - passer automatiquement au motif en zigzag\n" -"Non - réinitialiser automatiquement la densité à la valeur par défaut autre " -"que 100%\n" msgid "Auto bed leveling" msgstr "Niveau de plateau automatique" @@ -1867,13 +1866,13 @@ msgstr "" msgid "N/A" msgstr "N / A" +msgid "Invalid numeric." +msgstr "Chiffre non valide." + #, c-format, boost-format msgid "%s can't be percentage" msgstr "%s ne peut pas être un pourcentage" -msgid "Invalid numeric." -msgstr "Chiffre non valide." - #, c-format, boost-format msgid "Value %s is out of range, continue?" msgstr "La valeur %s est hors plage, continuer ?" @@ -1913,8 +1912,13 @@ msgstr "débit" msgid "Tool" msgstr "Outil" -msgid "Extruder position" -msgstr "Position de l'extrudeuse" +#, c-format, boost-format +msgid "Speed: %.f" +msgstr "" + +#, c-format, boost-format +msgid "Flow: %.f" +msgstr "" msgid "Loading G-codes" msgstr "Chargement des codes G" @@ -3213,6 +3217,9 @@ msgstr "Enregistrer le fichier G-code sous :" msgid "Save Sliced file as:" msgstr "Enregistrer le fichier découpé sous :" +msgid "preparing, export 3mf failed!" +msgstr "" + msgid "" "Print By Object: \n" "Suggest to use auto-arrange to avoid collisions when printing." @@ -5303,8 +5310,8 @@ msgstr "Motif de ligne du remplissage de la surface supérieure" msgid "Concentric" msgstr "Concentrique" -msgid "Zig zag" -msgstr "Zig zag" +msgid "Rectilinear" +msgstr "Rectiligne" msgid "Monotonic" msgstr "Monotone" @@ -5312,6 +5319,9 @@ msgstr "Monotone" msgid "Monotonic line" msgstr "Ligne monotone" +msgid "Aligned Rectilinear" +msgstr "" + msgid "Bottom surface pattern" msgstr "Modèle de surface inférieure" @@ -6389,9 +6399,6 @@ msgstr "Motif de base" msgid "Line pattern of support" msgstr "Motif de ligne de support" -msgid "Rectilinear" -msgstr "Rectiligne" - msgid "Rectilinear grid" msgstr "Grille rectiligne" @@ -6842,6 +6849,22 @@ msgstr "Support : Correction des trous dans la couche %d" msgid "Support: propagate branches at layer %d" msgstr "Support : propagation des branches à la couche %d" +#~ msgid "" +#~ "Switch to zig-zag pattern?\n" +#~ "Yes - switch to zig-zag pattern automaticlly\n" +#~ "No - reset density to default non 100% value automaticlly\n" +#~ msgstr "" +#~ "Passer au motif en zigzag?\n" +#~ "Oui - passer automatiquement au motif en zigzag\n" +#~ "Non - réinitialiser automatiquement la densité à la valeur par défaut " +#~ "autre que 100%\n" + +#~ msgid "Extruder position" +#~ msgstr "Position de l'extrudeuse" + +#~ msgid "Zig zag" +#~ msgstr "Zig zag" + #~ msgid "" #~ "Bed temperature is higher than vitrification temperature of this " #~ "filament.\n" diff --git a/bbl/i18n/hu/BambuStudio_hu.po b/bbl/i18n/hu/BambuStudio_hu.po index 4aede49f945..0ce93f0fbe4 100644 --- a/bbl/i18n/hu/BambuStudio_hu.po +++ b/bbl/i18n/hu/BambuStudio_hu.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-09-14 17:04+0800\n" +"POT-Creation-Date: 2022-09-21 11:05+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -838,6 +838,9 @@ msgstr "Klónozás" msgid "Reduce Triangles" msgstr "Háromszögek csökkentése" +msgid "Center" +msgstr "" + msgid "Edit in Parameter Table" msgstr "" @@ -1763,13 +1766,10 @@ msgid "%1% infill pattern doesn't support 100%% density." msgstr "%1% kitöltési mintázat nem támogatja a 100%%-os kitöltés." msgid "" -"Switch to zig-zag pattern?\n" -"Yes - switch to zig-zag pattern automaticlly\n" +"Switch to rectilinear pattern?\n" +"Yes - switch to rectilinear pattern automaticlly\n" "No - reset density to default non 100% value automaticlly\n" msgstr "" -"Switch to zig-zag pattern?\n" -"Yes - Switch to zig-zag pattern automatically\n" -"No - Reset density to default non-100% value automatically\n" msgid "Auto bed leveling" msgstr "Automatikus asztalszintezés" @@ -1882,13 +1882,13 @@ msgstr "" msgid "N/A" msgstr "N/A" +msgid "Invalid numeric." +msgstr "Érvénytelen számjegy." + #, c-format, boost-format msgid "%s can't be percentage" msgstr "%s nem lehet százalék" -msgid "Invalid numeric." -msgstr "Érvénytelen számjegy." - #, c-format, boost-format msgid "Value %s is out of range, continue?" msgstr "Value %s is out of range, continue?" @@ -1931,8 +1931,13 @@ msgstr "Anyagáramlás" msgid "Tool" msgstr "Tool" -msgid "Extruder position" -msgstr "Extruder pozíció" +#, c-format, boost-format +msgid "Speed: %.f" +msgstr "" + +#, c-format, boost-format +msgid "Flow: %.f" +msgstr "" msgid "Loading G-codes" msgstr "Loading G-codes" @@ -3233,6 +3238,9 @@ msgstr "G-kód fájl mentése mint:" msgid "Save Sliced file as:" msgstr "Szeletelt fájl mentése mint:" +msgid "preparing, export 3mf failed!" +msgstr "" + msgid "" "Print By Object: \n" "Suggest to use auto-arrange to avoid collisions when printing." @@ -5285,8 +5293,8 @@ msgstr "This is the line pattern for top surface infill." msgid "Concentric" msgstr "Koncentrikus" -msgid "Zig zag" -msgstr "Cikcakk" +msgid "Rectilinear" +msgstr "Vonalak" msgid "Monotonic" msgstr "Monotonikus" @@ -5294,6 +5302,9 @@ msgstr "Monotonikus" msgid "Monotonic line" msgstr "Monotonikus vonal" +msgid "Aligned Rectilinear" +msgstr "" + msgid "Bottom surface pattern" msgstr "Alsó felület mintázata" @@ -6358,9 +6369,6 @@ msgstr "Alap mintázata" msgid "Line pattern of support" msgstr "This is the line pattern for support." -msgid "Rectilinear" -msgstr "Vonalak" - msgid "Rectilinear grid" msgstr "Vonalrács" @@ -6799,6 +6807,21 @@ msgstr "Support: fix holes at layer %d" msgid "Support: propagate branches at layer %d" msgstr "Support: propagate branches at layer %d" +#~ msgid "" +#~ "Switch to zig-zag pattern?\n" +#~ "Yes - switch to zig-zag pattern automaticlly\n" +#~ "No - reset density to default non 100% value automaticlly\n" +#~ msgstr "" +#~ "Switch to zig-zag pattern?\n" +#~ "Yes - Switch to zig-zag pattern automatically\n" +#~ "No - Reset density to default non-100% value automatically\n" + +#~ msgid "Extruder position" +#~ msgstr "Extruder pozíció" + +#~ msgid "Zig zag" +#~ msgstr "Cikcakk" + #~ msgid "" #~ "Bed temperature is higher than vitrification temperature of this " #~ "filament.\n" diff --git a/bbl/i18n/nl/BambuStudio_nl.po b/bbl/i18n/nl/BambuStudio_nl.po index b2e53e52608..6e99a486b49 100644 --- a/bbl/i18n/nl/BambuStudio_nl.po +++ b/bbl/i18n/nl/BambuStudio_nl.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-09-14 17:04+0800\n" +"POT-Creation-Date: 2022-09-21 11:05+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -837,6 +837,9 @@ msgstr "Dupliceren" msgid "Reduce Triangles" msgstr "Aantal driehoeken verkleinen (vereenvoudigen)" +msgid "Center" +msgstr "" + msgid "Edit in Parameter Table" msgstr "" @@ -1768,13 +1771,10 @@ msgid "%1% infill pattern doesn't support 100%% density." msgstr "%1% het gekozen vulling patroon ondersteund geen 100%% dichtheid." msgid "" -"Switch to zig-zag pattern?\n" -"Yes - switch to zig-zag pattern automaticlly\n" +"Switch to rectilinear pattern?\n" +"Yes - switch to rectilinear pattern automaticlly\n" "No - reset density to default non 100% value automaticlly\n" msgstr "" -"Overschakelen naar zigzagpatroon?\n" -"Ja - Automatisch overschakelen naar zigzagpatroon\n" -"Nee - Reset vulling automatisch naar de standaard niet-100% waarde\n" msgid "Auto bed leveling" msgstr "Automatisch bed levellen" @@ -1887,13 +1887,13 @@ msgstr "" msgid "N/A" msgstr "N/B" +msgid "Invalid numeric." +msgstr "Onjuist getal." + #, c-format, boost-format msgid "%s can't be percentage" msgstr "%s kan geen percentage zijn" -msgid "Invalid numeric." -msgstr "Onjuist getal." - #, c-format, boost-format msgid "Value %s is out of range, continue?" msgstr "De %s waarde is buiten het bereik, doorgaan?" @@ -1936,8 +1936,13 @@ msgstr "Flow" msgid "Tool" msgstr "Hulpmiddel" -msgid "Extruder position" -msgstr "Positie van de extruder" +#, c-format, boost-format +msgid "Speed: %.f" +msgstr "" + +#, c-format, boost-format +msgid "Flow: %.f" +msgstr "" msgid "Loading G-codes" msgstr "G-codes worden geladen" @@ -3244,6 +3249,9 @@ msgstr "Bewaar G-code bestand als:" msgid "Save Sliced file as:" msgstr "Bewaar het geslicede bestand als:" +msgid "preparing, export 3mf failed!" +msgstr "" + msgid "" "Print By Object: \n" "Suggest to use auto-arrange to avoid collisions when printing." @@ -5324,8 +5332,8 @@ msgstr "" msgid "Concentric" msgstr "Concentrisch" -msgid "Zig zag" -msgstr "Zig-zag" +msgid "Rectilinear" +msgstr "Rechtlijning" msgid "Monotonic" msgstr "Monotoon" @@ -5333,6 +5341,9 @@ msgstr "Monotoon" msgid "Monotonic line" msgstr "Monotone lijn" +msgid "Aligned Rectilinear" +msgstr "" + msgid "Bottom surface pattern" msgstr "Bodem oppvlakte patroon" @@ -6410,9 +6421,6 @@ msgstr "Basis patroon" msgid "Line pattern of support" msgstr "Dit is het lijnpatroon voor support." -msgid "Rectilinear" -msgstr "Rechtlijning" - msgid "Rectilinear grid" msgstr "Rechtlijnig raster" @@ -6859,6 +6867,21 @@ msgstr "Support: repareer gaten op laag %d" msgid "Support: propagate branches at layer %d" msgstr "Support: verspreid takken op laag %d" +#~ msgid "" +#~ "Switch to zig-zag pattern?\n" +#~ "Yes - switch to zig-zag pattern automaticlly\n" +#~ "No - reset density to default non 100% value automaticlly\n" +#~ msgstr "" +#~ "Overschakelen naar zigzagpatroon?\n" +#~ "Ja - Automatisch overschakelen naar zigzagpatroon\n" +#~ "Nee - Reset vulling automatisch naar de standaard niet-100% waarde\n" + +#~ msgid "Extruder position" +#~ msgstr "Positie van de extruder" + +#~ msgid "Zig zag" +#~ msgstr "Zig-zag" + #~ msgid "" #~ "Bed temperature is higher than vitrification temperature of this " #~ "filament.\n" diff --git a/bbl/i18n/sv/BambuStudio_sv.po b/bbl/i18n/sv/BambuStudio_sv.po index 4ea1d27e9d5..885ab9e9a12 100644 --- a/bbl/i18n/sv/BambuStudio_sv.po +++ b/bbl/i18n/sv/BambuStudio_sv.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: Bambu Studio\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-09-14 17:04+0800\n" +"POT-Creation-Date: 2022-09-21 11:05+0800\n" "PO-Revision-Date: \n" "Last-Translator: \n" "Language-Team: \n" @@ -830,6 +830,9 @@ msgstr "Klona" msgid "Reduce Triangles" msgstr "Reducera Trianglar" +msgid "Center" +msgstr "" + msgid "Edit in Parameter Table" msgstr "" @@ -1738,13 +1741,10 @@ msgid "%1% infill pattern doesn't support 100%% density." msgstr "%1% ifyllnads mönster stöds ej 100%% densitet." msgid "" -"Switch to zig-zag pattern?\n" -"Yes - switch to zig-zag pattern automaticlly\n" +"Switch to rectilinear pattern?\n" +"Yes - switch to rectilinear pattern automaticlly\n" "No - reset density to default non 100% value automaticlly\n" msgstr "" -"Ändra till Zig-Zag mönster?\n" -"JA - Byta till Zig-Zag mönster automatiskt\n" -"NEJ - Återställ densiteten till standard inte 100% värdet automatiskt\n" msgid "Auto bed leveling" msgstr "Auto justera byggplattan" @@ -1857,13 +1857,13 @@ msgstr "" msgid "N/A" msgstr "N/A" +msgid "Invalid numeric." +msgstr "Ogiltig siffra." + #, c-format, boost-format msgid "%s can't be percentage" msgstr "%s kan inte vara procent" -msgid "Invalid numeric." -msgstr "Ogiltig siffra." - #, c-format, boost-format msgid "Value %s is out of range, continue?" msgstr "Värdet %s är utanför intervallet, fortsätta?" @@ -1906,8 +1906,13 @@ msgstr "Flöde" msgid "Tool" msgstr "Verktyg" -msgid "Extruder position" -msgstr "Extruder position" +#, c-format, boost-format +msgid "Speed: %.f" +msgstr "" + +#, c-format, boost-format +msgid "Flow: %.f" +msgstr "" msgid "Loading G-codes" msgstr "Laddar G-koder" @@ -3195,6 +3200,9 @@ msgstr "Spara G-kod som:" msgid "Save Sliced file as:" msgstr "Spara beredningen som:" +msgid "preparing, export 3mf failed!" +msgstr "" + msgid "" "Print By Object: \n" "Suggest to use auto-arrange to avoid collisions when printing." @@ -5210,8 +5218,8 @@ msgstr "Linjemönster för topp ytans ifyllnad" msgid "Concentric" msgstr "Koncentrisk" -msgid "Zig zag" -msgstr "Zig zag" +msgid "Rectilinear" +msgstr "Räta linjer" msgid "Monotonic" msgstr "Monoton" @@ -5219,6 +5227,9 @@ msgstr "Monoton" msgid "Monotonic line" msgstr "Monoton linje" +msgid "Aligned Rectilinear" +msgstr "" + msgid "Bottom surface pattern" msgstr "Botten ytans mönster" @@ -6266,9 +6277,6 @@ msgstr "Botten mönster" msgid "Line pattern of support" msgstr "Supportens linje mönster" -msgid "Rectilinear" -msgstr "Räta linjer" - msgid "Rectilinear grid" msgstr "Rät linjärt nät" @@ -6281,8 +6289,8 @@ msgid "" "interface is Concentric" msgstr "" "Linje mönster för support gränssnittsytan .Standardmönstret för olösligt " -"(material) support gränssnittet är Räta medan standardmönstret för lösligt" -"(material) stödgränssnittet är koncentriskt" +"(material) support gränssnittet är Räta medan standardmönstret för " +"lösligt(material) stödgränssnittet är koncentriskt" msgid "Base pattern spacing" msgstr "Basens mönster mellanrum" @@ -6704,6 +6712,21 @@ msgstr "Support: åtgärda hål vid lager %d" msgid "Support: propagate branches at layer %d" msgstr "Support: föröka grenar vid lager %d" +#~ msgid "" +#~ "Switch to zig-zag pattern?\n" +#~ "Yes - switch to zig-zag pattern automaticlly\n" +#~ "No - reset density to default non 100% value automaticlly\n" +#~ msgstr "" +#~ "Ändra till Zig-Zag mönster?\n" +#~ "JA - Byta till Zig-Zag mönster automatiskt\n" +#~ "NEJ - Återställ densiteten till standard inte 100% värdet automatiskt\n" + +#~ msgid "Extruder position" +#~ msgstr "Extruder position" + +#~ msgid "Zig zag" +#~ msgstr "Zig zag" + #~ msgid "" #~ "Bed temperature is higher than vitrification temperature of this " #~ "filament.\n" diff --git a/bbl/i18n/zh_cn/BambuStudio_zh_CN.po b/bbl/i18n/zh_cn/BambuStudio_zh_CN.po index 67e66c81f39..ba33b8e4485 100644 --- a/bbl/i18n/zh_cn/BambuStudio_zh_CN.po +++ b/bbl/i18n/zh_cn/BambuStudio_zh_CN.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Slic3rPE\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-09-14 17:04+0800\n" +"POT-Creation-Date: 2022-09-21 11:05+0800\n" "PO-Revision-Date: 2022-09-05 14:22+0800\n" "Last-Translator: Jiang Yue \n" "Language-Team: \n" @@ -821,6 +821,9 @@ msgstr "克隆" msgid "Reduce Triangles" msgstr "简化三角形" +msgid "Center" +msgstr "" + msgid "Edit in Parameter Table" msgstr "在参数表格中编辑" @@ -1682,12 +1685,12 @@ msgid "%1% infill pattern doesn't support 100%% density." msgstr "%1% 填充图案不支持 100%% 密度。" msgid "" -"Switch to zig-zag pattern?\n" -"Yes - switch to zig-zag pattern automaticlly\n" +"Switch to rectilinear pattern?\n" +"Yes - switch to rectilinear pattern automaticlly\n" "No - reset density to default non 100% value automaticlly\n" msgstr "" -"切换到锯齿图案?\n" -"是 - 自动切换到锯齿图案\n" +"切换到直线图案?\n" +"是 - 自动切换到直线图案\n" "否 - 自动重置为非100%填充密度\n" msgid "Auto bed leveling" @@ -1801,13 +1804,13 @@ msgstr "参数名称" msgid "N/A" msgstr "N/A" +msgid "Invalid numeric." +msgstr "数值错误。" + #, c-format, boost-format msgid "%s can't be percentage" msgstr "%s 不可以是百分比" -msgid "Invalid numeric." -msgstr "数值错误。" - #, c-format, boost-format msgid "Value %s is out of range, continue?" msgstr "值 %s 越界,是否继续?" @@ -1850,8 +1853,13 @@ msgstr "流量" msgid "Tool" msgstr "工具" -msgid "Extruder position" -msgstr "挤出机位置" +#, c-format, boost-format +msgid "Speed: %.f" +msgstr "" + +#, c-format, boost-format +msgid "Flow: %.f" +msgstr "" msgid "Loading G-codes" msgstr "正在加载G-code" @@ -3139,6 +3147,9 @@ msgstr "G-code文件另存为:" msgid "Save Sliced file as:" msgstr "切片文件另存为:" +msgid "preparing, export 3mf failed!" +msgstr "正在准备中,导出 3mf 失败!" + msgid "" "Print By Object: \n" "Suggest to use auto-arrange to avoid collisions when printing." @@ -5070,8 +5081,8 @@ msgstr "顶面填充的走线图案" msgid "Concentric" msgstr "同心" -msgid "Zig zag" -msgstr "锯齿" +msgid "Rectilinear" +msgstr "直线" msgid "Monotonic" msgstr "单调" @@ -5079,6 +5090,9 @@ msgstr "单调" msgid "Monotonic line" msgstr "单调线" +msgid "Aligned Rectilinear" +msgstr "" + msgid "Bottom surface pattern" msgstr "底面图案" @@ -5294,7 +5308,7 @@ msgid "Grid" msgstr "网格" msgid "Line" -msgstr "直线" +msgstr "线" msgid "Cubic" msgstr "立方体" @@ -6037,9 +6051,6 @@ msgstr "支撑主体图案" msgid "Line pattern of support" msgstr "支撑走线图案" -msgid "Rectilinear" -msgstr "直线" - msgid "Rectilinear grid" msgstr "直线网格" @@ -6450,6 +6461,21 @@ msgstr "支撑:正在修补层%d的空洞" msgid "Support: propagate branches at layer %d" msgstr "支撑:正在生长层%d的树枝" +#~ msgid "" +#~ "Switch to zig-zag pattern?\n" +#~ "Yes - switch to zig-zag pattern automaticlly\n" +#~ "No - reset density to default non 100% value automaticlly\n" +#~ msgstr "" +#~ "切换到锯齿图案?\n" +#~ "是 - 自动切换到锯齿图案\n" +#~ "否 - 自动重置为非100%填充密度\n" + +#~ msgid "Extruder position" +#~ msgstr "挤出机位置" + +#~ msgid "Zig zag" +#~ msgstr "锯齿" + #~ msgid "" #~ "Bed temperature is higher than vitrification temperature of this " #~ "filament.\n" @@ -7056,9 +7082,6 @@ msgstr "支撑:正在生长层%d的树枝" #~ msgid "Failed to publish your project. Please try agian!" #~ msgstr "项目发布失败。请重试!" -#~ msgid "preparing, export 3mf failed!" -#~ msgstr "正在准备中,导出 3mf 失败!" - #~ msgid "Preparing to upload your project..." #~ msgstr "正在准备上传项目..." diff --git a/resources/i18n/de/BambuStudio.mo b/resources/i18n/de/BambuStudio.mo index f3d13b298bf3d147c486cb3dc7f92417b17d33ae..f3788fb6871b0dfedc6ed2e3514956f7d590e7c6 100644 GIT binary patch delta 36680 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 delta 37127 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

4~{7aF=8NqiN(%Dr(aX#y_~%*}-oo zFQJ`P3F`Oce#IR|JBuhYl)Q4p3ljdFwA-{%MCX4c6?F}yvDbv#a#ynr-SXt{vZ11j zJ292#a4)CwSIT$h*0tC=iM&J9_u@`q+fe?$l>Zg`kw1%eI$(D+TOJB=x3m@X``iK) z&^6vRT!p-cCdp|-c($jqN!Vt~ZldfI!kNf_#{edioypcYL|$^j70Itg-9olb8NL70 zQg{`aZK;@rTUSmBc~L2!?WhmwHz|9KnS3KH9S$``J%3gtzZ;=nNY^zCw^F|_x2{^$ z`D}uYH|?w=UYa_U!iY4Z@M3I<_qoS%zol?>(ryvfRh|kvx#u(3!FG_vFfRFhr)=z< z%Ds!+W;W+PO0}i-J8EXZDAJ2Dl>MZ~Tn|ZKN9`=6?u@htnDl9cYyL2Zt+woL^2bwk0ePEgW4rCykM!)^!-?=uLgNb^$f$+2?@IPkT{wS(x9#eq${gAV!v8cRChT23JGUM{?JpA6-4j|89bg`zet&G*X4k)-*DN zf+2X0w8w;FuK9%9ap$xhKDAb~jmD>)^fug+O37?^)DLa!q)eo3urRiW%kwY7ETSpY z7IpdBio5BcnN7<{`h3DZG?0|Rb>gl~o#K>DOIj#*Y|?bKqTV)4N%{M>tsR8@C?7_d zd*qLxyt&Lb8RrcJW>R=D10_{ zDB+9@?tv|%CLdES5kBCq#XW^G6)3ZobUS|1U_U%yb{2Kgzur&38*4{rU_ zq$Av!NKZPtxBcmZoyd^@d9Sl3Aa71?g`o zJe4$ESs7e3mGY9lmawjL#5YnVCuwO3cc<(?(%(|Q3F%jCU6p-CJm#ul17%~``G?cM z2?}>4qoZxS0r9@9_u>yAi5-M`1 zpy7|i&vKU|yn%+l*v@hh{+GsdO(neCc6NyHbMC&RKcVaq$}AzCkB)q7-4V1`n)GAb z@ohcN{Lhnd-Hxce%{W3srD#Cc0V*t{Ob4t^S|QZ+1Q%f~%uBrqHa&o{kGOU1vu(^H zZx(TH?mmP=DW5`pY5o04*uVf*V|8>h;vQ67OJ2ipX*)|wy>@m2 zi3p#u>8clG(-l5Q+of>op3*pEWGhLM?wdw}gI zA7##xcaXf>wv5WXr_5;u?DdZLL&}cve78Gh~P=SUuhdXq{3Xj#GjC^>leavsK1-eM^dK^?k4XK!n(dw z=L+{3%FN>a$X!f7Dd=iV;o=x=8}=mfM-&a5rc43b@h8$65iaMoDe1(`r4#sc?b4%t zbo(xyH|_Ydex%zcx{FW0_HFa^i)ic9H6l7Xs(a_M2^&ZC@X6=Xqj&r0$aepa0zMHv zqr3bZ5#2trQ>VTOL%aA;xO-HOsA!+oQJrbLuj;gpY7^13Q?yU#E}eby2M6c$=@rqb zXVm{))d|}cKgcUnaNPE7eHg&DY%RRz#LZPdUxn^bwBDt2zKRjiQ6+o|1Q#ffFSvNV z{Dpk-7cCK7C~t7F;NWdLqr7(3i61kYZ5_9IH6G}0@NsxEo-s#E8Lp;7HSYbm0l`!T!rQ9c#h zN4AUp|E8f9)DaW+35$;K?c6$|d+Xj&-J^YaG4IYQY-ZoDXZJ(9BReK^X7C>eq}ujR TL07|)3I1nz+XA|{TE_oB2q4uM diff --git a/resources/i18n/en/BambuStudio.mo b/resources/i18n/en/BambuStudio.mo index 0cc07618e87658569442a9a94b8d6eaa17420da3..7866f77ee15d2aff4bbd026c44a7bc67f578914a 100644 GIT binary patch delta 36156 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 delta 36483 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 F{tKzau<`%^ diff --git a/resources/i18n/es/BambuStudio.mo b/resources/i18n/es/BambuStudio.mo index b271886c4ec9904e8c72992cb2d481810c5bb36d..708d5115f27d121c0d73986d7077a82b4497bf85 100644 GIT binary patch delta 36676 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 laAUiyA=laqD70l6fH$sDDGO^io3fP?)#m+ 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 F{|5;&AaDQx diff --git a/resources/i18n/nl/BambuStudio.mo b/resources/i18n/nl/BambuStudio.mo index f773458b256666825f7b4baff8c4ee233d627829..4468382eb65843c64a6609cfdc9368fcb3c985c3 100644 GIT binary patch delta 36673 zcmZ|X1#lHfptj*jf(7>kLIepxLvRlc!QCOayE_MWcXxMpSak8l-Q8tzTe$Ccy174f ztNy8)ecGnI=bQwV)i1qYKJ|9pP8emX!?i4$dSGKzdQ&Wh%P^hexSZz%LPD8|H+ zm=!BySsaXc@eF1`?}?6+4D(`atcrfv5Y^GXm=uShIy@KS<1$pa?HHZ*oeKowl5hjn z@N-lJA2BNavPPX`8j6KV_q7I~Mw$jS(lCsI*-#zGjft^>&2NHX#G7GN+IOZAsEp51 zQ&eEG<0QxasQ66O%-leY^bW?smzW8^p+*=o#pH*f5AlLn4Xa~KT!oqePZnGQOoT3t z+@C-a%!KYGK=%@$8mx?JFcRZoTbte&6A&MX>cDJN#Y=4dI!r`-Hzvk2m=GVLmhSUZ z=07@t1k+3f$x!iBsE%a701QQcERSii4XPuPFcKGGee{@aI?w=Bt`%wk6RdNst5DBx zpU(Vi^BpCjDtR9)McoVaTp^CZRgI8&%OE)JQL21U|u37&g=7SH-Nv zn_xwpiYoueWea@8@+5fAGCi(|T7st54yX?FMoslF)X2u$_#6x;z7+H0L)6{~nr+IL zM=f;?)KWG>b==j(CJe^ZBuvEgxYfq*pk~Btj_FV;)b7rVTI+1+iv>^}td8nfBh=n# zZ_@{$cKsOKgnNdd)W-O@#i$Ghuw4|1t!$S?Xec9E5@BvA}VXa02RKMbwBIU@z>A1MmZ?W8D@z&Su52 zEv{H%I+$ds<8&fE61(De9E2U0InGdgkJ>Z6mYW$GglcCgy42JC1hhHMqo(X02H;cF zE{(pzOt~NW5D!7Ec_CDOEli4SQS}VA@ktn!_)1j0>rqR(4Wr<}70kb;p|lV;qZ_ z(Dl{^{MVTdl)>0!)IoKi1*XUT7=|lQ4P8U6>2uVQ{EM22Z`dB=t~U+#!<@u7Vm5q& zc`^A0_o;F@)d=JwVF2d9?Kb`rb*xfvG+#{eU;*OQQ6rj!8sQ9#i<@owK^#u}7^=QX zylvF*Q1rtcsOK+YT%G^x1Y(i!3^nqPR?p3*;&`Z$23UhJ9`Q_=5DQ=mtcYr$Ee7KV zRK4pkChkIQ;v=XfJb|Tk{+|-iNV07)8Rao0@itfz$6{iPUm$@jxJ z#KZ6A6Mpc|> zyV?E0n3i}2^u}(e@-EcW55aOcYCH3vl)x1dw1%%yJ^Rnbur1TXGj{&hZokf5Fh?ld!z9<_EkP#r6bt*|0$ zW_F?)IDo$R4{CEh!Q7Z;mwEBj!~Dd%qB^_*HPhRz2VDfzfzzl>^%j$(v)jysA8L(5 zQBz+OGhstiN5*0}PQ?s(5jBIqP#sLT#~6r7h-X60KvA3SDoa2W)xy-+5VhHc;6R*- z@zHNDpWT=VwJCR^8gTZRk;Oq(oEX&sf2@XKsQQPZ501q$xYVS(oVNr*N%(>~HX(np zGqF5s>KEW)T#uUSuKP{7v6zqeX4I6vMs@TnYNRm_n2+lqRL9n!mUJs>Mh~F-{9huV z-TM$#(I~eL1?6v5kPHWDjcX&!VRA5vIlOsF9^QX7bZxAn|ZidL)KpGt7ufPz|58 z`FBvK>oG>hx0njQ9OL{KC*XJ7Oj$!zg&l3Y2WriSqei{}v*K!01GiA;|0QZ<-%xuX z&Iwar04hBclVK55`MRhjX?246k4az%33?HYw*{8j0$WfOoI&m0`=}9oLsjT`(lnR? zHT9V>CKj@mL2u&KF$Ok3b-X2NkMwZa0>f>>MC(G-NH(IT_8_VQ9;eKwSu!k2yc`DM zc+`??z?^s%wUp6Ln>U>wY9Ph10@lDn=vqp^kH8~Tk39Y{Q=S0T^9&dVbJ%!M)J&B_ z?VTnV3tM4o>}JzvqDDL)H6trf+U&sJm&Itl);09_6pP@G2cT>PgaK?O|r@~;; zS78%8i`uj~&YF=$pgK?&RgVi*&qPd*%ds_{!>(B1oMwpi-$+0s{Tr2W7WH9M;=GxW zGS)h%^wy|N+5z=kchp`OVDo2TeB$#_Bj149Y`al2eHk@_@6i4I-}{1@f#j$M(_tv) zwegmihIlXZ;5{)9s}f&u(R_@4K;;*?WWF~vN6pj-TCIpV};pq8fk6=q2z ziX`A(OH_|rp$~So@iC|oPRGQ!5p&?*sHOXkanbuKKZc<%X2R2``o3X8jC#$S9$(Zz zgRU|E2?%5*Aq5u00Bnfb%`Qxa^HEc{6MgU^s=}A3ihiMvW&G=AAik(23P9xtV$C6n6w)rfX zgNi>y?U{^s%*U?_H6yMQ1hg4$qh{g>`r&KTE{%ED%t%ViNjwa-2b!Zs+y^zqBT?zI zFbLP9>N|@g@d|228{IR6oy1GR_VqGsk7x;N)T^PI0W7^k`@kd1&UI))ngEzF89P(Am5WGcvv8d*+M zdNtIPHns5{sE!V|@kOYHH=)Yy!YFtewdCi~rHmT{^lpBQQSlpUgxZmssyL{b2}Gr5 zM{UN!HoXmMYF!u&N1+BX(WcKwHM|P7nb)K0-T9dHk4E66%{Y(h@lDhN4{iE0R0Ho( zBmapZ821T3;bJb-T6e%@I2==9=u`7tWz>?^v-U)tvMEoQ|I`H5l8^?^*^E!9wT}19 zj3gMfN3x^R%b;eWp|u@qM7=RPj=`L`-{yZpJ@570{`8B{iC1&kKt0sRnxdwHMkA6R}P^z*HzR=o}r%ed|}Eb#hAoHQ8Sqry)hiMIU`U@@2W{a4Yx*B&>PjW zai|KWq4vZ=R0oz@w_qso1L%csQ4M@RJ@*qm(fg&TFE*;d#HhUyf^@{?me#Ssd^TzztTO3usoppkBv-L7|B>yYM#nx|8=f9T%IKny| zb&i)=4_I$nKVuQ{6aH&PQq9`b+SNJ)t5a?YY6+jCX7nv;raz-g2_Emv)W$$fX>5## zX;8-|2Wq61Y`i1tw2VQGcq3}cFQQ)A&rtP7e{a@0E~?%X)*RMy@0tHNWHco~J?xBH z`<|Ex2V)GJj>&KVs-az|5u8EI+%?qmPf@%5wM~DIv50$qFyD;gqVmH~={Y|z|5FJR zAt5$iL9OjWYl4p^9&T-eNywjpTB3ER<98g@!TYF={lNGb?UNaR4=OzfwTUyJIuhz4 zpn};kF&4+%SQ~W=Ct@L-iJGZvsGdJTRrnsYME_v|O!nCvyNsyK8j4!VDyWV&#$fD& znpxLE0-Ewwm>0KVdVFKklYKEWlLpmbR!oBVQ5~#|8cA)`nn$8K*bLQhCsfA=qS_gc z#c&o5(fPkkKo2(gYHW=OiFZO(Fa!tV6r1k*&AehWVo}l?U=S`sHGBxw;2G46+`_#0 z2KDKg{<|>(J$3$D5KsqNqaNsl1#qy9??)}sd2EdjFa#_7Fq^bHs^L+n8JULKOY^L& zF^KpMn|}>8llL$Y?K>|BXw&_|#+d0p)1mRG<1`I(;1(NyhG~gM|7m`f3&kMf{ZLCW z4>gd*sE%y4@q;#g5jCKD=>GhFM<5XiQGb~!PlmaOr$=qdh8T$5Q01ngM!FKUi8f*y z+=ZISJE#U8qdM@}rblr++{ZK)Dm{VY;c^E8NYI*RL{$)u+AJkdBdLU{ura2?E*OY& zP#xKW>d0Z#``|Qc58Om;=I1s&F+V=(g_RmLkdhuQlTe2Qy+Hb*9vqB*I1x1iYf)2s z5Y_Xes19Ak{`d&BbWQm^PJ9pY@d)v&ULNjEJTHo=e;sO5Z$Z_2*hN4MUb6+Bpc;6E zDexO=5BNm&aDUw9#7xASqBhY))W~O}W@3qT4Qhm2P@D4@s@z4?KyP72bUh%TDUTP; zOnFi)Ogts##>QA5XQ5skUr;>{h;H(;V-DhNFf%T|n)nZ@T-q2O?stEF)KXMMEpHgbB$2tTA?e1KyLz_a1m;X6SIX?FeU0;pB|H9A)8*qrbl9O(z~M8 zbUZ%5MK}nDB`_WKPUzvJB%TaaZ+_HiDwdG*uY?E^v%8CJ41gl^})SlUlI#pj2asJhSPhw+g)YN1_Rb1G{OQ0|D z8mI<3*z_K#_rwSrUxJ#6t*8MVLoLl2oBt4#5&vlO>bYL1SMMlP2i79xT+U_!MM&6(xzX`8$0iSI zDjT6@rYow)eNb<*QK&VajGj0bwPXuW9axH*`VFW}eFQbY^EUmyJI?w0Oh8i;J()R% zfv8t<0o2|ogF0q4P$M0Ln%cRjksQDfJc?@Q4QjXlK%Jg|nj)3>5#Xg_KI7f_q=1!|CPj6S!%Mb-BS z)n5Dn(~+P6&c8B3NzhbApyG8=ujFp1wVj08e7mp$9!D*eZ=i?!k8A=_9cY0n*Aex` zbfIQ;8m7nDsE!>$wR2Jh6nKOx_zP7*lpwPdiBJy&qNXeu_0=qkjWLm7PUDRqrPx#MD6x?X^g?Bj^;;I7-8cT zurl$wsE)41`M3`=VPvp}Qx`{Lc6@@`^nPhQ_@2r6%R<1tTd@Zj<51@`T8NnmKUBq~ zP`ketX233(6X&7!!bR&1>`DASuEM(MOoyYTH!~L-vyh$^Gt<6PgFq+_LG^eus=>Rc zz3?w;#7+hikA_;yB&banj5-COs2M7Z>R5SHM+c)uybjgTgQ%rEjxJU34*_`v)zDqk zj66ndqG%aSgK<$E3qUoP1#$#tPr_3L&|2h_fNYIq5 zK~3>Z)F%6kIz|aHo6qrd7(~1jrp1=1^5boM73w{54s~o_p*or*)GTQTYL68_?X5DQ zE)!@-LID!G+lO5Ez3!{Fpn1OT9C##3E5VxQ{Txw+Va3*3;tbj4Id$|A1xHgU; zz7m5lTMqM$rz&#XoSCTSu3!;#waRH;rK?dR_<`DlX>*wwsfxXbPe83@%-m*oSH&_O zya!O{*(a}u(-(81W@-~^2A`siUG#h&?w=9!qrS*AM2@}7nMxp-gi~0U3g4*!W-nmA z$G0qK-VYbB59MNpn-LAe+IkKvW7uinH)Orq=oISHyfX zS%_Mj!>G-38B60&R0R=5J=}kU(g8K1Ls%F;qxMdoV&)Cl4fW=GhC!I3xanX))QfIB zro+Fnu+IM*0^t}|!o&SnBRin>K&p}^y*FxC@5D=Z36JCIQXbBJ>=xnSEXG`=P5e4) z)6QmnRPPPc$di{f@fLW7_%d|8CeXc{>0z_-9`3)bvK`gXd(@lkcm=cDi&iu*jw)D; z^qN=#XQMaXv-vMjyZlb+ z26|ctpWjxx)J(0k`A1Luqd9w{1~sQ8Aw@-M!dRGTNr5|bus-OxqK;A=6D@=`TP#;F)Q4K6Z&B$&{hlemNzC_JfqFQD~lc7c)fZB9< zQG2K&=2iQR2&kgjHe<1ME9%vH6t$}#p{CBGwmDWYQ4J+QJ@1FgPmNhI6RQ45yp6X} zZ_K@Q%yT|<$=68y325!Jp{6P~Y9>mcdRzt7dYu181X_?#9FJop#;xz+{+mzjFb(k=s5hDuX z0kt=FpqA<;s{A($LZ_jLr$jv;f~r3+YIBxz5m3W*t!=IStm9Ax=c6iEhZ^aA)X0vY zMtll&O0J=f+bh&7_&-#GP9tL?)bnX=+?A1l8VE;qq&#Y~MWPz)jrtNf2G!tp>ps+4 z9g{ANmYD9^f zmn$21f*17WBoDUKRgOVp5-0lI?lwZU8co*wocnk9#aW*RbIcjDiT5|q1bu|fW$J%%Y z6SOkN>R)U?yhLmJ@roMJN-TnVum%3aLfE{GIq%C*r|L4Qp|_|R`Gwl7iQ1Yy7SxvW zuVYq#1U*n3127Vm-VZhMp{S8hM$Ob>>l)OQZbenR8?|J|P_OU{sD^K$2Kp~*Y2Txk z$Fdy*@sIOqna3b!-Dp;|-*<6dT2Jyd9OXT0doSu}Zj%34NEQA_J zGt`GqJ5p=P%oTKs1Y4SEx|d|$R1k1pel~t$)u-3 zeP76B;}uZPHAZdHZm7-d8bd(4aV4h3-KbBi`=}oOXZ7xEI+g@Af46}h@U`~mi6yy);NhZHEIg8qQ1R`V`J=xI@fnmdn8IXGb5={ z^{~obZL{6CZL`*!lSqbmEN_FX?P6k z6}=fN;#JhCN!QnGx*|A;cuiEtuiNyes6F!28r;uxupH_|RjVK8UoVITB&dP*m<1=J z8aRZR@g|PJnEg$;={S`59@LAdD95-Y4#5F<64jA%155|&piWOm)Kc|EEzRfw6x8OK zLV_Mxh&m1HQJ;bbP{;2U>bSha=@@UIhcg?OqvFK|nK$SS96)^XU=R1-dP_XSbaWn0 zBR$Pf5BFbC+HGy@8fF^y9&UaD@04>d04AxhNyu$C&^BgMdbo6V>y|Cc|lqdSEo_6ih=^xC~WpH|n{| zHvJuHWYI?%15w8}w~bf8Jj9#hL7b0Sb^aTVHY1&a>iIk@hMQ1R`^lz98Do0xi+Vp~ zz!g{=RqhoA;&;^M^&4w`C7T0PZ+lFKgHWepHAdAd@;m_@zpL0CQ;#zpn1$tt-$pf% zalH9B&5Igo1ZKpBm<`9+^uJKY>k4XVZ=-up;5_0#QLo^+6FC2R^Ia!U0+UTN4K_ec z)fy~>kFXR5PcpwsZHIcX9Jjv0^28HNHcQq3^@?tdT7r?N&9(q{;0n|XH=4rvFGyhN z6tk8OP@C%)YSToWYDVshdb6cPo!@NMVyN=fP@A<5YU-P!Hd#MZN5-ROU>#}+j-xjF zyQ%j4e_wHoff|T2%X}$~ zhWcKR9<@gbVJ_^9>X2(C0d1CT*1cGR_+iv0^P6opU3SzlEQ(swDyU7_3e{i_)DrbW zjcg=p2_~cV#!^(r-=miHJF+yq|L2%B&5T-;a16szmb{D$-ZYK96fHqV!{R!5bO#KzbSUFzvo0y-x5u?>1GF>Bfm z^AYc2U5B-ZKSMQ8bg75)1}meEWszm(L#zrGC*B)1kiSrGz*DFhyo>kHYdPm%BYw2p zjQlOC;CIv%#am%U?2lTS+^F=@sF|sW+N2FpySpdqxUI%0cogg6Dby0DTWRXgVU1Yn zGHYCqgt8PEgFJprg!Y-?1< zm!sbKJFRz71C8!lZ;qcIs^_UtYZQ(eL3PyTtAiS8JJeDQ#iFwm>c2T-335ts$VEZ$_QZ{g?@lp=RJCY6Mj`nk8z6dJl9&H8cRVBy&+6 zT8(<)yhiPbD4R^jlb{Bc*;*Xk=f5t2Kr(uxcK0j{#x1CducKbQPf-=d-fT9RKWZjQ zpgPhNwU-8BW*md+_%3vBKAV5n`ob;e?-K!SCXX#uxh;?@=A{-{ax_Yr5%Bn{*#)ZU07f^eSq^uTUfWfZFBXP<5wo+8Hod|zQ(s-wlC?v1U?4`(=l@7|fbVLk<1-nv;$NuE^Did$ z;Je;&6AwONW~4Z3iW{JIe;d^2{9;tcZldk@oj2F$w%3u!SEz$ikikiwbs1KbjsMB;G zHGq$(FPjN3nT};db*wCEX`8tSsNoK%K%q@aEeXeiCT(%sF55;&A>IA z{u&Dt|B7lj-(}NKRaE`;Q3Gybb+xq_-B8D?531r3s8{L?n?4`);2Km1x1vU{3)P{+ zs2Mqf`p$S8+hejTW&k7bB=NOa8hc%JKj(4|5zrL>gL)6VvT^Tg=1r9jLrJfN+FZj? zYrPcJ;2zX-Cs9-W#HL5NZk8eu>NKQ9EnPm;Ug&^vbpF>62qs|{R>Qlfk>JrzS6|{>B(v=f4dBO=VA1PY0oP z_cYYnE=N_k2Q}6Ipf=exR7Eds`bX4r&Mor-OMqIcVyOBfP|sIEPppqF?cRn2)KE** zl=eeaG{&aSMLoF5x))X9G3<@!QT3F+Z3a*sHR4uy4aZ_SY;nh&f(fXBZn(qwSKzQs zxN3cgno8%cSz8}#c56k{Id6j@I2yC#X4Kj~K`m*TduH#HLB08US!Y}K-gB9ZJ0xf+ zJnoy_KhQeSy3o22we|G+JAk+hG@RF_1R?|@p0xv267P)qk3)sE{60afVz z*qG9q7qu5EqdM3SwFjD`9_)mwXb@^@$DsDmI#h=bp-#mq)brO-oAEAcGe1Jgxtz}g z)HCOac@t(vJ(w4tV=0@S?Wy_AMYy$_b&d4_YR!{BGc!;awFIqDA2x$f9bSrB!u1$K zi++ND8oYpBcn{UnN2s1YN4>LuU_MOx+{{2_EJM68>iMyqiuYkLJcVj7{!8$Okf)c88F6M^FVe~k87YdQzU9BTA(WKW#cDMBfW`( z@jdEmc8`C}jIKpBd>mEJCDcG~V{Cl&FXvz1P`;6%22;K>52Qy`oD*|nIUI;XP@js? z-kW0;2g8YH#Zc^s>cD(#hL=#!=l@`qq6=yuJ*}f$1axfXpn9|sH8uNC9XMlsY}5b4 z{G`YIXm)oQ%t*WmYVF6PI=B)wpbeN6cc5nCIjX%+sPUI_g}vM7_v5+w@VmjQCs}i^ae4huI!{Sm6ue*}iKgIDY{@ zOas|bQ=cDIQ90BMG)29^I-zE!2kON#4AsH;s6B82b6~>%%!o^&ro0kr0QFEEZHiig z_LxBDe=q?xG!?Z=7hz^xjcWKBs-ins2w$K!RmPv@=Y}R2Li`NsMe`Y%S|`>o^INgf zn3s58Y>3-XGw#E;0QcYj&rCpXsv@Wg8lrmK74?;?FREj+P;0#yH3REV9Y2aX{})j& zvL{#`y*xafAgqjfadk!wcrW(Ff}Wl(_ovn_Pfzn9fqFsQ#RzCko5%ss)O_zFj0muRM*ADB($qq{uaYnng0r~A!U20M{49W^5F z7@qE>NP*h5Wl%Fv57S@^>lo`s)XZJRTzDI`sgrnny4O4pYAMU3-k`Nz1kw>`g*twd zPz}#S^>7W2!aJx3TgNmFbVn^se+|E8r321xMqeEqv}tM zn#s(_09;NX0@X;Uk4MnTj^v7hVnLV$`u&i|WWB>t)m{`59`>gA*9*VHokr zm=zDBUg@7O3&u&v(&#u8B#;topnBF5)xZ$zbX3EuP#xNj8tDm}ehF3a3!Cqm$i!o# zI*=MOVKvm7b0BK(%tn_s&rSlG!fU8COpw?#=!?yWhoY8f3YNoXs5fP56 z8?T3YUo=HeY=^41BWh-Qpq6H663)NYY5@rv@p{xu97L_zLsXAHS>q=)YnTBwBjKp2 zt%e%NFx2<|WvFBL05$R#sQP_SAaQ^ki>p_Cf^JvuW-+&s?R@95+AgaP+ z=sqQ=8Muym{sn4Ef7x_@Ur+aENGR%!SQ7OfXpCB_p{V-jxCoRXuo5fb2UJf>Bs1r> z7OKHcs24^b^uf`na*I*td>d*8E?|0mkLtL8aae%Jr~7ZaB}Z+x9#{waqxRS})QjsWYLESg z?%)3f2AC0~K}}gD)TXOp?TDJXQK$;0pw@gPs{CHmS{}msc-F>41MO!EmL$Cl>Ud8? zb#N}a|Ns9b1hkerP$M~sUGXNW;>tm02_jK18W*af-Kg?MQRS|pHsK>w2fb2yy8nKl z5AGvA0QFf@D3v)SEz$k&e=H@SDPMznGi}Ez_ykL1zSL%khF~w^vr!#RlEyrj4mHKu zQRluWYO|Kby;v93(PY7%`gbjz45(xJIGFQ4l|bsW=EbrTwV9%Yc)I^*vTUgHy$q+| zRU2=Y&Xk{zVWhvraP&{_>HhPCdRU0~5>$sCqNe;6s-6${5JzTknGv+l=;{8_*$ee1 zoQrw!l8wj9Wa6bzn{^;+FU&ygfwia^*o+$aLDZf(j~e++)DpeIJopVWV0Kq#v+E;K zJ?xG;9{o@~AB1}Gj7Bvy8G~`AP5%qsdjNI3uAV;_v0#Z2ue%tm}S>QuZ&Em4dxb1ZY9-Uk&i2s>k1oQ!(&?Lu|OGJ!n|Z@!#%jcCVg#;1<$pviMf~ihqk))< zcv;l@WDx2@X*Rn5{@*+TI!^0RQ@9&d(P`8gKSeFUf2fW`&0)S&HpbP;NA2<{InBtb zkY@o#1rN-AHUtO6!9CF z9#iKx?}73-gZM~ng{cad_!u1E!55K&W=5BVd%FL}#$8yHa@h)*S9>>f>5VmsfR5Q) zEUt6# zE8!6=i%H9Px_>{=7%LKgjQT9eRo3O{{>LJ!mo+`xkJ{~V%Xzy0rb7`_1+(ys9>kuw zt-N_NW~pHIN-sQ1`V>5m%_@4jf5^;J$^4*_rn0B=h4h=)2rpGJ1IX>F>goOs$aE}8 z#xqm}Vb!RZsrIUF_CP=lGu1;dD(S~jZ?ZEr&FN`c%e*%_p_a5eYDO=jUPM`IoBaIN z!lcDE$ z8}&G&SH(Q zHbRZKw{)qSD^dv|E(pU5pPC~=pXA{)JWfP>qFRqsu7=@t8!KsxknXe!KzdgJ9l^|%14;_}!E>!IF^f1{4k z4b+r>v-!S_%()+gnz>8Xm#Aax)!6JU|HhpEgd}7qL2F;q+5l4#?}_DbHfn~R+I+7j zo(_A}NrBpw0jQ-Zi|SZQ)X4jxKF)_&_nRC1!K;j!xXdG&lzJ zu{j0R<6WqV_MaRhf^?hV|n zN&9_eq1*#1c#8EYUz)o!WtKB#Pr1tzK8XCn-2FvU&t)fGmuECvDR{0a1{0r3nGnKi z-#NmAfn+wP!fZT{7t2zp1U@G}C6?!bZ-irOc=nn^`o7;096&vqZXI7;JBk0krrGEE z(a!H{x?U**$Oz>wWDEOJsjjWWQ`xj|;xS3T$;0vJU{db1+`7`y(az+RBm9W8%RJMF z@GNC=jiK&ul+ksQ{B`6%AkBlc4;p_eD)k^^*&jViWjmp7M0aiaA|C8YxtZKsN&kJ7 zq@ugT*JCxxjN$G{IPV|zsqClU_56Mi|Ixp{-;M{8l9`!Cn^Vy+!Xs_rspL(d!3>ns zRUQ+Qc9yV?W>=m${6}Xz2&-rn`#eGCybTZKxo_MN#8XjdEMZp#0_%BbDUIagu1Y+Q zYT%m2y_UR$6x>F5IpLnluos^>PBlAIg-G)u9zh)gc>WG$-4|)kx!V!xMcJI>jiO8& z>f~}cDNMjgNTL7Vb&m&9Q{j5#uXnhw`uz7IcQ4|9nWX>y?3XCW5gRQ8gZ9wIA+79R= zR#$I5K)DQ9(Uw>GT^i~^{2UD}=MEzOCTUN(b#SJ{0mGC2Oe&Xg& zJo$o3nRMLUNoz@&jf4}EKG;4_)G49$uTMe_D*kRW^7Fu3(!*_s;^K7jCX>F?&Qet3 z^(a${TUT-JD3r^IJ8YSMY<)#+J*AlX$=sDlFUNh1a;|nZQHuYnQ|~G-&VObq3M5kZ|2zdH2%q5rT?=g`9mtEV5preV-cS6IJ4WYh`VgKA=DGh+KaA*F zNV&b-y7;RCP8IU>{lketU>XhUnm~c)%HaB&%Jil3_mzMS#38RH33n+so4YO*rRVNK z-WbX^C7jrHB8IJVHsyzMAF&njv+Dm|F8w^OYd8{@9-?f1&3|SJ zEGJ_g9>?cYr0YHf8WPuaSPxPeKkztt$?uPYiR+3WUIkm*ve&FVNb5tm7-jieJ5D~z zU!>vr#Is-y?i>2_>qnt>WOlF(XCfX(cn^1c3XdTkfVx5nPowN$I``+5)^_F{<)V?- zk9u{@qz?W9ofF^YmnJO(;cb*zL)dknf@Qc{@?Zrrj?ut(G818GZe6tv?tjhh6KR_$ zdxX0&>HJdLSwvc9>fkRsIW>586Y;j(eF*EShpBB?@y*;Jv=yrTACC$?levq;)>QJA z`-Vz!-K3JSRQl)jll($F^ZROPM|RRSkO=qk%*Q{op zf%HzK-=7$8%RRvt@NH6h6oe2nk*ZOC$iPLS5B5(~A9H7$QS3D};Mf^4C?FsWc zB_}3#L(=w9aT@N{ww^MCYf|nC^(>}>>XaG4Gk;!x6M03MSo;0zE&}~1JfA{~aS0U# z@K78)LA)0CARcH;nyy8*p;{{cN5y>zH>K>KS9crPL>sz#Q>HS{Kcw6W>PzmPf0O4V zAR*LNt|V{5(QLevZODf*4{T*BGlz;&kT;4uh2pL=eazDboT6XKscfKOV=i|HN7v*!$*10kIbyZJK9RR(dY&40^AeH>w^5^)Hy?bZ7Lf| zSzWoX18H>#XD9rayr$f5Z9VQn{O51dj!?%l_wV0-r{ZNQU11B~B|e6`IfZL-m*eh2 z{_iV@z$VEEnCu7^vO0>f%G0c7slO+`?wvDif^~! z-L`Br;HIgK;+0g^oPzxJ%zdpTZ2|>O^FVBRd7k)j?qKqpP$DB?U0tv%`K!4{ z63;@zO>7;B38$rwytdK53Fji5&c^lp3a$S;TUj$Q67tZW*BL51OXY=mSl4ZQ%AJ#E zVq#qKeqZN_ANV8whWK0VOw@ab^h?~$c`heyOd)(#9nqR*C&C|kxv$mycN`A|*9VEXm&qs16b%8`qx|=OWFMXQp8sTVEdQ zM1BANNJeuW@WaVe5{yHs@NfKm-6L??M*OJk0eM%byoMcBEb^Ay{8sk4@#OC&zcYH- za@i@vpWZoh=|F%6sGtAy6NyUVH#|k*NHW?H&PzoZ?MPJjB*NWD^C$d+{Hz!gt5f*~ z?v;d}aO=uO9a{;9*@g=dPtARu`gMg<&p_;;?|(}O)a5Ql;Tbei%~nE^6G_??+lfo0 zhf|5JueQu1DlE<2f%L~F%l+TMJlBR$4el?5i&Mu|oJZM-IFa=6)Zy~7l}DvV4af{d zT{TJXPJx>y>Ws7LcSw&(1-iNu&P@0+;a!B+bN{{?QNBNSVG;sxAbB~tyV23@#QEFT zy0rg!4{J1bWd9OwLZwwq0cRZXH{2&EGMowu5*}pBKGDPWs%O&_{m%1?xhv6-u4mLW zkofQGKJ{!R@=E8wFM%=?$V8$pe;z7^+iVAvc9cd-kRFFhigTB;l^r7eAD)X&+>bky zP8`Itc#7u^+YVf_br&M98uu6CQ_(&CA~sVERn~vFR{zm>GU6X8+?C2+;t1k5uq2Hq zqg*?}7r6ht>QSfu1Vz_%%KhK#vrTigqF`fsdymTNVn*)D+`5u-_g8~7lErqYux+Re zd3)^WRQCQK9acQ4jUQHoD>)5D;pVRoI37ILmwL+S_kRm$tPPQAWYi$M0CnXfZ8w!< z;Guh17XRWdKwdNMxhnL>b&5*g@N7z+8-W$Lqf%dQOi#Ig$=|~LjJU3Km`lI^T}Gi4 zR6K*bi|us_Dyc+)hs5Xe&|1QI2yZ5wgYvp2kamc)Nre9*ywaU&{!@}N@u=e}<#jbC zJeM;1v!WI}lakwgY5&Ki@F>hr0bRN2h^`+zbc+g#ke`&W!$X6)FWGYc5-v}&`qSQ~ zoum8#o=;2pRHXmDir9|)j%T(VaBU=`o+{`1OeG%NxwyL#FHJ@7?Ss83lg*avLtY4F zK4BSJpKU9PLE7)DtPRxSnHtp7%f<`hP0H^f?db3Ce{(6+jr#=^H0HicxSD<7JOwB5 zKt9$n@)sy`i+mr-y&#+oTM{orx%N1LjxW&f|5}ofMm2KX zA)^xwW+5$>tuVIc*Iw;NOGaLD?i4iA#iqC7IbErFwkdZn?hx*bl+iVh^18}cuh{bL z^S_!(M^dl{_f9ebDOit(bv32&A>?1P@sp&zrOa94y{T*s;mU-!+Ri>CzZ2;PaRBM# zcs`jOfH$7D<;Zrv(VlCh?U53)QdveG@<(6pWZb{6{uK5h?-mJZup9B$RQ8-QKBTFd zEu^<1T~`_!3nKp(X^(89Yi)f+NeiP)EB*c3>m-iip{XPkA>$Y|wYHsl%Y!cox1h3z z%R}KhO22T%^|j_m#s2rdvH} zJU)eVEu)fjwxX(}f2Gq!x${v`W6HcFZJHfjG2%~1k3qaA;R?16f1bZcdPm}MDeu12 zeh*t<3L~gZMl-x`^FQ&xSi<9}?7dBkAe@9}`cke9_if7Tv3VkZ{QBGlXwZxNL6qI{ zyFv0_kp7BiI+5mjXfw)@5QB__6xe9fW>LvW!qG{O!~K(ZQpzR7rQ8Py`_n*Mo~e%G zxw}#R7G?jua@hEDIx>Nbf;@YUa1VX|YfI)nDjLL{n8fc?;76gc6gq@Us8m-q+o>DY zLX@q{GXu%5fOCk4^Ng;kgmn$G4R5#cmZYucUPT?bFqPi_6L@$81zu8k1BsRJ6?YaY z+d=#ocXRTObEoFPuH8B*(%k32 z1%<1Uq3fI-!6?!iQD6)4y*#jj{Ho+{!2Whd3X=YXczepuA#Ev+=YC4L7o?x(*&mci zj{i~DB{jg6&ERAv&()ob?Y7Z6R8p1-;@Ae#Q%ObcIXp1LmRU>u_qCU@GblTgit>^_ z+2*Cfe~GWM&!~LrKf;RV;F+9y|9jGb(`3FTu_ocD+-s;<*F-9xLA)d3LFmgvPq^pP zKzv(9xgP@@y~aJwSO~v3OordONu5q@ULMzoSqcG9U9$3Bn)nDBd7# zHigIW&_ASA$2FwIB5fTF#UUP*a=xV1CM^MBT_uTok>3V;avvuxKlu|$^QN9$lxs`) zCmndBpZ^aN*v37Dg2gE~itu6zY~*2GV+sFx)#sW2dsU}QLDG|O@3+s*qORXpKI+u< zj=V~wPr*0D_5N{R(QT#AY&-$}vT1YZ@n9;*&4b%*Ma`(71!bDxCCVM4%uM112uHVd z%%prL!pV3hitWrk!Xb91%9_7Y#v1d`aa*yT?LpXwLZcbgbRP7@!rV(J_m~ECO(Oq4 z`%HGyg2;PKS^@5#g#E}%MEU~ae_<`2*{=t=ZW|nb&)7^G4fLUKK4)|2xP=8b-#b~j t$@ZmLJd%cOKh(fuRz4({&7-J!UZT6mXNa*{%d>Uun%Q)^kNn_4*xYqbMPI_!p&~fg^cAWJcmFhS_ zlN_fS24fr?jAT1wuoOm~g598x>Ooxk61Ko!y@dRqXw=pq3MwR=7vFP7P zHqCJol8_G7aV}H?1<@NzTFaw4s%qm6t<6z0ZG)O=H;jorPy^_L$#Ig+Uxq=%S706b zcdikrjk%_qr5lK8i65}>8>p2@H^U4d6DA-YfB{$pHN$o`zZ<3^J_zgLOl*M9Q7ce} z2d)X$LAPe!j6e$PjGjk;o=1S1@l;fY3o#L{x9R&Z3GvgY0sM(-_>s+jjme0A#pIZ1 zmg6MFY^X;UGK=+(MW8kbYM>D+-U>C4j+hZ6F#}G-?6?j!kW1JcA7C>qJ=+Xm5vtr8 z)C7LF-nKqR)&De`_1ET$HHYQELZ}YMVM<(s+5?AB&-euT<0aHUzoHt7@r#*hGOR>A z2WG);sQl>|jLWblUPY~ppL?z;5Q^1FsEiu%Y}6xIZv7QCfIX;{I)N&8!NzZ43F3cY zQOq{a?2VSF@)J>ydKT(Yu0RdUz11ch#jGS;#GLrIjc1x~R-`OyK&?=_y9?@B_rTOR z5H-M=sDUj(?Tw8#{Sa!`pT#Zs9odX-XVU_69uK3I{x+)MH&lax3r$C%IF@)>RQfqg zi#IS6enc&K@$;DTbP9S=2!5Urtx#dq%*&!SaXnPIMyM5Qi+TjzFtMA!U;-N9WYmlnVL#l1 zL$JUyGqCNrRq^GF9-pEHSZ{^nbjQ;eg+*8L7R60C67#Pzdtf(aA$|na&tK@)NS)PY zb0kGAS!T?L{-|AA5w+w^Fcr2#Ev4J$&q1A*^{7pD)W$ENPR}z`yKhkK{DU#kwTAWA zlEhkLmM#fuCDNlR2B0eBLsck&v9T=1!D`4Ra_Xb%wL_KfgL=^nM-6xurofG;nIE&> zUBmjT!oMV_A)mEo#;H&<%#CTV9O@0$+}ab>;26{jEkv#47WBts$kTIPp_Y8gI> zQ3Kn9Mev-PfHp_$^=1YstbV8^Er?UF8pgxhsNMSv)nTj+=F>0@Y66u}`HfLC?TcE; z>6jmX!B%(<1JE6`(FB^ImT(-#$GNBhtiqgl0E6%;s-rZ&ni=InJ(6J5N)*9Jtbyuq zKNiGym=AMoG9TlOF}KeD3<8D7ID`f8lZ^*#HcQ?b)05s8i{VVvj4q*OcpVes2b=EV z?J}BpY*c$wP#qt~bod!nKlxVG&Cd4_pVBP(v>wJz{&6xv3unnfd`B)UUp$7aG)&3`|%e~hOAOUJq1z}n& zg<6RwsAn9BTKZuafQwNBIfo_iD(1rE`%Jx(r~!sqTVM*}olz?=%%;1?6Hr5QFe@%b zZKh*56mOs&L6iNCGXXoJHsu#o2c-^}nN>$MTo*O)W>^=yq1r!=T9I>D1^+VXZYSuV z`3hDTb!^&U7*0ej{XIN}Z!k4(J7mh8!y?2#pq4bxVKdNB)J&`3cx;Ip*h|zS{TsES zUPtWtPeDMtHyf&!f^KE}LqJRN4fX63pE676huMi2Ma`@gD!&6}!ofCuA(kM% z0(0XdRL6-=n|hfr4)N?53xhBV7Cz1SFGrvW30ktnsE#(-_)gR_KZ$xY_b?b=pgPF# zn>qghsF@W(tweQHd(CZnB&H!g6!pHChkAr-eq;UP5;#VJUPKpcfycJMM^wX!&Y0bs z1vP^rs0PcRI&6ws`Ysq3-PUm!hxkm4jf+qNUyT~zP8C$elc<6>Y{oVCrpPS=gr9Kpq9Qh zYG4B~0gkfq8K@Ooh}uKjF&^&4ta#Fy4NJ(!L78T8_P@fPb4e}Bb%oL0DM@~2~F(s!X&>L&7v;p5Q6 zk0Eb$=Q+CdY*zhYX1WPI&k{A_y_gD5*!UgP44322FeF*P>F$Ji%2e%lo6gW6=HF&9q7+_(=lpr@D~ z|Hc`Z^p5$MUWFBjzqav0cg>y|gjGm)UnHOI|2&m$9)Igr0mg+mIVb=rm%_lLY zAf5+PVL4PsO|9M0m-r}DJF74w?nRZqiCXgasLkzqr~$a?gn$N+2{qFoR09=JE6@bB zIs0H*9E%#ra@5lAK@H?22I4IY!MKmiij_gNUmHD}6IHLHq<^Omftff0)lk~M%*^v* zF!AE3k#|Kk;6}}Cv`t@$TGAahei}8<8#ewCRWBwROXcEYOw5Fy^PkOT1ft%}rO+Fz zp+*{pT7ed*mFaHNN1`_4G@HI3wX_$}2XCPs;X|AL4%P8D)Moa2!uqS>cu!1)45*B3 zs1fHuRVZZBi=sLxk6Mvhm;+m4VH|^c)`xK=-oPw4&|CLt^S zz-*ZHnMtpNde-5nne;*Jk&!liK5B)wSP!BmbQbgD9W01RpPO=(Q1$C!D0X%eh(%zf zbt7tKJ5Wn~0yTh}sF}S*br}1F*()hfn=2P;B1KX4>Y~cG$GA8IwUXm84o*QGXZKtJ z+7xS09q&Uma27SNd#DDUqV~iG)BwI%eO{Umsbm;~^fIUpDxm7sLKikcwbvZgUt45F z-A+FO8p&wX?w^HfU>&M~?dXGtuqB>Eb>#obEOh{CrX_GI)<^CBxUWrneyE8Ru~xA* z_Q><^NI=h|zjdm0we=us6J5jH_yx6B{N9*XcV)~(yf^yeEL8b})(2Maw?yiH$^$3f-H!E5O-CF9( zHlYq`X&a-Kv^lEb-l$_U3N_QEHhu(kTJE4`9OHvo^6Z#_cu~}&YlI1~C92&>>!=Sr ze49zn8tD*J!I798XJH7gLmiukSQ1~LmNNGzGw@JUN99qEs3s=CPN-uy2(?*< zpdRIN)O%tZ`l0(A0gdbfYRSK$-b}GRo3G2IQR$sfE7Kd*;c(OnOhgTE8EPWyP|ti5 zYGrq#IzEaT_+?ak_pz+b|4RZRNC^63DsH##!=$Q+YTz0U$Hz9k_~b+%z=wh zoAeZ_<6Ec|d5T)Gx7P3IOFZs(lb;*o(7%(PfEp-{0azPb;b7E&?qddgiUrW;KYP3| zJMl(X1Bak5UO+vHx2TEyjT%U-A10n070-@tZMysfwAAHL18IO-@=jO?2cS0P7R-bv zQRSYXX8IMihhjKhp7%j~)WCyL?H5LMSlOo6M;+5Yya1$7-lO&;j${Xbiv|sN?t$HS<@fmH5Z{AL>#0_;`6XXIfOb?5KX+ zc?skuP!RRZ!cj}!9!p_Q48d*K3}2!jR*7W>-VK#M616$^V<5iA2Iw2xlF4W9Iusl{pt<+T1KsKU|=|gLc zxTd|`sD6&4=lB0t2^1&cHfl-I#WMvnTLW7n=sp2Fq0IKCN3`2?n37}g@aAy&gR zsEPc8{>bk1Y|5NikZ57d=Oz$oGnSxcunD!>&!HN)YxAF>Hrr>^4B{j*E0PBF2s5Mh zQgu|hR;WGI6V={O)M=THTFI^GIsbbJ7XAcl`iNiBoO*YMZ_Z z(~^Dyb$svRL;Q%t@Olz6;3i4EoXo^Kq1v68l=H9SG}9)`MQy^RsLiqlb&e0C_QLPj z2XCPsRo!G}W{pwpbVjXMcT@)hP%AYYGvag%!!4*ivg?aIoHGWES?21`Cq8`;8)aU=NHhvkkvd>W~=ys(t9mKY#LUo)S^&TjM znrUg9UKurmMyN;C(dKtY?SX!%nax1e--z0LyHWMdpkBSVkO8=z9|Tm;JGGZn8WUp( zhM|tlIMh;ZMRj-rwIb(GD|QR@%>P0czCk^*_o#M1p_bm2#%$_Ts0n7n zOVbE-47;O_&m`35n~yqXt5Gw(f?C=)sHIGn)|{d=sMAv#wcBf;PER+~3XDPxXg0>w z`Cm^!9c@N6bPzSu?d}q^Rr86s(6g2@q)MhM>nrS1{o3aDy8_*!@ zPIN2doh{&<-Yi`j)QmHto?R|fL&Z=HS3|8pd(45uQIBFBYOid=7`PAh!a0Phe-AaG zx2Oq!PtW<+vx}F(6i9*Uzz;o3h}ujwFc90L8k}YGcVI2zM^OV!p3w{>JF0$O)QT3f zmO-^w2{oWr89DzNNe`Pb1hv`b+V}?4UO0)G=_AzUi=WBM^OY+ddQJgWB)vOoC3d6A z9YGz#i>OWc6m#M$)WA}?ea(n6SVK?+Yoi*dk9rgls0!UtE7k|~)oiGZ??RP3f_ld1 zZ9H~n^GK4THeY(w%mZ!QU7SF35^A89Yy)bP;Ti`^rrrOb#*FN~G2 zGWNu2s6FD7l}|a$jG91Q)E;S!ym{SDD+2oX9fF$C0n{V;8=GN_Y-YEITl=5}IuX_2 zTpM4EwTW*)4d@3h!o+^&o6;t1Li{%7$I$FL6`a2=1WJ%F6g|5Y`w+i}I;RbDn3d>) zYWNq_%+_KqJdXN2e~a1++5L@y*q3+#T#Fk}18$hptXy-M>)-{0huV*%l1RaYj zm>2&;EpeVevs9H)o3b_PbG$$L;xCvT_n^w(xAAYN_ej<}=Gc}*4YVEVk@iFFu}OK{ zW^>IaL9f&;SPW0uxOZMJ&tE#zp*miKCGh}iY5zktR3ON#Od0eg9)_AwPt>DZfckJ+ zk1GEw>bUNA6VS*`qh2(Bq6YFAwd4td&DZFZIGA`O&c|1{1jpqwA2I>?y_~7UYhVq$ zhcz*80WZ%#R&%2-@z@2;H=mrSQ|InVKovJ&X)IaDyi$jvW^f6$8NZ=cCTED3=O3rF zMVX@tBt^|PnnI}a-wFM2 zDVCzaQ_9CU#m)Em5+zKzH8_BB_pm%RE$QVnQa!AV-%#l_Xrvm>z*cx4wP(teRyyae z6M?xT>_UB>*C}JZq4YsLnz@(**JEY8f@&aRSufA8-^!zA^b3~4bEuU{SkAl&tD@e3 z2hkVbqXw9)JQLCRk09WW^RW~j#}epM!OPi#<*@;NMy1!PXmp2ne-yqrT= zwX&D94CC`W6yJo}wB4(k`kPTJ@)q4{uy{2u=K>DI*I2E(8DY^HUY>uwG7;6$Y1Fe` zRMYJC)V0iKfj^cdJrK3z-7yaCwE2foyZ;30v*a}DeRHK2=U*M)CV|c1Y^ZI{=OxsV zKS8A@3Nz^iP%o^?s19ma8=_t;tx%_?C+Z8x0MvWHZS&`$I$n=DmfOQP|9T-DBSFXR zhAsF8J+I0-rs3qM^Xi964@SLW%cJ&47$(9t=#5dR0rf|n_wlHXf59@i6pP|tZUUM~ z=DOycoE!DAnh(`MH5+e)>52EWPC_28DLV> z8`GWICgev|2(^|)Rj7{YAPjx66KaMNP)j`x)xliMjBC*c&)W3MHvSOR{&SoD5g7n~ z|Eq6CoC#IYAN6eVqCO-_pf*)))KbnyJ%SaeN4Fd6;CZZwSsIu}($P8)Rc;ch-DRkD zwqQJ+|3d^cva_fqxrTZXy+b_$|Ar>NAo3n^N}}EqrBNSB5vUFZqE=)o`r|K{9gm<^ z>=|lB-=O;Wh$(db6E!j;_CtMl3qdv1-KO`mjz_&(7oc|aUevSx19hzKp*nhjs{hXB zf5BkluEv~qEP!`#o8o$9PH$o=zCz9918StPo0_FcfLe)ks8iyP+Vv$+ySNr=rW0)X zR`hI2RQWro_C8`>{9@xdn{obiPV+P~GsuVG#EWA&T!hW>5q80{&CUB@GwO|Y4fU!` z*~09VI;g$S7PSIa^@c9n&+YSMi^y3Ayjsz&lg}F2wdsnX zI&6sgQrQvJ;Y{m%)FWMHU4`m!9jg6}sPbD)-0keK83%2~G1RU;gW2$kP5*+Lk<;4C z83zea1DS&raV=^_?@=9iw=u^xK57LLq8>>W)Wj-aQJsf+1j>>y6*bbUw!n4NGkbz+ z@D*wXA5q8c3u;MYMwnM~a@30@7&U>Cm<21L-V>cr0~v-I=q&V{|1|{E(LvOVj-xi& zAE<`zqBiAI)ByiOEwNWy)1fzNAjy!g2u@aPPrPG0vtpM~6S#-X@Ci1>^6feQH3%#v zpp18@rK#D$EM0TlNxUWA#nc_m@%oG{h*#@m2C^PCqfJ;Ek77IY?re@}7u31mfckK| zjq2x9XU@Nt#HWiHXaN8V$Nq0^lbk{E%gu78!SbnS@Jwsgm^IOt5|28ipMYv>vuJqYYo;X zeh&4BvUM}3#~(G2Q1rtJs0ns<6VT^&6sqGP*c)eIUrf;5e9n(T&0ryF#%oY7oZYAy zoku-_>!_K%u>L@`o2-XP&x!ipP~67d^$4h92h=Vdi29;29km%ZVRk%%`qX-c8gR^> z#>A+BrAIA!4pjL-48Xb=j6+fHk*&y~bB^HRTI$j^9*LQW&qTGe6E(1ds7H7PwPKIa^Yg#B1I%vE zXbnMal3J*Nwa1gV)us;^XgZ#bdPVQSns^s=YVr;;o30WLBigRvbkqP>qXvEq^(Zf)p8a!FJ@2vR*t$~@&}PblDwq$oX{umM3`4C*0~>FN z>M#PeLS0cSFc5YAf3fL{Y%e|1>>R4aR$^(ilIi{ z(5Cl9m7j(h_ySae8&Ktrpz7VW>0eM2OE}(`9d&$5c;cMDdISoS&;^g+N({yh6U#}%i?a-(tfw;@g|yqXF|Onf^jugMV0%Anb0-KY~CywO1vm0)A{d3z#qq=PQw<| zQrdki_%cJi!(_vfGN^QlG_!28(z;yGY)hN`9<#+2xtWG@j4D-m^q8@E` z)FYTOgY&P=wu*#Z_$z9O+s`yVom!82md{Zu;xo(a{`jbwXF|Q%0#U~|)LI2qz6olx zhNIpaolu)`1Zp6&W^w+tX||J~NANppw|_zHZr5znP$DcsJO$RnTIh=_Q8PY?TJjfI z8B@(MdnO#UIeVct?KspxW}+sx(M>=d{f0UDCh`Yr#9nhv1MyJLG!v>~2xh}t=xNwG z4z-etP{(l<>V0txRsI2LMPkh}UrH08z8AQI2xya3z(Uv$HK0wX&9dKm4C@m=gBnnl z`DW7<#`YDKQ0R^%?~#gllcmvahpp&rEt+>ddWnV*!NLak7_<)(fe z^!)qZrUX$9Zgt1qcXBve%4gIa#u_5uds17Qx^m5){L)0Uzw90&l zHNtYlhoUBOVwL^=f0+a=;S;=%aaWrezqEcry@Fk9%nGGM%{UwC(Uh?1wNNY59JNW? zp*FW0b=F$!;EGYnhD06DIkurBev>rHy% z4PH(!;*pr2{70ynrvBBm~qMqGy)Vbe^8u=d7@jQtE zcmcHn-%vAXyv01K&Zzf5A5=%9QJZ-=YCv01FPy(odm`Re&%oVIdIFkR0c%y%Oj=WZ2Tr_Ag@u6IPGrE ze>?)2324azQJbb3YUW|6rE7vJ*Ve{+pf=SY)T5Y&dbW#g`VQ+ETuAyo3_A=(41Zs>7X_882ZD{AknDpESoe1bs=bje0aakO8@!5d_rmOw{IEhGx0#JhkzEF$QthDYF7TsQhH80s7hWf;fhF8C-&AJn5XjE~ia}{-|d* z0X2Zds6DaTx&d{3wqP*cLG7Kyzp;W|{H+%iFL%bQNNdy*4@T|&aab6Spa%98J^%e* zytC#PkXf)j8T+vVWK2s*4K2tVc=KO~eI7LD+bX_serX;GvnyAg$95u6cs1ADKAsmZZ z@+w!&%sOBJ;-gXZ_n}tu3~FMRQK!l4nwdayHvxU=3`UKt3Tk8>QO|Y+s^dwh(=ivd zDHo$&y(=&qZnf#xQIFy_YLh)ht-xoSp5PBJrxfwjsD9mz2&khTs163AW<1O~-loq$ zyGgyUZ$T*9Yan21> z@d0XyU!gW({F^53k9mn##5~vswYgTJ=hckr@K02|=cqm7^QTGAib?hTKOX@dhw`Xr z*9f&2CZU%24Eo^>tcyQTGp&2etXMNthpkbksXywCI1O{*22?xOQRN<^UQpjL8~r

YyE}f$r$SfvDZ03?H`IH>joJevQ3ITUYG(;*W!Ith z&^gqAA0Vf~?YtnM2EL$P96wOIIp$MSFePeWnNV-SYDh(=AwI{pHof*U^8<`#)*03_ zR@Za$%tKKt&;nEIp^hP-50NFP5g$W6!}F+-K0|f*9%G>M!VEMfYM^mYuk3VK1Ph{8 zpc_`fp{V+2tv9VtF{3usKLoVfQ@k`C4eA)W-kN`7R_HC~UrRrl1U=ier~&LiE#Wb&jaM-j=6Giw zRTyf(y-<&65b9Bk!df`T#-E{P`W1&`()Z?D_AJzjo_){xSI19DP(vS4GyRV7G5!bh z*Yh-}4ojiRS3)&h7elZU4#j1t74iFMPE`QvQP#pdI2jA#0gS+pZUSnc@!w`sO+(FO zwsj5a*z83O=y%l0+(r%HwblC{lb#-nk{*cKI~_1L4nsZrji>>hLQTkhfj}^UKTtD^ z^T~9W0@YzI)bR{KRVj6A4(hbDwD|*U{xF+972}e>9?RfP)PVjq>HPlZvswCJ z)QhMHY6Y5OaqNcr%C!--SB{~|Jwa`zcwfv+N}@jXDxzlE*v6w!$9gpCMK;x@ufdf% z|N96`B%}4e{8rnGPb+*uy!JP<62-rp4#H4N-x$?UC)5fJN3GBl)XL04E&U4A01u${ zz02keeJP&4w6a5NT3U}m%reTkn(ZO%8SkLfR{XZs&&VDS=~J(3i)d4o|a zQUNz$LsU7RL@v+!A^|cWx8qMhOPn9oK^auVYN#1B$GSKW+u%jiW-OH0%(xzEAmON$ ziL~*ds8cct^@iPtT7i$K{(hk6_x}l#m=1HIjz>|{Qr1N6)+RQ+531wws7<&QHQ-&= zBdAkz7B!Fu*1u7&L)1GxMKYJ?Z#Ds_W7HHgV=vUeW}`Y- zX5E46_%v!jcTqEaX45~S+Krps{#^tnkf4Sqqn36S>O*BY z>RBB`&G1i{w74!6)cBC8*DeFR1!))0h>_h)OSp`V6V=CZJ6g zfqD-NMLnD4s1EjG6+DHtFj-nN&^D;O(FfJx6x91-E~??Rs1-YcI_FnWEASq3V$yVG z;O=4s^eoDt8mfwUupVj&N1&E^E~?@6s2LnXPs8X-{5`6Cvh-#mIZ>Y})i5`XLgjD4 z`gjU?#BL{31~bzlsE#V4mbejWPc%oZNCavC15vws25JQsq4vry)bYG*C)U)o2IwifVlTjY1NH zmA{30ln<~OzOnJ@zVu7~PGbTUumkFRZ$gc5AF83FsAu^HYU!V26n;fD+%2n0B+EyFCeo2pqsgs1KXwSSG}6M^UCv&tj5?>@Ib5Ef z>zBc5#IK_sg`dC6^BUiTAK_}$%qIr8JYPEJUo_~5(4fUpbgmp1t0rQ=)HLBct^!)Gto+O}6bqx!ltDt$YgrYv2!cZ$z z4|S~CqE@O0s-Y36XT1pZD7K*nv=2vOnnEsTo$^tey=sV=V4T7(=a$ZY9s<2FUZ~3n z$6>ebR@H9qXKryqsr=ezk6ZJlbS={B!!BW@(Z`gR* z5}f}bUc8|QXla|3a(VvC$L?5$_%lq80j15Gt1{}it-^A6!|Do~{j&iT%P}+X#w^n-le8_Lq10Bm7rQK=Xb1% zmoUA%w#)OE%{RD{gg?Vv&S#un$Lxg(bM zx@be*2c!={z0gKAGN&kAWApy-$7ZCv0|{tJ$D`gzPi=ws)=#LfWZzJ4uDDG&4K$n< z1BmBtYK~(=)MkrBrLVQ=e_&kVuTZDwGwL+OZ031nZYKo+CFDoF(aM<&r@FNhY5-%c zvoSUC6{saWfO_TLKn?IMYSTK+&4e`7I`!5SF5g&AlA)QnnUX6%gWU=nHoD^NeEID#7RW9tuV>Xx*l^B=4L7D07b7B!F> zsCRt}^u{)*8Fxg@Xry&E>d~!14SXvG;StP>A5iUQ4L1g$$`wR+egfqPXa)LO-KbaY zC{)AKQLows=#RTm4L(4<@m`ZOW^tN8^ex1IrZQ zHZw0kfv}0n=u#eL0|j}^$2|0nvPSWRw4qG-o@%hO<*ee;wsc;K80HG zYbv0?ZPb!KvIX9up5YIifKXOs17z_XWWB&kL2jYros`}A7gel zr^AgEh%do#e2O{Lf0ZsS&rhj(pqB6sYRMm?mg)^^X5UdO6(iE@g}A60Wk5aCVAOG| zfqD=0u=&GK?ao5AyAUqO3ix3`;<-=*Xo>nt)(+K> z8@1#!QRjcDP2X+f7f_q>F>1hG-OOo7fibjH1qi6&!l(vIqK;cVR7c%WOFkC$EGJku zquv+SZ2UfIAU@sAK$4-3T`p9|l`$VSL#^l(bbFSDKnxNVT9=|aT#4EPYfuB+XyeB0HejH>rEBkF-{a;Goq{P#yak{PHM z%rUHkSFr--j4}i4hRW}Sdd8zrn{%?wpNCqh#i$q5I#j=VqB#HBEO%{zH<+9FzoVePK3A8YB%b%=Wa-xUm-cA^{njG-PZLZ|EvusB7Xp7`G9nq zp)Tz|XB3rZl6e;Yq{27~cs3UDvF}tR?-q^ZP+_j>gnQye+wca$=_tcH$+P?_qw7!7 z_-^VXqD@`ilpn0Rw%+`h^snWsH>o@6puVz$1ojvW4XgASC$#XAbh}< z3uW*>U#rNwKpI~m|L5ZK$@BNi+_p{v&3_5m*J!W;i5u}h;(C+m`T3Cc)((KE^AGuJ zN$Wzxk7?|%ZCu}WPm=CKejmcB!tb1%YUJnQZmdT{-gUy|D95&QN^v*Q`sbwJUNZUp zfYY5j#CAA`ywMc$$K<5X=l*K*MpNER{49<6bL$GTc^!$jB!8<(cJ`89oO?QHMY;Ra zW=WgpPD$Y#B>qEU8SXqZnwP=@N#huMzJ|xcOT_c2A@av!Nem!;4B;uFiuTPF?m$J>sIP+!+<%I(6$ zl=+9eeM;B!k441@?(8(Oko!Kjt|PXA(p0!Z+8*wi+(~VE3c|O!E7I^K@&=K%ikn}SJN?u#*CE<*$Dn{N%6R@>?ngjxu-_C`8Go*mFB!ZpeNq{i&kgu$JmkF}&7C9jh0?>zb0^i^RX1){GZgokn;rJ;h{ z@u-lQyE=Dr8fZ(}GztfC52Mqg_y>7kX!Hg5a>9>Dk4gA4c`GUZkhJJ40d3EtozkS8 zBJlygfBv7V0+relYsvk|rdFWBSPJW%t?L|>qe#=WhmJZDzro##y3tn@ zSL;{OQ~y-%C4+nH=8we`SU`m~6z@qPU4v}Fw03Fr|I?9xy8-D1DVq$xQ+GIJ%MuRu z)G~kYH!SBZ!RI!O-)}noD66Xmb&KOR;>oG!PR}1RDX^YOQ%MY`lV=o|Oj=FyGLkj| z|0Ion8sbbL{}cCbgh!IroI9NGNy@$Ej=oaS(JJbNqApQ{xSuD+k9*9jxSe+->blE) zgN6%mH{ec6WA|)c2l5^fzd-swD$KQ$yeOOhH+c!^;XL^XNGndb1cUmOxF2pZRh-(S z2NBoTpQ2EO?;p-SDz_)nj*Py9S73S-;yO*i-_1x(0)IZ?UPih3q~{}FR}Jn3bR201 zbe{YngbQO`%&Y0!Yb5m+knXv(|JKl%z7Bn$vG^2T!ToD=0n+)kt>aInGBi@xb~xGQ z>&u9)SH%6f4^UTMUVpyEQNNcR0RKM0nNAyJD5uM_|BunQ&rc&P<;mj1g+hgGL7U{^ z5NYoT{lY!M4kQZ=7vgA3N|Iq;I!%DCX(kiD5ghZwslB=&Op& z`<;ds5}r%t`gG(=*;Ax_w*@DX7C>Gy%xK%WLw+pM-u~YXJ*8WczQj|8{?ph|XQc5A zWK8>rr*bLx+xpL9evFuZ9kC}q}8DA z&(~lEvd|8?m(2^eb!$^^IBBi*{ckRXo{$iI<)PwwM(Iyl8Y*PQQWRc8fj8Wf$v&_Zsdew!!XH`iuAh4G2rp*m5jj2Q~%25>G;U^u<5tah{R3gf^CtUzrZW z$;?EWE*JS9$h%5>Ce9$A%k5+)p)r}AZRh1k{f~w_5iwEx+q+ykjpnT&e2a$ekQ2h)PWb%__F@p(3XBn?j`uB$d_ zFDTQL`ipFu(!X(+A#DfuAKW*{3&y(C&4q;-!>H#&d@kW?+%u@NjIW99aqe{#)DNAWQmD5| zbLAudknJ$PN%H(T(GKt-`7P;CS1anj!@|V>BYzL!f!ynDS%S_~+g3R@o%nHwQK-Wlz){4f+Im+h zn}V{3XuJUV`oVK6!cmmTq=vYfQl}U<|IXEOJ><`Z`rlvH&*4r`c^i$*z)n;e$gL|8 zg)b9cg0b+F?JypB-RPhy@m1vYQOBMd=8qn9w1>3zwzJj5|0S+#hfN!(wzU3bZGtk- zaMzk#h4otgCLD=UFS z#A8zC0=oZZ#y?-R$mq(Qg1aJ}cKc~?RS9RL(p1vDX?Pn(+I%mZZ6XH67Pnd^B=*eQW9xI z9h#Yv!YLTB$9Z+7^Q}T6Xunsa&=dI1(MtsIk z^Q8ah~J2h^BwYE~n? ztvi=+5amXru1%x|QTHNual%oyjbYS_zTCf1xPxsVINKcD}ZD+qmSH|j;X-8fP+9*kQr|r0(EwhMta|V%I`!73%(%D9QF_Mhkw!#1g zlG@I;7Y%OX9&huillO=Q}P0o3m{eRG#&?pwrkrL`p|kW-O6 z9`Q6d2ZN~TW6Mn>tt{aub~!rYI_|Z!@eAdOG34R6`KKx0C+|4%w$#;?f&4DqjkUHt z2;`)}V%&=eucSb2OhuzpxTCK?+u#Dqr69dG1Di#;1cbe~i<2IGRUT5fVjyEPx z-)MC$(BG{#+lm{=V5yy9#Q&nR4L>zFn+|#sPtARta0}bP7vcvf`wyMyn3N(t2KQIm zsY1E+w)5%Om^+D`#P8N6ZW`!ML0xMo;73L*Mi+tYxtEZ3kp??pgdO!fQ{2fw-R*=s zlKzD<2Z;xBmn80sQ*HT0wEvL$zfmUoic8y5iRgdZ!*jhOa|D&Lld+Y;x>l3+hPy6l zKVPM7!)3{9MIBvTZQ6axE++k^Np@<`ek;PmY(GkVMmUbi=fAC@vpY7^i^{ubaG7n? zpGId<@E!4_>VSL8PYtP!>eRnWhq}g)znC`mb9<5Ao_HVZW7}&)-8$T3$bac+$Me}j zghJP8pd1Ce6CO*rh^^F?MnWiD4|8zGvFZ6~MAuT%de!C5 z($N{)nOdu-Ke#5?_T3!_wBde6g^yHzOy&_=*;A4~=8%4#M*jS%p^|jA+BVX~4&WyB z?vl2XI+bmn+W4FBP0H)4&T6fooxe=f?fgPQLK5baP>DjZ3BRVoA9xODlUA6!HQ^7G zDM9%X#C1KzHgw*Dj!SX7sFRIyx+)Q#M1E=RqTJ<4&qewO!ZWxR5Wm`q1OrKH(?W?KBAk^rlVNVkFJyqDiTCBc zM_PPbsq=q>NFa9{3h4SqLnTPp6+z>dxi^tVdCz}u`<}S2F_bxrzBGP?%m>uFj{lP1 ziu=1NaIHsQe2uLs)0DPil0Sj^?)p^jPhtg?FnpL1pVD6p@x38+KIq$3Jf7JfWk*@$KHgqkX9LAa_hQH zo?i#qey05ip0dopxvlgoon<8>4wc@}sID>OrNd36)NwJREMsSTSuL#+}iCM z)z!CuhjxMe!`u0G3y+G5=n+{mZlj2vzJb0y`*etE-Twbmz&E^CRM#%yQ5{-$?%XeK zjjp~F?h(;5BFeW-L?n&(Q=K*uZNqzYj`EG{8tEGx6y)dIJG^tRi2q&Hsk8I9JYMO7 zd^)uAWdJ)LHuswElf7y~}P~o7U zodYAhHq=N}%QKq@T92el--y0ZJ$ki?=&{p(o0s?Cd^LMV^yt~TeR!vc&JmHmk>TMz zG+DZ0sy(`PWvW%e8GLCwABxUCw7@HQ?f+FMZjFct3Wa%Q*t=Kf&K)A#{m(q8V%nwi ro>AeEZRn$oZ)Asvs6fxG`zRg}cV|F8*VoWkjm=8$%--2mA@=_PxB=qw diff --git a/resources/i18n/sv/BambuStudio.mo b/resources/i18n/sv/BambuStudio.mo index 6243824f9a2364385167da0d4ebcd4fc8ba22c48..4dddd0c6c508e159c30221d92d0253ac1c982f6b 100644 GIT binary patch delta 36108 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ℜsYSRbUL}7Xo+G^+_9mTQvN=Vfbmetr8)%Om?dTSu{?TC?cU8jv6uv?JO;1;R z?Wci}G&Y{R0Lr8#+>f*XZe4A;*OJ$fdY=hrpiFY^PvPhL^RIN2K21#530j>%I6CI# z{(~Bul}7DOgnN+p7v*zOmS595t4OayS}1A1UMr}>AFX+=Z#M5A(sWHXc>Wuq|6iiI zlF^xlGGT5i-R4e3xE{mLXDgqiv)q)qNVS64jWXWcuASl!${qZrVFkS?cZhnrnv=hf zHmBI~yU6QFT3gR=i70TD#+s5Dg$jc_RoK6_un!gMkT#bxzg~^);GWt}LTL1)O}j{) zSj4MhAo+Kw+nDhGUeUCpBCj_TX#Pt)hYkOvq17}HpSv<;-g5ie!PTM6PwwuvkuTi>)9i}R+2^i2)86N9)?i;ET!fW)>V))qv_^P;@P<~m`0o! zSdIJ~)IUr9SmLGZ5L7SyFJZ->(@x~YUqrh6FTnGF?O5ZIIhb%QTj?+j1`%&dhfQo5 zRX$3519|UlW7F+mmQima>2oPl23OjiLdZ{H+gxPJp7PXf$~utIk9#@ySQ?JJY7*Z~ zp~l>AxpUE=t`4N@s!m!g8tX%RHt{j!7smCZ>&nj^9$vupcOOz>4EGA|#?;trTe?ec zZ@F{Wsol2jqh=S%6tm@KQ0FLhqtP;d-05^8tSgARTdC6nr*gL={Ra8P3CAZKfLukL zVMNMv$F&_S$H_F>g|q@TEdeEab2lcfG->r|=yw_@5uRX(pZkuX@aLXRYf=VLQ`dil zlTmUD;UDA&QL`y`8p0VcgB|`Klo>)?*I~kAX(uM}cI1yCt}7jBx=xYy+@>9;%pJl@ z^%HUnBI_v-RdXVIhJxONH&Y;3X759>+_#7?Cq7YS zXy`j>OKkbagrCq+TTjCr5E|`7xDs~=_kPNKq}m6uwrgQ5W7=CYPYPU6|gG_=`i*8!cLJRD~U5Gm|wG&ZhCWaGlN9}fm zw?qzux-$vSB(EcPDsEkIa3CI_?sM*O^ge^SbqMSF%V@q;)gY4ERy5iCgiKm>Dix#B zXYMuJwYhV1>*|bO8AvL^A2IUsp-w^@sZE}|rBW2) zPa{3o4*pw{LT|Y1(x|S^)~lrHipkBt-8zl9kJ@?(KfA}wI^lo zlfTe*5{}4{c-HuV8 zvJH(QeIfD4D>~tnl#jtZ&6Zg~!zF$xlZALv@`_;;+RKNzXlFgQ=Uotk#7f*(xpmE@ z@}Fdu<<@nV#;X&4L&byWPq|}+bv5B$VLMj5F83VDQU9m`eNu9;qt!cCx_dPmUMtTZU z#Hmd96Zs=h*M902v6EALs7*iVS$`5~VhGXLkfvP1@m4Wi&{3MBlc)3bIk z`>+6crD!xJF0u7)+s>vCPeL1`Z22RkPbIvU`=RM7^1tE!W8%0uHBj<)P%emj0l9_f zH!tbCNN+%U%}Mi*tcB^w%VPUW!x%Pm-=|y`tU}#oHg5#w4ie6ayUD*ydke__Y1<0s zBX-4@1a39bE|Av?9olFH*KHdus5{<f^cVB zU>s?!e`#kfc@wz*^!)!XOrb;E1L-XC(kIn$?({bW8#`2s}7G72;yF*c1=B>Z>y>9PLqc$%9> z7h9;(o7^AdmRDO`i)^RamS!cattT$6>YR2JdwLB<^8!6kv@*z zH&QOGZSNuFbnVgFye5#5LeXisGZnnJ|K<*)aD38=kyo5DwMpAZ#c9NwU@aOQY8yOG z9WwTM{qODUaG7~3L?;hpf zllK?lW|*Ij=i+(PwM_rx8GVW5R^}=(BxeYp<$hw#Q%N Vb+*g)o+-RP=i1(*iuYHa{{x~9Nyq>I delta 36503 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 B(e(fT diff --git a/resources/i18n/zh_cn/BambuStudio.mo b/resources/i18n/zh_cn/BambuStudio.mo index 54049eff1e4ec8bccd8861af393c8f62f84b4987..dcb7eae9521f99241ce3a4e21aafab444d3df58f 100644 GIT binary patch delta 38554 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 NGUCSi4f*@v{|8#+p|}75 diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp index 121640e6732..220b3d5fdcf 100644 --- a/src/slic3r/GUI/ConfigManipulation.cpp +++ b/src/slic3r/GUI/ConfigManipulation.cpp @@ -384,8 +384,8 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con wxString msg_text = GUI::format_wxstr(_L("%1% infill pattern doesn't support 100%% density."), _(fill_pattern_def->enum_labels[it_pattern - fill_pattern_def->enum_values.begin()])); if (is_global_config) - msg_text += "\n" + _L("Switch to zig-zag pattern?\n" - "Yes - switch to zig-zag pattern automaticlly\n" + msg_text += "\n" + _L("Switch to rectilinear pattern?\n" + "Yes - switch to rectilinear pattern automaticlly\n" "No - reset density to default non 100% value automaticlly\n"); MessageDialog dialog(m_msg_dlg_parent, msg_text, "", wxICON_WARNING | (is_global_config ? wxYES | wxNO : wxOK) ); From 07d234825e654cdb1acd59fae33cccc367b96c56 Mon Sep 17 00:00:00 2001 From: "liz.li" Date: Thu, 15 Sep 2022 17:01:03 +0800 Subject: [PATCH 23/90] NEW:show flush of every filament on gcodeviewer 1.show flush of every filament 2.modify first-layer text display 3.show time in seconds when time cost < 1h 4.forbid add-filament when print by-object Change-Id: Ib8a94b9f620797e367bfc9e8a33abd5d7ab648ec --- src/libslic3r/Utils.hpp | 2 +- src/slic3r/GUI/GCodeViewer.cpp | 58 ++++++++++++++++++++++------------ src/slic3r/GUI/IMSlider.cpp | 8 ++--- 3 files changed, 41 insertions(+), 27 deletions(-) diff --git a/src/libslic3r/Utils.hpp b/src/libslic3r/Utils.hpp index 44281c59208..08119e22a37 100644 --- a/src/libslic3r/Utils.hpp +++ b/src/libslic3r/Utils.hpp @@ -372,7 +372,7 @@ inline std::string short_time(const std::string &time) else if (hours > 0) ::sprintf(buffer, "%dh%dm", hours, minutes); else if (minutes > 0) - ::sprintf(buffer, "%dm", minutes); + ::sprintf(buffer, "%dm%ds", minutes, seconds); else ::sprintf(buffer, "%ds", seconds); return buffer; diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index 7be8eb46637..fc4ab2b2f58 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -4149,7 +4149,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv } else { imgui.text(label); - /* BBS refactor do not show used_filament info + // BBS refactor do not show used_filament info if (used_filament_m > 0.0) { char buf[64]; ImGui::SameLine(offsets[0]); @@ -4158,7 +4158,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv ImGui::SameLine(offsets[1]); ::sprintf(buf, "%.2f g", used_filament_g); imgui.text(buf); - }*/ + } } ImGui::PopStyleVar(1); @@ -4345,6 +4345,8 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv std::vector percents; std::vector used_filaments_m; std::vector used_filaments_g; + double total_flushed_filament_m = 0.0; + double total_flushed_filament_g = 0.0; float max_percent = 0.0f; @@ -4445,19 +4447,31 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv used_filaments_g.push_back(used_filament_g); } + for (size_t extruder_id : m_extruder_ids) { + if (m_print_statistics.flush_per_filament.find(extruder_id) == m_print_statistics.flush_per_filament.end()) continue; + double volume = m_print_statistics.flush_per_filament.at(extruder_id); + auto [flushed_filament_m, flushed_filament_g] = get_used_filament_from_volume(volume, extruder_id); + total_flushed_filament_m += flushed_filament_m; + total_flushed_filament_g += flushed_filament_g; + } + std::string longest_used_filament_string; + char buffer[64]; for (double item : used_filaments_m) { - char buffer[64]; ::sprintf(buffer, imperial_units ? "%.2f in" : "%.2f m", item); if (::strlen(buffer) > longest_used_filament_string.length()) longest_used_filament_string = buffer; } + ::sprintf(buffer, imperial_units ? "%.2f in" : "%.2f m", total_flushed_filament_m); + if (::strlen(buffer) > longest_used_filament_string.length()) longest_used_filament_string = buffer; std::string longest_used_filament_g_string; for (double item : used_filaments_g) { - char buffer[64]; - ::sprintf(buffer, imperial_units ? "%.2fg" : "%.2fg", item); + ::sprintf(buffer, imperial_units ? "%.2f g" : "%.2f g", item); if (::strlen(buffer) > longest_used_filament_g_string.length()) longest_used_filament_g_string = buffer; } + ::sprintf(buffer, imperial_units ? "%.2f g" : "%.2f g", total_flushed_filament_g); + if (::strlen(buffer) > longest_used_filament_g_string.length()) longest_used_filament_g_string = buffer; + // BBL XX is placeholder offsets = calculate_offsets(labels, times, {_u8L("Filament N XX"), longest_used_filament_string, longest_used_filament_g_string, _u8L("Display")}, icon_size); append_headers({ _u8L("Color Print"), _u8L("Comsumption"), "", "", _u8L("Display") }, offsets); @@ -4635,34 +4649,36 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv //BBS display filament change times if (m_print_statistics.total_filamentchanges > 0) { + std::string flushed_filament_title_str = _u8L("Flushed filament"); + std::string flushed_filament_str = _u8L("Filament"); + std::string total_flushed_filament_str = _u8L("Total"); + std::string filament_change_str = _u8L("Filament change times"); + ImGui::Dummy(ImVec2(0.0f, ImGui::GetFontSize() * 0.1)); + ImGui::Dummy({ window_padding, window_padding }); + ImGui::SameLine(); + imgui.title(flushed_filament_title_str); //BBS: calculate total flushed filaments data - double total_flushed_filament_m = 0.0; - double total_flushed_filament_g = 0.0; + float max_len = 10.0f + ImGui::GetStyle().ItemSpacing.x; + max_len += ImGui::CalcTextSize(filament_change_str.c_str()).x; for (size_t extruder_id : m_extruder_ids) { - if (m_print_statistics.flush_per_filament.find(extruder_id) == m_print_statistics.flush_per_filament.end()) - continue; + if (m_print_statistics.flush_per_filament.find(extruder_id) == m_print_statistics.flush_per_filament.end()) continue; double volume = m_print_statistics.flush_per_filament.at(extruder_id); - auto [used_filament_m, used_filament_g] = get_used_filament_from_volume(volume, extruder_id); - total_flushed_filament_m += used_filament_m; - total_flushed_filament_g += used_filament_g; + append_item(EItemType::Rect, m_tools.m_tool_colors[extruder_id], flushed_filament_str + " " + std::to_string(extruder_id + 1), true, "", 0.0f, 0.0f, offsets, + used_filament_m, used_filament_g); } - std::string flushed_filament_str = _u8L("Flushed filament"); - std::string filament_change_str = _u8L("Filament change times"); - float max_len = 10.0f + ImGui::GetStyle().ItemSpacing.x; - max_len += std::max(ImGui::CalcTextSize(filament_change_str.c_str()).x, ImGui::CalcTextSize(flushed_filament_str.c_str()).x); //BBS: display total flushed filament { ImGui::Dummy({window_padding, window_padding}); ImGui::SameLine(); - imgui.text(flushed_filament_str + ":"); - ImGui::SameLine(max_len); + imgui.text(total_flushed_filament_str + ":"); + ImGui::SameLine(offsets[0]); char buf[64]; ::sprintf(buf, "%.2f m", total_flushed_filament_m); imgui.text(buf); - ImGui::SameLine(); - ::sprintf(buf, " %.2f g", total_flushed_filament_g); + ImGui::SameLine(offsets[1]); + ::sprintf(buf, "%.2f g", total_flushed_filament_g); imgui.text(buf); } //BBS display filament change times @@ -4672,7 +4688,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv imgui.text(filament_change_str + ":"); ImGui::SameLine(max_len); char temp_buf[64]; - ::sprintf(temp_buf, " %d", m_print_statistics.total_filamentchanges); + ::sprintf(temp_buf, "%d", m_print_statistics.total_filamentchanges); imgui.text(temp_buf); } } diff --git a/src/slic3r/GUI/IMSlider.cpp b/src/slic3r/GUI/IMSlider.cpp index b9aab59c13d..3345e7df763 100644 --- a/src/slic3r/GUI/IMSlider.cpp +++ b/src/slic3r/GUI/IMSlider.cpp @@ -1271,7 +1271,7 @@ void IMSlider::render_menu() //BBS render this menu item only when extruder_num > 1 if (extruder_num > 1) { - if (!m_can_change_color) { + if (!m_can_change_color || m_draw_mode == dmSequentialFffPrint) { begin_menu(_u8L("Change Filament").c_str(), false); } else if (begin_menu(_u8L("Change Filament").c_str())) { @@ -1360,9 +1360,7 @@ std::string IMSlider::get_label(int tick, LabelType label_type) } char layer_height[64]; - m_values[value] == m_zero_layer_height ? - ::sprintf(layer_height, "") : - ::sprintf(layer_height, "%.2f", m_values.empty() ? m_label_koef * value : m_values[value]); + ::sprintf(layer_height, "%.2f", m_values.empty() ? m_label_koef * value : m_values[value]); if (label_type == ltHeight) return std::string(layer_height); if (label_type == ltHeightWithLayer) { char buffer[64]; @@ -1370,7 +1368,7 @@ std::string IMSlider::get_label(int tick, LabelType label_type) if (m_values[GetMinValueD()] == m_zero_layer_height) { layer_number = m_is_wipe_tower ? get_layer_number(value, label_type): (m_values.empty() ? value : value); m_values[value] == m_zero_layer_height ? - ::sprintf(buffer, "%5s", std::to_string(layer_number).c_str()) : + ::sprintf(buffer, "%5s\n%5s", _u8L("Start").c_str(), _u8L("G-code").c_str()) : ::sprintf(buffer, "%5s\n%5s", std::to_string(layer_number).c_str(), layer_height); } else { From b9b3f7b4c150271d768bee767a19e5ef7c58ba11 Mon Sep 17 00:00:00 2001 From: tao wang Date: Tue, 13 Sep 2022 14:41:09 +0800 Subject: [PATCH 24/90] FIX:only show the material used in the actual printing Change-Id: I44edd5ffb54376da91077e2e3d990851af050949 --- src/slic3r/GUI/GCodeViewer.cpp | 13 +++++++++++++ src/slic3r/GUI/GCodeViewer.hpp | 2 ++ src/slic3r/GUI/SelectMachine.cpp | 4 +++- 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index fc4ab2b2f58..882357ed97a 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -831,6 +831,11 @@ void GCodeViewer::update_by_mode(ConfigOptionMode mode) } } +std::vector GCodeViewer::get_plater_extruder() +{ + return m_plater_extruder; +} + //BBS: always load shell at preview void GCodeViewer::load(const GCodeProcessorResult& gcode_result, const Print& print, const BuildVolume& build_volume, const std::vector& exclude_bounding_box, bool initialized, ConfigOptionMode mode, bool only_gcode) @@ -2924,6 +2929,14 @@ void GCodeViewer::load_toolpaths(const GCodeProcessorResult& gcode_result, const sort_remove_duplicates(m_extruder_ids); m_extruder_ids.shrink_to_fit(); + std::vector plater_extruder; + for (auto mid : m_extruder_ids){ + int eid = mid; + plater_extruder.push_back(++eid); + } + m_plater_extruder = plater_extruder; + + // set layers z range if (!m_layers.empty()) m_layers_z_range = { 0, static_cast(m_layers.size() - 1) }; diff --git a/src/slic3r/GUI/GCodeViewer.hpp b/src/slic3r/GUI/GCodeViewer.hpp index 46d2c895170..8d82e624eec 100644 --- a/src/slic3r/GUI/GCodeViewer.hpp +++ b/src/slic3r/GUI/GCodeViewer.hpp @@ -711,6 +711,7 @@ class GCodeViewer }; private: + std::vector m_plater_extruder; bool m_gl_data_initialized{ false }; unsigned int m_last_result_id{ 0 }; size_t m_moves_count{ 0 }; @@ -800,6 +801,7 @@ class GCodeViewer bool has_data() const { return !m_roles.empty(); } bool can_export_toolpaths() const; + std::vector get_plater_extruder(); const BoundingBoxf3& get_paths_bounding_box() const { return m_paths_bounding_box; } const BoundingBoxf3& get_max_bounding_box() const { return m_max_bounding_box; } diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index 1876844846e..996d58a6edc 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -2214,7 +2214,9 @@ void SelectMachineDialog::set_default() } // material info - auto extruders = m_plater->get_partplate_list().get_curr_plate()->get_extruders(); + + //auto extruders1 = m_plater->get_partplate_list().get_curr_plate()->get_extruders(); + auto extruders = wxGetApp().plater()->get_current_canvas3D()->get_gcode_viewer().get_plater_extruder(); BitmapCache bmcache; MaterialHash::iterator iter = m_materialList.begin(); From bf927f5adcb1cd27a3c6c1d4e45183a9c8c86807 Mon Sep 17 00:00:00 2001 From: tao wang Date: Fri, 16 Sep 2022 11:31:12 +0800 Subject: [PATCH 25/90] FIX:add the sd card removal function Change-Id: I98592a5d3d4abcfd3a67b8c12fa4cf07e79b0e4b --- resources/images/notification_eject_sd.svg | 1 + .../images/notification_eject_sd_hover.svg | 1 + src/slic3r/CMakeLists.txt | 8 +-- src/slic3r/GUI/GUI_App.cpp | 4 +- src/slic3r/GUI/GUI_App.hpp | 6 +- src/slic3r/GUI/ImGuiWrapper.cpp | 4 +- src/slic3r/GUI/NotificationManager.cpp | 27 +++++---- src/slic3r/GUI/NotificationManager.hpp | 8 +-- src/slic3r/GUI/Plater.cpp | 60 ++++++++++--------- src/slic3r/GUI/Plater.hpp | 2 +- src/slic3r/GUI/RemovableDriveManager.cpp | 7 +++ src/slic3r/GUI/RemovableDriveManager.hpp | 2 +- 12 files changed, 74 insertions(+), 56 deletions(-) create mode 100644 resources/images/notification_eject_sd.svg create mode 100644 resources/images/notification_eject_sd_hover.svg diff --git a/resources/images/notification_eject_sd.svg b/resources/images/notification_eject_sd.svg new file mode 100644 index 00000000000..692c50d03b8 --- /dev/null +++ b/resources/images/notification_eject_sd.svg @@ -0,0 +1 @@ +notification_eject_sd \ No newline at end of file diff --git a/resources/images/notification_eject_sd_hover.svg b/resources/images/notification_eject_sd_hover.svg new file mode 100644 index 00000000000..d41e03f0976 --- /dev/null +++ b/resources/images/notification_eject_sd_hover.svg @@ -0,0 +1 @@ +notification_eject_sd_hover \ No newline at end of file diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt index 07be68a79c1..1408ccc8490 100644 --- a/src/slic3r/CMakeLists.txt +++ b/src/slic3r/CMakeLists.txt @@ -253,8 +253,8 @@ set(SLIC3R_GUI_SOURCES GUI/wxExtensions.hpp GUI/WipeTowerDialog.cpp GUI/WipeTowerDialog.hpp - #GUI/RemovableDriveManager.cpp - #GUI/RemovableDriveManager.hpp + GUI/RemovableDriveManager.cpp + GUI/RemovableDriveManager.hpp GUI/SendSystemInfoDialog.cpp GUI/SendSystemInfoDialog.hpp GUI/ImGuiWrapper.hpp @@ -387,8 +387,8 @@ if (APPLE) list(APPEND SLIC3R_GUI_SOURCES Utils/RetinaHelperImpl.mm Utils/MacDarkMode.mm - #GUI/RemovableDriveManagerMM.mm - #GUI/RemovableDriveManagerMM.h + GUI/RemovableDriveManagerMM.mm + GUI/RemovableDriveManagerMM.h GUI/Mouse3DHandlerMac.mm #GUI/InstanceCheckMac.mm #GUI/InstanceCheckMac.h diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 61fdbe29fa8..0b19e9bdb82 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -65,7 +65,7 @@ #include "SysInfoDialog.hpp" #include "UpdateDialogs.hpp" #include "Mouse3DController.hpp" -//#include "RemovableDriveManager.hpp" +#include "RemovableDriveManager.hpp" #include "InstanceCheck.hpp" #include "NotificationManager.hpp" #include "UnsavedChangesDialog.hpp" @@ -1119,7 +1119,7 @@ GUI_App::GUI_App() , m_em_unit(10) , m_imgui(new ImGuiWrapper()) , hms_query(new HMSQuery()) - //, m_removable_drive_manager(std::make_unique()) + , m_removable_drive_manager(std::make_unique()) //, m_other_instance_message_handler(std::make_unique()) { //app config initializes early becasuse it is used in instance checking in BambuStudio.cpp diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp index 2cacc0cc268..8f189f09527 100644 --- a/src/slic3r/GUI/GUI_App.hpp +++ b/src/slic3r/GUI/GUI_App.hpp @@ -49,7 +49,7 @@ class NetworkAgent; namespace GUI{ -//class RemovableDriveManager; +class RemovableDriveManager; class OtherInstanceMessageHandler; class MainFrame; class Sidebar; @@ -244,7 +244,7 @@ class GUI_App : public wxApp const wxLanguageInfo *m_language_info_best = nullptr; OpenGLManager m_opengl_mgr; - //std::unique_ptr m_removable_drive_manager; + std::unique_ptr m_removable_drive_manager; std::unique_ptr m_imgui; //std::unique_ptr m_other_instance_message_handler; @@ -479,7 +479,7 @@ class GUI_App : public wxApp std::vector tabs_list; std::vector model_tabs_list; - //RemovableDriveManager* removable_drive_manager() { return m_removable_drive_manager.get(); } + RemovableDriveManager* removable_drive_manager() { return m_removable_drive_manager.get(); } //OtherInstanceMessageHandler* other_instance_message_handler() { return m_other_instance_message_handler.get(); } //wxSingleInstanceChecker* single_instance_checker() {return m_single_instance_checker.get();} diff --git a/src/slic3r/GUI/ImGuiWrapper.cpp b/src/slic3r/GUI/ImGuiWrapper.cpp index 7c497219ef7..9d7ec101423 100644 --- a/src/slic3r/GUI/ImGuiWrapper.cpp +++ b/src/slic3r/GUI/ImGuiWrapper.cpp @@ -71,8 +71,8 @@ static const std::map font_icons_large = { {ImGui::CloseNotifButton , "notification_close" }, {ImGui::CloseNotifHoverButton , "notification_close_hover" }, //BBS removed - //{ImGui::EjectButton , "notification_eject_sd" }, - //{ImGui::EjectHoverButton , "notification_eject_sd_hover" }, + {ImGui::EjectButton , "notification_eject_sd" }, + {ImGui::EjectHoverButton , "notification_eject_sd_hover" }, //{ImGui::WarningMarker , "notification_warning" }, //{ImGui::ErrorMarker , "notification_error" }, {ImGui::CancelButton , "notification_cancel" }, diff --git a/src/slic3r/GUI/NotificationManager.cpp b/src/slic3r/GUI/NotificationManager.cpp index 5ee129c3b94..d0532cca09e 100644 --- a/src/slic3r/GUI/NotificationManager.cpp +++ b/src/slic3r/GUI/NotificationManager.cpp @@ -34,7 +34,7 @@ static constexpr int FADING_OUT_TIMEOUT = 100; namespace Slic3r { namespace GUI { -//wxDEFINE_EVENT(EVT_EJECT_DRIVE_NOTIFICAION_CLICKED, EjectDriveNotificationClickedEvent); +wxDEFINE_EVENT(EVT_EJECT_DRIVE_NOTIFICAION_CLICKED, EjectDriveNotificationClickedEvent); wxDEFINE_EVENT(EVT_EXPORT_GCODE_NOTIFICAION_CLICKED, ExportGcodeNotificationClickedEvent); wxDEFINE_EVENT(EVT_PRESET_UPDATE_AVAILABLE_CLICKED, PresetUpdateAvailableClickedEvent); @@ -801,11 +801,11 @@ void NotificationManager::ExportFinishedNotification::render_text(ImGuiWrapper& void NotificationManager::ExportFinishedNotification::render_close_button(ImGuiWrapper& imgui, const float win_size_x, const float win_size_y, const float win_pos_x, const float win_pos_y) { PopNotification::render_close_button(imgui, win_size_x, win_size_y, win_pos_x, win_pos_y); - //if(m_to_removable && ! m_eject_pending) - // render_eject_button(imgui, win_size_x, win_size_y, win_pos_x, win_pos_y); + if (m_to_removable && !m_eject_pending) + render_eject_button(imgui, win_size_x, win_size_y, win_pos_x, win_pos_y); } -/*void NotificationManager::ExportFinishedNotification::render_eject_button(ImGuiWrapper& imgui, const float win_size_x, const float win_size_y, const float win_pos_x, const float win_pos_y) +void NotificationManager::ExportFinishedNotification::render_eject_button(ImGuiWrapper& imgui, const float win_size_x, const float win_size_y, const float win_pos_x, const float win_pos_y) { ImVec2 win_size(win_size_x, win_size_y); ImVec2 win_pos(win_pos_x, win_pos_y); @@ -818,23 +818,25 @@ void NotificationManager::ExportFinishedNotification::render_close_button(ImGuiW std::string button_text; button_text = ImGui::EjectButton; - if (ImGui::IsMouseHoveringRect(ImVec2(win_pos.x - m_line_height * 5.f, win_pos.y), + if (ImGui::IsMouseHoveringRect(ImVec2(win_pos.x - m_line_height * 5.f, win_pos.y), ImVec2(win_pos.x - m_line_height * 2.5f, win_pos.y + win_size.y), true)) { button_text = ImGui::EjectHoverButton; - // tooltip + //tooltip + long time_now = wxGetLocalTime(); if (m_hover_time > 0 && m_hover_time < time_now) { ImGui::PushStyleColor(ImGuiCol_PopupBg, ImGuiWrapper::COL_WINDOW_BACKGROUND); - ImGui::BeginTooltip(); - imgui.text(_u8L("Eject drive") + " " + GUI::shortkey_ctrl_prefix() + "T"); - ImGui::EndTooltip(); + //ImGui::BeginTooltip(); + //imgui.text(_u8L("Eject drive") + " " + GUI::shortkey_ctrl_prefix() + "T"); + //ImGui::EndTooltip(); ImGui::PopStyleColor(); } if (m_hover_time == 0) m_hover_time = time_now; - } else + } + else m_hover_time = 0; ImVec2 button_pic_size = ImGui::CalcTextSize(button_text.c_str()); @@ -850,7 +852,7 @@ void NotificationManager::ExportFinishedNotification::render_close_button(ImGuiW } //invisible large button - ImGui::SetCursorPosX(win_size.x - m_line_height * 4.625f); + ImGui::SetCursorPosX(win_size.x - m_line_height * 4.625f); ImGui::SetCursorPosY(0); if (imgui.button(" ", m_line_height * 2.f, win_size.y)) { @@ -860,7 +862,8 @@ void NotificationManager::ExportFinishedNotification::render_close_button(ImGuiW on_eject_click(); } ImGui::PopStyleColor(5); -}*/ +} + bool NotificationManager::ExportFinishedNotification::on_text_click() { open_folder(m_export_dir_path); diff --git a/src/slic3r/GUI/NotificationManager.hpp b/src/slic3r/GUI/NotificationManager.hpp index d758dbe061e..a731c551a9f 100644 --- a/src/slic3r/GUI/NotificationManager.hpp +++ b/src/slic3r/GUI/NotificationManager.hpp @@ -21,8 +21,8 @@ namespace Slic3r { namespace GUI { -//using EjectDriveNotificationClickedEvent = SimpleEvent; -//wxDECLARE_EVENT(EVT_EJECT_DRIVE_NOTIFICAION_CLICKED, EjectDriveNotificationClickedEvent); +using EjectDriveNotificationClickedEvent = SimpleEvent; +wxDECLARE_EVENT(EVT_EJECT_DRIVE_NOTIFICAION_CLICKED, EjectDriveNotificationClickedEvent); using ExportGcodeNotificationClickedEvent = SimpleEvent; wxDECLARE_EVENT(EVT_EXPORT_GCODE_NOTIFICAION_CLICKED, ExportGcodeNotificationClickedEvent); using PresetUpdateAvailableClickedEvent = SimpleEvent; @@ -690,9 +690,9 @@ class NotificationManager void render_close_button(ImGuiWrapper& imgui, const float win_size_x, const float win_size_y, const float win_pos_x, const float win_pos_y) override; - /*void render_eject_button(ImGuiWrapper& imgui, + void render_eject_button(ImGuiWrapper& imgui, const float win_size_x, const float win_size_y, - const float win_pos_x, const float win_pos_y);*/ + const float win_pos_x, const float win_pos_y); void render_minimize_button(ImGuiWrapper& imgui, const float win_pos_x, const float win_pos_y) override { m_minimize_b_visible = false; } bool on_text_click() override; diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index fe0938ad849..f7b7a6b349a 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -91,7 +91,7 @@ #include "../Utils/UndoRedo.hpp" #include "../Utils/PresetUpdater.hpp" #include "../Utils/Process.hpp" -//#include "RemovableDriveManager.hpp" +#include "RemovableDriveManager.hpp" #include "InstanceCheck.hpp" #include "NotificationManager.hpp" #include "PresetComboBoxes.hpp" @@ -2240,12 +2240,11 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) //notification_manager = new NotificationManager(this->q); if (wxGetApp().is_editor()) { - //this->q->Bind(EVT_EJECT_DRIVE_NOTIFICAION_CLICKED, [this](EjectDriveNotificationClickedEvent&) { this->q->eject_drive(); }); + this->q->Bind(EVT_EJECT_DRIVE_NOTIFICAION_CLICKED, [this](EjectDriveNotificationClickedEvent&) { this->q->eject_drive(); }); this->q->Bind(EVT_EXPORT_GCODE_NOTIFICAION_CLICKED, [this](ExportGcodeNotificationClickedEvent&) { this->q->export_gcode(true); }); this->q->Bind(EVT_PRESET_UPDATE_AVAILABLE_CLICKED, [](PresetUpdateAvailableClickedEvent&) { wxGetApp().get_preset_updater()->on_update_notification_confirm(); }); /* BBS do not handle removeable driver event */ - /* this->q->Bind(EVT_REMOVABLE_DRIVE_EJECTED, [this](RemovableDriveEjectEvent &evt) { if (evt.data.second) { // BBS @@ -2268,14 +2267,13 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) // Close notification ExportingFinished but only if last export was to removable notification_manager->device_ejected(); }); - */ // Start the background thread and register this window as a target for update events. - //wxGetApp().removable_drive_manager()->init(this->q); -//#ifdef _WIN32 - // Trigger enumeration of removable media on Win32 notification. - //this->q->Bind(EVT_VOLUME_ATTACHED, [this](VolumeAttachedEvent &evt) { wxGetApp().removable_drive_manager()->volumes_changed(); }); - //this->q->Bind(EVT_VOLUME_DETACHED, [this](VolumeDetachedEvent &evt) { wxGetApp().removable_drive_manager()->volumes_changed(); }); -//#endif /* _WIN32 */ + wxGetApp().removable_drive_manager()->init(this->q); +#ifdef _WIN32 + //Trigger enumeration of removable media on Win32 notification. + this->q->Bind(EVT_VOLUME_ATTACHED, [this](VolumeAttachedEvent &evt) { wxGetApp().removable_drive_manager()->volumes_changed(); }); + this->q->Bind(EVT_VOLUME_DETACHED, [this](VolumeDetachedEvent &evt) { wxGetApp().removable_drive_manager()->volumes_changed(); }); +#endif /* _WIN32 */ } // Initialize the Undo / Redo stack with a first snapshot. @@ -5382,16 +5380,16 @@ void Plater::priv::on_process_completed(SlicingProcessCompletedEvent &evt) notification_manager->close_notification_of_type(NotificationType::ExportOngoing); } // If writing to removable drive was scheduled, show notification with eject button - /*if (exporting_status == ExportingStatus::EXPORTING_TO_REMOVABLE && !has_error) { + if (exporting_status == ExportingStatus::EXPORTING_TO_REMOVABLE && !has_error) { //show_action_buttons(ready_to_slice); this->main_frame->update_slice_print_status(MainFrame::eEventSliceUpdate, ready_to_slice, true); notification_manager->push_exporting_finished_notification(last_output_path, last_output_dir_path, // Don't offer the "Eject" button on ChromeOS, the Linux side has no control over it. platform_flavor() != PlatformFlavor::LinuxOnChromium); - //wxGetApp().removable_drive_manager()->set_exporting_finished(true); - }else */ - //if (exporting_status == ExportingStatus::EXPORTING_TO_LOCAL && !has_error) - // notification_manager->push_exporting_finished_notification(last_output_path, last_output_dir_path, false); + wxGetApp().removable_drive_manager()->set_exporting_finished(true); + }else + if (exporting_status == ExportingStatus::EXPORTING_TO_LOCAL && !has_error) + notification_manager->push_exporting_finished_notification(last_output_path, last_output_dir_path, false); } exporting_status = ExportingStatus::NOT_EXPORTING; @@ -8172,16 +8170,16 @@ void Plater::export_gcode(bool prefer_removable) } default_output_file = fs::path(Slic3r::fold_utf8_to_ascii(default_output_file.string())); AppConfig &appconfig = *wxGetApp().app_config; - //RemovableDriveManager &removable_drive_manager = *wxGetApp().removable_drive_manager(); + RemovableDriveManager &removable_drive_manager = *wxGetApp().removable_drive_manager(); // Get a last save path, either to removable media or to an internal media. std::string start_dir = appconfig.get_last_output_dir(default_output_file.parent_path().string(), prefer_removable); - /*if (prefer_removable) { + if (prefer_removable) { // Returns a path to a removable media if it exists, prefering start_dir. Update the internal removable drives database. start_dir = removable_drive_manager.get_removable_drive_path(start_dir); if (start_dir.empty()) // Direct user to the last internal media. start_dir = appconfig.get_last_output_dir(default_output_file.parent_path().string(), false); - }*/ + } fs::path output_path; { @@ -8209,8 +8207,8 @@ void Plater::export_gcode(bool prefer_removable) } if (! output_path.empty()) { - //bool path_on_removable_media = removable_drive_manager.set_and_verify_last_save_path(output_path.string()); - bool path_on_removable_media = false; + bool path_on_removable_media = removable_drive_manager.set_and_verify_last_save_path(output_path.string()); + //bool path_on_removable_media = false; p->notification_manager->new_export_began(path_on_removable_media); p->exporting_status = path_on_removable_media ? ExportingStatus::EXPORTING_TO_REMOVABLE : ExportingStatus::EXPORTING_TO_LOCAL; p->last_output_path = output_path.string(); @@ -8279,13 +8277,20 @@ void Plater::export_gcode_3mf() p->notification_manager->new_export_began(path_on_removable_media); p->exporting_status = path_on_removable_media ? ExportingStatus::EXPORTING_TO_REMOVABLE : ExportingStatus::EXPORTING_TO_LOCAL; //BBS do not save last output path - //p->last_output_path = output_path.string(); + p->last_output_path = output_path.string(); p->last_output_dir_path = output_path.parent_path().string(); int curr_plate_idx = get_partplate_list().get_curr_plate_index(); export_3mf(output_path, SaveStrategy::Silence | SaveStrategy::SplitModel | SaveStrategy::WithGcode | SaveStrategy::SkipModel, curr_plate_idx); // BBS: silence - // update lost output dir + + RemovableDriveManager& removable_drive_manager = *wxGetApp().removable_drive_manager(); + + + bool on_removable = removable_drive_manager.is_path_on_removable_drive(p->last_output_dir_path); + + + // update last output dir appconfig.update_last_output_dir(output_path.parent_path().string(), false); - p->notification_manager->push_exporting_finished_notification(output_path.string(), p->last_output_dir_path, false); + p->notification_manager->push_exporting_finished_notification(output_path.string(), p->last_output_dir_path, on_removable); } } @@ -8925,11 +8930,12 @@ void Plater::print_job_finished(wxCommandEvent &evt) } // Called when the Eject button is pressed. -/*void Plater::eject_drive() +void Plater::eject_drive() { - wxBusyCursor wait; - wxGetApp().removable_drive_manager()->eject_drive(); -}*/ + wxBusyCursor wait; + wxGetApp().removable_drive_manager()->set_and_verify_last_save_path(p->last_output_dir_path); + wxGetApp().removable_drive_manager()->eject_drive(); +} void Plater::take_snapshot(const std::string &snapshot_name) { p->take_snapshot(snapshot_name); } //void Plater::take_snapshot(const wxString &snapshot_name) { p->take_snapshot(snapshot_name); } diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index 2d24bae3a90..5460ffcdd1c 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -332,7 +332,7 @@ class Plater: public wxPanel int export_config_3mf(int plate_idx = -1, Export3mfProgressFn proFn = nullptr); //BBS jump to nonitor after print job finished void print_job_finished(wxCommandEvent &evt); - //void eject_drive(); + void eject_drive(); void take_snapshot(const std::string &snapshot_name); //void take_snapshot(const wxString &snapshot_name); diff --git a/src/slic3r/GUI/RemovableDriveManager.cpp b/src/slic3r/GUI/RemovableDriveManager.cpp index 74e3bd371e9..10c692a69b0 100644 --- a/src/slic3r/GUI/RemovableDriveManager.cpp +++ b/src/slic3r/GUI/RemovableDriveManager.cpp @@ -442,7 +442,14 @@ bool RemovableDriveManager::set_and_verify_last_save_path(const std::string &pat #ifndef REMOVABLE_DRIVE_MANAGER_OS_CALLBACKS this->update(); #endif // REMOVABLE_DRIVE_MANAGER_OS_CALLBACKS + +#ifdef __APPLE__ + m_last_save_path = path; +#else m_last_save_path = this->get_removable_drive_from_path(path); +#endif + + m_exporting_finished = false; return ! m_last_save_path.empty(); } diff --git a/src/slic3r/GUI/RemovableDriveManager.hpp b/src/slic3r/GUI/RemovableDriveManager.hpp index 29363647c89..ea8b4e83a75 100644 --- a/src/slic3r/GUI/RemovableDriveManager.hpp +++ b/src/slic3r/GUI/RemovableDriveManager.hpp @@ -49,7 +49,7 @@ class RemovableDriveManager RemovableDriveManager() = default; RemovableDriveManager(RemovableDriveManager const&) = delete; void operator=(RemovableDriveManager const&) = delete; - ~RemovableDriveManager() { assert(! m_initialized); } + ~RemovableDriveManager() { /*assert(! m_initialized);*/ } // Start the background thread and register this window as a target for update events. // Register for OSX notifications. From cb3c9503d07cb1750bf9e3bde8393308b6adb05f Mon Sep 17 00:00:00 2001 From: "lane.wei" Date: Thu, 15 Sep 2022 19:44:04 +0800 Subject: [PATCH 26/90] Fix the Bed texture gone missing issue on AMD systems patch picked from PrusaSlicer, thanks to Prusa3D Windows specific: Use mipmaps generated through OpenGL for AMD graphics cards with drivers newer than 22.6.1. Since AMD driver version 22.7.1, there is probably some bug in the driver that causes the issue with the missing texture of the bed. It seems that this issue only triggers when mipmaps are generated manually (combined with a texture compression) and when mipmaps are generated through OpenGL glGenerateMipmap is working. This workaround detects the AMD driver version and generates mipmaps through OpenGL for driver versions newer than 22.6.1. Change-Id: I679dd61efec8f4baf97e5bf4868cb93db5184dcf --- src/slic3r/GUI/GLTexture.cpp | 7 ++++--- src/slic3r/GUI/OpenGLManager.cpp | 29 +++++++++++++++++++++++++++++ src/slic3r/GUI/OpenGLManager.hpp | 2 ++ 3 files changed, 35 insertions(+), 3 deletions(-) diff --git a/src/slic3r/GUI/GLTexture.cpp b/src/slic3r/GUI/GLTexture.cpp index 2a887424ce6..e45795e363c 100644 --- a/src/slic3r/GUI/GLTexture.cpp +++ b/src/slic3r/GUI/GLTexture.cpp @@ -771,7 +771,7 @@ bool GLTexture::load_from_svg(const std::string& filename, bool use_mipmaps, boo else glsafe(::glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, (GLsizei)m_width, (GLsizei)m_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, (const void*)data.data())); - if (use_mipmaps) { + if (use_mipmaps && OpenGLManager::use_manually_generated_mipmaps()) { // we manually generate mipmaps because glGenerateMipmap() function is not reliable on all graphics cards int lod_w = m_width; int lod_h = m_height; @@ -800,8 +800,9 @@ bool GLTexture::load_from_svg(const std::string& filename, bool use_mipmaps, boo glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, level)); glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR)); } - } - else { + } else if (use_mipmaps && !OpenGLManager::use_manually_generated_mipmaps()) { + glGenerateMipmap(GL_TEXTURE_2D); + } else { glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)); glsafe(::glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0)); } diff --git a/src/slic3r/GUI/OpenGLManager.cpp b/src/slic3r/GUI/OpenGLManager.cpp index 450e5aba35b..cfed0f996fd 100644 --- a/src/slic3r/GUI/OpenGLManager.cpp +++ b/src/slic3r/GUI/OpenGLManager.cpp @@ -207,6 +207,7 @@ std::string OpenGLManager::GLInfo::to_string(bool for_github) const OpenGLManager::GLInfo OpenGLManager::s_gl_info; bool OpenGLManager::s_compressed_textures_supported = false; +bool OpenGLManager::m_use_manually_generated_mipmaps = true; OpenGLManager::EMultisampleState OpenGLManager::s_multisample = OpenGLManager::EMultisampleState::Unknown; OpenGLManager::EFramebufferType OpenGLManager::s_framebuffers_type = OpenGLManager::EFramebufferType::Unknown; @@ -276,6 +277,34 @@ bool OpenGLManager::init_gl() wxMessageBox(message, _L("Error loading shaders"), wxOK | wxICON_ERROR); } } + +#ifdef _WIN32 + // Since AMD driver version 22.7.1, there is probably some bug in the driver that causes the issue with the missing + // texture of the bed. It seems that this issue only triggers when mipmaps are generated manually + // (combined with a texture compression) and when mipmaps are generated through OpenGL glGenerateMipmap is working. + // So, for newer drivers than 22.6.1, the last working driver version, we use mipmaps generated through OpenGL. + if (const auto gl_info = OpenGLManager::get_gl_info(); boost::contains(gl_info.get_vendor(), "ATI Technologies Inc.")) { + // WHQL drivers seem to have one more version number at the end besides non-WHQL drivers. + // WHQL: 4.6.14800 Compatibility Profile Context 22.6.1 30.0.21023.1015 + // Non-WHQL: 4.6.0 Compatibility Profile Context 22.8.1.220810 + std::regex version_rgx(R"(Compatibility\sProfile\sContext\s(\d+)\.(\d+)\.(\d+))"); + if (std::smatch matches; std::regex_search(gl_info.get_version(), matches, version_rgx) && matches.size() == 4) { + int version_major = std::stoi(matches[1].str()); + int version_minor = std::stoi(matches[2].str()); + int version_patch = std::stoi(matches[3].str()); + BOOST_LOG_TRIVIAL(debug) << "Found AMD driver version: " << version_major << "." << version_minor << "." << version_patch; + + if (version_major > 22 || (version_major == 22 && version_minor > 6) || (version_major == 22 && version_minor == 6 && version_patch > 1)) { + m_use_manually_generated_mipmaps = false; + BOOST_LOG_TRIVIAL(debug) << "Mipmapping through OpenGL was enabled."; + } + } else { + BOOST_LOG_TRIVIAL(error) << "Not recognized format of version."; + } + } else { + BOOST_LOG_TRIVIAL(error) << "Unable to parse version of AMD driver."; + } +#endif } return true; diff --git a/src/slic3r/GUI/OpenGLManager.hpp b/src/slic3r/GUI/OpenGLManager.hpp index 72a4e6bc079..f1ba47c5ec1 100644 --- a/src/slic3r/GUI/OpenGLManager.hpp +++ b/src/slic3r/GUI/OpenGLManager.hpp @@ -84,6 +84,7 @@ class OpenGLManager static EMultisampleState s_multisample; static EFramebufferType s_framebuffers_type; + static bool m_use_manually_generated_mipmaps; public: OpenGLManager() = default; ~OpenGLManager(); @@ -100,6 +101,7 @@ class OpenGLManager static EFramebufferType get_framebuffers_type() { return s_framebuffers_type; } static wxGLCanvas* create_wxglcanvas(wxWindow& parent); static const GLInfo& get_gl_info() { return s_gl_info; } + static bool use_manually_generated_mipmaps() { return m_use_manually_generated_mipmaps; } private: static void detect_multisample(int* attribList); From 3d556478957c9d9996b8f945d877b1ab7ec8a133 Mon Sep 17 00:00:00 2001 From: Arthur Date: Wed, 21 Sep 2022 16:49:35 +0800 Subject: [PATCH 27/90] ENH: increase auto-arranging spacing to 5mm Change-Id: Iebf4d31f2f869f11ddb6d9e903dfd446082802d1 --- src/slic3r/GUI/GLCanvas3D.hpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp index 9dddcec17e6..933f698c1ca 100644 --- a/src/slic3r/GUI/GLCanvas3D.hpp +++ b/src/slic3r/GUI/GLCanvas3D.hpp @@ -357,8 +357,7 @@ class GLCanvas3D struct ArrangeSettings { - float distance = 1.; -// float distance_seq_print = 6.; // Used when sequential print is ON + float distance = 5.; // float distance_sla = 6.; float accuracy = 0.65f; // Unused currently bool enable_rotation = false; From 613b433bfa7111d3da7a6b00aa2ec39124a82983 Mon Sep 17 00:00:00 2001 From: "liz.li" Date: Mon, 19 Sep 2022 11:29:48 +0800 Subject: [PATCH 28/90] ENH:refine GUI of speed/flow text display Change-Id: Ia077a56a14af059d94d9581518ac39a45fa56527 --- src/slic3r/GUI/GCodeViewer.cpp | 166 +++++++++++++++++++++------------ src/slic3r/GUI/GCodeViewer.hpp | 3 + 2 files changed, 107 insertions(+), 62 deletions(-) diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index 882357ed97a..b8adcc99109 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -330,71 +330,109 @@ void GCodeViewer::SequentialView::Marker::render(int canvas_width, int canvas_he static float last_window_width = 0.0f; static size_t last_text_length = 0; + static const ImU32 text_name_clr = IM_COL32(38, 46, 48, 255); + static const ImU32 text_value_clr = IM_COL32(144, 144, 144, 255); + static const ImU32 window_bg_clr = IM_COL32(255, 255, 255, 255); - //if (wxGetApp().get_mode() == ConfigOptionMode::comDevelop) { - ImGuiWrapper& imgui = *wxGetApp().imgui(); - //BBS: GUI refactor: add canvas size from parameters - //Size cnv_size = wxGetApp().plater()->get_current_canvas3D()->get_canvas_size(); - //imgui.set_next_window_pos(0.5f * static_cast(cnv_size.get_width()), static_cast(cnv_size.get_height()), ImGuiCond_Always, 0.5f, 1.0f); - imgui.set_next_window_pos(0.5f * static_cast(canvas_width), static_cast(canvas_height), ImGuiCond_Always, 0.5f, 1.0f); - ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f); - ImGui::SetNextWindowBgAlpha(0.25f); - imgui.begin(std::string("ExtruderPosition"), ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoTitleBar); - //imgui.text_colored(ImGuiWrapper::COL_ORANGE_LIGHT, _u8L("Extruder position") + ":"); - //ImGui::SameLine(); - char buf[1024]; - //BBS: minus the plate offset when show tool position - PartPlateList& partplate_list = wxGetApp().plater()->get_partplate_list(); - PartPlate* plate = partplate_list.get_curr_plate(); - const Vec3f position = m_world_position + m_world_offset; - sprintf(buf, "X: %.3f, Y: %.3f, Z: %.3f", position.x() - plate->get_origin().x(), position.y() - plate->get_origin().y(), position.z()); - imgui.text(std::string(buf)); - //gcode_result.moves[i]; - if (view_type == EViewType::Feedrate) { - auto it = std::find_if(moves.begin(), moves.end(), [&curr_line_id](auto move) { - if (move.gcode_id == curr_line_id) - return true; - else - return false; - }); - if (it != moves.end()) { - sprintf(buf, _u8L("Speed: %.f").c_str(), it->feedrate); - ImGui::NewLine(); - ImGui::SameLine((ImGui::GetWindowWidth() - ImGui::CalcTextSize(buf).x) / 2); - imgui.text(buf); - } - } - if (view_type == EViewType::VolumetricRate) { - auto it = std::find_if(moves.begin(), moves.end(), [&curr_line_id](auto move) { - if (move.gcode_id == curr_line_id) - return true; - else - return false; - }); - if (it != moves.end()) { - sprintf(buf, _u8L("Flow: %.f").c_str(), it->volumetric_rate()); - ImGui::NewLine(); - ImGui::SameLine((ImGui::GetWindowWidth() - ImGui::CalcTextSize(buf).x) / 2); - imgui.text(buf); - } + ImGuiWrapper& imgui = *wxGetApp().imgui(); + //BBS: GUI refactor: add canvas size from parameters + imgui.set_next_window_pos(0.5f * static_cast(canvas_width), static_cast(canvas_height), ImGuiCond_Always, 0.5f, 1.0f); + imgui.push_toolbar_style(m_scale); + ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0.0, 4.0 * m_scale)); + ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(20.0 * m_scale, 6.0 * m_scale)); + ImGui::PushStyleColor(ImGuiCol_WindowBg, window_bg_clr); + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, text_name_clr); + ImGui::PushStyleColor(ImGuiCol_Text, text_value_clr); + imgui.begin(std::string("ExtruderPosition"), ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoTitleBar); + ImGui::AlignTextToFramePadding(); + //BBS: minus the plate offset when show tool position + PartPlateList& partplate_list = wxGetApp().plater()->get_partplate_list(); + PartPlate* plate = partplate_list.get_curr_plate(); + const Vec3f position = m_world_position + m_world_offset; + std::string x = ImGui::ColorMarkerStart + std::string("X: ") + ImGui::ColorMarkerEnd; + std::string y = ImGui::ColorMarkerStart + std::string("Y: ") + ImGui::ColorMarkerEnd; + std::string z = ImGui::ColorMarkerStart + std::string("Z: ") + ImGui::ColorMarkerEnd; + std::string speed = ImGui::ColorMarkerStart + _u8L("Speed: ") + ImGui::ColorMarkerEnd; + std::string flow = ImGui::ColorMarkerStart + _u8L("Flow: ") + ImGui::ColorMarkerEnd; + + std::ostringstream buffer; + char buf[1024]; + if (view_type == EViewType::Feedrate) { + auto it = std::find_if(moves.begin(), moves.end(), [&curr_line_id](auto move) { + if (move.gcode_id == curr_line_id) + return true; + else + return false; + }); + if (it != moves.end()) { + sprintf(buf, "%s%.3f", x.c_str(), position.x() - plate->get_origin().x()); + imgui.text(buf); + + ImGui::SameLine(); + sprintf(buf, "%s%.3f", y.c_str(), position.y() - plate->get_origin().y()); + imgui.text(buf); + + sprintf(buf, "%s%.3f", z.c_str(), position.z()); + imgui.text(buf); + + ImGui::SameLine(); + sprintf(buf, "%s%.f", speed.c_str(), it->feedrate); + imgui.text(buf); } - // force extra frame to automatically update window size - float width = ImGui::GetWindowWidth(); - size_t length = strlen(buf); - if (width != last_window_width || length != last_text_length) { - last_window_width = width; - last_text_length = length; - #if ENABLE_ENHANCED_IMGUI_SLIDER_FLOAT - imgui.set_requires_extra_frame(); - #else - wxGetApp().plater()->get_current_canvas3D()->set_as_dirty(); - wxGetApp().plater()->get_current_canvas3D()->request_extra_frame(); - #endif // ENABLE_ENHANCED_IMGUI_SLIDER_FLOAT + } + else if (view_type == EViewType::VolumetricRate) { + auto it = std::find_if(moves.begin(), moves.end(), [&curr_line_id](auto move) { + if (move.gcode_id == curr_line_id) + return true; + else + return false; + }); + if (it != moves.end()) { + sprintf(buf, "%s%.3f", x.c_str(), position.x() - plate->get_origin().x()); + imgui.text(buf); + + ImGui::SameLine(); + sprintf(buf, "%s%.3f", y.c_str(), position.y() - plate->get_origin().y()); + imgui.text(buf); + + sprintf(buf, "%s%.3f", z.c_str(), position.z()); + imgui.text(buf); + + ImGui::SameLine(); + sprintf(buf, "%s%.f", flow.c_str(), it->volumetric_rate()); + imgui.text(buf); } + } + else { + sprintf(buf, "%s%.3f", x.c_str(), position.x() - plate->get_origin().x()); + imgui.text(buf); - imgui.end(); - ImGui::PopStyleVar(); - //} + ImGui::SameLine(); + sprintf(buf, "%s%.3f", y.c_str(), position.y() - plate->get_origin().y()); + imgui.text(buf); + + ImGui::SameLine(); + sprintf(buf, "%s%.3f", z.c_str() , position.z()); + imgui.text(buf); + } + // force extra frame to automatically update window size + float width = ImGui::GetWindowWidth(); + //size_t length = strlen(buf); + if (width != last_window_width /*|| length != last_text_length*/) { + last_window_width = width; + //last_text_length = length; +#if ENABLE_ENHANCED_IMGUI_SLIDER_FLOAT + imgui.set_requires_extra_frame(); +#else + wxGetApp().plater()->get_current_canvas3D()->set_as_dirty(); + wxGetApp().plater()->get_current_canvas3D()->request_extra_frame(); +#endif // ENABLE_ENHANCED_IMGUI_SLIDER_FLOAT + } + + imgui.end(); + imgui.pop_toolbar_style(); + ImGui::PopStyleVar(2); + ImGui::PopStyleColor(3); } void GCodeViewer::SequentialView::GCodeWindow::load_gcode(const std::string& filename, std::vector &&lines_ends) @@ -793,6 +831,10 @@ void GCodeViewer::init(ConfigOptionMode mode, PresetBundle* preset_bundle) void GCodeViewer::set_scale(float scale) { if(m_scale != scale)m_scale = scale; + if (m_sequential_view.m_scale != scale) { + m_sequential_view.m_scale = scale; + m_sequential_view.marker.m_scale = scale; + } } void GCodeViewer::update_by_mode(ConfigOptionMode mode) @@ -1157,7 +1199,7 @@ void GCodeViewer::render(int canvas_width, int canvas_height, int right_margin) m_sequential_view.marker.set_world_position(m_sequential_view.current_position); m_sequential_view.marker.set_world_offset(m_sequential_view.current_offset); //BBS fixed buttom margin. m_moves_slider.pos_y - m_sequential_view.render(legend_height, canvas_width - right_margin, canvas_height - bottom_margin, m_view_type, m_gcode_result->moves); + m_sequential_view.render(legend_height, canvas_width - right_margin * m_scale, canvas_height - bottom_margin * m_scale, m_view_type, m_gcode_result->moves); //} #if ENABLE_GCODE_VIEWER_STATISTICS render_statistics(); diff --git a/src/slic3r/GUI/GCodeViewer.hpp b/src/slic3r/GUI/GCodeViewer.hpp index 8d82e624eec..02656fa59b0 100644 --- a/src/slic3r/GUI/GCodeViewer.hpp +++ b/src/slic3r/GUI/GCodeViewer.hpp @@ -616,6 +616,8 @@ class GCodeViewer bool m_visible{ true }; public: + float m_scale = 1.0f; + void init(std::string filename); const BoundingBoxf3& get_bounding_box() const { return m_model.get_bounding_box(); } @@ -684,6 +686,7 @@ class GCodeViewer Marker marker; GCodeWindow gcode_window; std::vector gcode_ids; + float m_scale = 1.0; //BBS: GUI refactor: add canvas size void render(float legend_height, int canvas_width, int canvas_height, const EViewType& view_type, const std::vector& moves) const; From d2eb526ea30e8ae4491e463e5cce71043a4d21a0 Mon Sep 17 00:00:00 2001 From: "lane.wei" Date: Wed, 21 Sep 2022 20:45:07 +0800 Subject: [PATCH 29/90] Fix the slice button status incorrect issue after auto-arrange when a plate is locked, the slice result is also affected by auto-arrange Change-Id: I83b3400d07fd55c42422b358d4b9ed7a179bd3a7 --- src/slic3r/GUI/Plater.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index f7b7a6b349a..f7429512705 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -4009,7 +4009,8 @@ unsigned int Plater::priv::update_background_process(bool force_validation, bool //BBS: add slice&&print status update logic BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", Line %1%: background data valid, return_state=%2%")%__LINE__%return_state; - if (background_process.finished()) + PartPlate* cur_plate = background_process.get_current_plate(); + if (background_process.finished() && cur_plate && cur_plate->is_slice_result_valid()) { ready_to_slice = false; this->main_frame->update_slice_print_status(MainFrame::eEventSliceUpdate, false); From 530c2287c85086587105e201bc363d3e7aca0032 Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Wed, 21 Sep 2022 10:27:05 +0800 Subject: [PATCH 30/90] FIX: restore config value of Bools type Change-Id: I6ea8b44d71176fe75238e0207addceb8ddd1e73f --- src/slic3r/GUI/OptionsGroup.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/slic3r/GUI/OptionsGroup.cpp b/src/slic3r/GUI/OptionsGroup.cpp index 91e4f315828..69181b659b5 100644 --- a/src/slic3r/GUI/OptionsGroup.cpp +++ b/src/slic3r/GUI/OptionsGroup.cpp @@ -1115,7 +1115,7 @@ boost::any ConfigOptionsGroup::get_config_value2(const DynamicPrintConfig& confi ret = config.opt_bool(opt_key); break; case coBools: - ret = config.opt_bool(opt_key, idx); + ret = static_cast(config.opt_bool(opt_key, idx)); break; case coInt: ret = config.opt_int(opt_key); From 9f74ea5763fe5c2f2e4d45f71a917eac95b221ea Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Thu, 15 Sep 2022 11:18:29 +0800 Subject: [PATCH 31/90] FIX: wipe tower does not extruder fill in smooth mode timelapse Change-Id: Ia6957cfe41ed3624baa4c12b6df90462fc436475 (cherry picked from commit 39ecccc94bea2a43a74ac852f121c5dbc739dc67) --- src/libslic3r/GCode/ToolOrdering.cpp | 12 ++---------- src/libslic3r/GCode/ToolOrdering.hpp | 2 +- src/libslic3r/GCode/WipeTower.cpp | 8 ++++---- src/libslic3r/GCode/WipeTower.hpp | 10 +++++++--- src/libslic3r/Print.cpp | 5 ++++- 5 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/libslic3r/GCode/ToolOrdering.cpp b/src/libslic3r/GCode/ToolOrdering.cpp index 7a4caba6d47..c2925b56635 100644 --- a/src/libslic3r/GCode/ToolOrdering.cpp +++ b/src/libslic3r/GCode/ToolOrdering.cpp @@ -562,18 +562,10 @@ void ToolOrdering::fill_wipe_tower_partitions(const PrintConfig &config, coordf_ for (int i = int(m_layer_tools.size()) - 2; i >= 0; -- i) m_layer_tools[i].wipe_tower_partitions = std::max(m_layer_tools[i + 1].wipe_tower_partitions, m_layer_tools[i].wipe_tower_partitions); - // if enable_timelapse_print(), update all layer_tools parameters: wipe_tower_partitions - if (config.timelapse_type == TimelapseType::tlSmooth) { - for (LayerTools& layer_tools : m_layer_tools) { - if (layer_tools.wipe_tower_partitions == 0) { - layer_tools.wipe_tower_partitions = 1; - } - } - } - //FIXME this is a hack to get the ball rolling. for (LayerTools < : m_layer_tools) - lt.has_wipe_tower = (lt.has_object && lt.wipe_tower_partitions > 0) || lt.print_z < object_bottom_z + EPSILON; + lt.has_wipe_tower = (lt.has_object && (config.timelapse_type == TimelapseType::tlSmooth || lt.wipe_tower_partitions > 0)) + || lt.print_z < object_bottom_z + EPSILON; // Test for a raft, insert additional wipe tower layer to fill in the raft separation gap. for (size_t i = 0; i + 1 < m_layer_tools.size(); ++ i) { diff --git a/src/libslic3r/GCode/ToolOrdering.hpp b/src/libslic3r/GCode/ToolOrdering.hpp index d0b60e2c8a6..b6de13b26d9 100644 --- a/src/libslic3r/GCode/ToolOrdering.hpp +++ b/src/libslic3r/GCode/ToolOrdering.hpp @@ -183,7 +183,7 @@ class ToolOrdering std::vector::const_iterator end() const { return m_layer_tools.end(); } bool empty() const { return m_layer_tools.empty(); } std::vector& layer_tools() { return m_layer_tools; } - bool has_wipe_tower() const { return ! m_layer_tools.empty() && m_first_printing_extruder != (unsigned int)-1 && m_layer_tools.front().wipe_tower_partitions > 0; } + bool has_wipe_tower() const { return ! m_layer_tools.empty() && m_first_printing_extruder != (unsigned int)-1 && m_layer_tools.front().has_wipe_tower; } private: void initialize_layers(std::vector &zs); diff --git a/src/libslic3r/GCode/WipeTower.cpp b/src/libslic3r/GCode/WipeTower.cpp index 0c3df501934..5a17525c98e 100644 --- a/src/libslic3r/GCode/WipeTower.cpp +++ b/src/libslic3r/GCode/WipeTower.cpp @@ -1066,7 +1066,7 @@ WipeTower::box_coordinates WipeTower::align_perimeter(const WipeTower::box_coord return aligned_box; } -WipeTower::ToolChangeResult WipeTower::finish_layer(bool extrude_perimeter) +WipeTower::ToolChangeResult WipeTower::finish_layer(bool extrude_perimeter, bool extruder_fill) { assert(! this->layer_finished()); m_current_layer_finished = true; @@ -1105,7 +1105,7 @@ WipeTower::ToolChangeResult WipeTower::finish_layer(bool extrude_perimeter) const float dy = (fill_box.lu.y() - fill_box.ld.y() - m_perimeter_width); float left = fill_box.lu.x() + 2*m_perimeter_width; float right = fill_box.ru.x() - 2 * m_perimeter_width; - if (dy > m_perimeter_width) + if (extruder_fill && dy > m_perimeter_width) { writer.travel(fill_box.ld + Vec2f(m_perimeter_width * 2, 0.f)) .append(";--------------------\n" @@ -1500,7 +1500,7 @@ void WipeTower::generate(std::vector> & if (m_enable_timelapse_print) { timelapse_wall = only_generate_out_wall(); } - finish_layer_tcr = finish_layer(m_enable_timelapse_print ? false : true); + finish_layer_tcr = finish_layer(m_enable_timelapse_print ? false : true, layer.extruder_fill); } for (int i=0; i> & if (i == idx) { layer_result.emplace_back(tool_change(layer.tool_changes[i].new_tool, m_enable_timelapse_print ? false : true)); // finish_layer will be called after this toolchange - finish_layer_tcr = finish_layer(false); + finish_layer_tcr = finish_layer(false, layer.extruder_fill); } else { layer_result.emplace_back(tool_change(layer.tool_changes[i].new_tool)); diff --git a/src/libslic3r/GCode/WipeTower.hpp b/src/libslic3r/GCode/WipeTower.hpp index 271e9180f4e..de84a604a51 100644 --- a/src/libslic3r/GCode/WipeTower.hpp +++ b/src/libslic3r/GCode/WipeTower.hpp @@ -157,8 +157,11 @@ class WipeTower float get_depth() const { return m_wipe_tower_depth; } float get_brim_width() const { return m_wipe_tower_brim_width_real; } - - + void set_last_layer_extruder_fill(bool extruder_fill) { + if (!m_plan.empty()) { + m_plan.back().extruder_fill = extruder_fill; + } + } // Switch to a next layer. @@ -218,7 +221,7 @@ class WipeTower // Fill the unfilled space with a sparse infill. // Call this method only if layer_finished() is false. - ToolChangeResult finish_layer(bool extruder_perimeter = true); + ToolChangeResult finish_layer(bool extruder_perimeter = true, bool extruder_fill = true); // Is the current layer finished? bool layer_finished() const { @@ -378,6 +381,7 @@ class WipeTower float height; // layer height float depth; // depth of the layer based on all layers above float extra_spacing; + bool extruder_fill{true}; float toolchanges_depth() const { float sum = 0.f; for (const auto &a : tool_changes) sum += a.required_depth; return sum; } std::vector tool_changes; diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index bd84d2082fa..5389b003b68 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -1871,8 +1871,11 @@ void Print::_make_wipe_tower() layer_tools.wiping_extrusions().ensure_perimeters_infills_order(*this); // if enable timelapse, slice all layer - if (enable_timelapse_print()) + if (enable_timelapse_print()) { + if (layer_tools.wipe_tower_partitions == 0) + wipe_tower.set_last_layer_extruder_fill(false); continue; + } if (&layer_tools == &m_wipe_tower_data.tool_ordering.back() || (&layer_tools + 1)->wipe_tower_partitions == 0) break; From 46a0e67be7bf10bca7546aaf3cd998e39aa50bf1 Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Thu, 15 Sep 2022 15:46:21 +0800 Subject: [PATCH 32/90] FIX: sort extruders for minimal flush volume Change-Id: Idf96e10ae5a8809a689c80e38611a14dbb108f0a (cherry picked from commit cbfa3f17807313b7120e19e5f30836fb49d36b55) --- src/libslic3r/Print.cpp | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 5389b003b68..ebbbe92a55b 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -38,6 +38,44 @@ PrintRegion::PrintRegion(PrintRegionConfig &&config) : PrintRegion(std::move(con //BBS float Print::min_skirt_length = 0; +void dfs_get_all_sorted_extruders(const std::vector>& wipe_volumes, + const std::vector& all_extruders, + std::vector & sorted_extruders, + float flush_volume, + std::map> & volumes_to_extruder_order) +{ + if (sorted_extruders.size() == all_extruders.size()) { + volumes_to_extruder_order.insert(std::pair(flush_volume, sorted_extruders)); + } + + for (auto extruder_id : all_extruders) { + auto itor = std::find(sorted_extruders.begin(), sorted_extruders.end(), extruder_id); + if (itor == sorted_extruders.end()) { + float delta_flush_volume = wipe_volumes[sorted_extruders.back()][extruder_id]; + flush_volume += delta_flush_volume; + sorted_extruders.push_back(extruder_id); + dfs_get_all_sorted_extruders(wipe_volumes, all_extruders, sorted_extruders, flush_volume, volumes_to_extruder_order); + flush_volume -= delta_flush_volume; + sorted_extruders.pop_back(); + } + } +} + +std::vector get_extruders_order(const std::vector> &wipe_volumes, + std::vector all_extruders, + unsigned int start_extruder_id) +{ + std::vector sorted_extruders; + sorted_extruders.push_back(start_extruder_id); + std::map> volumes_to_extruder_order; + if (all_extruders.size() > 1) { + dfs_get_all_sorted_extruders(wipe_volumes, all_extruders, sorted_extruders, 0, volumes_to_extruder_order); + if(volumes_to_extruder_order.size() > 0) + return volumes_to_extruder_order.begin()->second; + } + return all_extruders; +} + void Print::clear() { std::scoped_lock lock(this->state_mutex()); @@ -1846,6 +1884,9 @@ void Print::_make_wipe_tower() if (!layer_tools.has_wipe_tower) continue; bool first_layer = &layer_tools == &m_wipe_tower_data.tool_ordering.front(); wipe_tower.plan_toolchange((float)layer_tools.print_z, (float)layer_tools.wipe_tower_layer_height, current_extruder_id, current_extruder_id, false); + + layer_tools.extruders = get_extruders_order(wipe_volumes, layer_tools.extruders, current_extruder_id); + for (const auto extruder_id : layer_tools.extruders) { // BBS: priming logic is removed, so no need to do toolchange for first extruder if (/*(first_layer && extruder_id == m_wipe_tower_data.tool_ordering.all_extruders().back()) || */extruder_id != current_extruder_id) { From 87718e67259023b6386949e2a8610e194b0250f6 Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Wed, 21 Sep 2022 09:43:06 +0800 Subject: [PATCH 33/90] FIX: prompt when opening 3mf Change-Id: I645bb675ea060ca3827a597b13a86cd56425735f (cherry picked from commit 743d0bf1757a886784a41cc35c4f13381d27699d) --- src/libslic3r/Model.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/libslic3r/Model.cpp b/src/libslic3r/Model.cpp index 3d74e789759..e834b26f542 100644 --- a/src/libslic3r/Model.cpp +++ b/src/libslic3r/Model.cpp @@ -565,8 +565,13 @@ bool Model::looks_like_multipart_object() const for (const ModelObject *obj : this->objects) { if (obj->volumes.size() > 1 || obj->config.keys().size() > 1) return false; + Vec3d instance_offset_matrix = obj->instances[0]->m_transformation.get_offset(); for (const ModelVolume *vol : obj->volumes) { - double zmin_this = vol->mesh().bounding_box().min(2); + Vec3d volume_offset_matrix = vol->m_transformation.get_offset(); + BoundingBoxf3 bounding_box = vol->mesh().bounding_box(); + bounding_box.translate(instance_offset_matrix); + bounding_box.translate(volume_offset_matrix); + double zmin_this = bounding_box.min(2); if (zmin == std::numeric_limits::max()) zmin = zmin_this; else if (std::abs(zmin - zmin_this) > EPSILON) From 1d1e12901b3358410aaa5596d92417388bdef2e4 Mon Sep 17 00:00:00 2001 From: "salt.wei" Date: Thu, 22 Sep 2022 09:34:16 +0800 Subject: [PATCH 34/90] ENH: max e speed is 30mm/s As title. Sync with printer limitation Signed-off-by: salt.wei Change-Id: I5f9f594d5f6f33b0035f8200bf8b46b43e5955c5 --- resources/profiles/BBL.json | 2 +- resources/profiles/BBL/machine/fdm_bbl_3dp_001_common.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/resources/profiles/BBL.json b/resources/profiles/BBL.json index 5ca6110cc35..0d38ecaa273 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.02.00.05", + "version": "01.02.01.01", "force_update": "0", "description": "the initial version of BBL configurations", "machine_model_list": [ 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 15918a780ce..c44ef83f203 100644 --- a/resources/profiles/BBL/machine/fdm_bbl_3dp_001_common.json +++ b/resources/profiles/BBL/machine/fdm_bbl_3dp_001_common.json @@ -64,8 +64,8 @@ "200" ], "machine_max_speed_e": [ - "25", - "25" + "30", + "30" ], "machine_max_speed_x": [ "500", From 6a8d42359acccc8945f7341dbdefa25baaf5e5f3 Mon Sep 17 00:00:00 2001 From: "salt.wei" Date: Thu, 22 Sep 2022 13:50:18 +0800 Subject: [PATCH 35/90] ENH: don't load empty mesh when loading step This is fix for crash issue for some specific step file, which generate empty mesh. Signed-off-by: salt.wei Change-Id: I910e3d2da670b623570665265a12361492bd706b --- src/libslic3r/Format/STEP.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/libslic3r/Format/STEP.cpp b/src/libslic3r/Format/STEP.cpp index 2b388199bec..1d5efef4008 100644 --- a/src/libslic3r/Format/STEP.cpp +++ b/src/libslic3r/Format/STEP.cpp @@ -275,7 +275,7 @@ bool load_step(const char *path, Model *model, ImportStepProgressFn stepFn, Step } } - if (aNbTriangles == 0) + if (aNbTriangles == 0 || aNbNodes == 0) // BBS: No triangulation on the shape. continue; @@ -354,13 +354,16 @@ bool load_step(const char *path, Model *model, ImportStepProgressFn stepFn, Step } } - TriangleMesh triangle_mesh; - triangle_mesh.from_stl(stl[i]); - ModelVolume *new_volume = new_object->add_volume(std::move(triangle_mesh)); - new_volume->name = namedSolids[i].name; - new_volume->source.input_file = path; - new_volume->source.object_idx = (int) model->objects.size() - 1; - new_volume->source.volume_idx = (int) new_object->volumes.size() - 1; + //BBS: maybe mesh is empty from step file. Don't add + if (stl[i].stats.number_of_facets > 0) { + TriangleMesh triangle_mesh; + triangle_mesh.from_stl(stl[i]); + ModelVolume* new_volume = new_object->add_volume(std::move(triangle_mesh)); + new_volume->name = namedSolids[i].name; + new_volume->source.input_file = path; + new_volume->source.object_idx = (int)model->objects.size() - 1; + new_volume->source.volume_idx = (int)new_object->volumes.size() - 1; + } } shapeTool.reset(nullptr); From 37d6efdbefd74f7dcc15960137c6d420a204de84 Mon Sep 17 00:00:00 2001 From: "zhimin.zeng" Date: Thu, 22 Sep 2022 10:34:12 +0800 Subject: [PATCH 36/90] FIX: thumbnails not showing after simplifying model Change-Id: Ie599b3067cf3f3dbf48a38f5f434678a7d56dbda --- src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp b/src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp index 7e989f85e80..def666e5b06 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSimplify.cpp @@ -569,7 +569,7 @@ void GLGizmoSimplify::apply_simplify() { mv->calculate_convex_hull(); mv->set_new_unique_id(); mv->get_object()->invalidate_bounding_box(); - mv->get_object()->ensure_on_bed(true); // allow negative z + mv->get_object()->ensure_on_bed(); // fix hollowing, sla support points, modifiers, ... plater->changed_mesh(object_idx); From 83a9c259f7656b9bca657c4191a3d34b01475134 Mon Sep 17 00:00:00 2001 From: "tao.jin" Date: Fri, 16 Sep 2022 10:26:20 +0800 Subject: [PATCH 37/90] ENH: add hint dialogs for firmware upgrade Change-Id: Iff34e4543d50074db05280fec8178029c4531e00 (cherry picked from commit 6f98eda25c722ecb6e0b6f4926972031c00bc366) --- src/slic3r/CMakeLists.txt | 2 + src/slic3r/GUI/DeviceManager.cpp | 12 +- src/slic3r/GUI/DeviceManager.hpp | 1 + src/slic3r/GUI/FirmwareUpdateDialog.cpp | 173 ++++++++++++++++++++++++ src/slic3r/GUI/FirmwareUpdateDialog.hpp | 45 ++++++ src/slic3r/GUI/UpgradePanel.cpp | 78 +++++++++-- src/slic3r/GUI/UpgradePanel.hpp | 9 +- 7 files changed, 308 insertions(+), 12 deletions(-) create mode 100644 src/slic3r/GUI/FirmwareUpdateDialog.cpp create mode 100644 src/slic3r/GUI/FirmwareUpdateDialog.hpp diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt index 1408ccc8490..12da13bc8cc 100644 --- a/src/slic3r/CMakeLists.txt +++ b/src/slic3r/CMakeLists.txt @@ -237,6 +237,8 @@ set(SLIC3R_GUI_SOURCES GUI/ConfigManipulation.hpp GUI/Field.cpp GUI/Field.hpp + GUI/FirmwareUpdateDialog.cpp + GUI/FirmwareUpdateDialog.hpp GUI/OptionsGroup.cpp GUI/OptionsGroup.hpp GUI/OG_CustomCtrl.cpp diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 00a2081ccb2..c7b64704995 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -1162,7 +1162,7 @@ int MachineObject::command_request_push_all() int MachineObject::command_upgrade_confirm() { - BOOST_LOG_TRIVIAL(trace) << "command_upgrade_confirm"; + BOOST_LOG_TRIVIAL(info) << "command_upgrade_confirm"; json j; j["upgrade"]["command"] = "upgrade_confirm"; j["upgrade"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); @@ -1170,6 +1170,16 @@ int MachineObject::command_upgrade_confirm() return this->publish_json(j.dump()); } +int MachineObject::command_consistency_upgrade_confirm() +{ + BOOST_LOG_TRIVIAL(info) << "command_consistency_upgrade_confirm"; + json j; + j["upgrade"]["command"] = "consistency_confirm"; + j["upgrade"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); + j["upgrade"]["src_id"] = 1; // 1 for slicer + return this->publish_json(j.dump()); +} + int MachineObject::command_upgrade_firmware(FirmwareInfo info) { std::string version = info.version; diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp index 39cbd3a04d5..077a25b87f0 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -534,6 +534,7 @@ class MachineObject /* command upgrade */ int command_upgrade_confirm(); + int command_consistency_upgrade_confirm(); int command_upgrade_firmware(FirmwareInfo info); /* control apis */ diff --git a/src/slic3r/GUI/FirmwareUpdateDialog.cpp b/src/slic3r/GUI/FirmwareUpdateDialog.cpp new file mode 100644 index 00000000000..600e2d3b6cf --- /dev/null +++ b/src/slic3r/GUI/FirmwareUpdateDialog.cpp @@ -0,0 +1,173 @@ +#include "FirmwareUpdateDialog.hpp" +#include +#include +#include +#include + + +namespace Slic3r { namespace GUI { + +wxDEFINE_EVENT(EVT_UPGRADE_FIRMWARE, wxCommandEvent); + +FirmwareUpdateDialog::FirmwareUpdateDialog(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style) + : DPIDialog(parent, id, _L("Upgrade firmware"), pos, size, style) +{ + std::string icon_path = (boost::format("%1%/images/BambuStudioTitle.ico") % resources_dir()).str(); + SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); + + auto* main_sizer = new wxBoxSizer(wxVERTICAL); + auto* button_sizer = new wxBoxSizer(wxHORIZONTAL); + + wxPanel* m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1), wxTAB_TRAVERSAL); + m_line_top->SetBackgroundColour(wxColour(166, 169, 170)); + + m_button_confirm = new Button(this, _L("Confirm")); + m_button_confirm->SetFont(Label::Body_14); + m_button_confirm->SetMinSize(wxSize(-1, FromDIP(24))); + m_button_confirm->SetCornerRadius(FromDIP(12)); + StateColor confirm_btn_bg(std::pair(wxColour(61, 203, 115), StateColor::Hovered), + std::pair(wxColour(0, 174, 66), StateColor::Normal)); + m_button_confirm->SetBackgroundColor(confirm_btn_bg); + m_button_confirm->SetBorderColor(wxColour(0, 174, 66)); + m_button_confirm->SetTextColor(*wxWHITE); + + m_button_close = new Button(this, _L("Cancel")); + m_button_close->SetFont(Label::Body_14); + m_button_close->SetMinSize(wxSize(-1, FromDIP(24))); + m_button_close->SetCornerRadius(FromDIP(12)); + StateColor close_btn_bg(std::pair(wxColour(206, 206, 206), StateColor::Hovered), + std::pair(*wxWHITE, StateColor::Normal)); + m_button_close->SetBackgroundColor(close_btn_bg); + m_button_close->SetBorderColor(wxColour(38, 46, 48)); + m_button_close->SetTextColor(wxColour(38, 46, 48)); + + button_sizer->AddStretchSpacer(); + button_sizer->Add(m_button_confirm); + button_sizer->AddSpacer(FromDIP(20)); + button_sizer->Add(m_button_close); + + main_sizer->Add(m_line_top, 0, wxEXPAND, 0); + main_sizer->AddSpacer(wxSize(FromDIP(475), FromDIP(100)).y); + main_sizer->Add(button_sizer, 0, wxBOTTOM | wxRIGHT | wxEXPAND, FromDIP(25)); + + SetSizer(main_sizer); + + CenterOnParent(); + + this->SetSize(wxSize(wxSize(FromDIP(475), FromDIP(100)).x, -1)); + this->SetMinSize(wxSize(wxSize(FromDIP(475), FromDIP(100)).x, -1)); + Layout(); + Fit(); + this->Bind(wxEVT_PAINT, &FirmwareUpdateDialog::OnPaint, this); + m_button_confirm->Bind(wxEVT_BUTTON, &FirmwareUpdateDialog::on_button_confirm, this); + m_button_close->Bind(wxEVT_BUTTON, &FirmwareUpdateDialog::on_button_close, this); +} + +FirmwareUpdateDialog::~FirmwareUpdateDialog() {} + +void FirmwareUpdateDialog::SetHint(const wxString& hint){ + firm_up_hint = hint; +} + +void FirmwareUpdateDialog::OnPaint(wxPaintEvent& event){ + wxPaintDC dc(this); + render(dc); +} + +void FirmwareUpdateDialog::render(wxDC& dc) { + wxSize size = GetSize(); + + dc.SetFont(Label::Body_14); + dc.SetTextForeground(text_color); + wxPoint pos_start = wxPoint(FromDIP(25), FromDIP(25)); + + wxSize firm_up_hint_size = dc.GetTextExtent(firm_up_hint); + wxPoint pos_firm_up_hint = pos_start; + + if (firm_up_hint_size.x + pos_firm_up_hint.x + FromDIP(25) > wxSize(FromDIP(475), FromDIP(100)).x) { + bool is_ch = false; + if (firm_up_hint[0] > 0x80 && firm_up_hint[1] > 0x80) + is_ch = true; + + wxString fisrt_line; + wxString remaining_line; + + wxString count_txt; + int new_line_pos = 0; + for (int i = 0; i < firm_up_hint.length(); i++) { + count_txt += firm_up_hint[i]; + auto text_size = dc.GetTextExtent(count_txt); + if (text_size.x + pos_firm_up_hint.x + FromDIP(25) < wxSize(FromDIP(475), FromDIP(100)).x) + { + if (firm_up_hint[i] == ' ' || firm_up_hint[i] == '\n') + new_line_pos = i; + } + else { + if (!is_ch) { + fisrt_line = firm_up_hint.SubString(0, new_line_pos); + remaining_line = firm_up_hint.SubString(new_line_pos + 1, firm_up_hint.length()); + break; + } + else { + fisrt_line = firm_up_hint.SubString(0, i); + remaining_line = firm_up_hint.SubString(i, firm_up_hint.length()); + break; + } + count_txt = ""; + } + } + dc.DrawText(fisrt_line, pos_firm_up_hint); + + + count_txt = ""; + new_line_pos = 0; + for (int i = 0; i < remaining_line.length(); i++) { + count_txt += remaining_line[i]; + auto text_size = dc.GetTextExtent(count_txt); + if (text_size.x + FromDIP(25) + FromDIP(25) < wxSize(FromDIP(475), FromDIP(100)).x) + { + if (remaining_line[i] == ' ' || remaining_line[i] == '\n') + new_line_pos = i; + } + else { + if (!is_ch){ + remaining_line[new_line_pos] = '\n'; + } + else { + remaining_line.insert(i, '\n'); + } + count_txt = ""; + } + } + wxPoint pos_txt = pos_firm_up_hint; + pos_txt.y += dc.GetCharHeight(); + dc.DrawText(remaining_line, pos_txt); + } + else + dc.DrawText(firm_up_hint, pos_firm_up_hint); +} + +void FirmwareUpdateDialog::on_button_confirm(wxCommandEvent& event) { + wxCommandEvent evt(EVT_UPGRADE_FIRMWARE, GetId()); + event.SetEventObject(this); + GetEventHandler()->ProcessEvent(evt); + + if (this->IsModal()) + this->EndModal(wxID_OK); + else + this->Close(); +} + +void FirmwareUpdateDialog::on_button_close(wxCommandEvent& event) { + this->Close(); +} + +void FirmwareUpdateDialog::on_dpi_changed(const wxRect& suggested_rect) { + m_button_confirm->SetMinSize(wxSize(-1, FromDIP(24))); + m_button_confirm->SetCornerRadius(FromDIP(12)); + m_button_close->SetMinSize(wxSize(-1, FromDIP(24))); + m_button_close->SetCornerRadius(FromDIP(12)); + Layout(); +} + +}} // namespace Slic3r::GUI \ No newline at end of file diff --git a/src/slic3r/GUI/FirmwareUpdateDialog.hpp b/src/slic3r/GUI/FirmwareUpdateDialog.hpp new file mode 100644 index 00000000000..a0fa53facf5 --- /dev/null +++ b/src/slic3r/GUI/FirmwareUpdateDialog.hpp @@ -0,0 +1,45 @@ +#ifndef slic3r_GUI_FirmwareUpdateDialog_hpp_ +#define slic3r_GUI_FirmwareUpdateDialog_hpp_ + +#include "GUI_Utils.hpp" +#include +#include "Widgets/Button.hpp" +#include + +namespace Slic3r { namespace GUI { + +wxDECLARE_EVENT(EVT_UPGRADE_FIRMWARE, wxCommandEvent); + +class FirmwareUpdateDialog : public DPIDialog +{ +private: + wxStaticText* m_staticText_hint; + Button* m_button_confirm; + Button* m_button_close; + wxStaticBitmap* m_bitmap_home; + ScalableBitmap m_home_bmp; + wxString firm_up_hint = ""; + + void OnPaint(wxPaintEvent& event); + void render(wxDC& dc); + void on_button_confirm(wxCommandEvent& event); + void on_button_close(wxCommandEvent& event); + void on_dpi_changed(const wxRect& suggested_rect) override; + +public: + FirmwareUpdateDialog(wxWindow* parent, + wxWindowID id = wxID_ANY, + const wxString& title = wxEmptyString, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxCLOSE_BOX | wxCAPTION); + + const wxColour text_color = wxColour(107, 107, 107); + + void SetHint(const wxString &hint); + + ~FirmwareUpdateDialog(); +}; +}} // namespace Slic3r::GUI + +#endif \ No newline at end of file diff --git a/src/slic3r/GUI/UpgradePanel.cpp b/src/slic3r/GUI/UpgradePanel.cpp index db94d1f40b1..13796836062 100644 --- a/src/slic3r/GUI/UpgradePanel.cpp +++ b/src/slic3r/GUI/UpgradePanel.cpp @@ -5,6 +5,7 @@ #include "GUI_App.hpp" #include "libslic3r/Thread.hpp" #include "ReleaseNote.hpp" +#include "FirmwareUpdateDialog.hpp" namespace Slic3r { namespace GUI { @@ -12,6 +13,10 @@ namespace GUI { static const wxColour TEXT_NORMAL_CLR = wxColour(0, 174, 66); static const wxColour TEXT_FAILED_CLR = wxColour(255, 111, 0); +wxString normal_upgrade_hint = _L("Are you sure you want to update? This will take about 10 minutes. Do not turn off the power while the printer is updating."); +wxString force_upgrade_hint = _L("An important update was detected and needs to be run before printing can continue. Do you want to update now? You can also update later from 'Upgrade firmware'."); +wxString consistency_upgrade_hint = _L("The firmware version is abnormal. Repairing and updating are required before printing. Do you want to update now? You can also update later on printer or update next time starting the studio."); + MachineInfoPanel::MachineInfoPanel(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name) :wxPanel(parent, id, pos, size, style) { @@ -312,7 +317,6 @@ void MachineInfoPanel::update(MachineObject* obj) m_staticText_upgrading_percent->SetLabelText(wxString::Format("%d%%", upgrade_percent)); } else if (obj->upgrade_display_state == (int) MachineObject::UpgradingDisplayState::UpgradingFinished) { wxString result_text = obj->get_upgrade_result_str(obj->upgrade_err_code); - m_staticText_upgrading_info->SetLabelText(result_text); m_upgrade_progress->SetValue(upgrade_percent); m_staticText_upgrading_percent->SetLabelText(wxString::Format("%d%%", upgrade_percent)); } @@ -575,7 +579,7 @@ void MachineInfoPanel::show_status(int status, std::string upgrade_status_str) BOOST_LOG_TRIVIAL(trace) << "MachineInfoPanel: show_status = " << status << ", str = " << upgrade_status_str; Freeze(); - + if (status == (int)MachineObject::UpgradingDisplayState::UpgradingUnavaliable) { m_button_upgrade_firmware->Show(); m_button_upgrade_firmware->Disable(); @@ -593,7 +597,7 @@ void MachineInfoPanel::show_status(int status, std::string upgrade_status_str) m_staticText_upgrading_info->Hide(); m_staticText_upgrading_percent->Hide(); } else if (status == (int) MachineObject::UpgradingDisplayState::UpgradingInProgress) { - m_button_upgrade_firmware->Hide(); + m_button_upgrade_firmware->Disable(); for (size_t i = 0; i < m_upgrading_sizer->GetItemCount(); i++) { m_upgrading_sizer->Show(true); } m_upgrade_retry_img->Hide(); m_staticText_upgrading_info->Show(); @@ -606,17 +610,18 @@ void MachineInfoPanel::show_status(int status, std::string upgrade_status_str) m_staticText_upgrading_info->SetLabel(_L("Upgrading failed")); m_staticText_upgrading_info->SetForegroundColour(TEXT_FAILED_CLR); for (size_t i = 0; i < m_upgrading_sizer->GetItemCount(); i++) { m_upgrading_sizer->Show(true); } - m_button_upgrade_firmware->Hide(); + m_button_upgrade_firmware->Disable(); m_staticText_upgrading_info->Show(); - m_staticText_upgrading_percent->Hide(); + m_staticText_upgrading_percent->Show(); m_upgrade_retry_img->Show(); } else { - for (size_t i = 0; i < m_upgrading_sizer->GetItemCount(); i++) { m_upgrading_sizer->Show(true); } - m_button_upgrade_firmware->Hide(); - m_staticText_upgrading_info->SetLabel(_L("Upgrading success")); + m_staticText_upgrading_info->SetLabel(_L("Upgrading successful")); m_staticText_upgrading_info->Show(); + for (size_t i = 0; i < m_upgrading_sizer->GetItemCount(); i++) { m_upgrading_sizer->Show(true); } + m_button_upgrade_firmware->Disable(); m_staticText_upgrading_info->SetForegroundColour(TEXT_NORMAL_CLR); m_staticText_upgrading_percent->SetForegroundColour(TEXT_NORMAL_CLR); + m_staticText_upgrading_percent->Show(); m_upgrade_retry_img->Hide(); } } else { @@ -652,8 +657,28 @@ void MachineInfoPanel::upgrade_firmware_internal() { void MachineInfoPanel::on_upgrade_firmware(wxCommandEvent &event) { - if (m_obj) - m_obj->command_upgrade_confirm(); + FirmwareUpdateDialog* confirm_dlg = new FirmwareUpdateDialog(this->GetParent()); + confirm_dlg->SetHint(normal_upgrade_hint); + confirm_dlg->Bind(EVT_UPGRADE_FIRMWARE, [this](wxCommandEvent &e) { + if (m_obj){ + m_obj->command_upgrade_confirm(); + } + }); + if(confirm_dlg->ShowModal()) + delete confirm_dlg; +} + +void MachineInfoPanel::on_consisitency_upgrade_firmware(wxCommandEvent &event) +{ + FirmwareUpdateDialog* confirm_dlg = new FirmwareUpdateDialog(this->GetParent()); + confirm_dlg->SetHint(normal_upgrade_hint); + confirm_dlg->Bind(EVT_UPGRADE_FIRMWARE, [this](wxCommandEvent &e) { + if (m_obj){ + m_obj->command_consistency_upgrade_confirm(); + } + }); + if(confirm_dlg->ShowModal()) + delete confirm_dlg; } void MachineInfoPanel::on_show_release_note(wxMouseEvent &event) @@ -759,6 +784,39 @@ void UpgradePanel::update(MachineObject *obj) } } + //force upgrade + //unlock hint + if (m_obj && (m_obj->upgrade_display_state == (int) MachineObject::UpgradingDisplayState::UpgradingFinished) && (last_forced_hint_status != m_obj->upgrade_display_state)) { + last_forced_hint_status = m_obj->upgrade_display_state; + m_show_forced_hint = true; + } + if (m_obj && m_show_forced_hint) { + if (m_obj->upgrade_force_upgrade) { + m_show_forced_hint = false; //lock hint + FirmwareUpdateDialog* force_dlg = new FirmwareUpdateDialog(m_scrolledWindow); + force_dlg->SetHint(force_upgrade_hint); + force_dlg->Bind(EVT_UPGRADE_FIRMWARE, &MachineInfoPanel::on_upgrade_firmware, m_push_upgrade_panel); + if (force_dlg->ShowModal()) + delete force_dlg; + } + } + + //consistency upgrade + if (m_obj && (m_obj->upgrade_display_state == (int) MachineObject::UpgradingDisplayState::UpgradingFinished) && (last_consistency_hint_status != m_obj->upgrade_display_state)) { + last_consistency_hint_status = m_obj->upgrade_display_state; + m_show_consistency_hint = true; + } + if (m_obj && m_show_consistency_hint) { + if (m_obj->upgrade_consistency_request) { + m_show_consistency_hint = false; + FirmwareUpdateDialog* consistency_dlg = new FirmwareUpdateDialog(m_scrolledWindow); + consistency_dlg->SetHint(consistency_upgrade_hint); + consistency_dlg->Bind(EVT_UPGRADE_FIRMWARE, &MachineInfoPanel::on_consisitency_upgrade_firmware, m_push_upgrade_panel); + if (consistency_dlg->ShowModal()) + delete consistency_dlg; + } + } + //update panels if (m_push_upgrade_panel) { m_push_upgrade_panel->update(obj); diff --git a/src/slic3r/GUI/UpgradePanel.hpp b/src/slic3r/GUI/UpgradePanel.hpp index 412d45ed131..378c48e42dd 100644 --- a/src/slic3r/GUI/UpgradePanel.hpp +++ b/src/slic3r/GUI/UpgradePanel.hpp @@ -78,7 +78,6 @@ class MachineInfoPanel : public wxPanel std::string last_status_str = ""; void upgrade_firmware_internal(); - void on_upgrade_firmware(wxCommandEvent &event); void on_show_release_note(wxMouseEvent &event); public: @@ -98,6 +97,9 @@ class MachineInfoPanel : public wxPanel void show_status(int status, std::string upgrade_status_str = ""); void show_ams(bool show = false, bool force_update = false); + void on_upgrade_firmware(wxCommandEvent &event); + void on_consisitency_upgrade_firmware(wxCommandEvent &event); + MachineObject *m_obj{nullptr}; FirmwareInfo m_ota_info; FirmwareInfo m_ams_info; @@ -129,6 +131,11 @@ class UpgradePanel : public wxPanel //enable_select_firmware only in debug mode bool enable_select_firmware = false; bool m_need_update = false; + //hint of force upgrade or consistency upgrade + int last_forced_hint_status = -1; + int last_consistency_hint_status = -1; + bool m_show_forced_hint = true; + bool m_show_consistency_hint = true; public: UpgradePanel(wxWindow *parent, wxWindowID id = wxID_ANY, const wxPoint &pos = wxDefaultPosition, const wxSize &size = wxDefaultSize, long style = wxTAB_TRAVERSAL); From 673b6418c14a3aff800668caf0382538a2a6f7d6 Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Wed, 14 Sep 2022 13:15:39 +0800 Subject: [PATCH 38/90] ENH: sync with ams filament Change-Id: Ifa8b9487c934a18ad1003f380bbb53fa9288e387 --- resources/images/ams_fila_sync.svg | 12 ++++ src/libslic3r/PresetBundle.cpp | 25 +++++++++ src/libslic3r/PresetBundle.hpp | 1 + src/slic3r/GUI/GUI_App.cpp | 3 - src/slic3r/GUI/Plater.cpp | 85 ++++++++++++++++------------- src/slic3r/GUI/Plater.hpp | 3 +- src/slic3r/GUI/PresetComboBoxes.cpp | 6 +- src/slic3r/GUI/Tab.cpp | 5 +- 8 files changed, 94 insertions(+), 46 deletions(-) create mode 100644 resources/images/ams_fila_sync.svg diff --git a/resources/images/ams_fila_sync.svg b/resources/images/ams_fila_sync.svg new file mode 100644 index 00000000000..0b2e0b75e8e --- /dev/null +++ b/resources/images/ams_fila_sync.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index 28dd90097c7..6a731dfda1c 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -1314,6 +1314,31 @@ void PresetBundle::set_num_filaments(unsigned int n, std::string new_color) update_multi_material_filament_presets(); } +unsigned int PresetBundle::sync_ams_list() +{ + std::vector filament_presets; + std::vector filament_colors; + for (auto &ams : filament_ams_list) { + auto filament_id = ams.opt_string("filament_id", 0u); + auto filament_color = ams.opt_string("filament_colour", 0u); + auto iter = std::find_if(filaments.begin(), filaments.end(), [&filament_id](auto &f) { return f.is_compatible && f.is_system && f.filament_id == filament_id; }); + if (iter == filaments.end()) { + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(": filament_id %1% not found or system or compatible") % filament_id; + continue; + } + filament_presets.push_back(iter->name); + filament_colors.push_back(filament_color); + } + if (filament_presets.empty()) + return 0; + this->filament_presets = filament_presets; + ConfigOptionStrings *filament_color = project_config.option("filament_colour"); + filament_color->resize(filament_presets.size()); + filament_color->values = filament_colors; + update_multi_material_filament_presets(); + return filament_presets.size(); +} + //BBS: check whether this is the only edited filament bool PresetBundle::is_the_only_edited_filament(unsigned int filament_index) { diff --git a/src/libslic3r/PresetBundle.hpp b/src/libslic3r/PresetBundle.hpp index 0cd7aef9941..edc80e58777 100644 --- a/src/libslic3r/PresetBundle.hpp +++ b/src/libslic3r/PresetBundle.hpp @@ -79,6 +79,7 @@ class PresetBundle // BBS void set_num_filaments(unsigned int n, std::string new_col = ""); + unsigned int sync_ams_list(); //BBS: check whether this is the only edited filament bool is_the_only_edited_filament(unsigned int filament_index); diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 0b19e9bdb82..1f4e78d5ac1 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -1641,12 +1641,9 @@ void GUI_App::init_networking_callbacks() if (obj) { obj->parse_json(msg); - -#if !BBL_RELEASE_TO_PUBLIC if (obj->is_ams_need_update) { GUI::wxGetApp().sidebar().load_ams_list(obj->amsList); } -#endif } }); }; diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index f7429512705..78298f8be76 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -287,6 +287,7 @@ struct Sidebar::priv wxStaticText* m_staticText_filament_settings; ScalableButton * m_bpButton_add_filament; ScalableButton * m_bpButton_del_filament; + ScalableButton * m_bpButton_ams_filament; ScalableButton * m_bpButton_set_filament; wxPanel* m_panel_filament_content; wxScrolledWindow* m_scrolledWindow_filament_content; @@ -636,6 +637,7 @@ Sidebar::Sidebar(Plater *parent) bSizer39->Add(FromDIP(10), 0, 0, 0, 0 ); ScalableButton* add_btn = new ScalableButton(p->m_panel_filament_title, wxID_ANY, "add_filament"); + add_btn->SetToolTip(_L("Add one filament")); add_btn->Bind(wxEVT_BUTTON, [this, scrolled_sizer](wxCommandEvent& e){ // BBS: limit filament choices to 16 if (p->combos_filament.size() >= 16) @@ -654,7 +656,8 @@ Sidebar::Sidebar(Plater *parent) bSizer39->Add(FromDIP(10), 0, 0, 0, 0 ); ScalableButton* del_btn = new ScalableButton(p->m_panel_filament_title, wxID_ANY, "delete_filament"); - del_btn->Bind(wxEVT_BUTTON, [this, scrolled_sizer](wxCommandEvent& e){ + del_btn->SetToolTip(_L("Remove last filament")); + del_btn->Bind(wxEVT_BUTTON, [this, scrolled_sizer](wxCommandEvent &e) { if (p->combos_filament.size() <= 1) return; @@ -676,8 +679,20 @@ Sidebar::Sidebar(Plater *parent) bSizer39->Add(del_btn, 0, wxALIGN_CENTER_VERTICAL, FromDIP(5)); bSizer39->Add(FromDIP(20), 0, 0, 0, 0); + ScalableButton *ams_btn = new ScalableButton(p->m_panel_filament_title, wxID_ANY, "ams_fila_sync", wxEmptyString, wxDefaultSize, wxDefaultPosition, + wxBU_EXACTFIT | wxNO_BORDER, false, 18); + ams_btn->SetToolTip(_L("Sync material list from AMS")); + ams_btn->Bind(wxEVT_BUTTON, [this, scrolled_sizer](wxCommandEvent &e) { + sync_ams_list(); + }); + p->m_bpButton_ams_filament = ams_btn; + + bSizer39->Add(ams_btn, 0, wxALIGN_CENTER|wxALL, FromDIP(5)); + bSizer39->Add(FromDIP(10), 0, 0, 0, 0 ); + ScalableButton* set_btn = new ScalableButton(p->m_panel_filament_title, wxID_ANY, "settings"); - set_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent& e) { + set_btn->SetToolTip(_L("Set filaments to use")); + set_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent &e) { // p->editing_filament = -1; // wxGetApp().params_dialog()->Popup(); // wxGetApp().get_tab(Preset::TYPE_FILAMENT)->restore_last_select_item(); @@ -992,6 +1007,7 @@ void Sidebar::msw_rescale() p->m_filament_icon->msw_rescale(); p->m_bpButton_add_filament->msw_rescale(); p->m_bpButton_del_filament->msw_rescale(); + p->m_bpButton_ams_filament->msw_rescale(); p->m_bpButton_set_filament->msw_rescale(); p->m_flushing_volume_btn->Rescale(); //BBS @@ -1171,42 +1187,9 @@ void Sidebar::load_ams_list(std::map const &list) std::vector filament_ams_list; for (auto ams : list) { for (auto tray : ams.second->trayList) { - if (tray.second->setting_id.empty()) - continue; + if (tray.second->setting_id.empty()) continue; DynamicPrintConfig ams; - auto & filaments = wxGetApp().preset_bundle->filaments.get_presets(); - auto iter = std::find_if(filaments.begin(), filaments.end(), - [&tray](auto &f) { return f.filament_id == tray.second->setting_id; }); - if (iter != filaments.end()) { - ams.set_key_value("filament_settings_id", new ConfigOptionStrings{tray.second->setting_id}); - } else { - /* std::shared_ptr> preset(new std::map); - (*preset)->setting_id = tray.second->setting_id; - ams.set_key_value("filament_settings_id", new ConfigOptionStrings{tray.second->setting_id}); - //TODO: comment it currently - NetworkAgent* agent = wxGetApp().getAgent(); - if (agent) { - agent->get_setting(tray.second->setting_id, *preset, [preset] { - wxGetApp().CallAfter([preset] { - if ((*preset)->name.empty()) - return; - PresetsConfigSubstitutions substitutions; - wxGetApp().preset_bundle->filaments.load_user_presets({{(*preset)->name, *preset}}, - PRESET_FILAMENT_NAME, substitutions, ForwardCompatibilitySubstitutionRule::Enable); - auto & ams_list = wxGetApp().preset_bundle->filament_ams_list; - for (auto& ams : ams_list) { - if (ams.opt_string("filament_settings_id", 0u) == (*preset)->setting_id) { - ams.set_key_value("filament_settings_id", new ConfigOptionStrings{(*preset)->name}); - for (auto c : wxGetApp().sidebar().combos_filament()) c->update(); - break; - } - } - }); - }); - } - */ - continue; - } + ams.set_key_value("filament_id", new ConfigOptionStrings{tray.second->setting_id}); ams.set_key_value("filament_colour", new ConfigOptionStrings{"#" + tray.second->color.substr(0, 6)}); filament_ams_list.emplace_back(std::move(ams)); } @@ -1216,6 +1199,34 @@ void Sidebar::load_ams_list(std::map const &list) c->update(); } +void Sidebar::sync_ams_list() +{ + auto & list = wxGetApp().preset_bundle->filament_ams_list; + if (list.empty()) { + MessageDialog dlg(this, + _L("No AMS filaments. Please select a printer in 'Device' page to load AMS info."), + _L("Sync filaments with AMS"), wxOK); + dlg.ShowModal(); + return; + } + MessageDialog dlg(this, + _L("Sync filaments with AMS will drop all current selected filament presets and colors. Do you want to continue?"), + _L("Sync filaments with AMS"), wxYES_NO); + if (dlg.ShowModal() != wxID_YES) return; + auto n = wxGetApp().preset_bundle->sync_ams_list(); + if (n == 0) { + MessageDialog dlg(this, + _L("There are no compatible filaments, and sync is not performed."), + _L("Sync filaments with AMS"), wxOK); + dlg.ShowModal(); + return; + } + wxGetApp().plater()->on_filaments_change(n); + for (auto &c : p->combos_filament) + c->update(); + wxGetApp().get_tab(Preset::TYPE_PRINT)->update(); +} + ObjectList* Sidebar::obj_list() { // BBS diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index 5460ffcdd1c..9f7c42bda85 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -117,7 +117,8 @@ class Sidebar : public wxPanel void on_filaments_change(size_t num_filaments); // BBS void on_bed_type_change(BedType bed_type); - void load_ams_list(std::map const & list); + void load_ams_list(std::map const &list); + void sync_ams_list(); ObjectList* obj_list(); ObjectSettings* obj_settings(); diff --git a/src/slic3r/GUI/PresetComboBoxes.cpp b/src/slic3r/GUI/PresetComboBoxes.cpp index 6bfe8a48498..754f0345b13 100644 --- a/src/slic3r/GUI/PresetComboBoxes.cpp +++ b/src/slic3r/GUI/PresetComboBoxes.cpp @@ -387,11 +387,11 @@ void PresetComboBox::add_ams_filaments(std::string selected, bool alias_name) m_first_ams_filament = GetCount(); auto &filaments = m_collection->get_presets(); for (auto &f : m_preset_bundle->filament_ams_list) { - std::string setting_id = f.opt_string("filament_settings_id", 0u); + std::string filament_id = f.opt_string("filament_id", 0u); auto iter = std::find_if(filaments.begin(), filaments.end(), - [&setting_id](auto &f) { return f.is_compatible && f.is_system && f.filament_id == setting_id; }); + [&filament_id](auto &f) { return f.is_compatible && f.is_system && f.filament_id == filament_id; }); if (iter == filaments.end()) { - BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(": filament_id %1% not found or system or compatible") % setting_id; + BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(": filament_id %1% not found or system or compatible") % filament_id; continue; } const_cast(*iter).is_visible = true; diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index dfc376eca73..9debf820f9d 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -231,7 +231,7 @@ void Tab::create_preset_tab() m_btn_compare_preset->SetToolTip(_L("Compare presets")); // TRN "Save current Settings" - m_btn_save_preset->SetToolTip(from_u8((boost::format(_utf8(L("Save current %s"))) % m_title).str())); + m_btn_save_preset->SetToolTip(wxString::Format(_L("Save current %s"), m_title)); m_btn_delete_preset->SetToolTip(_(L("Delete this preset"))); m_btn_delete_preset->Hide(); @@ -255,6 +255,7 @@ void Tab::create_preset_tab() add_scaled_button(m_top_panel, &m_undo_btn, m_bmp_white_bullet.name()); add_scaled_button(m_top_panel, &m_undo_to_sys_btn, m_bmp_white_bullet.name()); add_scaled_button(m_top_panel, &m_btn_search, "search"); + m_btn_search->SetToolTip(_L("Search in preset")); //search input m_search_item = new RoundedRectangle(m_top_panel, wxColour(238, 238, 238), wxDefaultPosition, wxSize(m_top_panel->GetSize().GetWidth(), 3 * wxGetApp().em_unit()), 8); @@ -993,7 +994,7 @@ void Tab::update_undo_buttons() m_undo_btn-> SetBitmap_(m_presets->get_edited_preset().is_dirty ? m_bmp_value_revert: m_bmp_white_bullet); m_undo_to_sys_btn-> SetBitmap_(m_is_nonsys_values ? *m_bmp_non_system : m_bmp_value_lock); - m_undo_btn->SetToolTip(m_is_modified_values ? m_ttg_value_revert : m_ttg_white_bullet); + m_undo_btn->SetToolTip(m_presets->get_edited_preset().is_dirty ? _L("Click to reset all settings to the last saved preset.") : m_ttg_white_bullet); m_undo_to_sys_btn->SetToolTip(m_is_nonsys_values ? *m_ttg_non_system : m_ttg_value_lock); } From c47f892ec8f979538e71a67dee6e482a7138e0b8 Mon Sep 17 00:00:00 2001 From: tao wang Date: Thu, 15 Sep 2022 14:48:39 +0800 Subject: [PATCH 39/90] FIX:release note support for richtext and markdown Change-Id: Ie00dc94d88005c123acd20f05f43c5473b6dfa46 --- resources/tooltip/releasenote.html | 24 +++++++++ src/slic3r/GUI/ReleaseNote.cpp | 80 ++++++++++++++++++++++++++++-- src/slic3r/GUI/ReleaseNote.hpp | 11 +++- 3 files changed, 109 insertions(+), 6 deletions(-) create mode 100644 resources/tooltip/releasenote.html diff --git a/resources/tooltip/releasenote.html b/resources/tooltip/releasenote.html new file mode 100644 index 00000000000..3e7c22c1743 --- /dev/null +++ b/resources/tooltip/releasenote.html @@ -0,0 +1,24 @@ + + + + + + + + + +

+ + + diff --git a/src/slic3r/GUI/ReleaseNote.cpp b/src/slic3r/GUI/ReleaseNote.cpp index a8eec900989..e73a9851fc5 100644 --- a/src/slic3r/GUI/ReleaseNote.cpp +++ b/src/slic3r/GUI/ReleaseNote.cpp @@ -11,6 +11,7 @@ #include "Widgets/ProgressDialog.hpp" #include "Widgets/RoundedRectangle.hpp" #include "Widgets/StaticBox.hpp" +#include "Widgets/WebView.hpp" #include #include @@ -129,11 +130,25 @@ UpdateVersionDialog::UpdateVersionDialog(wxWindow *parent) m_sizer_right->Add(0, 0, 1, wxTOP, FromDIP(15)); - m_scrollwindw_release_note = new wxScrolledWindow(this, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(560), FromDIP(430)), wxVSCROLL); - m_scrollwindw_release_note->SetScrollRate(5, 5); + //webview + m_scrollwindw_release_note = CreateTipView(this); m_scrollwindw_release_note->SetBackgroundColour(wxColour(0xF8, 0xF8, 0xF8)); + m_scrollwindw_release_note->SetSize(wxSize(FromDIP(560), FromDIP(430))); + m_scrollwindw_release_note->SetMinSize(wxSize(FromDIP(560), FromDIP(430))); m_scrollwindw_release_note->SetMaxSize(wxSize(FromDIP(560), FromDIP(430))); + fs::path ph(data_dir()); + ph /= "resources/tooltip/common/releasenote.html"; + if (!fs::exists(ph)) { + ph = resources_dir(); + ph /= "tooltip/releasenote.html"; + } + auto url = ph.string(); + std::replace(url.begin(), url.end(), '\\', '/'); + url = "file:///" + url; + m_scrollwindw_release_note->LoadURL(from_u8(url)); + + m_remind_choice = new wxCheckBox( this, wxID_ANY, _L("Don't remind me of this version again"), wxDefaultPosition, wxDefaultSize, 0 ); m_remind_choice->SetValue(false); m_remind_choice->Bind(wxEVT_COMMAND_CHECKBOX_CLICKED, &UpdateVersionDialog::alter_choice,this); @@ -194,6 +209,63 @@ UpdateVersionDialog::UpdateVersionDialog(wxWindow *parent) UpdateVersionDialog::~UpdateVersionDialog() {} +wxWebView* UpdateVersionDialog::CreateTipView(wxWindow* parent) +{ + wxWebView* tipView = WebView::CreateWebView(parent, ""); + tipView->Bind(wxEVT_WEBVIEW_LOADED, &UpdateVersionDialog::OnLoaded, this); + tipView->Bind(wxEVT_WEBVIEW_NAVIGATED, &UpdateVersionDialog::OnTitleChanged, this); + tipView->Bind(wxEVT_WEBVIEW_ERROR, &UpdateVersionDialog::OnError, this); + return tipView; +} + +void UpdateVersionDialog::OnLoaded(wxWebViewEvent& event) +{ + event.Skip(); +} + +void UpdateVersionDialog::OnTitleChanged(wxWebViewEvent& event) +{ + //ShowReleaseNote(); + event.Skip(); +} +void UpdateVersionDialog::OnError(wxWebViewEvent& event) +{ + event.Skip(); +} + +static std::string url_encode(const std::string& value) { + std::ostringstream escaped; + escaped.fill('0'); + escaped << std::hex; + for (std::string::const_iterator i = value.begin(), n = value.end(); i != n; ++i) { + std::string::value_type c = (*i); + + // Keep alphanumeric and other accepted characters intact + if (isalnum(c) || c == '-' || c == '_' || c == '.' || c == '~') { + escaped << c; + continue; + } + + // Any other characters are percent-encoded + escaped << std::uppercase; + escaped << '%' << std::setw(2) << int((unsigned char)c); + escaped << std::nouppercase; + } + return escaped.str(); +} + +bool UpdateVersionDialog::ShowReleaseNote(std::string content) +{ + auto script = "window.showMarkdown('" + url_encode(content) + "', true);"; + RunScript(script); + return true; +} + +void UpdateVersionDialog::RunScript(std::string script) +{ + WebView::RunScript(m_scrollwindw_release_note, script); + script.clear(); +} void UpdateVersionDialog::on_dpi_changed(const wxRect &suggested_rect) { m_button_ok->Rescale(); @@ -202,13 +274,13 @@ void UpdateVersionDialog::on_dpi_changed(const wxRect &suggested_rect) { void UpdateVersionDialog::update_version_info(wxString release_note, wxString version) { - m_text_up_info->SetLabel(wxString::Format(_L("Click to download new version in default browser: %s"), version)); + /*m_text_up_info->SetLabel(wxString::Format(_L("Click to download new version in default browser: %s"), version)); wxBoxSizer *sizer_text_release_note = new wxBoxSizer(wxVERTICAL); auto m_staticText_release_note = new wxStaticText(m_scrollwindw_release_note, wxID_ANY, release_note, wxDefaultPosition, wxDefaultSize, 0); m_staticText_release_note->Wrap(FromDIP(530)); sizer_text_release_note->Add(m_staticText_release_note, 0, wxALL, 5); m_scrollwindw_release_note->SetSizer(sizer_text_release_note); - m_scrollwindw_release_note->Layout(); + m_scrollwindw_release_note->Layout();*/ } }} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/ReleaseNote.hpp b/src/slic3r/GUI/ReleaseNote.hpp index ec517c00c77..c42b0d6f7dc 100644 --- a/src/slic3r/GUI/ReleaseNote.hpp +++ b/src/slic3r/GUI/ReleaseNote.hpp @@ -33,6 +33,7 @@ #include "Widgets/ComboBox.hpp" #include "Widgets/ScrolledWindow.hpp" #include +#include namespace Slic3r { namespace GUI { @@ -55,12 +56,18 @@ class UpdateVersionDialog : public DPIDialog UpdateVersionDialog(wxWindow *parent = nullptr); ~UpdateVersionDialog(); - void on_dpi_changed(const wxRect &suggested_rect) override; + wxWebView* CreateTipView(wxWindow* parent); + void OnLoaded(wxWebViewEvent& event); + void OnTitleChanged(wxWebViewEvent& event); + void OnError(wxWebViewEvent& event); + bool ShowReleaseNote(std::string content); + void RunScript(std::string script); + void on_dpi_changed(const wxRect& suggested_rect) override; void update_version_info(wxString release_note, wxString version); void alter_choice(wxCommandEvent& event); wxStaticText * m_text_up_info{nullptr}; - wxScrolledWindow *m_scrollwindw_release_note{nullptr}; + wxWebView* m_scrollwindw_release_note{nullptr}; wxBoxSizer * sizer_text_release_note{nullptr}; wxStaticText * m_staticText_release_note{nullptr}; wxCheckBox* m_remind_choice; From 92f1236128f225428c22e16d2d1c7e7356ebc2e0 Mon Sep 17 00:00:00 2001 From: Arthur Date: Thu, 22 Sep 2022 16:58:18 +0800 Subject: [PATCH 40/90] FIX: height not synced when inputing cut movement Change-Id: I0640f9a21e1d700806ade79e4e1637338aef963a (cherry picked from commit 8bacb887da19a9bed6451d2aaa1ebc149c20359d) --- src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp b/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp index 1f5c46a7c2d..7e41be0ddfa 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp @@ -479,6 +479,13 @@ void GLGizmoAdvancedCut::on_render_input_window(float x, float y, float bottom_l if (std::abs(m_buffered_movement - m_movement) > EPSILON) { m_movement = m_buffered_movement; m_buffered_movement = 0.0; + + // update absolute height + Vec3d plane_normal = get_plane_normal(); + m_height_delta = plane_normal(2) * m_movement; + m_height += m_height_delta; + m_buffered_height = m_height; + update_plane_points(); m_parent.post_event(SimpleEvent(wxEVT_PAINT)); } @@ -497,8 +504,7 @@ void GLGizmoAdvancedCut::on_render_input_window(float x, float y, float bottom_l if (current_active_id != m_last_active_id) { if (std::abs(m_buffered_height - m_height) > EPSILON) { m_height_delta = m_buffered_height - m_height; - m_height = m_buffered_height; - //m_buffered_height = 0.0; + m_height = m_buffered_height; update_plane_points(); m_parent.post_event(SimpleEvent(wxEVT_PAINT)); } From b8413d3a6c702de3a85ed4e9339eab5d86317430 Mon Sep 17 00:00:00 2001 From: "zorro.zhang" Date: Tue, 13 Sep 2022 19:33:23 +0800 Subject: [PATCH 41/90] ENH: Homepage-contextmenu UI same with prepare-ui Change-Id: I8745ce516f2d1dd945826ec6e1f14aba6ec793bb --- resources/web/homepage/css/home.css | 34 ++++++++++++++++----- resources/web/homepage/img/open_folder2.svg | 4 +++ resources/web/homepage/img/remove2.svg | 14 +++++++++ resources/web/homepage/index.html | 6 ++-- resources/web/homepage/js/home.js | 6 ++-- 5 files changed, 50 insertions(+), 14 deletions(-) create mode 100644 resources/web/homepage/img/open_folder2.svg create mode 100644 resources/web/homepage/img/remove2.svg diff --git a/resources/web/homepage/css/home.css b/resources/web/homepage/css/home.css index 294648fa4b6..a1c8b53bc28 100644 --- a/resources/web/homepage/css/home.css +++ b/resources/web/homepage/css/home.css @@ -370,14 +370,15 @@ body { position: absolute; margin: 0px; - padding: 0px; + padding: 10px; border: 0px; min-width: 100px; top: 800px; border: 1px solid #C3C3C3; + border-radius: 5px; color: #323A3D; background-color: #fff; - display: none; + display: none; } .CT_Item @@ -385,15 +386,16 @@ body padding: 2px 10px; display: flex; flex-direction: row; - align-content: center; align-items: center; border: 2px solid #fff; + border-radius: 4px; } .CT_Item:hover { cursor: pointer; - border: 2px solid #00AE42; + background-color: #0078D4; + color: #fff; } @@ -401,19 +403,33 @@ body { margin-right: 6px; width: 16px; - height: 16px; + height: 16px; +} + +#CT_Delete_Bar:hover .CT_Delete +{ + background: url("../img/remove2.svg"); + background-repeat: no-repeat; + background-size: contain; } .CT_Delete { - background: url("../img/delete.png"); + background: url("../img/remove.svg"); + background-repeat: no-repeat; + background-size: contain; +} + +#CT_Folder_Bar:hover .CT_Explore +{ + background: url("../img/open_folder2.svg"); background-repeat: no-repeat; background-size: contain; } .CT_Explore { - background: url("../img/folder.png"); + background: url("../img/open_folder.svg"); background-repeat: no-repeat; background-size: contain; } @@ -426,7 +442,9 @@ body .CT_Text { - + line-height: 20px; + height: 20px; + display: block; } /*--------Mall------*/ diff --git a/resources/web/homepage/img/open_folder2.svg b/resources/web/homepage/img/open_folder2.svg new file mode 100644 index 00000000000..c5c3a6c8457 --- /dev/null +++ b/resources/web/homepage/img/open_folder2.svg @@ -0,0 +1,4 @@ + + + + diff --git a/resources/web/homepage/img/remove2.svg b/resources/web/homepage/img/remove2.svg new file mode 100644 index 00000000000..7c913c00192 --- /dev/null +++ b/resources/web/homepage/img/remove2.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/resources/web/homepage/index.html b/resources/web/homepage/index.html index 2a216f23ce4..26ae6fdd4cd 100644 --- a/resources/web/homepage/index.html +++ b/resources/web/homepage/index.html @@ -139,18 +139,18 @@
abcd12334.3mf
2021/12/27 09:22
- --> + -->
-
+
clear
-
+
open in explorer
diff --git a/resources/web/homepage/js/home.js b/resources/web/homepage/js/home.js index a37539bef0d..d88c07d9278 100644 --- a/resources/web/homepage/js/home.js +++ b/resources/web/homepage/js/home.js @@ -4,10 +4,10 @@ function OnInit() { //-----Test----- - //$("#Login1").hide(); - //$("#UserName").text("ZZZZZZZZ"); - //$("#Login2").css("display","flex"); + //Set_RecentFile_MouseRightBtn_Event(); + + //-----Official----- TranslatePage(); SendMsg_GetLoginInfo(); From 1b4486cc5d9508e33eb40564a09d5a35f05df46d Mon Sep 17 00:00:00 2001 From: tao wang Date: Fri, 23 Sep 2022 10:23:41 +0800 Subject: [PATCH 42/90] FIX:Change the menu options from Reduce Triangles to Simplify Model Change-Id: I68d44b8c055456ae237925896573316c2a24b264 --- src/slic3r/GUI/GUI_Factories.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/slic3r/GUI/GUI_Factories.cpp b/src/slic3r/GUI/GUI_Factories.cpp index 11e434cf3ed..31a1a9fc162 100644 --- a/src/slic3r/GUI/GUI_Factories.cpp +++ b/src/slic3r/GUI/GUI_Factories.cpp @@ -1279,7 +1279,7 @@ void MenuFactory::append_menu_item_clone(wxMenu* menu) void MenuFactory::append_menu_item_simplify(wxMenu* menu) { - wxMenuItem* menu_item = append_menu_item(menu, wxID_ANY, _L("Reduce Triangles"), "", + wxMenuItem* menu_item = append_menu_item(menu, wxID_ANY, _L("Simplify Model"), "", [](wxCommandEvent&) { obj_list()->simplify(); }, "", menu, []() {return plater()->can_simplify(); }, m_parent); } From 8386b485544096736b2f50fd7441f2b656ce95bf Mon Sep 17 00:00:00 2001 From: "tao.jin" Date: Thu, 22 Sep 2022 15:06:34 +0800 Subject: [PATCH 43/90] ENH: add confirm dialog for cancel-print button Change-Id: I0a97c7a3122b1b5dd0b306212292e8c51b9acd9b --- src/slic3r/CMakeLists.txt | 4 +-- ...UpdateDialog.cpp => ConfirmHintDialog.cpp} | 30 +++++++++---------- ...UpdateDialog.hpp => ConfirmHintDialog.hpp} | 12 ++++---- src/slic3r/GUI/StatusPanel.cpp | 9 +++++- src/slic3r/GUI/UpgradePanel.cpp | 18 +++++------ 5 files changed, 40 insertions(+), 33 deletions(-) rename src/slic3r/GUI/{FirmwareUpdateDialog.cpp => ConfirmHintDialog.cpp} (83%) rename src/slic3r/GUI/{FirmwareUpdateDialog.hpp => ConfirmHintDialog.hpp} (78%) diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt index 12da13bc8cc..2c636ec3cf5 100644 --- a/src/slic3r/CMakeLists.txt +++ b/src/slic3r/CMakeLists.txt @@ -237,8 +237,8 @@ set(SLIC3R_GUI_SOURCES GUI/ConfigManipulation.hpp GUI/Field.cpp GUI/Field.hpp - GUI/FirmwareUpdateDialog.cpp - GUI/FirmwareUpdateDialog.hpp + GUI/ConfirmHintDialog.cpp + GUI/ConfirmHintDialog.hpp GUI/OptionsGroup.cpp GUI/OptionsGroup.hpp GUI/OG_CustomCtrl.cpp diff --git a/src/slic3r/GUI/FirmwareUpdateDialog.cpp b/src/slic3r/GUI/ConfirmHintDialog.cpp similarity index 83% rename from src/slic3r/GUI/FirmwareUpdateDialog.cpp rename to src/slic3r/GUI/ConfirmHintDialog.cpp index 600e2d3b6cf..c930e313b66 100644 --- a/src/slic3r/GUI/FirmwareUpdateDialog.cpp +++ b/src/slic3r/GUI/ConfirmHintDialog.cpp @@ -1,4 +1,4 @@ -#include "FirmwareUpdateDialog.hpp" +#include "ConfirmHintDialog.hpp" #include #include #include @@ -7,10 +7,10 @@ namespace Slic3r { namespace GUI { -wxDEFINE_EVENT(EVT_UPGRADE_FIRMWARE, wxCommandEvent); +wxDEFINE_EVENT(EVT_CONFIRM_HINT, wxCommandEvent); -FirmwareUpdateDialog::FirmwareUpdateDialog(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style) - : DPIDialog(parent, id, _L("Upgrade firmware"), pos, size, style) +ConfirmHintDialog::ConfirmHintDialog(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style) + : DPIDialog(parent, id, title, pos, size, style) { std::string icon_path = (boost::format("%1%/images/BambuStudioTitle.ico") % resources_dir()).str(); SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); @@ -58,23 +58,23 @@ FirmwareUpdateDialog::FirmwareUpdateDialog(wxWindow* parent, wxWindowID id, cons this->SetMinSize(wxSize(wxSize(FromDIP(475), FromDIP(100)).x, -1)); Layout(); Fit(); - this->Bind(wxEVT_PAINT, &FirmwareUpdateDialog::OnPaint, this); - m_button_confirm->Bind(wxEVT_BUTTON, &FirmwareUpdateDialog::on_button_confirm, this); - m_button_close->Bind(wxEVT_BUTTON, &FirmwareUpdateDialog::on_button_close, this); + this->Bind(wxEVT_PAINT, &ConfirmHintDialog::OnPaint, this); + m_button_confirm->Bind(wxEVT_BUTTON, &ConfirmHintDialog::on_button_confirm, this); + m_button_close->Bind(wxEVT_BUTTON, &ConfirmHintDialog::on_button_close, this); } -FirmwareUpdateDialog::~FirmwareUpdateDialog() {} +ConfirmHintDialog::~ConfirmHintDialog() {} -void FirmwareUpdateDialog::SetHint(const wxString& hint){ +void ConfirmHintDialog::SetHint(const wxString& hint){ firm_up_hint = hint; } -void FirmwareUpdateDialog::OnPaint(wxPaintEvent& event){ +void ConfirmHintDialog::OnPaint(wxPaintEvent& event){ wxPaintDC dc(this); render(dc); } -void FirmwareUpdateDialog::render(wxDC& dc) { +void ConfirmHintDialog::render(wxDC& dc) { wxSize size = GetSize(); dc.SetFont(Label::Body_14); @@ -147,8 +147,8 @@ void FirmwareUpdateDialog::render(wxDC& dc) { dc.DrawText(firm_up_hint, pos_firm_up_hint); } -void FirmwareUpdateDialog::on_button_confirm(wxCommandEvent& event) { - wxCommandEvent evt(EVT_UPGRADE_FIRMWARE, GetId()); +void ConfirmHintDialog::on_button_confirm(wxCommandEvent& event) { + wxCommandEvent evt(EVT_CONFIRM_HINT, GetId()); event.SetEventObject(this); GetEventHandler()->ProcessEvent(evt); @@ -158,11 +158,11 @@ void FirmwareUpdateDialog::on_button_confirm(wxCommandEvent& event) { this->Close(); } -void FirmwareUpdateDialog::on_button_close(wxCommandEvent& event) { +void ConfirmHintDialog::on_button_close(wxCommandEvent& event) { this->Close(); } -void FirmwareUpdateDialog::on_dpi_changed(const wxRect& suggested_rect) { +void ConfirmHintDialog::on_dpi_changed(const wxRect& suggested_rect) { m_button_confirm->SetMinSize(wxSize(-1, FromDIP(24))); m_button_confirm->SetCornerRadius(FromDIP(12)); m_button_close->SetMinSize(wxSize(-1, FromDIP(24))); diff --git a/src/slic3r/GUI/FirmwareUpdateDialog.hpp b/src/slic3r/GUI/ConfirmHintDialog.hpp similarity index 78% rename from src/slic3r/GUI/FirmwareUpdateDialog.hpp rename to src/slic3r/GUI/ConfirmHintDialog.hpp index a0fa53facf5..657ce995d56 100644 --- a/src/slic3r/GUI/FirmwareUpdateDialog.hpp +++ b/src/slic3r/GUI/ConfirmHintDialog.hpp @@ -1,5 +1,5 @@ -#ifndef slic3r_GUI_FirmwareUpdateDialog_hpp_ -#define slic3r_GUI_FirmwareUpdateDialog_hpp_ +#ifndef slic3r_GUI_ConfirmHintDialog_hpp_ +#define slic3r_GUI_ConfirmHintDialog_hpp_ #include "GUI_Utils.hpp" #include @@ -8,9 +8,9 @@ namespace Slic3r { namespace GUI { -wxDECLARE_EVENT(EVT_UPGRADE_FIRMWARE, wxCommandEvent); +wxDECLARE_EVENT(EVT_CONFIRM_HINT, wxCommandEvent); -class FirmwareUpdateDialog : public DPIDialog +class ConfirmHintDialog : public DPIDialog { private: wxStaticText* m_staticText_hint; @@ -27,7 +27,7 @@ class FirmwareUpdateDialog : public DPIDialog void on_dpi_changed(const wxRect& suggested_rect) override; public: - FirmwareUpdateDialog(wxWindow* parent, + ConfirmHintDialog(wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxEmptyString, const wxPoint& pos = wxDefaultPosition, @@ -38,7 +38,7 @@ class FirmwareUpdateDialog : public DPIDialog void SetHint(const wxString &hint); - ~FirmwareUpdateDialog(); + ~ConfirmHintDialog(); }; }} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index 94040f0c76d..d88f251c3e6 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -10,6 +10,7 @@ #include "slic3r/Utils/Http.hpp" #include "libslic3r/Thread.hpp" #include "RecenterDialog.hpp" +#include "ConfirmHintDialog.hpp" namespace Slic3r { namespace GUI { @@ -1222,7 +1223,13 @@ void StatusPanel::on_subtask_pause_resume(wxCommandEvent &event) void StatusPanel::on_subtask_abort(wxCommandEvent &event) { - if (obj) obj->command_task_abort(); + ConfirmHintDialog* abort_dlg = new ConfirmHintDialog(this, wxID_ANY, _L("Cancel print")); + abort_dlg->SetHint(_L("Are you sure you want to cancel this print?")); + abort_dlg->Bind(EVT_CONFIRM_HINT, [this](wxCommandEvent &e) { + if (obj) obj->command_task_abort(); + }); + if(abort_dlg->ShowModal()) + delete abort_dlg; } void StatusPanel::error_info_reset() diff --git a/src/slic3r/GUI/UpgradePanel.cpp b/src/slic3r/GUI/UpgradePanel.cpp index 13796836062..273303a8579 100644 --- a/src/slic3r/GUI/UpgradePanel.cpp +++ b/src/slic3r/GUI/UpgradePanel.cpp @@ -5,7 +5,7 @@ #include "GUI_App.hpp" #include "libslic3r/Thread.hpp" #include "ReleaseNote.hpp" -#include "FirmwareUpdateDialog.hpp" +#include "ConfirmHintDialog.hpp" namespace Slic3r { namespace GUI { @@ -657,9 +657,9 @@ void MachineInfoPanel::upgrade_firmware_internal() { void MachineInfoPanel::on_upgrade_firmware(wxCommandEvent &event) { - FirmwareUpdateDialog* confirm_dlg = new FirmwareUpdateDialog(this->GetParent()); + ConfirmHintDialog* confirm_dlg = new ConfirmHintDialog(this->GetParent(), wxID_ANY, _L("Upgrade firmware")); confirm_dlg->SetHint(normal_upgrade_hint); - confirm_dlg->Bind(EVT_UPGRADE_FIRMWARE, [this](wxCommandEvent &e) { + confirm_dlg->Bind(EVT_CONFIRM_HINT, [this](wxCommandEvent &e) { if (m_obj){ m_obj->command_upgrade_confirm(); } @@ -670,9 +670,9 @@ void MachineInfoPanel::on_upgrade_firmware(wxCommandEvent &event) void MachineInfoPanel::on_consisitency_upgrade_firmware(wxCommandEvent &event) { - FirmwareUpdateDialog* confirm_dlg = new FirmwareUpdateDialog(this->GetParent()); + ConfirmHintDialog* confirm_dlg = new ConfirmHintDialog(this->GetParent(), wxID_ANY, _L("Upgrade firmware")); confirm_dlg->SetHint(normal_upgrade_hint); - confirm_dlg->Bind(EVT_UPGRADE_FIRMWARE, [this](wxCommandEvent &e) { + confirm_dlg->Bind(EVT_CONFIRM_HINT, [this](wxCommandEvent &e) { if (m_obj){ m_obj->command_consistency_upgrade_confirm(); } @@ -793,9 +793,9 @@ void UpgradePanel::update(MachineObject *obj) if (m_obj && m_show_forced_hint) { if (m_obj->upgrade_force_upgrade) { m_show_forced_hint = false; //lock hint - FirmwareUpdateDialog* force_dlg = new FirmwareUpdateDialog(m_scrolledWindow); + ConfirmHintDialog* force_dlg = new ConfirmHintDialog(m_scrolledWindow, wxID_ANY, _L("Upgrade firmware")); force_dlg->SetHint(force_upgrade_hint); - force_dlg->Bind(EVT_UPGRADE_FIRMWARE, &MachineInfoPanel::on_upgrade_firmware, m_push_upgrade_panel); + force_dlg->Bind(EVT_CONFIRM_HINT, &MachineInfoPanel::on_upgrade_firmware, m_push_upgrade_panel); if (force_dlg->ShowModal()) delete force_dlg; } @@ -809,9 +809,9 @@ void UpgradePanel::update(MachineObject *obj) if (m_obj && m_show_consistency_hint) { if (m_obj->upgrade_consistency_request) { m_show_consistency_hint = false; - FirmwareUpdateDialog* consistency_dlg = new FirmwareUpdateDialog(m_scrolledWindow); + ConfirmHintDialog* consistency_dlg = new ConfirmHintDialog(m_scrolledWindow, wxID_ANY, _L("Upgrade firmware")); consistency_dlg->SetHint(consistency_upgrade_hint); - consistency_dlg->Bind(EVT_UPGRADE_FIRMWARE, &MachineInfoPanel::on_consisitency_upgrade_firmware, m_push_upgrade_panel); + consistency_dlg->Bind(EVT_CONFIRM_HINT, &MachineInfoPanel::on_consisitency_upgrade_firmware, m_push_upgrade_panel); if (consistency_dlg->ShowModal()) delete consistency_dlg; } From 516a960f710378aba6539b14b8eae23b283f4b99 Mon Sep 17 00:00:00 2001 From: "lane.wei" Date: Thu, 22 Sep 2022 21:43:04 +0800 Subject: [PATCH 44/90] refine the plate's sliced_result logic 1. when the plate is locked, the sliced result is kept after auto-arrange; 2. when only arrange a plate, other plates' results are not affected Change-Id: I7566e11e9eec0c2b196a2e78d9dc306ea325e9ff --- src/slic3r/GUI/Jobs/ArrangeJob.cpp | 16 ++++++++++++---- src/slic3r/GUI/PartPlate.cpp | 25 ++++++++++++++++--------- src/slic3r/GUI/PartPlate.hpp | 8 ++++---- 3 files changed, 32 insertions(+), 17 deletions(-) diff --git a/src/slic3r/GUI/Jobs/ArrangeJob.cpp b/src/slic3r/GUI/Jobs/ArrangeJob.cpp index 54758205860..99b8cc825ff 100644 --- a/src/slic3r/GUI/Jobs/ArrangeJob.cpp +++ b/src/slic3r/GUI/Jobs/ArrangeJob.cpp @@ -412,7 +412,7 @@ void ArrangeJob::prepare() //add the virtual object into unselect list if has m_plater->get_partplate_list().preprocess_exclude_areas(m_unselected, MAX_NUM_PLATES); - + #if SAVE_ARRANGE_POLY if (1) { // subtract excluded region and get a polygon bed @@ -625,8 +625,11 @@ void ArrangeJob::finalize() { //BBS: partplate PartPlateList& plate_list = m_plater->get_partplate_list(); //clear all the relations before apply the arrangement results - plate_list.clear(); - + if (only_on_partplate) { + plate_list.clear(false, false, true, current_plate_index); + } + else + plate_list.clear(false, false, true, -1); //BBS: adjust the bed_index, create new plates, get the max bed_index for (ArrangePolygon& ap : m_selected) { //if (ap.bed_idx < 0) continue; // bed_idx<0 means unarrangable @@ -709,7 +712,12 @@ void ArrangeJob::finalize() { m_plater->get_notification_manager()->close_notification_of_type(NotificationType::ArrangeOngoing); //BBS: reload all objects due to arrange - plate_list.rebuild_plates_after_arrangement(!only_on_partplate); + if (only_on_partplate) { + plate_list.rebuild_plates_after_arrangement(!only_on_partplate, true, current_plate_index); + } + else { + plate_list.rebuild_plates_after_arrangement(!only_on_partplate, true); + } // BBS: update slice context and gcode result. m_plater->update_slicing_context_to_current_partplate(); diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index bfd1b11a55d..6e2477e8795 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -1162,12 +1162,14 @@ void PartPlate::set_index(int index) m_print->set_plate_index(index); } -void PartPlate::clear() +void PartPlate::clear(bool clear_sliced_result) { obj_to_instance_set.clear(); instance_outside_set.clear(); - m_ready_for_slice = true; - update_slice_result_valid_state(false); + if (clear_sliced_result) { + m_ready_for_slice = true; + update_slice_result_valid_state(false); + } return; } @@ -2415,14 +2417,19 @@ void PartPlateList::reset_size(int width, int depth, int height) } //clear all the instances in the plate, but keep the plates -void PartPlateList::clear(bool delete_plates, bool release_print_list) +void PartPlateList::clear(bool delete_plates, bool release_print_list, bool except_locked, int plate_index) { for (unsigned int i = 0; i < (unsigned int)m_plate_list.size(); ++i) { PartPlate* plate = m_plate_list[i]; assert(plate != NULL); - plate->clear(); + if (except_locked && plate->is_locked()) + plate->clear(false); + else if ((plate_index != -1) && (plate_index != i)) + plate->clear(false); + else + plate->clear(); if (delete_plates) delete plate; } @@ -3202,12 +3209,12 @@ int PartPlateList::add_to_plate(int obj_id, int instance_id, int plate_id) } //reload all objects -int PartPlateList::reload_all_objects() +int PartPlateList::reload_all_objects(bool except_locked, int plate_index) { int ret = 0; unsigned int i, j, k; - clear(); + clear(false, false, except_locked, plate_index); BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": m_model->objects.size() is %1%") % m_model->objects.size(); //try to find a new plate @@ -3945,7 +3952,7 @@ int PartPlateList::rebuild_plates_after_deserialize(std::vector& previous_ } //retruct plates structures after auto-arrangement -int PartPlateList::rebuild_plates_after_arrangement(bool recycle_plates) +int PartPlateList::rebuild_plates_after_arrangement(bool recycle_plates, bool except_locked, int plate_index) { int ret = 0; @@ -3956,7 +3963,7 @@ int PartPlateList::rebuild_plates_after_arrangement(bool recycle_plates) //for (auto object : m_model->objects) // std::sort(object->instances.begin(), object->instances.end(), [](auto a, auto b) {return a->arrange_order < b->arrange_order; }); - ret = reload_all_objects(); + ret = reload_all_objects(except_locked, plate_index); if (recycle_plates) { diff --git a/src/slic3r/GUI/PartPlate.hpp b/src/slic3r/GUI/PartPlate.hpp index 84235ff7c63..ab6324d2009 100644 --- a/src/slic3r/GUI/PartPlate.hpp +++ b/src/slic3r/GUI/PartPlate.hpp @@ -198,7 +198,7 @@ class PartPlate : public ObjectBase bool operator<(PartPlate&) const; //clear alll the instances in plate - void clear(); + void clear(bool clear_sliced_result = true); //static const int plate_x_offset = 20; //mm //static const double plate_x_gap = 0.2; @@ -468,7 +468,7 @@ class PartPlateList : public ObjectBase //this may be happened after machine changed void reset_size(int width, int depth, int height); //clear all the instances in the plate, but keep the plates - void clear(bool delete_plates = false, bool release_print_list = false); + void clear(bool delete_plates = false, bool release_print_list = false, bool except_locked = false, int plate_index = -1); //clear all the instances in the plate, and delete the plates, only keep the first default plate void reset(bool do_init); @@ -563,7 +563,7 @@ class PartPlateList : public ObjectBase int add_to_plate(int obj_id, int instance_id, int plate_id); //reload all objects - int reload_all_objects(); + int reload_all_objects(bool except_locked = false, int plate_index = -1); //reload objects for newly created plate int construct_objects_list_for_new_plate(int plate_index); @@ -624,7 +624,7 @@ class PartPlateList : public ObjectBase int rebuild_plates_after_deserialize(std::vector& previous_sliced_result, std::vector& previous_gcode_paths); //retruct plates structures after auto-arrangement - int rebuild_plates_after_arrangement(bool recycle_plates = true); + int rebuild_plates_after_arrangement(bool recycle_plates = true, bool except_locked = false, int plate_index = -1); /* load/store releted functions, with_gcode = true and plate_idx = -1, export all gcode * if with_gcode = true and specify plate_idx, export plate_idx gcode only From 42e08b54141d3b647fbd8554bc190ce4d967d20e Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Thu, 22 Sep 2022 15:45:40 +0800 Subject: [PATCH 45/90] FIX: less param line option vertical gap Change-Id: I5b63a078c54a6bd744321a5a57f2452b01c0dd0a --- src/slic3r/GUI/OG_CustomCtrl.cpp | 22 ++++++++++++---------- src/slic3r/GUI/OG_CustomCtrl.hpp | 1 + 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/slic3r/GUI/OG_CustomCtrl.cpp b/src/slic3r/GUI/OG_CustomCtrl.cpp index b7301a6def6..0b5dc98f7b7 100644 --- a/src/slic3r/GUI/OG_CustomCtrl.cpp +++ b/src/slic3r/GUI/OG_CustomCtrl.cpp @@ -53,8 +53,9 @@ OG_CustomCtrl::OG_CustomCtrl( wxWindow* parent, m_font = Label::Body_14; SetFont(m_font); m_em_unit = em_unit(m_parent); - m_v_gap = lround(1.0 * m_em_unit); - m_h_gap = lround(0.2 * m_em_unit); + m_v_gap = lround(1.2 * m_em_unit); + m_v_gap2 = lround(0.8 * m_em_unit); + m_h_gap = lround(0.2 * m_em_unit); //m_bmp_mode_sz = get_bitmap_size(create_scaled_bitmap("mode_simple", this, wxOSX ? 10 : 12)); m_bmp_blinking_sz = get_bitmap_size(create_scaled_bitmap("blank_16", this)); @@ -101,7 +102,7 @@ void OG_CustomCtrl::init_ctrl_lines() wxSize label_sz = GetTextExtent(line.label); if (opt_group->split_multi_line) { if (option_set.size() > 1) // BBS - height = (label_sz.y + m_v_gap) * option_set.size(); + height = (label_sz.y + m_v_gap2) * option_set.size() + m_v_gap - m_v_gap2; else height = label_sz.y * (label_sz.GetWidth() > int(opt_group->label_width * m_em_unit) ? 2 : 1) + m_v_gap; } else { @@ -243,7 +244,7 @@ wxPoint OG_CustomCtrl::get_pos(const Line& line, Field* field_in/* = nullptr*/) break; } if (opt_group->split_multi_line) {// BBS - v_pos += ctrl_line.height / option_set.size(); + v_pos += (ctrl_line.height - m_v_gap + m_v_gap2) / option_set.size(); } else { // BBS: new layout h_pos += field->getWindow()->GetSize().x; @@ -507,7 +508,7 @@ void OG_CustomCtrl::correct_window_position(wxWindow* win, const Line& line, Fie int line_height = get_height(line); if (opt_group->split_multi_line) { // BBS if (line.get_options().size() > 1) - line_height /= line.get_options().size(); + line_height = (line_height - m_v_gap + m_v_gap2) / line.get_options().size(); } pos.y += std::max(0, int(0.5 * (line_height - win->GetSize().y))); win->SetPosition(pos); @@ -568,7 +569,8 @@ void OG_CustomCtrl::msw_rescale() m_font = Label::Body_14; SetFont(m_font); m_em_unit = em_unit(m_parent); - m_v_gap = lround(1.5 * m_em_unit); + m_v_gap = lround(1.2 * m_em_unit); + m_v_gap2 = lround(0.8 * m_em_unit); m_h_gap = lround(0.2 * m_em_unit); //m_bmp_mode_sz = create_scaled_bitmap("mode_simple", this, wxOSX ? 10 : 12).GetSize(); @@ -672,7 +674,7 @@ void OG_CustomCtrl::CtrlLine::msw_rescale() if (ctrl->opt_group->split_multi_line) { // BBS const std::vector