Skip to content

Instantly share code, notes, and snippets.

@Xoma163
Created February 17, 2026 06:51
Show Gist options
  • Select an option

  • Save Xoma163/a5aae1aefd2074bc3f17a9df5a911335 to your computer and use it in GitHub Desktop.

Select an option

Save Xoma163/a5aae1aefd2074bc3f17a9df5a911335 to your computer and use it in GitHub Desktop.
k1c_bed_mesh_fix.py
import re
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import LinearSegmentedColormap
def get_grid(text_calibration: str):
# Формируем строки с помощью парсинга регуляркой
matches = re.findall(r"probe at\s*([0-9.]+),([0-9.]+)\s*is z=([0-9.]+)", text_calibration)
points = [(float(x), float(y), float(z)) for x, y, z in matches]
xs = sorted(sorted({p[0] for p in points}))
ys = sorted(sorted({p[1] for p in points}))
grid = []
# Перевод в двумерный массив
for y in ys:
row = []
for x in xs:
z = next(p[2] for p in points if p[0] == x and p[1] == y)
row.append(z)
grid.append(row)
return grid
def apply_delta_to_grid(grid: list, delta: float):
for i, row in enumerate(grid):
for j, col in enumerate(row):
grid[i][j] += delta
def print_grid(grid: list):
for r in grid:
print(", ".join(f"{z:.6f}" for z in r))
print()
def show_grid(grid: list, printer_name: str):
cmap_blue_orange = LinearSegmentedColormap.from_list("blue_orange", ["#4DA6FF", "#FFA500"])
plt.figure(figsize=(6, 5))
im = plt.imshow(grid, origin='lower', cmap=cmap_blue_orange)
plt.colorbar(im, label='Высота')
plt.title(f'Карта стола принтера {printer_name}')
plt.xlabel('X')
plt.ylabel('Y')
plt.show()
grid_np = np.array(grid)
nx, ny = grid_np.shape
x, y = np.meshgrid(np.arange(ny), np.arange(nx))
fig = plt.figure(figsize=(8, 6))
ax = fig.add_subplot(111, projection='3d')
surf = ax.plot_surface(x, y, grid_np, cmap=cmap_blue_orange, edgecolor='none')
fig.colorbar(surf, ax=ax, shrink=0.6, label='Высота')
plt.title(f'Карта стола принтера {printer_name}')
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('height')
plt.show()
def apply_fixes(grid: list, fixes: list[tuple[tuple[int, int], float]]):
# Исправляем стол на наше усмотрение
# С минусом - уменьшает расстояние от стола до сопла
# С плюсом - увеличивает
for fix in fixes:
position, value = fix
x, y = position
grid[x][y] += value
def _main(text_calibration: str, fixes: list[tuple[tuple[int, int], float]], printer_name: str):
print("----------")
print(f"{printer_name} GRID")
grid = get_grid(text_calibration)
print("default grid")
print_grid(grid)
min_val = min(min(row) for row in grid)
# print(min_val)
# min_val = 0.236844
delta = -min_val
apply_delta_to_grid(grid, delta)
print("zero-level grid")
print_grid(grid)
apply_fixes(grid, fixes)
print("custom grid")
print_grid(grid)
show_grid(grid, printer_name)
print("----------")
def main():
# 0 0 - ближний левый угол
# 0 5 - ближний правый угол
# 5 0 - дальний левый угол
# 5 5 - дальний правый угол
bed_k1c1 = """
# probe at 5.000,5.000 is z=0.183938
# probe at 47.000,5.000 is z=0.146531
# probe at 89.000,5.000 is z=0.211406
# probe at 131.000,5.000 is z=0.186813
# probe at 173.000,5.000 is z=0.225031
# probe at 215.000,5.000 is z=0.243875
# probe at 215.000,47.000 is z=0.251844
# probe at 173.000,47.000 is z=0.194594
# probe at 131.000,47.000 is z=0.193344
# probe at 89.000,47.000 is z=0.226094
# probe at 47.000,47.000 is z=0.183125
# probe at 5.000,47.000 is z=0.177906
# probe at 5.000,89.000 is z=0.187875
# probe at 47.000,89.000 is z=0.245656
# probe at 89.000,89.000 is z=0.217510
# probe at 131.000,89.000 is z=0.240202
# probe at 173.000,89.000 is z=0.239219
# probe at 215.000,89.000 is z=0.251687
# probe at 215.000,131.000 is z=0.186750
# probe at 173.000,131.000 is z=0.201500
# probe at 131.000,131.000 is z=0.209001
# probe at 89.000,131.000 is z=0.198344
# probe at 47.000,131.000 is z=0.252000
# probe at 5.000,131.000 is z=0.227313
# probe at 5.000,173.000 is z=0.209469
# probe at 47.000,173.000 is z=0.218750
# probe at 89.000,173.000 is z=0.180531
# probe at 131.000,173.000 is z=0.180920
# probe at 173.000,173.000 is z=0.192687
# probe at 215.000,173.000 is z=0.162687
# probe at 215.000,215.000 is z=0.177906
# probe at 173.000,215.000 is z=0.193969
# probe at 131.000,215.000 is z=0.187125
# probe at 89.000,215.000 is z=0.169991
# probe at 47.000,215.000 is z=0.176125
# probe at 5.000,215.000 is z=0.234906
"""
fixes_k1c1 = [
((0, 0), 0.09), # было 0.07. Прибавил 0.02, возможно надо убавить
((0, 1), 0.03),
((0, 2), 0.03),
((0, 3), 0.03),
((0, 4), 0.06), # было 0.04. Прибавил 0.02, возможно надо убавить
]
_main(bed_k1c1, fixes_k1c1, 'K1C #1')
bed_k1c2 = """
# probe at 5.000,5.000 is z=0.325469
# probe at 47.000,5.000 is z=0.269594
# probe at 89.000,5.000 is z=0.256531
# probe at 131.000,5.000 is z=0.286125
# probe at 173.000,5.000 is z=0.264625
# probe at 215.000,5.000 is z=0.339844
# probe at 215.000,47.000 is z=0.324000
# probe at 173.000,47.000 is z=0.279344
# probe at 131.000,47.000 is z=0.268906
# probe at 89.000,47.000 is z=0.260344
# probe at 47.000,47.000 is z=0.252719
# probe at 5.000,47.000 is z=0.275615
# probe at 5.000,89.000 is z=0.280875
# probe at 47.000,89.000 is z=0.265438
# probe at 89.000,89.000 is z=0.296823
# probe at 131.000,89.000 is z=0.275698
# probe at 173.000,89.000 is z=0.270000
# probe at 215.000,89.000 is z=0.282688
# probe at 215.000,131.000 is z=0.236844
# probe at 173.000,131.000 is z=0.364406
# probe at 131.000,131.000 is z=0.282917
# probe at 89.000,131.000 is z=0.319229
# probe at 47.000,131.000 is z=0.295073
# probe at 5.000,131.000 is z=0.280812
# probe at 5.000,173.000 is z=0.356437
# probe at 47.000,173.000 is z=0.321020
# probe at 89.000,173.000 is z=0.299344
# probe at 131.000,173.000 is z=0.288406
# probe at 173.000,173.000 is z=0.323187
# probe at 215.000,173.000 is z=0.292449
# probe at 215.000,215.000 is z=0.327031
# probe at 173.000,215.000 is z=0.290562
# probe at 131.000,215.000 is z=0.301812
# probe at 89.000,215.000 is z=0.364094
# probe at 47.000,215.000 is z=0.282337
# probe at 5.000,215.000 is z=0.440864
"""
fixes_k1c2 = [
((4, 0), -0.04),
((4, 1), -0.04),
((5, 0), -0.04),
((5, 1), -0.04),
((5, 2), -0.04),
((5, 3), -0.04),
((5, 4), -0.05),
((5, 5), -0.04)
]
_main(bed_k1c2, fixes_k1c2, 'K1C #2')
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment