jithenderchoudary commited on
Commit
37fcde6
·
verified ·
1 Parent(s): f81a344

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +50 -16
app.py CHANGED
@@ -1,43 +1,77 @@
1
  import gradio as gr
2
- import os
 
 
 
3
 
4
  # Function to generate G-code based on user input
5
  def generate_gcode(length, diameter, feed_rate):
6
- """
7
- Generates a simple G-code string based on user inputs.
8
- """
9
  gcode = []
10
  gcode.append(f"(Generated G-code for length={length}, diameter={diameter}, feed_rate={feed_rate})")
11
  gcode.append("G21 ; Set units to millimeters")
12
  gcode.append("G90 ; Absolute positioning mode")
13
- gcode.append("G17 ; Select XY plane")
14
  gcode.append("M03 S1000 ; Start spindle at 1000 RPM")
15
  gcode.append("G00 Z5.0 ; Move to safe height")
16
- gcode.append(f"G00 X0 Y0 ; Move to start position")
17
- gcode.append(f"G01 Z-1.0 F{feed_rate} ; Start cutting")
18
- gcode.append(f"G01 X{length} F{feed_rate} ; Linear move along X-axis")
19
- gcode.append(f"G01 Y{diameter} F{feed_rate} ; Linear move along Y-axis")
20
  gcode.append("G00 Z5.0 ; Retract to safe height")
21
  gcode.append("M05 ; Stop spindle")
22
- gcode.append("M30 ; End of program")
23
  return "\n".join(gcode)
24
 
25
- # Gradio UI setup
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26
  def main_interface(length, diameter, feed_rate):
27
  gcode = generate_gcode(length, diameter, feed_rate)
28
- return gcode
 
 
29
 
30
- # Create Gradio Interface
31
  inputs = [
32
  gr.Number(label="Length (mm)", value=50),
33
  gr.Number(label="Diameter (mm)", value=20),
34
  gr.Number(label="Feed Rate (mm/min)", value=100)
35
  ]
36
 
37
- outputs = gr.Textbox(label="Generated G-code", lines=20)
 
 
 
 
38
 
39
- title = "CNC G-code Generator"
40
- description = "Enter the desired length, diameter, and feed rate to generate a basic G-code file."
41
 
42
  demo = gr.Interface(
43
  fn=main_interface,
 
1
  import gradio as gr
2
+ import numpy as np
3
+ import matplotlib.pyplot as plt
4
+ import plotly.graph_objects as go
5
+ import io
6
 
7
  # Function to generate G-code based on user input
8
  def generate_gcode(length, diameter, feed_rate):
 
 
 
9
  gcode = []
10
  gcode.append(f"(Generated G-code for length={length}, diameter={diameter}, feed_rate={feed_rate})")
11
  gcode.append("G21 ; Set units to millimeters")
12
  gcode.append("G90 ; Absolute positioning mode")
 
13
  gcode.append("M03 S1000 ; Start spindle at 1000 RPM")
14
  gcode.append("G00 Z5.0 ; Move to safe height")
15
+ gcode.append(f"G01 X{length} Y0 F{feed_rate} ; Linear move to length")
16
+ gcode.append(f"G01 X{length} Y{diameter} F{feed_rate} ; Move to diameter")
 
 
17
  gcode.append("G00 Z5.0 ; Retract to safe height")
18
  gcode.append("M05 ; Stop spindle")
19
+ gcode.append("M30 ; End program")
20
  return "\n".join(gcode)
21
 
22
+ # Function to generate 2D visualization
23
+ def generate_2d_plot(length, diameter):
24
+ fig, ax = plt.subplots()
25
+ ax.plot([0, length, length, 0, 0], [0, 0, diameter, diameter, 0], color='blue')
26
+ ax.set_title("2D Visualization of Toolpath")
27
+ ax.set_xlabel("Length (mm)")
28
+ ax.set_ylabel("Diameter (mm)")
29
+ ax.set_aspect('equal')
30
+ buf = io.BytesIO()
31
+ plt.savefig(buf, format='png')
32
+ buf.seek(0)
33
+ return buf
34
+
35
+ # Function to generate 3D visualization
36
+ def generate_3d_plot(length, diameter):
37
+ X = np.linspace(0, length, 50)
38
+ Y = np.linspace(0, diameter, 50)
39
+ X, Y = np.meshgrid(X, Y)
40
+ Z = np.zeros_like(X)
41
+
42
+ fig = go.Figure(data=[go.Surface(z=Z, x=X, y=Y, colorscale="Blues")])
43
+ fig.update_layout(
44
+ title="3D Visualization of Toolpath",
45
+ scene=dict(
46
+ xaxis_title="Length (mm)",
47
+ yaxis_title="Diameter (mm)",
48
+ zaxis_title="Height"
49
+ )
50
+ )
51
+ return fig
52
+
53
+ # Main interface function
54
  def main_interface(length, diameter, feed_rate):
55
  gcode = generate_gcode(length, diameter, feed_rate)
56
+ plot_2d = generate_2d_plot(length, diameter)
57
+ plot_3d = generate_3d_plot(length, diameter)
58
+ return gcode, plot_2d, plot_3d
59
 
60
+ # Gradio Interface
61
  inputs = [
62
  gr.Number(label="Length (mm)", value=50),
63
  gr.Number(label="Diameter (mm)", value=20),
64
  gr.Number(label="Feed Rate (mm/min)", value=100)
65
  ]
66
 
67
+ outputs = [
68
+ gr.Textbox(label="Generated G-code", lines=15),
69
+ gr.Image(label="2D Visualization"),
70
+ gr.Plot(label="3D Visualization")
71
+ ]
72
 
73
+ title = "CNC G-code Generator with Visualization"
74
+ description = "Generate CNC G-code with 2D and 3D visualizations. Input the length, diameter, and feed rate to preview the toolpath."
75
 
76
  demo = gr.Interface(
77
  fn=main_interface,