TAM‑CNC Hexagonal G-Code Generator

Hexagon G-code Generator

Hexagon Diagram

Enter your parameters below to generate G-code for milling a hexagonal profile.

import js from pyscript import display def generate_hexagon_gcode(event): try: # Get values from HTML input elements tool_no = js.document.getElementById("hex-tool-no").value tool_dia = float(js.document.getElementById("hex-tool-dia").value) tool_rad = tool_dia / 2 wrk_ofset = js.document.getElementById("hex-work-offset").value spdle_rpm = js.document.getElementById("hex-spindle-rpm").value x_pos = float(js.document.getElementById("hex-x-position").value) y_pos = float(js.document.getElementById("hex-y-position").value) z_rapid = float(js.document.getElementById("hex-z-rapid").value) z_start = float(js.document.getElementById("hex-z-start").value) z_cut = float(js.document.getElementById("hex-z-cut").value) nosteps = int(js.document.getElementById("hex-nosteps").value) diam = float(js.document.getElementById("hex-diameter").value) rad = diam / 2 diam_t = diam + tool_dia rad_t = diam_t / 2 point_dt = diam_t / 0.86602540378 point_dth = point_dt / 2 point_dtq = point_dt / 4 lead_in = float(js.document.getElementById("hex-lead-in").value) feedrate = float(js.document.getElementById("hex-feed-rate").value) # Pre-calculated positions for G-code generation pxdthr = float(f"{x_pos + point_dth:.2f}") nxdthr = float(f"{x_pos - point_dth:.2f}") pxdtqr = float(f"{x_pos + point_dtq:.2f}") nxdtqr = float(f"{x_pos - point_dtq:.2f}") pyrtr = float(f"{y_pos + rad_t:.2f}") nyrtr = float(f"{y_pos - rad_t:.2f}") # --- G-code generation logic based on provided Python script --- gcode_lines = [] gcode_lines.append("Welcome to Tonys Basic external Hexagonal Milling G-Code Creator") gcode_lines.append("Generating G-code...") gcode_lines.append("%") # Start of program gcode_lines.append("M97 P8000") gcode_lines.append("G21 (G21 for millimeters, G20 for inches)") 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{point_dth + lead_in:.2f} Y{y_pos + lead_in:.2f}") gcode_lines.append(f"G{wrk_ofset} G00 Z{z_rapid} G43 H{tool_no} M08") gcode_lines.append(f"G01 Z{z_start} F{feedrate/2:.2f}") gcode_lines.append(f"M97 P501 L{nosteps}") gcode_lines.append(f"G00 Z{z_rapid + 20} M09") gcode_lines.append("M05") gcode_lines.append("M97 P8000") gcode_lines.append("M30") gcode_lines.append("\nN501") gcode_lines.append(f"G91 G01 Z-{z_cut:.2f} F{feedrate/2:.2f}") gcode_lines.append("G90") gcode_lines.append(f"G03 X{pxdthr:.2f} Y{y_pos:.2f} J-{lead_in:.2f} F{feedrate:.2f}") gcode_lines.append(f"G01 X{pxdtqr:.2f} Y{nyrtr:.2f}") gcode_lines.append(f"G01 X{nxdtqr:.2f} Y{nyrtr:.2f}") gcode_lines.append(f"G01 X{nxdthr:.2f} Y{y_pos:.2f}") gcode_lines.append(f"G01 X{nxdtqr:.2f} Y{pyrtr:.2f}") gcode_lines.append(f"G01 X{pxdtqr:.2f} Y{pyrtr:.2f}") gcode_lines.append(f"G01 X{pxdthr:.2f} Y{y_pos:.2f}") gcode_lines.append(f"G03 X{pxdthr + lead_in:.2f} Y{y_pos - lead_in:.2f} I{lead_in:.2f}") gcode_lines.append(f"G01 X{pxdthr + lead_in:.2f} Y{y_pos + lead_in:.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("%") # End of program # Display the generated G-code output_element = js.document.querySelector("#hex-gcode-output pre code") output_element.innerText = "\n".join(gcode_lines) except Exception as e: output_element = js.document.querySelector("#hex-gcode-output pre code") output_element.innerText = f"Error generating G-code: {str(e)}\nPlease check your input values." # Placeholder for the function definition itself, as py-click handles the event. pass













Generated G-code:

Disclaimer: All CNC toolpaths and G‑code generated or displayed by this tool must be reviewed and verified by the machine operator before use. TAM‑CNC and its developers accept no liability for machine damage, material loss, or personal injury resulting from improper use.