Merge branch 'develop'
This commit is contained in:
commit
cae8bdbf21
@ -352,11 +352,11 @@ speed:100
|
||||
z_hop:5
|
||||
z_hop_speed: 10
|
||||
|
||||
[gcode_macro ENABLE_FORCE_MOVE]
|
||||
[gcode_macro ENABLE_MOTOR]
|
||||
gcode:
|
||||
SET_STEPPER_ENABLE STEPPER=stepper_x ENABLE=1
|
||||
SET_STEPPER_ENABLE STEPPER=stepper_y ENABLE=1
|
||||
SET_KINEMATIC_POSITION X=500 Y=500 Z=500
|
||||
SET_KINEMATIC_POSITION X=500 Y=500 Z=0
|
||||
|
||||
[gcode_macro T0]
|
||||
gcode:
|
||||
@ -418,7 +418,7 @@ gcode:
|
||||
M141 S{CHAMBER_TEMP}
|
||||
{% endif %}
|
||||
G28
|
||||
#BED_MESH_CALIBRATE
|
||||
_START_PRINT_BED_MESH
|
||||
{% if BED_TEMP != 0 %}
|
||||
M190 S{BED_TEMP}
|
||||
{% endif %}
|
||||
@ -453,7 +453,7 @@ variable_load_distance: 120
|
||||
variable_purge_distance: 25
|
||||
gcode:
|
||||
{% set speed = params.SPEED|default(200) %}
|
||||
{% set max_velocity = printer.configfile.settings['extruder'].max_extrude_only_velocity * 20 %}
|
||||
{% set max_velocity = printer.configfile.settings['extruder'].max_extrude_only_velocity * 10 %}
|
||||
SAVE_GCODE_STATE NAME=load_state
|
||||
G91
|
||||
G92 E0
|
||||
@ -462,15 +462,18 @@ gcode:
|
||||
RESTORE_GCODE_STATE NAME=load_state
|
||||
|
||||
[gcode_macro UNLOAD_FILAMENT]
|
||||
variable_unload_distance: 140
|
||||
variable_purge_distance: 25
|
||||
variable_unload_distance: 50
|
||||
variable_advance_unload_distance: 80
|
||||
variable_purge_distance: 10
|
||||
gcode:
|
||||
{% set speed = params.SPEED|default(200) %}
|
||||
{% set max_velocity = printer.configfile.settings['extruder'].max_extrude_only_velocity * 20 %}
|
||||
{% set max_velocity = printer.configfile.settings['extruder'].max_extrude_only_velocity * 10 %}
|
||||
SAVE_GCODE_STATE NAME=unload_state
|
||||
G91
|
||||
G92 E0
|
||||
G1 E{purge_distance} F{speed} # purge
|
||||
G1 E-{advance_unload_distance} F{max_velocity}
|
||||
G1 E-{4} F60
|
||||
G1 E-{unload_distance} F{max_velocity} # fast-unload
|
||||
RESTORE_GCODE_STATE NAME=unload_state
|
||||
|
||||
@ -788,7 +791,8 @@ gcode:
|
||||
initial_duration: 3.5
|
||||
gcode:
|
||||
{% set was_interrupted = printer.save_variables.variables.was_interrupted | string %}
|
||||
{% if was_interrupted == "True"%}
|
||||
{% set enable_recovery = printer.save_variables.variables.power_loss_recovery | default(Ture) | string %}
|
||||
{% if enable_recovery != "False" and was_interrupted == "True" %}
|
||||
RESPOND TYPE=command MSG="action:prompt_begin "
|
||||
RESPOND TYPE=command MSG="action:prompt_text The last print job was not completed continue printing?"
|
||||
RESPOND TYPE=command MSG="action:prompt_footer_button Continue|_RESUME_INTERRUPTED"
|
||||
@ -834,3 +838,154 @@ gcode:
|
||||
gcode:
|
||||
RESPOND TYPE=command MSG="action:prompt_end"
|
||||
_CLEAR_LAST_FILE
|
||||
|
||||
########################################
|
||||
# Adaptive mesh
|
||||
########################################
|
||||
|
||||
[gcode_macro Adaptive_Mesh]
|
||||
description: This macro contains all adjustable settings for KAMP
|
||||
variable_verbose_enable: True # Set to True to enable KAMP information output when running. This is useful for debugging.
|
||||
variable_mesh_margin: 5 # Expands the mesh size in millimeters if desired. Leave at 0 to disable.
|
||||
variable_fuzz_amount: 0 # Slightly randomizes mesh points to spread out wear from nozzle-based probes. Leave at 0 to disable.
|
||||
|
||||
gcode: # Gcode section left intentionally blank. Do not disturb.
|
||||
# Noting
|
||||
|
||||
[gcode_macro _START_PRINT_BED_MESH]
|
||||
gcode:
|
||||
{% set idex_mode = False %}
|
||||
{% set profiles = printer["bed_mesh"].profiles %}
|
||||
{% set svv = printer.save_variables.variables %}
|
||||
{% set adaptive_mesh = svv.adaptive_meshing|default(false)|lower %}
|
||||
{% if printer["dual_carriage"] is defined %}
|
||||
{% set current_idex_mode = printer["dual_carriage"].carriage_1|lower %}
|
||||
{% if current_idex_mode == "copy" or idex_mode == "mirror" %}
|
||||
{% set idex_mode = True %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% if adaptive_mesh|lower == 'true' %}
|
||||
{% if printer.exclude_object.objects != [] %}
|
||||
{% if idex_mode %}
|
||||
BED_MESH_CLEAR
|
||||
{% else %}
|
||||
BED_MESH_CALIBRATE PROFILE=adaptive
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{% if idex_mode %}
|
||||
BED_MESH_CLEAR
|
||||
{% else %}
|
||||
{% if 'default' in profiles %}
|
||||
BED_MESH_PROFILE LOAD=default
|
||||
{% else %}
|
||||
BED_MESH_CALIBRATE PROFILE=default
|
||||
BED_MESH_PROFILE SAVE=default
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
[gcode_macro BED_MESH_CALIBRATE]
|
||||
rename_existing: _BED_MESH_CALIBRATE
|
||||
gcode:
|
||||
{% set all_points = printer.exclude_object.objects | map(attribute='polygon') | sum(start=[]) %} # Gather all object points
|
||||
{% set bed_mesh_min = printer.configfile.settings.bed_mesh.mesh_min %} # Get bed mesh min from printer.cfg
|
||||
{% set bed_mesh_max = printer.configfile.settings.bed_mesh.mesh_max %} # Get bed mesh max from printer.cfg
|
||||
{% set probe_count = printer.configfile.settings.bed_mesh.probe_count %} # Get probe count from printer.cfg
|
||||
{% set kamp_settings = printer["gcode_macro Adaptive_Mesh"] %} # Pull variables from _KAMP_Settings
|
||||
{% set verbose_enable = kamp_settings.verbose_enable | abs %} # Pull verbose setting from _KAMP_Settings
|
||||
{% set mesh_margin = kamp_settings.mesh_margin | float %} # Pull mesh margin setting from _KAMP_Settings
|
||||
{% set fuzz_amount = kamp_settings.fuzz_amount | float %} # Pull fuzz amount setting from _KAMP_Settings
|
||||
{% set default_profile = params.PROFILE %} # get default mesh profile
|
||||
{% set probe_count = probe_count if probe_count|length > 1 else probe_count * 2 %} # If probe count is only a single number, convert it to 2. E.g. probe_count:7 = 7,7
|
||||
{% set max_probe_point_distance_x = ( bed_mesh_max[0] - bed_mesh_min[0] ) / (probe_count[0] - 1) %} # Determine max probe point distance
|
||||
{% set max_probe_point_distance_y = ( bed_mesh_max[1] - bed_mesh_min[1] ) / (probe_count[1] - 1) %} # Determine max probe point distance
|
||||
{% set x_min = all_points | map(attribute=0) | min | default(bed_mesh_min[0]) %} # Set x_min from smallest object x point
|
||||
{% set y_min = all_points | map(attribute=1) | min | default(bed_mesh_min[1]) %} # Set y_min from smallest object y point
|
||||
{% set x_max = all_points | map(attribute=0) | max | default(bed_mesh_max[0]) %} # Set x_max from largest object x point
|
||||
{% set y_max = all_points | map(attribute=1) | max | default(bed_mesh_max[1]) %} # Set y_max from largest object y point
|
||||
|
||||
{% set fuzz_range = range((0) | int, (fuzz_amount * 100) | int + 1) %} # Set fuzz_range between 0 and fuzz_amount
|
||||
{% set adapted_x_min = x_min - mesh_margin - (fuzz_range | random / 100.0) %} # Adapt x_min to margin and fuzz constraints
|
||||
{% set adapted_y_min = y_min - mesh_margin - (fuzz_range | random / 100.0) %} # Adapt y_min to margin and fuzz constraints
|
||||
{% set adapted_x_max = x_max + mesh_margin + (fuzz_range | random / 100.0) %} # Adapt x_max to margin and fuzz constraints
|
||||
{% set adapted_y_max = y_max + mesh_margin + (fuzz_range | random / 100.0) %} # Adapt y_max to margin and fuzz constraints
|
||||
|
||||
{% set adapted_x_min = [adapted_x_min , bed_mesh_min[0]] | max %} # Compare adjustments to defaults and choose max
|
||||
{% set adapted_y_min = [adapted_y_min , bed_mesh_min[1]] | max %} # Compare adjustments to defaults and choose max
|
||||
{% set adapted_x_max = [adapted_x_max , bed_mesh_max[0]] | min %} # Compare adjustments to defaults and choose min
|
||||
{% set adapted_y_max = [adapted_y_max , bed_mesh_max[1]] | min %} # Compare adjustments to defaults and choose min
|
||||
|
||||
{% set points_x = (((adapted_x_max - adapted_x_min) / max_probe_point_distance_x) | round(method='ceil') | int) + 1 %} # Define probe_count's x point count and round up
|
||||
{% set points_y = (((adapted_y_max - adapted_y_min) / max_probe_point_distance_y) | round(method='ceil') | int) + 1 %} # Define probe_count's y point count and round up
|
||||
|
||||
{% if (([points_x, points_y]|max) > 6) %} #
|
||||
{% set algorithm = "bicubic" %} #
|
||||
{% set min_points = 4 %} #
|
||||
{% else %} # Calculate if algorithm should be bicubic or lagrange
|
||||
{% set algorithm = "lagrange" %} #
|
||||
{% set min_points = 3 %} #
|
||||
{% endif %} #
|
||||
|
||||
{% set points_x = [points_x , min_points]|max %} # Set probe_count's x points to fit the calculated algorithm
|
||||
{% set points_y = [points_y , min_points]|max %} # Set probe_count's y points to fit the calculated algorithm
|
||||
{% set points_x = [points_x , probe_count[0]]|min %}
|
||||
{% set points_y = [points_y , probe_count[1]]|min %}
|
||||
|
||||
{% if verbose_enable == True %} # If verbose is enabled, print information about KAMP's calculations
|
||||
{% if printer.exclude_object.objects != [] %}
|
||||
|
||||
{ action_respond_info( "Algorithm: {}.".format(
|
||||
(algorithm),
|
||||
)) }
|
||||
|
||||
{ action_respond_info("Default probe count: {},{}.".format(
|
||||
(probe_count[0]),
|
||||
(probe_count[1]),
|
||||
)) }
|
||||
|
||||
{ action_respond_info("Adapted probe count: {},{}.".format(
|
||||
(points_x),
|
||||
(points_y),
|
||||
)) }
|
||||
|
||||
{action_respond_info("Default mesh bounds: {}, {}.".format(
|
||||
(bed_mesh_min[0],bed_mesh_min[1]),
|
||||
(bed_mesh_max[0],bed_mesh_max[1]),
|
||||
)) }
|
||||
|
||||
{% if mesh_margin > 0 %}
|
||||
{action_respond_info("Mesh margin is {}, mesh bounds extended by {}mm.".format(
|
||||
(mesh_margin),
|
||||
(mesh_margin),
|
||||
)) }
|
||||
{% else %}
|
||||
{action_respond_info("Mesh margin is 0, margin not increased.")}
|
||||
{% endif %}
|
||||
|
||||
{% if fuzz_amount > 0 %}
|
||||
{action_respond_info("Mesh point fuzzing enabled, points fuzzed up to {}mm.".format(
|
||||
(fuzz_amount),
|
||||
)) }
|
||||
{% else %}
|
||||
{action_respond_info("Fuzz amount is 0, mesh points not fuzzed.")}
|
||||
{% endif %}
|
||||
|
||||
{ action_respond_info("Adapted mesh bounds: {}, {}.".format(
|
||||
(adapted_x_min, adapted_y_min),
|
||||
(adapted_x_max, adapted_y_max),
|
||||
)) }
|
||||
|
||||
{action_respond_info("KAMP adjustments successful. Happy KAMPing!")}
|
||||
|
||||
{% else %}
|
||||
|
||||
{action_respond_info("No objects detected! Check your gcode and make sure that EXCLUDE_OBJECT_DEFINE is happening before BED_MESH_CALIBRATE is called. Defaulting to regular meshing.")}
|
||||
G4 P5000 # Wait 5 seconds to make error more visible
|
||||
{% endif %}
|
||||
|
||||
{% endif %}
|
||||
|
||||
_BED_MESH_CALIBRATE PROFILE={default_profile} mesh_min={adapted_x_min},{adapted_y_min} mesh_max={adapted_x_max},{adapted_y_max} ALGORITHM={algorithm} PROBE_COUNT={points_x},{points_y} # End of verbose
|
||||
BED_MESH_PROFILE LOAD={default_profile}
|
||||
|
@ -352,11 +352,11 @@ speed:100
|
||||
z_hop:5
|
||||
z_hop_speed: 10
|
||||
|
||||
[gcode_macro ENABLE_FORCE_MOVE]
|
||||
[gcode_macro ENABLE_MOTOR]
|
||||
gcode:
|
||||
SET_STEPPER_ENABLE STEPPER=stepper_x ENABLE=1
|
||||
SET_STEPPER_ENABLE STEPPER=stepper_y ENABLE=1
|
||||
SET_KINEMATIC_POSITION X=300 Y=300 Z=300
|
||||
SET_KINEMATIC_POSITION X=300 Y=300 Z=0
|
||||
|
||||
[gcode_macro T0]
|
||||
gcode:
|
||||
@ -418,7 +418,7 @@ gcode:
|
||||
M141 S{CHAMBER_TEMP}
|
||||
{% endif %}
|
||||
G28
|
||||
#BED_MESH_CALIBRATE
|
||||
_START_PRINT_BED_MESH
|
||||
{% if BED_TEMP != 0 %}
|
||||
M190 S{BED_TEMP}
|
||||
{% endif %}
|
||||
@ -453,7 +453,7 @@ variable_load_distance: 120
|
||||
variable_purge_distance: 25
|
||||
gcode:
|
||||
{% set speed = params.SPEED|default(200) %}
|
||||
{% set max_velocity = printer.configfile.settings['extruder'].max_extrude_only_velocity * 20 %}
|
||||
{% set max_velocity = printer.configfile.settings['extruder'].max_extrude_only_velocity * 10 %}
|
||||
SAVE_GCODE_STATE NAME=load_state
|
||||
G91
|
||||
G92 E0
|
||||
@ -462,15 +462,18 @@ gcode:
|
||||
RESTORE_GCODE_STATE NAME=load_state
|
||||
|
||||
[gcode_macro UNLOAD_FILAMENT]
|
||||
variable_unload_distance: 140
|
||||
variable_purge_distance: 25
|
||||
variable_unload_distance: 50
|
||||
variable_advance_unload_distance: 80
|
||||
variable_purge_distance: 10
|
||||
gcode:
|
||||
{% set speed = params.SPEED|default(200) %}
|
||||
{% set max_velocity = printer.configfile.settings['extruder'].max_extrude_only_velocity * 20 %}
|
||||
{% set max_velocity = printer.configfile.settings['extruder'].max_extrude_only_velocity * 10 %}
|
||||
SAVE_GCODE_STATE NAME=unload_state
|
||||
G91
|
||||
G92 E0
|
||||
G1 E{purge_distance} F{speed} # purge
|
||||
G1 E-{advance_unload_distance} F{max_velocity}
|
||||
G1 E-{4} F60
|
||||
G1 E-{unload_distance} F{max_velocity} # fast-unload
|
||||
RESTORE_GCODE_STATE NAME=unload_state
|
||||
|
||||
@ -781,7 +784,8 @@ gcode:
|
||||
initial_duration: 3.5
|
||||
gcode:
|
||||
{% set was_interrupted = printer.save_variables.variables.was_interrupted | string %}
|
||||
{% if was_interrupted == "True"%}
|
||||
{% set enable_recovery = printer.save_variables.variables.power_loss_recovery | default(Ture) | string %}
|
||||
{% if enable_recovery != "False" and was_interrupted == "True" %}
|
||||
RESPOND TYPE=command MSG="action:prompt_begin "
|
||||
RESPOND TYPE=command MSG="action:prompt_text The last print job was not completed continue printing?"
|
||||
RESPOND TYPE=command MSG="action:prompt_footer_button Continue|_RESUME_INTERRUPTED"
|
||||
@ -827,3 +831,154 @@ gcode:
|
||||
gcode:
|
||||
RESPOND TYPE=command MSG="action:prompt_end"
|
||||
_CLEAR_LAST_FILE
|
||||
|
||||
########################################
|
||||
# Adaptive mesh
|
||||
########################################
|
||||
|
||||
[gcode_macro Adaptive_Mesh]
|
||||
description: This macro contains all adjustable settings for KAMP
|
||||
variable_verbose_enable: True # Set to True to enable KAMP information output when running. This is useful for debugging.
|
||||
variable_mesh_margin: 5 # Expands the mesh size in millimeters if desired. Leave at 0 to disable.
|
||||
variable_fuzz_amount: 0 # Slightly randomizes mesh points to spread out wear from nozzle-based probes. Leave at 0 to disable.
|
||||
|
||||
gcode: # Gcode section left intentionally blank. Do not disturb.
|
||||
# Noting
|
||||
|
||||
[gcode_macro _START_PRINT_BED_MESH]
|
||||
gcode:
|
||||
{% set idex_mode = False %}
|
||||
{% set profiles = printer["bed_mesh"].profiles %}
|
||||
{% set svv = printer.save_variables.variables %}
|
||||
{% set adaptive_mesh = svv.adaptive_meshing|default(false)|lower %}
|
||||
{% if printer["dual_carriage"] is defined %}
|
||||
{% set current_idex_mode = printer["dual_carriage"].carriage_1|lower %}
|
||||
{% if current_idex_mode == "copy" or idex_mode == "mirror" %}
|
||||
{% set idex_mode = True %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% if adaptive_mesh|lower == 'true' %}
|
||||
{% if printer.exclude_object.objects != [] %}
|
||||
{% if idex_mode %}
|
||||
BED_MESH_CLEAR
|
||||
{% else %}
|
||||
BED_MESH_CALIBRATE PROFILE=adaptive
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{% if idex_mode %}
|
||||
BED_MESH_CLEAR
|
||||
{% else %}
|
||||
{% if 'default' in profiles %}
|
||||
BED_MESH_PROFILE LOAD=default
|
||||
{% else %}
|
||||
BED_MESH_CALIBRATE PROFILE=default
|
||||
BED_MESH_PROFILE SAVE=default
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
[gcode_macro BED_MESH_CALIBRATE]
|
||||
rename_existing: _BED_MESH_CALIBRATE
|
||||
gcode:
|
||||
{% set all_points = printer.exclude_object.objects | map(attribute='polygon') | sum(start=[]) %} # Gather all object points
|
||||
{% set bed_mesh_min = printer.configfile.settings.bed_mesh.mesh_min %} # Get bed mesh min from printer.cfg
|
||||
{% set bed_mesh_max = printer.configfile.settings.bed_mesh.mesh_max %} # Get bed mesh max from printer.cfg
|
||||
{% set probe_count = printer.configfile.settings.bed_mesh.probe_count %} # Get probe count from printer.cfg
|
||||
{% set kamp_settings = printer["gcode_macro Adaptive_Mesh"] %} # Pull variables from _KAMP_Settings
|
||||
{% set verbose_enable = kamp_settings.verbose_enable | abs %} # Pull verbose setting from _KAMP_Settings
|
||||
{% set mesh_margin = kamp_settings.mesh_margin | float %} # Pull mesh margin setting from _KAMP_Settings
|
||||
{% set fuzz_amount = kamp_settings.fuzz_amount | float %} # Pull fuzz amount setting from _KAMP_Settings
|
||||
{% set default_profile = params.PROFILE %} # get default mesh profile
|
||||
{% set probe_count = probe_count if probe_count|length > 1 else probe_count * 2 %} # If probe count is only a single number, convert it to 2. E.g. probe_count:7 = 7,7
|
||||
{% set max_probe_point_distance_x = ( bed_mesh_max[0] - bed_mesh_min[0] ) / (probe_count[0] - 1) %} # Determine max probe point distance
|
||||
{% set max_probe_point_distance_y = ( bed_mesh_max[1] - bed_mesh_min[1] ) / (probe_count[1] - 1) %} # Determine max probe point distance
|
||||
{% set x_min = all_points | map(attribute=0) | min | default(bed_mesh_min[0]) %} # Set x_min from smallest object x point
|
||||
{% set y_min = all_points | map(attribute=1) | min | default(bed_mesh_min[1]) %} # Set y_min from smallest object y point
|
||||
{% set x_max = all_points | map(attribute=0) | max | default(bed_mesh_max[0]) %} # Set x_max from largest object x point
|
||||
{% set y_max = all_points | map(attribute=1) | max | default(bed_mesh_max[1]) %} # Set y_max from largest object y point
|
||||
|
||||
{% set fuzz_range = range((0) | int, (fuzz_amount * 100) | int + 1) %} # Set fuzz_range between 0 and fuzz_amount
|
||||
{% set adapted_x_min = x_min - mesh_margin - (fuzz_range | random / 100.0) %} # Adapt x_min to margin and fuzz constraints
|
||||
{% set adapted_y_min = y_min - mesh_margin - (fuzz_range | random / 100.0) %} # Adapt y_min to margin and fuzz constraints
|
||||
{% set adapted_x_max = x_max + mesh_margin + (fuzz_range | random / 100.0) %} # Adapt x_max to margin and fuzz constraints
|
||||
{% set adapted_y_max = y_max + mesh_margin + (fuzz_range | random / 100.0) %} # Adapt y_max to margin and fuzz constraints
|
||||
|
||||
{% set adapted_x_min = [adapted_x_min , bed_mesh_min[0]] | max %} # Compare adjustments to defaults and choose max
|
||||
{% set adapted_y_min = [adapted_y_min , bed_mesh_min[1]] | max %} # Compare adjustments to defaults and choose max
|
||||
{% set adapted_x_max = [adapted_x_max , bed_mesh_max[0]] | min %} # Compare adjustments to defaults and choose min
|
||||
{% set adapted_y_max = [adapted_y_max , bed_mesh_max[1]] | min %} # Compare adjustments to defaults and choose min
|
||||
|
||||
{% set points_x = (((adapted_x_max - adapted_x_min) / max_probe_point_distance_x) | round(method='ceil') | int) + 1 %} # Define probe_count's x point count and round up
|
||||
{% set points_y = (((adapted_y_max - adapted_y_min) / max_probe_point_distance_y) | round(method='ceil') | int) + 1 %} # Define probe_count's y point count and round up
|
||||
|
||||
{% if (([points_x, points_y]|max) > 6) %} #
|
||||
{% set algorithm = "bicubic" %} #
|
||||
{% set min_points = 4 %} #
|
||||
{% else %} # Calculate if algorithm should be bicubic or lagrange
|
||||
{% set algorithm = "lagrange" %} #
|
||||
{% set min_points = 3 %} #
|
||||
{% endif %} #
|
||||
|
||||
{% set points_x = [points_x , min_points]|max %} # Set probe_count's x points to fit the calculated algorithm
|
||||
{% set points_y = [points_y , min_points]|max %} # Set probe_count's y points to fit the calculated algorithm
|
||||
{% set points_x = [points_x , probe_count[0]]|min %}
|
||||
{% set points_y = [points_y , probe_count[1]]|min %}
|
||||
|
||||
{% if verbose_enable == True %} # If verbose is enabled, print information about KAMP's calculations
|
||||
{% if printer.exclude_object.objects != [] %}
|
||||
|
||||
{ action_respond_info( "Algorithm: {}.".format(
|
||||
(algorithm),
|
||||
)) }
|
||||
|
||||
{ action_respond_info("Default probe count: {},{}.".format(
|
||||
(probe_count[0]),
|
||||
(probe_count[1]),
|
||||
)) }
|
||||
|
||||
{ action_respond_info("Adapted probe count: {},{}.".format(
|
||||
(points_x),
|
||||
(points_y),
|
||||
)) }
|
||||
|
||||
{action_respond_info("Default mesh bounds: {}, {}.".format(
|
||||
(bed_mesh_min[0],bed_mesh_min[1]),
|
||||
(bed_mesh_max[0],bed_mesh_max[1]),
|
||||
)) }
|
||||
|
||||
{% if mesh_margin > 0 %}
|
||||
{action_respond_info("Mesh margin is {}, mesh bounds extended by {}mm.".format(
|
||||
(mesh_margin),
|
||||
(mesh_margin),
|
||||
)) }
|
||||
{% else %}
|
||||
{action_respond_info("Mesh margin is 0, margin not increased.")}
|
||||
{% endif %}
|
||||
|
||||
{% if fuzz_amount > 0 %}
|
||||
{action_respond_info("Mesh point fuzzing enabled, points fuzzed up to {}mm.".format(
|
||||
(fuzz_amount),
|
||||
)) }
|
||||
{% else %}
|
||||
{action_respond_info("Fuzz amount is 0, mesh points not fuzzed.")}
|
||||
{% endif %}
|
||||
|
||||
{ action_respond_info("Adapted mesh bounds: {}, {}.".format(
|
||||
(adapted_x_min, adapted_y_min),
|
||||
(adapted_x_max, adapted_y_max),
|
||||
)) }
|
||||
|
||||
{action_respond_info("KAMP adjustments successful. Happy KAMPing!")}
|
||||
|
||||
{% else %}
|
||||
|
||||
{action_respond_info("No objects detected! Check your gcode and make sure that EXCLUDE_OBJECT_DEFINE is happening before BED_MESH_CALIBRATE is called. Defaulting to regular meshing.")}
|
||||
G4 P5000 # Wait 5 seconds to make error more visible
|
||||
{% endif %}
|
||||
|
||||
{% endif %}
|
||||
|
||||
_BED_MESH_CALIBRATE PROFILE={default_profile} mesh_min={adapted_x_min},{adapted_y_min} mesh_max={adapted_x_max},{adapted_y_max} ALGORITHM={algorithm} PROBE_COUNT={points_x},{points_y} # End of verbose
|
||||
BED_MESH_PROFILE LOAD={default_profile}
|
||||
|
@ -179,7 +179,7 @@ max_power: 1.0
|
||||
sensor_type: Generic 3950
|
||||
sensor_pin: PC3
|
||||
min_temp: 0
|
||||
max_temp: 70
|
||||
max_temp: 80
|
||||
# control: pid
|
||||
# pid_kp: 30.68
|
||||
# pid_ki: 0.21
|
||||
@ -414,9 +414,11 @@ home_xy_position:200,150
|
||||
speed:150
|
||||
z_hop:5
|
||||
|
||||
[gcode_macro ENABLE_FORCE_MOVE]
|
||||
[gcode_macro ENABLE_MOTOR]
|
||||
gcode:
|
||||
SET_KINEMATIC_POSITION X=200 Y=150 Z=150
|
||||
SET_STEPPER_ENABLE STEPPER=stepper_x ENABLE=1
|
||||
SET_STEPPER_ENABLE STEPPER=stepper_y ENABLE=1
|
||||
SET_KINEMATIC_POSITION X=200 Y=150 Z=0
|
||||
|
||||
[gcode_macro _RESTORE_DEFAULT_EXTRUDER]
|
||||
gcode:
|
||||
@ -542,7 +544,7 @@ gcode:
|
||||
M141 S{CHAMBER_TEMP}
|
||||
{% endif %}
|
||||
G28
|
||||
# BED_MESH_CALIBRATE
|
||||
_START_PRINT_BED_MESH
|
||||
{% if BED_TEMP != 0 %}
|
||||
M190 S{BED_TEMP}
|
||||
{% endif %}
|
||||
@ -620,10 +622,6 @@ gcode:
|
||||
{% set dual_z_offset=params.S|default(0)|float %}
|
||||
SAVE_VARIABLE VARIABLE=dual_z_offset VALUE={dual_z_offset}
|
||||
|
||||
[gcode_macro ENABLE_FORCE_MOVE]
|
||||
gcode:
|
||||
SET_KINEMATIC_POSITION X=200 Y=150 Z=150
|
||||
|
||||
[gcode_macro LOAD_FILAMENT]
|
||||
variable_load_distance: 90
|
||||
variable_purge_distance: 20
|
||||
@ -777,7 +775,7 @@ gcode:
|
||||
{% if printer["dual_carriage"] is defined %}
|
||||
{% set current_idex_mode = printer["dual_carriage"].carriage_1|lower %}
|
||||
{% if current_idex_mode == 'copy' or current_idex_mode == 'mirror' %}
|
||||
SAVE_DUAL_CARRIAGE_STATE
|
||||
SAVE_DUAL_CARRIAGE_STATE
|
||||
SYNC_EXTRUDER_MOTION EXTRUDER=extruder1 MOTION_QUEUE=extruder1
|
||||
SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=resume_dual VALUE=True
|
||||
{% endif %}
|
||||
@ -839,7 +837,7 @@ gcode:
|
||||
SET_GCODE_VARIABLE MACRO=RESUME VARIABLE=resume_dual VALUE=False
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
|
||||
_FILAMENT_UPDATE
|
||||
#### Printer comming from timeout idle state ####
|
||||
{% if printer.idle_timeout.state|upper == "IDLE" or idle_state %}
|
||||
@ -949,7 +947,8 @@ gcode:
|
||||
initial_duration: 3.5
|
||||
gcode:
|
||||
{% set was_interrupted = printer.save_variables.variables.was_interrupted | string %}
|
||||
{% if was_interrupted == "True"%}
|
||||
{% set enable_recovery = printer.save_variables.variables.power_loss_recovery | default(Ture) | string %}
|
||||
{% if enable_recovery != "False" and was_interrupted == "True" %}
|
||||
RESPOND TYPE=command MSG="action:prompt_begin "
|
||||
RESPOND TYPE=command MSG="action:prompt_text The last print job was not completed continue printing?"
|
||||
RESPOND TYPE=command MSG="action:prompt_footer_button Continue|_RESUME_INTERRUPTED"
|
||||
@ -995,3 +994,154 @@ gcode:
|
||||
gcode:
|
||||
RESPOND TYPE=command MSG="action:prompt_end"
|
||||
_CLEAR_LAST_FILE
|
||||
|
||||
########################################
|
||||
# Adaptive mesh
|
||||
########################################
|
||||
|
||||
[gcode_macro Adaptive_Mesh]
|
||||
description: This macro contains all adjustable settings for KAMP
|
||||
variable_verbose_enable: True # Set to True to enable KAMP information output when running. This is useful for debugging.
|
||||
variable_mesh_margin: 5 # Expands the mesh size in millimeters if desired. Leave at 0 to disable.
|
||||
variable_fuzz_amount: 0 # Slightly randomizes mesh points to spread out wear from nozzle-based probes. Leave at 0 to disable.
|
||||
|
||||
gcode: # Gcode section left intentionally blank. Do not disturb.
|
||||
# Noting
|
||||
|
||||
[gcode_macro _START_PRINT_BED_MESH]
|
||||
gcode:
|
||||
{% set idex_mode = False %}
|
||||
{% set profiles = printer["bed_mesh"].profiles %}
|
||||
{% set svv = printer.save_variables.variables %}
|
||||
{% set adaptive_mesh = svv.adaptive_meshing|default(false)|lower %}
|
||||
{% if printer["dual_carriage"] is defined %}
|
||||
{% set current_idex_mode = printer["dual_carriage"].carriage_1|lower %}
|
||||
{% if current_idex_mode == "copy" or idex_mode == "mirror" %}
|
||||
{% set idex_mode = True %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% if adaptive_mesh|lower == 'true' %}
|
||||
{% if printer.exclude_object.objects != [] %}
|
||||
{% if idex_mode %}
|
||||
BED_MESH_CLEAR
|
||||
{% else %}
|
||||
BED_MESH_CALIBRATE PROFILE=adaptive
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{% if idex_mode %}
|
||||
BED_MESH_CLEAR
|
||||
{% else %}
|
||||
{% if 'default' in profiles %}
|
||||
BED_MESH_PROFILE LOAD=default
|
||||
{% else %}
|
||||
BED_MESH_CALIBRATE PROFILE=default
|
||||
BED_MESH_PROFILE SAVE=default
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
[gcode_macro BED_MESH_CALIBRATE]
|
||||
rename_existing: _BED_MESH_CALIBRATE
|
||||
gcode:
|
||||
{% set all_points = printer.exclude_object.objects | map(attribute='polygon') | sum(start=[]) %} # Gather all object points
|
||||
{% set bed_mesh_min = printer.configfile.settings.bed_mesh.mesh_min %} # Get bed mesh min from printer.cfg
|
||||
{% set bed_mesh_max = printer.configfile.settings.bed_mesh.mesh_max %} # Get bed mesh max from printer.cfg
|
||||
{% set probe_count = printer.configfile.settings.bed_mesh.probe_count %} # Get probe count from printer.cfg
|
||||
{% set kamp_settings = printer["gcode_macro Adaptive_Mesh"] %} # Pull variables from _KAMP_Settings
|
||||
{% set verbose_enable = kamp_settings.verbose_enable | abs %} # Pull verbose setting from _KAMP_Settings
|
||||
{% set mesh_margin = kamp_settings.mesh_margin | float %} # Pull mesh margin setting from _KAMP_Settings
|
||||
{% set fuzz_amount = kamp_settings.fuzz_amount | float %} # Pull fuzz amount setting from _KAMP_Settings
|
||||
{% set default_profile = params.PROFILE %} # get default mesh profile
|
||||
{% set probe_count = probe_count if probe_count|length > 1 else probe_count * 2 %} # If probe count is only a single number, convert it to 2. E.g. probe_count:7 = 7,7
|
||||
{% set max_probe_point_distance_x = ( bed_mesh_max[0] - bed_mesh_min[0] ) / (probe_count[0] - 1) %} # Determine max probe point distance
|
||||
{% set max_probe_point_distance_y = ( bed_mesh_max[1] - bed_mesh_min[1] ) / (probe_count[1] - 1) %} # Determine max probe point distance
|
||||
{% set x_min = all_points | map(attribute=0) | min | default(bed_mesh_min[0]) %} # Set x_min from smallest object x point
|
||||
{% set y_min = all_points | map(attribute=1) | min | default(bed_mesh_min[1]) %} # Set y_min from smallest object y point
|
||||
{% set x_max = all_points | map(attribute=0) | max | default(bed_mesh_max[0]) %} # Set x_max from largest object x point
|
||||
{% set y_max = all_points | map(attribute=1) | max | default(bed_mesh_max[1]) %} # Set y_max from largest object y point
|
||||
|
||||
{% set fuzz_range = range((0) | int, (fuzz_amount * 100) | int + 1) %} # Set fuzz_range between 0 and fuzz_amount
|
||||
{% set adapted_x_min = x_min - mesh_margin - (fuzz_range | random / 100.0) %} # Adapt x_min to margin and fuzz constraints
|
||||
{% set adapted_y_min = y_min - mesh_margin - (fuzz_range | random / 100.0) %} # Adapt y_min to margin and fuzz constraints
|
||||
{% set adapted_x_max = x_max + mesh_margin + (fuzz_range | random / 100.0) %} # Adapt x_max to margin and fuzz constraints
|
||||
{% set adapted_y_max = y_max + mesh_margin + (fuzz_range | random / 100.0) %} # Adapt y_max to margin and fuzz constraints
|
||||
|
||||
{% set adapted_x_min = [adapted_x_min , bed_mesh_min[0]] | max %} # Compare adjustments to defaults and choose max
|
||||
{% set adapted_y_min = [adapted_y_min , bed_mesh_min[1]] | max %} # Compare adjustments to defaults and choose max
|
||||
{% set adapted_x_max = [adapted_x_max , bed_mesh_max[0]] | min %} # Compare adjustments to defaults and choose min
|
||||
{% set adapted_y_max = [adapted_y_max , bed_mesh_max[1]] | min %} # Compare adjustments to defaults and choose min
|
||||
|
||||
{% set points_x = (((adapted_x_max - adapted_x_min) / max_probe_point_distance_x) | round(method='ceil') | int) + 1 %} # Define probe_count's x point count and round up
|
||||
{% set points_y = (((adapted_y_max - adapted_y_min) / max_probe_point_distance_y) | round(method='ceil') | int) + 1 %} # Define probe_count's y point count and round up
|
||||
|
||||
{% if (([points_x, points_y]|max) > 6) %} #
|
||||
{% set algorithm = "bicubic" %} #
|
||||
{% set min_points = 4 %} #
|
||||
{% else %} # Calculate if algorithm should be bicubic or lagrange
|
||||
{% set algorithm = "lagrange" %} #
|
||||
{% set min_points = 3 %} #
|
||||
{% endif %} #
|
||||
|
||||
{% set points_x = [points_x , min_points]|max %} # Set probe_count's x points to fit the calculated algorithm
|
||||
{% set points_y = [points_y , min_points]|max %} # Set probe_count's y points to fit the calculated algorithm
|
||||
{% set points_x = [points_x , probe_count[0]]|min %}
|
||||
{% set points_y = [points_y , probe_count[1]]|min %}
|
||||
|
||||
{% if verbose_enable == True %} # If verbose is enabled, print information about KAMP's calculations
|
||||
{% if printer.exclude_object.objects != [] %}
|
||||
|
||||
{ action_respond_info( "Algorithm: {}.".format(
|
||||
(algorithm),
|
||||
)) }
|
||||
|
||||
{ action_respond_info("Default probe count: {},{}.".format(
|
||||
(probe_count[0]),
|
||||
(probe_count[1]),
|
||||
)) }
|
||||
|
||||
{ action_respond_info("Adapted probe count: {},{}.".format(
|
||||
(points_x),
|
||||
(points_y),
|
||||
)) }
|
||||
|
||||
{action_respond_info("Default mesh bounds: {}, {}.".format(
|
||||
(bed_mesh_min[0],bed_mesh_min[1]),
|
||||
(bed_mesh_max[0],bed_mesh_max[1]),
|
||||
)) }
|
||||
|
||||
{% if mesh_margin > 0 %}
|
||||
{action_respond_info("Mesh margin is {}, mesh bounds extended by {}mm.".format(
|
||||
(mesh_margin),
|
||||
(mesh_margin),
|
||||
)) }
|
||||
{% else %}
|
||||
{action_respond_info("Mesh margin is 0, margin not increased.")}
|
||||
{% endif %}
|
||||
|
||||
{% if fuzz_amount > 0 %}
|
||||
{action_respond_info("Mesh point fuzzing enabled, points fuzzed up to {}mm.".format(
|
||||
(fuzz_amount),
|
||||
)) }
|
||||
{% else %}
|
||||
{action_respond_info("Fuzz amount is 0, mesh points not fuzzed.")}
|
||||
{% endif %}
|
||||
|
||||
{ action_respond_info("Adapted mesh bounds: {}, {}.".format(
|
||||
(adapted_x_min, adapted_y_min),
|
||||
(adapted_x_max, adapted_y_max),
|
||||
)) }
|
||||
|
||||
{action_respond_info("KAMP adjustments successful. Happy KAMPing!")}
|
||||
|
||||
{% else %}
|
||||
|
||||
{action_respond_info("No objects detected! Check your gcode and make sure that EXCLUDE_OBJECT_DEFINE is happening before BED_MESH_CALIBRATE is called. Defaulting to regular meshing.")}
|
||||
G4 P5000 # Wait 5 seconds to make error more visible
|
||||
{% endif %}
|
||||
|
||||
{% endif %}
|
||||
|
||||
_BED_MESH_CALIBRATE PROFILE={default_profile} mesh_min={adapted_x_min},{adapted_y_min} mesh_max={adapted_x_max},{adapted_y_max} ALGORITHM={algorithm} PROBE_COUNT={points_x},{points_y} # End of verbose
|
||||
BED_MESH_PROFILE LOAD={default_profile}
|
||||
|
0
scripts/clear_plr.sh
Normal file → Executable file
0
scripts/clear_plr.sh
Normal file → Executable file
0
scripts/plr.sh
Normal file → Executable file
0
scripts/plr.sh
Normal file → Executable file
Loading…
x
Reference in New Issue
Block a user