Created
June 6, 2022 16:00
-
-
Save diegomarino/9c5dcd4fddc065c28d00197ee580b814 to your computer and use it in GitHub Desktop.
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
[gcode_macro BED_MESH_CALIBRATE] | |
rename_existing: BED_MESH_CALIBRATE_BASE | |
; gcode parameters | |
variable_parameter_AREA_START : 0,0 | |
variable_parameter_AREA_END : 0,0 | |
; the clearance between print area and probe area | |
variable_mesh_area_offset : 5.0 | |
; number of sample per probe point | |
variable_probe_samples : 2 | |
; minimum probe count | |
variable_min_probe_count : 3 | |
; scale up the probe count, should be 1.0 ~ < variable_max_probe_count/variable_min_probe_count | |
variable_probe_count_scale_factor : 1.0 | |
gcode: | |
_CheckProbe action=query | |
G90 | |
Attach_Probe | |
{% if params.AREA_START and params.AREA_END %} | |
{% set bedMeshConfig = printer["configfile"].config["bed_mesh"] %} | |
{% set safe_min_x = bedMeshConfig.mesh_min.split(",")[0]|float %} | |
{% set safe_min_y = bedMeshConfig.mesh_min.split(",")[1]|float %} | |
{% set safe_max_x = bedMeshConfig.mesh_max.split(",")[0]|float %} | |
{% set safe_max_y = bedMeshConfig.mesh_max.split(",")[1]|float %} | |
{% set area_min_x = params.AREA_START.split(",")[0]|float %} | |
{% set area_min_y = params.AREA_START.split(",")[1]|float %} | |
{% set area_max_x = params.AREA_END.split(",")[0]|float %} | |
{% set area_max_y = params.AREA_END.split(",")[1]|float %} | |
{% if bedMeshConfig.probe_count.split(",")|length == 2 %} | |
{% set meshPointX = bedMeshConfig.probe_count.split(",")[0]|int %} | |
{% set meshPointY = bedMeshConfig.probe_count.split(",")[1]|int %} | |
{% else %} | |
{% set meshPointX = bedMeshConfig.probe_count.split(",")[0]|int %} | |
{% set meshPointY = bedMeshConfig.probe_count.split(",")[0]|int %} | |
{% endif %} | |
{% set meshMaxPointX = meshPointX %} | |
{% set meshMaxPointY = meshPointY %} | |
{% if (area_min_x < area_max_x) and (area_min_y < area_max_y) %} | |
{% if area_min_x - mesh_area_offset >= safe_min_x %} | |
{% set area_min_x = area_min_x - mesh_area_offset %} | |
{% else %} | |
{% set area_min_x = safe_min_x %} | |
{% endif %} | |
{% if area_min_y - mesh_area_offset >= safe_min_y %} | |
{% set area_min_y = area_min_y - mesh_area_offset %} | |
{% else %} | |
{% set area_min_y = safe_min_y %} | |
{% endif %} | |
{% if area_max_x + mesh_area_offset <= safe_max_x %} | |
{% set area_max_x = area_max_x + mesh_area_offset %} | |
{% else %} | |
{% set area_max_x = safe_max_x %} | |
{% endif %} | |
{% if area_max_y + mesh_area_offset <= safe_max_y %} | |
{% set area_max_y = area_max_y + mesh_area_offset %} | |
{% else %} | |
{% set area_max_y = safe_max_y %} | |
{% endif %} | |
{% set meshPointX = (meshPointX * (area_max_x - area_min_x) / (safe_max_x - safe_min_x) * probe_count_scale_factor)|round(0)|int %} | |
{% if meshPointX < min_probe_count %} | |
{% set meshPointX = min_probe_count %} | |
{% endif %} | |
{% if meshPointX > meshMaxPointX %} | |
{% set meshPointX = meshMaxPointX %} | |
{% endif %} | |
{% set meshPointY = (meshPointY * (area_max_y -area_min_y ) / (safe_max_y - safe_min_y) * probe_count_scale_factor )|round(0)|int %} | |
{% if meshPointY < min_probe_count %} | |
{% set meshPointY = min_probe_count %} | |
{% endif %} | |
{% if meshPointY > meshMaxPointY %} | |
{% set meshPointY = meshMaxPointY %} | |
{% endif %} | |
BED_MESH_CALIBRATE_BASE mesh_min={area_min_x},{area_min_y} mesh_max={area_max_x},{area_max_y} probe_count={meshPointX},{meshPointY} samples={probe_samples|int} | |
{% else %} | |
BED_MESH_CALIBRATE_BASE | |
{% endif %} | |
{% else %} | |
BED_MESH_CALIBRATE_BASE | |
{% endif %} | |
Dock_Probe |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment