Created
February 17, 2026 06:51
-
-
Save Xoma163/a5aae1aefd2074bc3f17a9df5a911335 to your computer and use it in GitHub Desktop.
k1c_bed_mesh_fix.py
This file contains hidden or 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
| 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