Spaces:
Runtime error
Runtime error
File size: 4,538 Bytes
e63fb7d d03369a 62390af e63fb7d 62390af e9107ce 456fc4b 62390af e9107ce 62390af e63fb7d 62390af e63fb7d 62390af d03369a 62390af d03369a 62390af d03369a 62390af d03369a 62390af d03369a 62390af d03369a 62390af d03369a 62390af d03369a 62390af e63fb7d 62390af | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | import os
import streamlit as st
from groq import Groq
import matplotlib.pyplot as plt
from fpdf import FPDF
import io
# Initialize Groq client
client = Groq(api_key=os.environ.get("GROQ_API_KEY"))
# App title
st.title("Cutting Plan Generator")
# Input for blank plates
st.header("Blank Plates Details")
num_blank_types = st.number_input("Number of Blank Plate Types", min_value=1, step=1, key="num_blank_types")
blank_data = []
for i in range(num_blank_types):
with st.expander(f"Blank Plate {i+1}"):
blank_width = st.number_input(f"Width (mm) for Blank {i+1}", min_value=0.0, step=0.1, key=f"blank_width_{i}")
blank_length = st.number_input(f"Length (mm) for Blank {i+1}", min_value=0.0, step=0.1, key=f"blank_length_{i}")
num_blank_plates = st.number_input(f"Number of Plates for Blank {i+1}", min_value=1, step=1, key=f"num_blank_plates_{i}")
blank_data.append({"width": blank_width, "length": blank_length, "count": num_blank_plates})
# Input for pieces
st.header("Pieces to be Cut Details")
num_piece_types = st.number_input("Number of Piece Types", min_value=1, step=1, key="num_piece_types")
piece_data = []
for i in range(num_piece_types):
with st.expander(f"Piece {i+1}"):
piece_width = st.number_input(f"Width (mm) for Piece {i+1}", min_value=0.0, step=0.1, key=f"piece_width_{i}")
piece_length = st.number_input(f"Length (mm) for Piece {i+1}", min_value=0.0, step=0.1, key=f"piece_length_{i}")
num_pieces = st.number_input(f"Number of Pieces for Piece {i+1}", min_value=1, step=1, key=f"num_pieces_{i}")
piece_data.append({"width": piece_width, "length": piece_length, "count": num_pieces})
# Saw cut size and trimming size
st.header("Other Specifications")
saw_cut_size = st.number_input("Saw Cut Size (mm)", min_value=0.0, step=0.1, key="saw_cut_size")
trimming_size = st.number_input("Trimming Size (mm)", min_value=0.0, step=0.1, key="trimming_size")
# Priority of blank sizes
priority = st.selectbox("Priority of Blank Sizes", options=["Smallest First", "Largest First"], key="priority")
# Generate Cutting Plan and Sketch
if st.button("Generate Cutting Plan"):
total_cut_area = 0
blank_areas = []
for blank in blank_data:
blank_area = (blank["width"] - 2 * trimming_size) * (blank["length"] - 2 * trimming_size) * blank["count"]
blank_areas.append(blank_area)
for piece in piece_data:
total_cut_area += piece["width"] * piece["length"] * piece["count"]
total_blank_area = sum(blank_areas)
unused_area = total_blank_area - total_cut_area
usable_area_percentage = (total_cut_area / total_blank_area) * 100
st.subheader("Results")
st.write(f"Total Usable Surface Area: {total_blank_area:.2f} mm²")
st.write(f"Total Cut Square Area: {total_cut_area:.2f} mm²")
st.write(f"Total Non-used Square Area: {unused_area:.2f} mm²")
st.write(f"Percentage of Usable Area: {usable_area_percentage:.2f}%")
# Generate sketch
fig, ax = plt.subplots(figsize=(8, 6))
for i, blank in enumerate(blank_data):
ax.add_patch(plt.Rectangle((0, i * (blank["length"] + 10)), blank["width"], blank["length"], edgecolor="blue", facecolor="none", label=f"Blank {i+1}" if i == 0 else ""))
for j, piece in enumerate(piece_data):
ax.add_patch(plt.Rectangle((j * (piece["width"] + 5), i * (blank["length"] + 10) + trimming_size), piece["width"], piece["length"], edgecolor="red", facecolor="pink", label=f"Piece {j+1}" if i == 0 else ""))
ax.set_xlim(0, max(blank["width"] for blank in blank_data) + 50)
ax.set_ylim(0, (len(blank_data) * max(blank["length"] for blank in blank_data)) + 100)
ax.set_title("Cutting Plan Sketch")
ax.legend(loc="upper right")
st.pyplot(fig)
# Save as PDF
pdf = FPDF()
pdf.add_page()
pdf.set_font("Arial", size=12)
pdf.cell(200, 10, txt="Cutting Plan Report", ln=True, align="C")
pdf.cell(200, 10, txt=f"Total Usable Surface Area: {total_blank_area:.2f} mm²", ln=True)
pdf.cell(200, 10, txt=f"Total Cut Square Area: {total_cut_area:.2f} mm²", ln=True)
pdf.cell(200, 10, txt=f"Total Non-used Square Area: {unused_area:.2f} mm²", ln=True)
pdf.cell(200, 10, txt=f"Percentage of Usable Area: {usable_area_percentage:.2f}%", ln=True)
pdf_output = io.BytesIO()
pdf.output(pdf_output)
st.download_button(
label="Download Cutting Plan as PDF",
data=pdf_output.getvalue(),
file_name="cutting_plan.pdf",
mime="application/pdf",
)
|