[printer:*X-Plus 4 + BOX*] inherits = *X-Plus 4* autoemit_temperature_commands = 0 bed_exclude_area = 0x0,0x0,0x300,0x305,50x305,50x300,0x300,0x0,0x0,293x0,293x10,305x10,305x0,293x0,0x0 bed_shape = 0x0,305x0,305x305,0x305 before_layer_gcode = TIMELAPSE_TAKE_FRAME layer_gcode = G92 E0\nSET_PRINT_STATS_INFO CURRENT_LAYER={layer_num + 1} machine_max_feedrate_z = 20 printer_model = X-Plus 4 + BOX extruders_count = 4 cooling_tube_length = 0 cooling_tube_retraction = 0 default_filament_profile = "Generic PLA @X-Plus 4 0.4 nozzle" default_print_profile = 0.20mm Fine @X-Plus 4 0.4 nozzle deretract_speed = 0,0,0,0 extra_loading_move = 0 extruder_colour = #000000;#FF0000;#FFFFFF;#0009FF extruder_offset = 0x0,0x0,0x0,0x0 max_layer_height = 0.28,0.28,0.28,0.28 min_layer_height = 0.08,0.08,0.08,0.08 multimaterial_purging = 150 nozzle_diameter = 0.4,0.4,0.4,0.4 nozzle_high_flow = 0,0,0,0 printer_variant = 0.4 retract_before_travel = 1,1,1,1 retract_before_wipe = 0%,0%,0%,0% retract_layer_change = 1,1,1,1 retract_length = 0,0,0,0 retract_length_toolchange = 0,0,0,0 retract_lift = 0.4,0.4,0.4,0.4 retract_lift_above = 0,0,0,0 retract_lift_below = 279,279,279,279 retract_restart_extra = 0,0,0,0 retract_restart_extra_toolchange = 0,0,0,0 retract_speed = 30,30,30,30 single_extruder_multi_material = 1 start_gcode = DISABLE_BOX_HEATER\nG90\nBOX_TEMP_SET VT0=0 VT1=0 VT2=0 VT3=0\nPRINT_START BED=[first_layer_bed_temperature] HOTEND=[first_layer_temperature] CHAMBER=[chamber_temperature] EXTRUDER=[initial_tool]\nSYNC_EXTRUDER_MOTION EXTRUDER=slot[initial_tool] MOTION_QUEUE=extruder\nSET_PRINT_STATS_INFO TOTAL_LAYER=[total_layer_count]\nM83\nM140 S[first_layer_bed_temperature]\nM104 S[first_layer_temperature]\nG0 X{max((min(print_bed_max[0], first_layer_print_min[0] + 80) - 85),0)} Y{max((min(print_bed_max[1], first_layer_print_min[1] + 80) - 85),0)} Z5 F6000\nG0 Z[first_layer_height] F600\nG1 E3 F1800\nG1 X{(min(print_bed_max[0], first_layer_print_min[0] + 80))} E{85 * 0.5 * first_layer_height * nozzle_diameter[0]} F3000\nG1 Y{max((min(print_bed_max[1], first_layer_print_min[1] + 80) - 85),0) + 2} E{2 * 0.5 * first_layer_height * nozzle_diameter[0]} F3000\nG1 X{max((min(print_bed_max[0], first_layer_print_min[0] + 80) - 85),0)} E{85 * 0.5 * first_layer_height * nozzle_diameter[0]} F3000\nG1 Y{max((min(print_bed_max[1], first_layer_print_min[1] + 80) - 85),0) + 85} E{83 * 0.5 * first_layer_height * nozzle_diameter[0]} F3000\nG1 X{max((min(print_bed_max[0], first_layer_print_min[0] + 80) - 85),0) + 2} E{2 * 0.5 * first_layer_height * nozzle_diameter[0]} F3000\nG1 Y{max((min(print_bed_max[1], first_layer_print_min[1] + 80) - 85),0) + 3} E{82 * 0.5 * first_layer_height * nozzle_diameter[0]} F3000\nG1 X{max((min(print_bed_max[0], first_layer_print_min[0] + 80) - 85),0) + 3} Z0\nG1 X{max((min(print_bed_max[0], first_layer_print_min[0] + 80) - 85),0) + 6}\nG1 Z1 F600\nSET_PRINT_STATS_INFO CURRENT_LAYER=1\nSYNC_EXTRUDER_MOTION EXTRUDER=slot[initial_tool] MOTION_QUEUE=extruder toolchange_gcode = M118 Starting toolchange from slot [current_extruder] to slot [next_extruder]\nTOOL_CHANGE_START F=[current_extruder] T=[next_extruder]\nDISABLE_ALL_SENSOR\n{if current_extruder != next_extruder}\nM118 Going to cut now\nCUT_FILAMENT T=[current_extruder]\n\n{if filament_type[current_extruder] == "FLEX" or filament_type[current_extruder] == "TPU"}\n G1 X304 F24000 ; ensure cutting with flexible materials\n G1 Y20 F24000\n M400\n G1 Y4.5 F5000\n G4 P500\n G1 Y8 F9000\n G1 Y4.3 F1500\n G4 P500\n G1 Y20 F9000\n G1 Y4.5 F5000\n G4 P500\n G1 Y8 F9000\n G1 Y4.3 F1500\n G4 P500\n G1 Y20 F9000\n{endif}\n\nMOVE_TO_TRASH\n\n{if filament_type[current_extruder] == "PETG"}\nSET_HEATER_TEMPERATURE HEATER=extruder TARGET=260 WAIT=1\n{else}\nSET_HEATER_TEMPERATURE HEATER=extruder TARGET={max(temperature[next_extruder], temperature[current_extruder])} WAIT=1\n{endif}\n\nM118 Unloading [current_extruder]\nSYNC_EXTRUDER_MOTION EXTRUDER=slot[current_extruder] MOTION_QUEUE=extruder\nUNLOAD_T[current_extruder]\nTIMELAPSE_TAKE_FRAME\n\n; FLUSH_START\nG1 E1 F50\nG1 E17 F300\nG92 E0\n; FLUSH_END\n\nM400\nM118 loading [next_extruder]\nSET_HEATER_TEMPERATURE HEATER=extruder TARGET={max(temperature[next_extruder], temperature[current_extruder])} WAIT=1\nSYNC_EXTRUDER_MOTION EXTRUDER=slot[next_extruder] MOTION_QUEUE=extruder\nLOAD_T[next_extruder]\nEXTRUDER_LOAD slot=slot[next_extruder]\nM118 Loaded. Heating...\nSET_HEATER_TEMPERATURE HEATER=extruder TARGET={max(temperature[next_extruder], temperature[current_extruder])} WAIT=1\n\n; FLUSH_START\nG1 E{48.5 * 0.58} F{min(filament_max_volumetric_speed[current_extruder], filament_max_volumetric_speed[next_extruder]) / 2.4 * 60}\nG1 E{48.5 * 0.02} F{min(filament_max_volumetric_speed[current_extruder], filament_max_volumetric_speed[next_extruder]) / 2.4 * 60}\nG1 E{48.5 * 0.18} F{min(filament_max_volumetric_speed[current_extruder], filament_max_volumetric_speed[next_extruder]) / 2.4 * 60}\nG1 E{48.5 * 0.02} F{min(filament_max_volumetric_speed[current_extruder], filament_max_volumetric_speed[next_extruder]) / 2.4 * 60}\nG1 E{48.5 * 0.18} F{min(filament_max_volumetric_speed[current_extruder], filament_max_volumetric_speed[next_extruder]) / 2.4 * 60}\nG1 E{48.5 * 0.02} F{min(filament_max_volumetric_speed[current_extruder], filament_max_volumetric_speed[next_extruder]) / 2.4 * 60}\nG1 E-2 F1800\n; FLUSH_END\n\n\n{if filament_type[current_extruder] != filament_type[next_extruder]}\nG1 Y300 F1000\nMOVE_TO_TRASH\nG1 Y300 F9000\nCLEAR_FLUSH\nCLEAR_OOZE\n\n; FLUSH_START\nG1 E{48.5 * 0.58} F{min(filament_max_volumetric_speed[current_extruder], filament_max_volumetric_speed[next_extruder]) / 2.4 * 60}\nG1 E{48.5 * 0.02} F{min(filament_max_volumetric_speed[current_extruder], filament_max_volumetric_speed[next_extruder]) / 2.4 * 60}\nG1 E{48.5 * 0.18} F{min(filament_max_volumetric_speed[current_extruder], filament_max_volumetric_speed[next_extruder]) / 2.4 * 60}\nG1 E{48.5 * 0.02} F{min(filament_max_volumetric_speed[current_extruder], filament_max_volumetric_speed[next_extruder]) / 2.4 * 60}\nG1 E{48.5 * 0.18} F{min(filament_max_volumetric_speed[current_extruder], filament_max_volumetric_speed[next_extruder]) / 2.4 * 60}\nG1 E{48.5 * 0.02} F{min(filament_max_volumetric_speed[current_extruder], filament_max_volumetric_speed[next_extruder]) / 2.4 * 60}\nG1 E-2 F1800\n; FLUSH_END\n\nG1 Y300 F1000\nMOVE_TO_TRASH\nG1 Y300 F9000\nCLEAR_FLUSH\nCLEAR_OOZE\n\n; FLUSH_START\nG1 E{48.5 * 0.58} F{min(filament_max_volumetric_speed[current_extruder], filament_max_volumetric_speed[next_extruder]) / 2.4 * 60}\nG1 E{48.5 * 0.02} F{min(filament_max_volumetric_speed[current_extruder], filament_max_volumetric_speed[next_extruder]) / 2.4 * 60}\nG1 E{48.5 * 0.18} F{min(filament_max_volumetric_speed[current_extruder], filament_max_volumetric_speed[next_extruder]) / 2.4 * 60}\nG1 E{48.5 * 0.02} F{min(filament_max_volumetric_speed[current_extruder], filament_max_volumetric_speed[next_extruder]) / 2.4 * 60}\nG1 E{48.5 * 0.18} F{min(filament_max_volumetric_speed[current_extruder], filament_max_volumetric_speed[next_extruder]) / 2.4 * 60}\nG1 E{48.5 * 0.02} F{min(filament_max_volumetric_speed[current_extruder], filament_max_volumetric_speed[next_extruder]) / 2.4 * 60}\nG1 E-2 F1800\n; FLUSH_END\n\nG1 Y300 F1000\nMOVE_TO_TRASH\nG1 Y300 F9000\nCLEAR_FLUSH\nCLEAR_OOZE\n\n; FLUSH_START\nG1 E{48.5 * 0.58} F{min(filament_max_volumetric_speed[current_extruder], filament_max_volumetric_speed[next_extruder]) / 2.4 * 60}\nG1 E{48.5 * 0.02} F{min(filament_max_volumetric_speed[current_extruder], filament_max_volumetric_speed[next_extruder]) / 2.4 * 60}\nG1 E{48.5 * 0.18} F{min(filament_max_volumetric_speed[current_extruder], filament_max_volumetric_speed[next_extruder]) / 2.4 * 60}\nG1 E{48.5 * 0.02} F{min(filament_max_volumetric_speed[current_extruder], filament_max_volumetric_speed[next_extruder]) / 2.4 * 60}\nG1 E{48.5 * 0.18} F{min(filament_max_volumetric_speed[current_extruder], filament_max_volumetric_speed[next_extruder]) / 2.4 * 60}\nG1 E{48.5 * 0.02} F{min(filament_max_volumetric_speed[current_extruder], filament_max_volumetric_speed[next_extruder]) / 2.4 * 60}\nG1 E-2 F1800\n; FLUSH_END\n\nG1 Y300 F1000\nMOVE_TO_TRASH\nG1 Y300 F9000\nCLEAR_FLUSH\nCLEAR_OOZE\n\n\n; FLUSH_START\nG1 E{48.5 * 0.58} F{min(filament_max_volumetric_speed[current_extruder], filament_max_volumetric_speed[next_extruder]) / 2.4 * 60}\nG1 E{48.5 * 0.02} F{min(filament_max_volumetric_speed[current_extruder], filament_max_volumetric_speed[next_extruder]) / 2.4 * 60}\nG1 E{48.5 * 0.18} F{min(filament_max_volumetric_speed[current_extruder], filament_max_volumetric_speed[next_extruder]) / 2.4 * 60}\nG1 E{48.5 * 0.02} F{min(filament_max_volumetric_speed[current_extruder], filament_max_volumetric_speed[next_extruder]) / 2.4 * 60}\nG1 E{48.5 * 0.18} F{min(filament_max_volumetric_speed[current_extruder], filament_max_volumetric_speed[next_extruder]) / 2.4 * 60}\nG1 E{48.5 * 0.02} F{min(filament_max_volumetric_speed[current_extruder], filament_max_volumetric_speed[next_extruder]) / 2.4 * 60}\nG1 E-2 F1800\n; FLUSH_END\n{endif}\n\nG92 E0\nG1 Y300 F9000\nCLEAR_FLUSH\nCLEAR_OOZE\nM118 Finished toolchange from slot [current_extruder] to slot [next_extruder]\n{else}\nM118 NOT switching between slot [current_extruder] to slot [next_extruder], skipping toolchange\nSYNC_EXTRUDER_MOTION EXTRUDER=slot[next_extruder] MOTION_QUEUE=extruder\n{endif}\nTOOL_CHANGE_END\nENABLE_ALL_SENSOR travel_lift_before_obstacle = 0,0,0,0 travel_max_lift = 0.4,0.4,0.4,0.4 travel_ramping_lift = 1,1,1,1 travel_slope = 3,3,3,3 wipe = 1,1,1,1