-
-
Notifications
You must be signed in to change notification settings - Fork 75
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'kamp' into develop. Moved imports into osskc.cfg.
- Loading branch information
Showing
7 changed files
with
276 additions
and
21 deletions.
There are no files selected for viewing
This file contains 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
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,104 @@ | ||
# # # Klipper Adaptive Meshing # # # | ||
|
||
# Heads up! If you have any other BED_MESH_CALIBRATE macros defined elsewhere in your config, you will need to comment out / remove them for this to work. (Klicky/Euclid Probe) | ||
# You will also need to be sure that [exclude_object] is defined in printer.cfg, and your slicer is labeling objects. | ||
# This macro will parse information from objects in your gcode to define a min and max mesh area to probe, creating an adaptive mesh! | ||
# This macro will not increase probe_count values in your [bed_mesh] config. If you want richer meshes, be sure to increase probe_count. We recommend at least 5,5. | ||
|
||
[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 verbose_enable = printer["gcode_macro _KAMP_Settings"].verbose_enable | abs %} # Pull verbose setting from _KAMP_Settings | ||
{% set mesh_margin = printer["gcode_macro _KAMP_Settings"].mesh_margin | float %} # Pull mesh margin setting from _KAMP_Settings | ||
{% set fuzz_amount = printer["gcode_macro _KAMP_Settings"].fuzz_amount | float %} # Pull fuzz amount setting from _KAMP_Settings | ||
{% 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 = (bed_mesh_min[0] + fuzz_amount - mesh_margin, x_min) | max - (fuzz_range | random / 100.0) %} # Adapt x_min to margin and fuzz constraints | ||
{% set adapted_y_min = (bed_mesh_min[1] + fuzz_amount - mesh_margin, y_min) | max - (fuzz_range | random / 100.0) %} # Adapt y_min to margin and fuzz constraints | ||
{% set adapted_x_max = (bed_mesh_max[0] - fuzz_amount + mesh_margin, x_max) | min + (fuzz_range | random / 100.0) %} # Adapt x_max to margin and fuzz constraints | ||
{% set adapted_y_max = (bed_mesh_max[1] - fuzz_amount + mesh_margin, y_max) | min + (fuzz_range | random / 100.0) %} # Adapt y_max to margin and fuzz constraints | ||
|
||
{% 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 | ||
|
||
{ 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!")} | ||
|
||
{% endif %} | ||
|
||
{% if probe_dock_enable == True %} | ||
{attach_macro} # Attach/deploy a probe if the probe is stored somewhere outside of the print area | ||
{% endif %} | ||
|
||
_BED_MESH_CALIBRATE mesh_min={adapted_x_min},{adapted_y_min} mesh_max={adapted_x_max},{adapted_y_max} ALGORITHM={algorithm} PROBE_COUNT={points_x},{points_y} | ||
|
||
{% if probe_dock_enable == True %} | ||
{detach_macro} # Detach/stow a probe if the probe is stored somewhere outside of the print area | ||
{% endif %} # End of verbose |
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
# Below you can include specific configuration files depending on what you want KAMP to do: | ||
|
||
[include ./Adaptive_Meshing.cfg] # Include to enable adaptive meshing configuration. | ||
# [include ./KAMP/Line_Purge.cfg] # Include to enable adaptive line purging configuration. | ||
|
||
[gcode_macro _KAMP_Settings] | ||
description: This macro contains all adjustable settings for KAMP | ||
|
||
# The following variables are settings for KAMP as a whole. | ||
variable_verbose_enable: True # Set to True to enable KAMP information output when running. This is useful for debugging. | ||
|
||
# The following variables are for adjusting adaptive mesh settings for KAMP. | ||
variable_mesh_margin: 0 # 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. | ||
|
||
# The following variables are for those with a dockable probe like Klicky, Euclid, etc. # ---------------- Attach Macro | Detach Macro | ||
variable_probe_dock_enable: False # Set to True to enable the usage of a dockable probe. # --------------------------------------------- | ||
variable_attach_macro: 'Attach_Probe' # The macro that is used to attach the probe. # Klicky Probe: 'Attach_Probe' | 'Dock_Probe' | ||
variable_detach_macro: 'Dock_Probe' # The macro that is used to store the probe. # Euclid Probe: 'Deploy_Probe' | 'Stow_Probe' | ||
# Legacy Gcode: 'M401' | 'M402' | ||
|
||
# The following variables are for adjusting adaptive purge settings for KAMP. | ||
variable_purge_height: 0.8 # Z position of nozzle during purge, default is 0.8. | ||
variable_tip_distance: 0 # Distance between tip of filament and nozzle before purge. Should be similar to PRINT_END final retract amount. | ||
variable_purge_margin: 10 # Distance the purge will be in front of the print area, default is 10. | ||
variable_purge_amount: 30 # Amount of filament to be purged prior to printing. | ||
variable_flow_rate: 12 # Flow rate of purge in mm3/s. Default is 12. | ||
|
||
gcode: # Gcode section left intentionally blank. Do not disturb. | ||
|
||
{action_respond_info(" Running the KAMP_Settings macro does nothing, it is only used for storing KAMP settings. ")} |
Oops, something went wrong.