CAD-ASSIST / app.py
mughal-88's picture
Update app.py
e96c16f verified
import streamlit as st
import cadquery as cq
from datasets import load_dataset
import json
# Load dataset
dataset = load_dataset("FreedomIntelligence/CADBench")
# Helper to generate Cargo Crane CAD
def generate_cargo_crane(inputs):
# Parse inputs
boom_length = inputs.get("Boom Length (in mm)", 3000)
lifting_capacity = inputs.get("Lifting Capacity (in tons)", 10)
base_height = inputs.get("Base Height (in mm)", 500)
material_type = inputs.get("Material Type", "Steel")
# Create base
base = cq.Workplane("XY").box(200, 200, base_height)
# Create boom
boom = cq.Workplane("XY").box(50, boom_length, 50).translate((0, base_height, 0))
# Combine parts
crane = base.union(boom)
return crane
# Streamlit Interface
st.title("Quick CAD Model Generator")
case = st.radio("Select Case", ["DFM Analysis", "Predefined Template"])
if case == "Predefined Template":
st.subheader("Predefined Template Selection")
template_names = dataset["train"]["name"]
selected_template = st.selectbox("Select a Template", template_names)
# Retrieve criteria
if selected_template:
template_data = dataset["train"].filter(lambda x: x["name"] == selected_template).to_pandas()
criteria = template_data.iloc[0]["criteria"]
# Dynamic input collection
inputs = {}
for question in criteria.keys():
inputs[question] = st.text_input(f"{question}: ")
if st.button("Generate CAD Model"):
if selected_template == "Cargo Crane":
cad_model = generate_cargo_crane(inputs)
st.success("CAD Model Generated!")
cq.exporters.export(cad_model, "cargo_crane.step")
cq.exporters.export(cad_model, "cargo_crane.stl")
st.download_button("Download STEP File", open("cargo_crane.step", "rb").read(), "cargo_crane.step")
st.download_button("Download STL File", open("cargo_crane.stl", "rb").read(), "cargo_crane.stl")
if case == "DFM Analysis":
st.subheader("Case 1: DFM Analysis")
cad_file = st.file_uploader("Upload a CAD file (.stl, .step, .dwg)", type=["stl", "step", "dwg"])
if cad_file:
file_format = os.path.splitext(cad_file.name)[1][1:]
analysis_result = analyze_dfm(cad_file, file_format)
st.success(analysis_result)
elif case == "Predefined Template Selection":
st.subheader("Case 2: Predefined Template Selection")
template_names = dataset["name"]
selected_template = st.selectbox("Select a template", template_names)
if selected_template:
st.write(f"Selected Template: {selected_template}")
template_data = dataset.filter(lambda x: x["name"] == selected_template).to_pandas()
criteria = template_data.iloc[0]["criteria"] # Already a dict
responses = {}
for criterion, prompt in criteria.items():
prefilled_text = f"Enter {criterion} ({prompt}):"
response = st.text_input(prefilled_text, key=criterion)
if response:
responses[criterion] = response
if st.button("Generate CAD Model"):
try:
model = generate_cad_model(responses)
file_format = st.selectbox("Select file format for download", ["stl", "step", "dwg"])
file_path = export_cad(model, file_format)
st.success("CAD Model Generated Successfully!")
with open(file_path, "rb") as f:
st.download_button("Download CAD File", data=f.read(), file_name=f"model.{file_format}")
except Exception as e:
st.error(f"Error generating CAD model: {e}")