TAM‑CNC Rectagular Pocket G-Code Generator

Rectangle Pocket G-code Creator

Rectangular Pocket Diagram

This program will create G-code for a simple rectangular pocket based on the parameters you input.

import js from pyscript import display def generate_rect_pocket_gcode(event): try: tool_no = js.document.getElementById("rp-tool-no").value tool_dia = float(js.document.getElementById("rp-tool-dia").value) tool_rad = tool_dia / 2.0 wrk_ofset = js.document.getElementById("rp-work-offset").value spdle_rpm = js.document.getElementById("rp-spindle-rpm").value x_pos = float(js.document.getElementById("rp-x-position").value) y_pos = float(js.document.getElementById("rp-y-position").value) z_rapid = float(js.document.getElementById("rp-z-rapid").value) z_start = float(js.document.getElementById("rp-z-start").value) tz_cut = float(js.document.getElementById("rp-tz-cut").value) z_depth = float(js.document.getElementById("rp-z-depth").value) nosteps = int(z_depth / tz_cut) z_cut = z_depth / nosteps if nosteps > 0 else z_depth x_dist = float(js.document.getElementById("rp-x-distance").value) y_dist = float(js.document.getElementById("rp-y-distance").value) step_over_percent = float(js.document.getElementById("rp-step-over").value) step_over = (step_over_percent / 100) * tool_dia feedrate = float(js.document.getElementById("rp-feed-rate").value) x_cut_inner = (x_dist / 2.0) - tool_rad y_cut_inner = (y_dist / 2.0) - tool_rad if x_cut_inner > y_cut_inner: side_steps = x_cut_inner / step_over else: side_steps = y_cut_inner / step_over side_steps = max(1, int(side_steps)) gcode_lines = [] gcode_lines.append("%") gcode_lines.append("M97 P8000") gcode_lines.append("M05") gcode_lines.append(f"T{tool_no} M06") gcode_lines.append(f"M03 S{spdle_rpm}") gcode_lines.append(f"G{wrk_ofset}") gcode_lines.append("G40") gcode_lines.append("G98 G17") gcode_lines.append(f"G00 X{x_pos + step_over:.2f} Y{y_pos:.2f}") gcode_lines.append(f"G{wrk_ofset} G00 Z{z_rapid:.2f} G43 H{tool_no} M08") gcode_lines.append(f"G01 Z{z_start:.2f} F{feedrate / 2:.2f}") gcode_lines.append(f"G91 G02 I-{step_over:.2f} Z-{z_cut / 2.0:.2f} L{2 * nosteps} F{feedrate / 2.0:.2f}") gcode_lines.append(f"G02 I-{step_over:.2f}") gcode_lines.append(f"G90 G01 X{x_pos:.2f} F{feedrate:.2f}") gcode_lines.append(f"G01 Z{z_start:.2f} F{feedrate:.2f}") gcode_lines.append(f"M97 P701 L{nosteps}") gcode_lines.append(f"G00 Z{z_rapid:.2f} M09") gcode_lines.append("M05") gcode_lines.append("M97 P8000") gcode_lines.append("M30") gcode_lines.append("\nN701") gcode_lines.append(f"G91 G01 Z-{z_cut:.2f} F{feedrate / 2.0:.2f}") gcode_lines.append("F" + str(feedrate)) gcode_lines.append("G90") for i in range(1, side_steps + 1): current_x_offset = x_cut_inner * (i / side_steps) current_y_offset = y_cut_inner * (i / side_steps) gcode_lines.append(f"G01 X{x_pos + current_x_offset:.2f}") gcode_lines.append(f"G01 Y{y_pos - current_y_offset:.2f}") gcode_lines.append(f"G01 X{x_pos - current_x_offset:.2f}") gcode_lines.append(f"G01 Y{y_pos + current_y_offset:.2f}") gcode_lines.append(f"G01 X{x_pos + current_x_offset:.2f}") gcode_lines.append(f"G01 Y{y_pos:.2f}") gcode_lines.append(f"G01 X{x_pos:.2f} Y{y_pos:.2f}") gcode_lines.append("M99") gcode_lines.append("\nN8000") gcode_lines.append("G00 G90 M09") gcode_lines.append("G53 G00 G40 Z0") gcode_lines.append("G53 G00 G40 X0 Y0") gcode_lines.append("M01") gcode_lines.append("M99") gcode_lines.append("%") output_element = js.document.querySelector("#rp-gcode-output pre code") output_element.innerText = "\n".join(gcode_lines) except Exception as e: output_element = js.document.querySelector("#rp-gcode-output pre code") output_element.innerText = f"Error generating G-code: {str(e)}\nPlease check your input values." pass














Generated G-code: