2.2 KiB
2.2 KiB
GEMINI Project Context
Questo file serve a dare contesto all'AI (Antigravity/Gemini) sulla struttura e logica del progetto.
Project Overview
Nome: Print Calculator Scopo: Calcolare costi e tempi di stampa 3D da file STL. Stack:
- Backend: Python (FastAPI), libreria
trimeshper analisi geometrica. - Frontend: Angular 19 (TypeScript).
Architecture
Backend (/backend)
main.py: Entrypoint dell'applicazione FastAPI.- Definisce l'API
POST /calculate/stl. - Gestisce l'upload del file, invoca lo slicer e restituisce il preventivo.
- Configura CORS per permettere chiamate dal frontend.
- Definisce l'API
slicer.py: Wrappa l'eseguibile di OrcaSlicer per effettuare lo slicing reale del modello.- Gestisce i profili di stampa (Macchina, Processo, Filamento).
- Crea configurazioni on-the-fly per supportare mesh di grandi dimensioni.
calculator.py: Analizza il G-Code generato.GCodeParser: Estrae tempo di stampa e materiale usato dai metadati del G-Code.QuoteCalculator: Applica i costi (orari, energia, materiale) per generare il prezzo finale.
Frontend (/frontend)
- Applicazione Angular standard.
- Usa Angular Material.
- Service per upload STL e visualizzazione preventivo.
Key Concepts
- Real Slicing: Il backend esegue un vero slicing usando OrcaSlicer in modalità headless. Questo garantisce stime di tempo e materiale estremamente precise, identiche a quelle che si otterrebbero preparando il file per la stampa.
- G-Code Parsing: Invece di stimare geometricamente, l'applicazione legge direttamene i commenti generati dallo slicer nel G-Code (es.
estimated printing time,filament used).
Development Notes
- Per eseguire il backend serve
uvicorn. - Il frontend richiede
npm installal primo avvio. - Le configurazioni di stampa (layer height, wall thickness, infill) sono attualmente hardcoded o con valori di default nel backend, ma potrebbero essere esposte come parametri API in futuro.
AI Agent Rules
- No Inline Code: Tutti i componenti Angular DEVONO usare file separati per HTML (
templateUrl) e SCSS (styleUrl). È vietato usaretemplateostylesinline nel decoratore@Component.