```[gcode_macro _VAOC_LOAD_TOOL] gcode: # parameters {% set t = params.T|default(0)|int %} {% set auto_z_offset = true if params.AUTO_Z_OFFSET|default(false)|lower == 'true' else false %} {% set auto_temp_offset = true if params.AUTO_TEMP_OFFSET|default(false)|lower == 'true' else false %} # config {% set speed = printer["gcode_macro RatOS"].toolchange_travel_speed * 60 %} {% set z_speed = printer["gcode_macro RatOS"].macro_z_speed|float * 60 %} {% set safe_distance = printer.configfile.settings.dual_carriage.safe_distance|float %} {% set default_toolhead = printer["gcode_macro RatOS"].default_toolhead|default(0)|int %} {% set printable_y_max = printer["gcode_macro RatOS"].printable_y_max|float %} # vaoc config {% set is_fixed = true if printer["gcode_macro _VAOC"].is_fixed|default(true)|lower == 'true' else false %} {% set safe_z = printer["gcode_macro _VAOC"].safe_z|float %} {% set additional_safe_distance = printer["gcode_macro _VAOC"].additional_safe_distance|float %} {% set z_offset_probe_x_offset = printer["z_offset_probe"].x_offset|default(0)|float %} {% set z_offset_probe_y_offset = printer["z_offset_probe"].y_offset|default(0)|float %} # ratos variables file {% set svv = printer.save_variables.variables %} # get reference point coordinates {% set idex_xcontrolpoint = svv.idex_xcontrolpoint|default(150)|float %} {% set idex_ycontrolpoint = svv.idex_ycontrolpoint|default(30)|float %} {% set idex_zcontrolpoint = svv.idex_zcontrolpoint|default(50)|float %} {% set toolhead_zoffset = svv.idex_zoffset|default(0)|float %} # auto z-offset values {% if auto_z_offset %} {% set additional_safe_distance = 20 %} {% set idex_xcontrolpoint = idex_xcontrolpoint + z_offset_probe_x_offset %} {% set idex_ycontrolpoint = idex_ycontrolpoint + z_offset_probe_y_offset %} {% endif %} # echo RATOS_ECHO PREFIX="VAOC" MSG={'"Move T%s to control point: X%.6f Y%.6f Z%.6f IS_FIXED=%s"' % (t, idex_xcontrolpoint, idex_ycontrolpoint, idex_zcontrolpoint, is_fixed)} # set part cooling fans {% if not auto_temp_offset and not auto_z_offset %} _VAOC_SET_CAMERA_COOLING T={t} {% endif %} # get parking positions {% set parking_position_t0 = printer["gcode_macro T0"].parking_position|float %} {% set parking_position_t1 = printer["gcode_macro T1"].parking_position|float %} {% if is_fixed %} {% set parking_position_t0 = idex_xcontrolpoint - safe_distance - additional_safe_distance %} {% set parking_position_t1 = idex_xcontrolpoint + safe_distance + additional_safe_distance %} {% endif %} # z-hop if needed {% set current_z = printer.toolhead.position.z|float %} {% set lowest_toolhead_z = [current_z, current_z - toolhead_zoffset]|min %} {% if lowest_toolhead_z < safe_z %} G1 Z{[safe_z, safe_z + toolhead_zoffset]|max} F{z_speed} {% else %} G1 Z{idex_zcontrolpoint} F{z_speed} {% endif %} # select toolhead (does not zhop because is_printing = false and does not compensate for difference between t0 and t1 z-offsets) _SELECT_TOOL T={t} X={idex_xcontrolpoint} Y={idex_ycontrolpoint} PARK_T0={parking_position_t0} PARK_T1={parking_position_t1} # z-drop if needed G1 Z{idex_zcontrolpoint} F{z_speed}```