fredlef/cnc-depthmap
0
1def write_gcode(stl_path, x_mm, y_mm, z_mm, tool_d=6.0, step_over=0.5, feed=1200, plunge=300, safe_z=5):
2 import trimesh
3 mesh = trimesh.load(stl_path)
4 z_min, z_max = mesh.bounds[0][2], mesh.bounds[1][2]
5 z_range = z_max - z_min
6 num_passes = int(np.ceil(z_range / (tool_d * step_over)))
7 g = ["G90", "G21", f"G0 Z{safe_z}", f"G0 X0 Y0"]
8 for p in range(num_passes):
9 z_cut = z_max - (p+1)*(tool_d*step_over)
10 if z_cut < z_min:
11 z_cut = z_min
12 g.append(f"( pass {p+1} Z={z_cut:.2f} )")
13 # simple raster along X
14 y_steps = int(np.ceil(y_mm / (tool_d * step_over)))
15 for yi in range(y_steps+1):
16 y = yi * tool_d * step_over
17 if yi % 2 == 0:
18 g.append(f"G0 X0 Y{y:.3f}")
19 g.append(f"G1 Z{z_cut:.3f} F{plunge}")
20 g.append(f"G1 X{x_mm:.3f} F{feed}")
21 else:
22 g.append(f"G0 X{x_mm:.3f} Y{y:.3f}")
23 g.append(f"G1 X0 F{feed}")
24 g.append(f"G0 Z{safe_z}")
25 g.append("M30")
26 return "\n".join(g)