[bed_mesh] speed: 100 horizontal_move_z: 5 mesh_min: 5,5 mesh_max: 220,195 algorithm: bicubic bicubic_tension: 0.1 probe_count: 7,7 mesh_pps: 2,2 relative_reference_index: 24 # (5,3)=7 (3,3)=4 (5,5)=12 (7,7)=24 (7,5)=17 (9,9)=40 move_check_distance: 5.0 split_delta_z: .025 fade_start: 0.6 fade_end: 10 fade_target: 0 [gcode_macro BED_MESH_CALIBRATE] rename_existing: BED_MESH_CALIBRATE_BASE variable_mesh_delta : 25 ## distance between points variable_x_mesh_max : 7 ## max points on x-axis variable_y_mesh_max : 7 ## max points on y-axis variable_mesh_area_offset : 5 ## the clearance between print area and probe area gcode= {% if params.AREA_START and params.AREA_END %} ## get [bed_mesh] config parameters {% 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 %} ## get print area min/max from slicer gcode {% 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 %} ## set probing area {% 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 probe counts {% set meshPointX = ((area_max_x - area_min_x) / mesh_delta + 1)|round(0)|int %} {% if meshPointX < 3 %} {% set meshPointX = 3 %} {% elif meshPointX > x_mesh_max %} {% set meshPointX = x_mesh_max %} {% endif %} {% set meshPointY = ((area_max_y - area_min_y) / mesh_delta + 1)|round(0)|int %} {% if meshPointY < 3 %} {% set meshPointY = 3 %} {% elif meshPointY > y_mesh_max %} {% set meshPointY = y_mesh_max %} {% endif %} ## check for invalid mesh {% if meshPointX > 5 %} {% if meshPointY == 3 %} # 7x3 mesh invlaid for bicubic {% set meshPointY = 5 %} # set 7x5 mesh {% endif %} {% endif %} {% if meshPointY > 5 %} {% if meshPointX == 3 %} # 3x7 mesh invlaid for bicubic {% set meshPointX = 5 %} # set 5x7 mesh {% endif %} {% endif %} ## set new reference index point {% set referenceIndex = (meshPointX * meshPointY / 2 - 1 )|round(0)|int %} ## send bed mesh parameters M117 probe_count={meshPointX},{meshPointY} BED_MESH_CALIBRATE_BASE mesh_min={area_min_x},{area_min_y} mesh_max={area_max_x},{area_max_y} probe_count={meshPointX},{meshPointY} relative_reference_index={referenceIndex} {% else %} BED_MESH_CALIBRATE_BASE {% endif %}