Last active
November 8, 2023 23:07
-
-
Save kieraneglin/4f9f4f828500c5e09c0e8e4261168bab to your computer and use it in GitHub Desktop.
KAMP macro to park at beginning of line purge
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[gcode_macro LINE_PURGE] | |
description: A purge macro that adapts to be near your actual printed objects | |
gcode: | |
# Get relevant printer params | |
{% set travel_speed = (printer.toolhead.max_velocity) * 60 | float %} | |
{% set cross_section = printer.configfile.settings.extruder.max_extrude_cross_section | float %} | |
# Use firmware retraction if it is defined | |
{% if printer.firmware_retraction is defined %} | |
{% set RETRACT = G10 | string %} | |
{% set UNRETRACT = G11 | string %} | |
{% else %} | |
{% set RETRACT = 'G1 E-.5 F2100' | string %} | |
{% set UNRETRACT = 'G1 E.5 F2100' | string %} | |
{% endif %} | |
# Get purge settings from _Kamp_Settings | |
{% set verbose_enable = printer["gcode_macro _KAMP_Settings"].verbose_enable | abs %} | |
{% set purge_height = printer["gcode_macro _KAMP_Settings"].purge_height | float %} | |
{% set tip_distance = printer["gcode_macro _KAMP_Settings"].tip_distance | float %} | |
{% set purge_margin = printer["gcode_macro _KAMP_Settings"].purge_margin | float %} | |
{% set purge_amount = printer["gcode_macro _KAMP_Settings"].purge_amount | float %} | |
{% set flow_rate = printer["gcode_macro _KAMP_Settings"].flow_rate | float %} | |
# Calculate purge origins and centers from objects | |
{% set all_points = printer.exclude_object.objects | map(attribute='polygon') | sum(start=[]) %} # Get all object points | |
{% set purge_x_min = (all_points | map(attribute=0) | min | default(0)) %} # Object x min | |
{% set purge_x_max = (all_points | map(attribute=0) | max | default(0)) %} # Object x max | |
{% set purge_y_min = (all_points | map(attribute=1) | min | default(0)) %} # Object y min | |
{% set purge_y_max = (all_points | map(attribute=1) | max | default(0)) %} # Object y max | |
{% set purge_x_center = ([((purge_x_max + purge_x_min) / 2) - (purge_amount / 2), 0] | max) %} # Create center point of purge line relative to print on X axis | |
{% set purge_y_center = ([((purge_y_max + purge_y_min) / 2) - (purge_amount / 2), 0] | max) %} # Create center point of purge line relative to print on Y axis | |
{% set purge_x_origin = ([purge_x_min - purge_margin, 0] | max) %} # Add margin to x min, compare to 0, and choose the larger | |
{% set purge_y_origin = ([purge_y_min - purge_margin, 0] | max) %} # Add margin to y min, compare to 0, and choose the larger | |
# Calculate purge speed | |
{% set purge_move_speed = (flow_rate / 5.0) * 60 | float %} | |
{% if cross_section < 5 %} | |
{action_respond_info("[Extruder] max_extrude_cross_section is insufficient for purge, please set it to 5 or greater. Purge skipped.")} | |
{% else %} | |
{% if verbose_enable == True %} | |
{action_respond_info("Moving filament tip {}mms".format( | |
(tip_distance), | |
)) } | |
{% endif %} | |
{% if printer.firmware_retraction is defined %} | |
{action_respond_info("KAMP purge is using firmware retraction.")} | |
{% else %} | |
{action_respond_info("KAMP purge is not using firmware retraction, it is recommended to configure it.")} | |
{% endif %} | |
{% if purge_y_origin > 0 %} | |
{action_respond_info("KAMP purge starting at {}, {} and purging {}mm of filament, requested flow rate is {}mm/s3.".format( | |
(purge_x_center), | |
(purge_y_origin), | |
(purge_amount), | |
(flow_rate), | |
)) } | |
{% else %} | |
{action_respond_info("KAMP purge starting at {}, {} and purging {}mm of filament, requested flow rate is {}mm/s3.".format( | |
(purge_x_origin), | |
(purge_y_center), | |
(purge_amount), | |
(flow_rate), | |
)) } | |
{% endif %} | |
SAVE_GCODE_STATE NAME=Prepurge_State # Create gcode state | |
{% if purge_y_origin > 0 %} # If there's room on Y, purge along X axis in front of print area | |
G92 E0 # Reset extruder | |
G0 F{travel_speed} # Set travel speed | |
G90 # Absolute positioning | |
_KAMP_MOVE_TO_PURGE_START # Move to purge position | |
G0 Z{purge_height} # Move to purge Z height | |
M83 # Relative extrusion mode | |
G1 E{tip_distance} F{purge_move_speed} # Move filament tip | |
G1 X{purge_x_center + purge_amount} E{purge_amount} F{purge_move_speed} # Purge line | |
{RETRACT} # Retract | |
G0 X{purge_x_center + purge_amount + 10} F{travel_speed} # Rapid move to break string | |
G92 E0 # Reset extruder distance | |
M82 # Absolute extrusion mode | |
G0 Z{purge_height * 2} F{travel_speed} # Z hop | |
{% else %} # If there's room on X, purge along Y axis to the left of print area | |
G92 E0 # Reset extruder | |
G0 F{travel_speed} # Set travel speed | |
G90 # Absolute positioning | |
_KAMP_MOVE_TO_PURGE_START # Move to purge position | |
G0 Z{purge_height} # Move to purge Z height | |
M83 # Relative extrusion mode | |
G1 E{tip_distance} F{purge_move_speed} # Move filament tip | |
G1 Y{purge_y_center + purge_amount} E{purge_amount} F{purge_move_speed} # Purge line | |
{RETRACT} # Retract | |
G0 Y{purge_y_center + purge_amount + 10} F{travel_speed} # Rapid move to break string | |
G92 E0 # Reset extruder distance | |
M82 # Absolute extrusion mode | |
G0 Z{purge_height * 2} F{travel_speed} # Z hop | |
{% endif %} | |
RESTORE_GCODE_STATE NAME=Prepurge_State # Restore gcode state | |
{% endif %} | |
[gcode_macro _KAMP_MOVE_TO_PURGE_START] | |
gcode: | |
# Get purge settings from _Kamp_Settings | |
{% set purge_margin = printer["gcode_macro _KAMP_Settings"].purge_margin | float %} | |
{% set purge_amount = printer["gcode_macro _KAMP_Settings"].purge_amount | float %} | |
# Calculate purge origins and centers from objects | |
{% set all_points = printer.exclude_object.objects | map(attribute='polygon') | sum(start=[]) %} # Get all object points | |
{% set purge_x_min = (all_points | map(attribute=0) | min | default(0)) %} # Object x min | |
{% set purge_x_max = (all_points | map(attribute=0) | max | default(0)) %} # Object x max | |
{% set purge_y_min = (all_points | map(attribute=1) | min | default(0)) %} # Object y min | |
{% set purge_y_max = (all_points | map(attribute=1) | max | default(0)) %} # Object y max | |
{% set purge_x_center = ([((purge_x_max + purge_x_min) / 2) - (purge_amount / 2), 0] | max) %} # Create center point of purge line relative to print on X axis | |
{% set purge_y_center = ([((purge_y_max + purge_y_min) / 2) - (purge_amount / 2), 0] | max) %} # Create center point of purge line relative to print on Y axis | |
{% set purge_x_origin = ([purge_x_min - purge_margin, 0] | max) %} # Add margin to x min, compare to 0, and choose the larger | |
{% set purge_y_origin = ([purge_y_min - purge_margin, 0] | max) %} # Add margin to y min, compare to 0, and choose the larger | |
SAVE_GCODE_STATE NAME=Prepurge_Positioning_State # Create gcode state | |
{% if purge_y_origin > 0 %} # If there's room on Y, purge along X axis in front of print area | |
G0 X{purge_x_center} Y{purge_y_origin} # Move to purge position | |
{% else %} # If there's room on X, purge along Y axis to the left of print area | |
G0 X{purge_x_origin} Y{purge_y_center} # Move to purge position | |
{% endif %} | |
RESTORE_GCODE_STATE NAME=Prepurge_Positioning_State # Restore gcode state |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[gcode_macro SMART_PARK] | |
description: Parks your printhead near the print area for pre-print hotend heating. | |
gcode: | |
{% set kamp_settings = printer["gcode_macro _KAMP_Settings"] %} # Pull all variables from _KAMP_Settings | |
{% set z_height = kamp_settings.smart_park_height | float %} # Set Z height variable | |
{% if printer.toolhead.position.z < z_height %} | |
G0 Z{z_height} # Move Z to park height if current Z position is lower than z_height | |
{% endif %} | |
_KAMP_MOVE_TO_PURGE_START # Move near object area | |
G0 Z{z_height} # Move Z to park height |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment