Spaces:
Sleeping
Sleeping
| import cadquery as cq | |
| import numpy as np | |
| import matplotlib.pyplot as plt | |
| import gradio as gr | |
| # Function for Progressive Die Design | |
| def generate_die(length, width, thickness): | |
| try: | |
| plate = cq.Workplane("XY").box(length, width, thickness) | |
| punch = cq.Workplane("XY").rect(10, 10).extrude(5).translate((length/4, width/4, thickness/2)) | |
| die = plate.cut(punch) | |
| filename = "progressive_die.step" | |
| cq.exporters.export(die, filename) | |
| return f"Progressive die design saved as {filename}" | |
| except Exception as e: | |
| return f"Error generating die: {str(e)}" | |
| # Function for Stress Analysis | |
| def stress_analysis(force, die_width, die_height, material_strength): | |
| try: | |
| stress = force / (die_width * die_height) | |
| safety_factor = material_strength / stress | |
| fig, ax = plt.subplots() | |
| ax.bar(["Stress", "Material Strength"], [stress, material_strength]) | |
| ax.set_ylabel("Stress (MPa)") | |
| ax.set_title("Stress Analysis") | |
| plt.close(fig) | |
| return f"Safety Factor: {round(safety_factor, 2)}", fig | |
| except Exception as e: | |
| return f"Error in stress analysis: {str(e)}", None | |
| # Function for Tool Optimization | |
| def optimize_tool(speed, feed_rate, depth_of_cut, material): | |
| try: | |
| tool_life = 1000 / (speed * feed_rate * depth_of_cut) | |
| recommended_speed = 0.8 * speed | |
| recommended_feed_rate = 0.9 * feed_rate | |
| return { | |
| "Estimated Tool Life (hrs)": round(tool_life, 2), | |
| "Recommended Speed (m/min)": round(recommended_speed, 2), | |
| "Recommended Feed Rate (mm/rev)": round(recommended_feed_rate, 2) | |
| } | |
| except Exception as e: | |
| return {"Error": str(e)} | |
| # Gradio interface functions | |
| def progressive_die_interface(length, width, thickness): | |
| return generate_die(length, width, thickness) | |
| def stress_analysis_interface(force, width, height, material_strength): | |
| return stress_analysis(force, width, height, material_strength) | |
| def tool_optimization_interface(speed, feed_rate, depth_of_cut, material): | |
| return optimize_tool(speed, feed_rate, depth_of_cut, material) | |
| # Create the Gradio Interface | |
| with gr.Blocks() as app: | |
| gr.Markdown("## Press Tool AI Suite") | |
| gr.Markdown("Select a tool below to get started:") | |
| with gr.Tabs(): | |
| with gr.Tab("Progressive Die Design"): | |
| gr.Markdown("### Enter Dimensions for Progressive Die") | |
| length = gr.Number(label="Length (mm)", value=100) | |
| width = gr.Number(label="Width (mm)", value=50) | |
| thickness = gr.Number(label="Thickness (mm)", value=10) | |
| die_output = gr.Textbox(label="Output") | |
| die_button = gr.Button("Generate Die") | |
| die_button.click(progressive_die_interface, inputs=[length, width, thickness], outputs=die_output) | |
| with gr.Tab("Stress Analysis"): | |
| gr.Markdown("### Enter Parameters for Stress Analysis") | |
| force = gr.Number(label="Force (N)", value=10000) | |
| die_width = gr.Number(label="Width (m)", value=0.05) | |
| die_height = gr.Number(label="Height (m)", value=0.01) | |
| material_strength = gr.Number(label="Material Strength (MPa)", value=250) | |
| safety_factor_output = gr.Textbox(label="Safety Factor") | |
| stress_chart = gr.Plot() | |
| stress_button = gr.Button("Analyze Stress") | |
| stress_button.click(stress_analysis_interface, inputs=[force, die_width, die_height, material_strength], outputs=[safety_factor_output, stress_chart]) | |
| with gr.Tab("Tool Optimization"): | |
| gr.Markdown("### Enter Machining Parameters for Tool Optimization") | |
| speed = gr.Number(label="Cutting Speed (m/min)", value=100) | |
| feed_rate = gr.Number(label="Feed Rate (mm/rev)", value=0.2) | |
| depth_of_cut = gr.Number(label="Depth of Cut (mm)", value=1.0) | |
| material = gr.Dropdown(choices=["Steel", "Aluminum", "Titanium"], label="Material", value="Steel") | |
| optimization_results = gr.JSON(label="Optimization Results") | |
| optimize_button = gr.Button("Optimize Tool") | |
| optimize_button.click(tool_optimization_interface, inputs=[speed, feed_rate, depth_of_cut, material], outputs=optimization_results) | |
| # Launch the app | |
| app.launch() | |