CAD-Simulator / app.py
SHAMIL SHAHBAZ AWAN
Update app.py
fdbde7f verified
Raw
History Blame Contribute Delete
2.47 kB
import streamlit as st
import numpy as np
import pyvista as pv
from stl import mesh
import tempfile
import os
import trimesh
# Page configuration
st.set_page_config(page_title="AR CAD Viewer", layout="wide")
# Title
st.title("Augmented Reality CAD Viewer")
st.write("Upload your CAD models, preview them, and convert them to AR-compatible formats.")
# File uploader for CAD files
uploaded_file = st.file_uploader("Upload a CAD file (.stl format)", type=["stl"])
if uploaded_file is not None:
# Save uploaded file to a temporary location
with tempfile.NamedTemporaryFile(delete=False, suffix=".stl") as temp_file:
temp_file.write(uploaded_file.read())
temp_filepath = temp_file.name
# Load the STL file using pyvista for interactive 3D rendering
st.subheader("3D Model Preview")
# Load the STL using pyvista
mesh_data = pv.read(temp_filepath)
# Create the plotter and add the mesh to it
plotter = pv.Plotter(off_screen=True)
plotter.add_mesh(mesh_data, color="cyan")
plotter.view_isometric()
# Show the plot in the Streamlit app
st.pydeck_chart(plotter.show())
# Convert to glTF for AR
st.subheader("Convert to AR Format")
st.write("Click below to convert the STL file into an AR-compatible `.glTF` format.")
if st.button("Convert to glTF"):
# Use Trimesh for conversion
trimesh_mesh = trimesh.load(temp_filepath)
gltf_filepath = temp_filepath.replace(".stl", ".gltf")
trimesh.exchange.gltf.export_gltf(trimesh_mesh, gltf_filepath)
# Display download link for glTF
with open(gltf_filepath, "rb") as gltf_file:
st.download_button(
label="Download glTF Model",
data=gltf_file,
file_name="model.gltf",
mime="model/gltf+json"
)
# Clean up temporary files
os.remove(gltf_filepath)
os.remove(temp_filepath)
# AR Hosting Info
st.subheader("Host in AR")
st.markdown(
"""
Upload your `.glTF` file to [GitHub Pages](https://pages.github.com/) or use a service like [Google Poly](https://poly.google.com/) (now integrated into other platforms).
For AR.js:
- Host the `.glTF` file on a web server.
- Create an AR marker or use markerless AR for viewing.
Example: `<a-scene><a-entity gltf-model="model.gltf"></a-entity></a-scene>`
"""
)