diff --git a/Dockerfile.builder b/Dockerfile.builder new file mode 100644 index 0000000..fd0451f --- /dev/null +++ b/Dockerfile.builder @@ -0,0 +1,66 @@ +FROM python:3.12-slim + +WORKDIR /app + +RUN apt update && apt install -y --no-install-suggests --no-install-recommends \ + libjpeg-dev \ + zlib1g-dev \ + build-essential \ + ca-certificates \ + curl \ + gnupg \ + cmake \ + ninja-build \ + git + +RUN apt install -y libjpeg62 libpng-dev libtiff-dev libz-dev libproj-dev liblzma-dev libjbig-dev libzstd-dev libgeotiff-dev libwebp-dev liblzma-dev nlohmann-json3-dev + +ENV GDAL_VERSION 3.12.2 + +ADD http://download.osgeo.org/gdal/${GDAL_VERSION}/gdal-${GDAL_VERSION}.tar.gz /usr/local/src/ + +RUN cd /usr/local/src && tar -xvf gdal-${GDAL_VERSION}.tar.gz && cd gdal-${GDAL_VERSION} \ + && cmake -S . -B build \ + -G Ninja \ + -DCMAKE_INSTALL_PREFIX=/usr/local \ + -DBUILD_SHARED_LIBS=ON \ + && cmake --build build --config Release \ + && cmake --install build \ + && ldconfig + #&& rm -Rf /usr/local/src/* + +RUN git clone https://github.com/LASzip/LASzip.git && cd LASzip \ + && cmake -S . -B build \ + -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr/local \ + -DBUILD_SHARED_LIBS=ON \ + && cmake --build build \ + && cmake --install build --config Release \ + && ldconfig + +RUN git clone https://github.com/PDAL/PDAL.git && cd PDAL \ + && cmake -S . -B build \ + -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr/local \ + -DCMAKE_PREFIX_PATH=/usr/local \ + -DBUILD_PLUGIN_LASZIP=ON \ + -DGDAL_DIR=/usr/local/lib/cmake/gdal \ + && cmake --build build \ + && cmake --install build --config Release \ + && ldconfig + +RUN git clone https://github.com/connormanning/entwine.git && cd entwine \ + && cmake -S . -B build \ + -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr/local \ + -DCMAKE_PREFIX_PATH=/usr/local \ + && cmake --build build \ + && cmake --install build --config Release \ + && ldconfig + +RUN apt remove -y libgeotiff-dev libpng-dev libtiff-dev libjpeg-dev libz-dev libproj-dev liblzma-dev libjbig-dev libzstd-dev libgeotiff-dev libwebp-dev liblzma-dev nlohmann-json3-dev ninja-build cmake build-essential zlib1g-dev \ + && apt autoremove -y \ + && rm -rf /usr/local/src/* /var/lib/apt/lists/* /tmp/* /var/tmp/* \ No newline at end of file diff --git a/agents.md b/agents.md new file mode 100644 index 0000000..2374931 --- /dev/null +++ b/agents.md @@ -0,0 +1,145 @@ +# đŸ€– Configuration des Agents Cline - Analyse & DĂ©bogage + +## 📋 Contexte du Projet +**Nom du projet :** PointCloud Classifier +**Objectif :** DĂ©velopper une application web pour l'upload, la manipulation, le traitement et l'affichage de nuages de points 3D. +**Utilisation principale :** Visualisation technique, gestion de donnĂ©es gĂ©ospatiales, administration. + +## 📋 Vue d'ensemble +Ce fichier dĂ©finit les agents IA utilisĂ©s pour analyser, comprendre, dĂ©boguer et faire Ă©voluer le repository de l'application **point-cloud-classifier**. +- **Objectif principal :** Identifier les bugs, optimiser le code et comprendre l'architecture. +- **Environnement :** VS Code avec Cline. +- **Langage principal :** Python, JavaScript, TypeScript +- **Framework :** FastAPI, HTMX, Django, Svelte, AlpineJS, DaisyUi, jinja2 + +--- + +### Backend (Serveur & Traitement) +- **Langage :** Python 3.12+ +- **Framework Web :** FastAPI (API REST, Serveur) +- **Traitement Nuages :** PDAL (Point Data Abstraction Library) pour le filtrage/rééchantillonnage. +- **Stockage Nuages :** Entwine (Format de stockage optimisĂ© pour les nuages de points): format EPT. +- **Base de DonnĂ©es :** SQLite avec Spatialite pour les mĂ©tadonnĂ©es. +- **SĂ©curitĂ© :** Gestion sĂ©curisĂ©e des uploads (taille, type MIME, virus scan). + +### Frontend (Interface Utilisateur) +- **Templates :** Jinja2 (IntĂ©gration avec FastAPI). +- **InteractivitĂ© :** HTMX (Chargement dynamique sans rechargement complet). +- **Composants UI :** DaisyUI (ThĂšmes Tailwind CSS). +- **Logique Client :** AlpineJS (Gestion d'Ă©tat lĂ©gĂšre). +- **Visualisation :** Potree Viewer (BibliothĂšque WebGL pour l'affichage 3D). + +--- + +## đŸ‘„ DĂ©finition des Agents + +### 1. Agent: Architecte SystĂšme +- **RĂŽle :** Analyseur de structure et de dĂ©pendances. +- **Description :** Il examine le code global, les fichiers de configuration et les imports pour comprendre comment les modules interagissent. +- **Objectif :** Produire une carte mentale de l'architecture et identifier les points de rupture potentiels. +- **Outils :** + - Lecture de fichiers (`tree`, `ls`, `find`) + - Analyse de dĂ©pendances (`uv pip list`, `npm list`) + - Recherche de patterns de code +- **Contraintes :** + - Ne pas modifier le code sans validation. + - Identifier les fichiers critiques avant toute suggestion. +- **EntrĂ©es attendues :** Structure du repository, logs d'erreur. +- **Sorties attendues :** RĂ©sumĂ© de l'architecture, liste des fichiers suspects. + +### 2. Agent: DĂ©veloppeur de Debugging +- **RĂŽle :** Expert en rĂ©solution de problĂšmes et d'erreurs. +- **Description :** Il analyse les logs, les erreurs de compilation et les comportements inattendus pour trouver la cause racine. +- **Objectif :** Proposer des corrections de code prĂ©cises et tester les hypothĂšses. +- **Outils :** + - Lecture de logs (`tail -f`, `grep`) + - ExĂ©cution de commandes de test + - Modification de code (avec validation) +- **Contraintes :** + - Toujours expliquer la cause du bug avant de proposer une solution. + - Ne jamais supprimer des lignes de code sans justification. +- **EntrĂ©es attendues :** Erreurs, logs, messages d'exception. +- **Sorties attendues :** Code corrigĂ©, explication du bug, tests de validation. + +### 3. Agent: Backend Python & Traitement +- **RĂŽle :** DĂ©veloppeur API et Pipeline de donnĂ©es. +- **ResponsabilitĂ©s :** + - CrĂ©er les endpoints FastAPI (Upload, Traitement, RĂ©cupĂ©ration). + - IntĂ©grer PDAL pour les traitements (filtrage, densification). + - GĂ©rer le stockage Entwine. + - GĂ©rer les mĂ©tadonnĂ©es dans la DB. +- **Contraintes :** + - Utiliser des types de donnĂ©es Python stricts (Pydantic). + - GĂ©rer les erreurs de traitement PDAL (ex: fichiers corrompus). + - Optimiser la mĂ©moire pour les gros fichiers. + +### 4. Agent: Frontend UI/UX +- **RĂŽle :** DĂ©veloppeur Interface et Visualisation. +- **ResponsabilitĂ©s :** + - CrĂ©er les templates Jinja2 avec DaisyUI. + - ImplĂ©menter l'intĂ©gration Potree Viewer. + - GĂ©rer les interactions HTMX (formulaires, notifications). + - Utiliser AlpineJS pour la gestion des States Management, des menus et modales. +- **Contraintes :** + - Le code doit ĂȘtre responsive. + - Utiliser les composants DaisyUI existants (boutons, cartes, tableaux). + - S'assurer que Potree est chargĂ© correctement. + +### 5. Agent: IntĂ©gration & QualitĂ© +- **RĂŽle :** VĂ©rificateur de compatibilitĂ©. +- **ResponsabilitĂ©s :** + - VĂ©rifier que les templates Jinja2 sont bien rendus par FastAPI. + - S'assurer que les assets (JS/CSS) sont bien servis. + - Valider les permissions de fichiers. +- **Contraintes :** + - Ne jamais modifier le code Potree sans vĂ©rifier la compatibilitĂ©. + - Respecter les conventions de nommage FastAPI. + +### 6. Agent: VĂ©rificateur de QualitĂ© +- **RĂŽle :** Revueur de code et garant de la sĂ©curitĂ©. +- **Description :** Il vĂ©rifie que les modifications respectent les standards de l'Ă©quipe et ne crĂ©ent pas de nouvelles vulnĂ©rabilitĂ©s. +- **Objectif :** S'assurer que le code est propre, sĂ©curisĂ© et maintenable. +- **Outils :** + - Linters (`flake8`, `eslint`, `prettier`) + - Analyseurs de sĂ©curitĂ© (`bandit`, `snyk`) + - Tests unitaires +- **Contraintes :** + - Signaler toute rĂ©gression potentielle. + - SuggĂ©rer des amĂ©liorations de performance. +- **EntrĂ©es attendues :** Code modifiĂ©, rĂ©sultats de tests. +- **Sorties attendues :** Rapport de qualitĂ©, suggestions d'amĂ©lioration. + +--- + +## 🔄 Flux de travail (Workflow) + +1. **Analyse initiale :** L'Agent Architecte scanne le repository et identifie les fichiers clĂ©s. +2. **DĂ©tection du problĂšme :** L'Agent Debugging analyse les erreurs et propose des hypothĂšses. +3. **Isolation :** L'agent dĂ©termine si le problĂšme vient du Backend (Python/PDAL) ou du Frontend (HTMX/Potree). +4. **Correction :** L'Agent Debugging modifie le code en proposant une solution de code respectant la stack. +5. **Validation :** L'Agent vĂ©rifie la syntaxe et les imports. +6. **Rapport :** Un rĂ©sumĂ© des actions est gĂ©nĂ©rĂ© pour l'utilisateur. + +--- + +## 🚹 RĂšgles de SĂ©curitĂ© & Bonnes Pratiques + +1. **Uploads :** + - Ne jamais exĂ©cuter le code uploadĂ© directement. + - Limiter la taille des fichiers uploadĂ©s (ex: max 10GB par dĂ©faut). + - VĂ©rifier l'extension des fichiers (`.las`, `.laz`, `.ply`, `.pcd`). + +2. **Potree :** + - Utiliser la version stable de Potree. + - Ne pas exposer les clĂ©s API de visualisation. + +3. **Code :** + - Utiliser `async/await` pour FastAPI. + - Utiliser `@app.get`, `@app.post` pour les routes. + - Utiliser `x-data` pour AlpineJS. + - Utiliser `hx-get`, `hx-post` pour HTMX. + +4. **Fichiers :** + - Ne pas modifier les fichiers systĂšme (`/etc`, `/usr`). + - Ne pas exĂ©cuter de commandes shell dangereuses sans confirmation. + diff --git a/architecture.md b/architecture.md new file mode 100644 index 0000000..6aa8ed7 --- /dev/null +++ b/architecture.md @@ -0,0 +1,321 @@ +# đŸ—ïž Architecture PointCloud Viewer - Diagramme Mermaid + +## Vue d'ensemble de l'architecture + +```mermaid +flowchart TB + subgraph "Infrastructure Docker" + subgraph "Frontend Service:8091" + FE[FastAPI Frontend] + FE -- HTMX --> UI[Interface UI] + UI -- AlpineJS --> FE + end + + subgraph "Backend Service:8000" + BE[FastAPI Backend] + BE -- API --> FE + end + + subgraph "External Services" + POT[Potree Viewer:8090] + PDAL[PDAL Tool] + ENT[Entwine Tool] + end + end + + subgraph "Data Storage" + UPLOADS[./backend/data/uploads/] + EPT_DIR[./backend/data/ept/] + CONFIG[./frontend/config/] + end + + subgraph "Templates & Static" + TEMPLATES[./frontend/templates/] + COMPONENTS[./frontend/components/] + STATIC[./backend/static/potree/] + end +``` + +## Flux principal d'upload et conversion + +```mermaid +sequenceDiagram + participant User as Utilisateur + participant FE as Frontend (8091) + participant BE as Backend (8000) + participant ENT as Entwine + participant FS as SystĂšme de Fichiers + + User->>FE: 1. TĂ©lĂ©charge fichier LAS/LAZ/PLY + FE->>FE: 2. VĂ©rifie format supportĂ© + FE->>BE: 3. POST /upload avec fichier + BE->>BE: 4. GĂ©nĂšre UUID (pc_id) + BE->>FS: 5. Écrit fichier dans uploads/ + BE->>ENT: 6. LANCE entwine build + ENT->>FS: 7. Convertit vers format EPT + ENT->>FS: 8. CrĂ©e dossier ept/{pc_id}/ + ENT-->>BE: 9. Retourne rĂ©sultat + BE->>BE: 10. Sauvegarde manifest.json + BE-->>FE: 11. Retourne JSON avec pc_id + FE->>FE: 12. Affiche rĂ©sultat HTMX + FE->>POT: 13. GĂ©nĂšre page viewer + FE-->>User: 14. Affiche visualisation Potree +``` + +## Flux de visualisation + +```mermaid +flowchart LR + subgraph Frontend + A[Page /viewer/list] --> B[HTMX Fetch /viewer/list] + B --> C[cloud_list.html] + end + + subgraph Backend + D[API /viewer/list] --> E[Lecture EPT_DIR] + E --> F[manifest.json] + F --> G[Statistiques] + end + + C -->|Affichage| H[Tableau Nuages] + + H -->|Click| I[Page /viewer/{pc_id}] + I -->|HTMX| J[viewer.html partial] + J -->|Embed| K[Potree Viewer] + + K -->|Chargement| L[/ept_data/{pc_id}/ept.json] + L --> M[Visualisation 3D] +``` + +## Flux de crop (rĂ©duction du nuage) + +```mermaid +sequenceDiagram + participant User as Utilisateur + participant FE as Frontend + participant BE as Backend + participant PDAL as PDAL + participant FS as SystĂšme Fichiers + + User->>FE: 1. SĂ©lectionne nuage + box 3D + FE->>BE: 2. POST /admin/crop/{pc_id} avec box + BE->>PDAL: 3. LANCE pdal filter + PDAL->>FS: 4. Lit fichier source LAS + PDAL->>FS: 5. Applique box de filtrage + PDAL->>FS: 6. Écrit fichier LAS cropped + PDAL-->>BE: 7. Retourne fichier cropped + BE->>FS: 8. Lance entwine sur fichier cropped + ENT->>FS: 9. Convertit vers EPT + BE->>FS: 10. Sauvegarde nouveau nuage + BE-->>FE: 11. Retourne nouveau pc_id + FE->>FE: 12. Affiche nouveau nuage +``` + +## Architecture des routes + +```mermaid +mindmap + root((Architecture)) + Frontend + /upload + GET / - Redirection + GET /upload - Page upload + POST /upload - Upload fichier + GET /health-check - VĂ©rification + /viewer + GET /viewer/list - Liste nuages + GET /viewer/{pc_id} - Visualisation + /admin + GET /admin/backend-config + POST /admin/backend-config + GET /admin/list + GET /admin/debug/{pc_id} + DELETE /admin/delete/{pc_id} + POST /admin/crop/{pc_id} + Backend + /upload + POST /upload - Conversion entwine + /viewer + GET /viewer/list - Liste EPT + GET /viewer/{pc_id} - Page viewer + GET /viewer-embed/{pc_id} - Embed + /admin + GET /debug/{pc_id} - Debug info + DELETE /delete/{pc_id} - Suppression + POST /admin/crop/{pc_id} - Crop PDAL + /health - Health check + / - Page HTML + /ept_data - Serveur statique + /static - Assets +``` + +## Structure des dossiers EPT + +```mermaid +graph TD + EPT[EPT Directory] + EPT --> MANIFEST[manifest.json] + EPT --> EPT_JSON[ept.json] + EPT --> EPT_BUILD[ept-build.json] + EPT --> EPT_DATA[ept-data/] + EPT_DATA --> TUILES[.las.tileset] + EPT_DATA --> META[meta.json] + EPT --> EPT_HIERARCHY[ept-hierarchy/] + EPT_HIERARCHY --> NOEUDS[.node] + EPT --> EPT_SOURCES[ept-sources/] + EPT_SOURCES --> SOURCES[.las] +``` + +## Diagramme complet des interactions + +```mermaid +flowchart TB + subgraph "Utilisateur" + U[Utilisateur] + end + + subgraph "Frontend Service [8091]" + direction TB + FE[FastAPI
Jinja2 + HTMX + AlpineJS] + UI[Interface
DaisyUI + Tailwind] + API_CLIENT[api_client.py
httpx Async] + CONFIG[config.py
BACKEND_URL + POTREE_URL] + + U -->|Navigate| UI + UI -->|HTMX| FE + FE -->|Templates| UI + FE -->|Routes| API_CLIENT + API_CLIENT -->|HTTP| BE + FE -->|Config| CONFIG + end + + subgraph "Backend Service [8000]" + direction TB + BE[FastAPI
PDAL + Entwine] + ROUTES[Routes
upload.py
viewer.py
admin.py] + SERVICES[Services
converter.py
manifest.py
html_generator.py] + UTILS[Utils
disk.py] + STATIC[Static Files
Potree Viewer] + + BE -->|Include| ROUTES + ROUTES -->|Call| SERVICES + SERVICES -->|Read| UTILS + BE -->|Serve| STATIC + BE -->|Mount| EPT_DIR[/ept_data/] + end + + subgraph "Outils Externes" + ENT[Entwine
build EPT] + PDAL[PDAL
filter/crop LAS] + end + + subgraph "Stockage" + UPLOADS[uploads/
fichiers LAS/LAZ] + EPT[ept/
nuages convertis] + CONFIG_FILE[config/
backend.json] + end + + subgraph "External" + POT[Potree Viewer
WebGL 3D] + end + + %% Flux Upload + UI -->|1. Choix fichier| U + U -->|2. POST /upload| API_CLIENT + API_CLIENT -->|3. POST /upload| BE + BE -->|4. Enregistrer| UPLOADS + BE -->|5. Lancer| ENT + ENT -->|6. Convertir| EPT + BE -->|7. Sauvegarder| SERVICES + SERVICES -->|8. manifest.json| EPT + + %% Flux Liste + UI -->|9. /viewer/list| API_CLIENT + API_CLIENT -->|10. GET /viewer/list| BE + BE -->|11. Lire| EPT + BE -->|12. Retourne| API_CLIENT + API_CLIENT -->|13. Affiche| UI + + %% Flux Visualisation + UI -->|14. /viewer/{pc_id}| FE + FE -->|15. Embed| POT + POT -->|16. Charger| EPT_DIR + EPT_DIR -->|17. ept.json| POT + POT -->|18. Visualiser| U + + %% Flux Crop + UI -->|19. /admin/crop| API_CLIENT + API_CLIENT -->|20. POST /admin/crop| BE + BE -->|21. Lancer| PDAL + PDAL -->|22. Filtre| UPLOADS + BE -->|23. Convertir| ENT + ENT -->|24. Nouveau EPT| EPT + BE -->|25. Retourne| API_CLIENT + API_CLIENT -->|26. Affiche| UI + + %% Styles + classDef user fill:#e1f5ff,stroke:#1890ff,stroke-width:2px + classDef frontend fill:#fff7e6,stroke:#fa8c16,stroke-width:2px + classDef backend fill:#f6ffed,stroke:#52c41a,stroke-width:2px + classDef tools fill:#f0f5ff,stroke:#2f54eb,stroke-width:2px + classDef storage fill:#fff0f6,stroke:#eb2f96,stroke-width:2px + classDef external fill:#f9f0ff,stroke:#722ed1,stroke-width:2px + + class U user + class FE,UI,API_CLIENT,CONFIG frontend + class BE,ROUTES,SERVICES,UTILS,STATIC backend + class ENT,PDAL tools + class UPLOADS,EPT,CONFIG_FILE storage + class POT external +``` + +## FonctionnalitĂ©s de l'application + +### 1. Upload et Conversion +- TĂ©lĂ©chargement de fichiers LAS, LAZ, PLY, XYZ, PTS +- Conversion automatique vers format EPT (Entwine Point Tile) +- GĂ©nĂ©ration de manifeste pour chaque nuage +- Suivi du temps de conversion + +### 2. Visualisation 3D +- IntĂ©gration Potree Viewer (WebGL) +- Chargement direct des tuiles EPT +- Configuration de la taille de point et forme +- Support des modes embed et standalone + +### 3. Administration +- Liste de tous les nuages de points +- Informations dĂ©taillĂ©es (taille, nombre de fichiers, date) +- Debug panel pour inspection +- Suppression de nuages + +### 4. Traitement PDAL +- Crop 3D des nuages de points +- DĂ©finition de box de sĂ©lection +- Conversion du rĂ©sultat en EPT + +### 5. Configuration Dynamique +- URL du backend configurable +- URL de Potree configurable +- Sauvegarde dans fichier JSON +- Variables d'environnement + +### 6. Monitoring +- Endpoint /health pour vĂ©rification +- Indicateur de disponibilitĂ© Entwine +- Affichage de l'espace disque libre +- Version de PDAL + +### 7. Relevant Files and Code: + +- __backend/main.py__: Point d'entrĂ©e backend, mounting de /ept_data, /static, /potree +- __backend/routes/upload.py__: POST /upload - conversion entwine avec UUID +- __backend/routes/viewer.py__: GET /viewer/list, /viewer/{pc_id}, /viewer-embed/{pc_id} +- __backend/services/converter.py__: run_entwine() - commande entwine build +- __backend/services/manifest.py__: save_manifest(), read_manifest() +- __backend/services/html_generator.py__: generate_viewer_html() - template Potree +- __frontend/api_client.py__: check_health(), upload_file(), get_debug(), delete_pointcloud(), crop_pointcloud() +- __frontend/routes/upload.py__: POST /upload → api_client.upload_file() +- __frontend/routes/crop.py__: POST /admin/crop/{pc_id} → api_client.crop_pointcloud() +- __frontend/templates/index.html__: Interface principale avec HTMX tabs (Upload, Admin) +- __docker-compose.yml__: 2 services, volumes mount, environment variables diff --git a/architecture_readme.md b/architecture_readme.md new file mode 100644 index 0000000..610ce22 --- /dev/null +++ b/architecture_readme.md @@ -0,0 +1,91 @@ +# 📄 Structure du Projet et Diagrammes Mermaid + +Fichier `architecture.md` contenant une description complĂšte de l'application avec **6 diagrammes Mermaid** : + +## 📁 Structure du Dossier + +``` +Point-Cloud-Classifier-HTMX/ +├── agents.md +├── docker-compose.yml # Configuration Docker (2 services) +├── Dockerfile.builder +├── Dockerfile.entwine # Backend avec Entwine +├── Dockerfile.frontend # Frontend avec HTMX +├── pyproject.toml +├── requirements.txt +├── Roo.md # Contexte du projet +├── architecture.md # 📄 NOUVEAU - Documentation complĂšte +├── backend/ +│ ├── __init__.py +│ ├── config.py # Configuration backend +│ ├── main.py # FastAPI backend +│ ├── data/ +│ │ ├── uploads/ # Fichiers LAS bruts +│ │ └── ept/ # Nuages convertis +│ ├── routes/ +│ │ ├── upload.py # Routes upload +│ │ ├── viewer.py # Routes visualisation +│ │ └── admin.py # Routes admin +│ ├── services/ +│ │ ├── converter.py # Conversion Entwine +│ │ ├── manifest.py # Gestion manifest.json +│ │ └── html_generator.py # GĂ©nĂ©ration HTML Potree +│ └── static/ +│ └── potree/ # Assets Potree +└── frontend/ + ├── api_client.py # Client HTTP async + ├── config.py # Configuration frontend + ├── main.py # FastAPI frontend + ├── components/ # Composants HTMX + ├── routes/ + │ ├── upload.py + │ ├── viewer.py + │ ├── admin.py + │ └── crop.py + ├── static/ + │ └── potree/ + └── templates/ + ├── index.html + └── partials/ + ├── cloud_list.html + ├── viewer.html + ├── crop.html + ├── backend_config.html + ├── debug_panel.html + ├── health_status.html + └── upload_result.html +``` + +## 🔄 Diagrammes Mermaid + +### 1. Vue d'ensemble de l'architecture +Architecture globale avec Frontend (8091), Backend (8000), Outils externes (Potree, PDAL, Entwine) et Stockage. + +### 2. Flux principal d'upload et conversion +SequenceDiagram montrant les 14 Ă©tapes : Upload → VĂ©rification → Conversion Entwine → Manifeste → Visualisation. + +### 3. Flux de visualisation +Flowchart LR de la liste des nuages → sĂ©lection → embed Potree → chargement EPT → visualisation 3D. + +### 4. Flux de crop (rĂ©duction du nuage) +SequenceDiagram du traitement PDAL : SĂ©lection box 3D → Filtre LAS → Conversion EPT → Nouveau nuage. + +### 5. Architecture des routes +Mindmap dĂ©taillant toutes les routes Frontend et Backend avec leurs endpoints. + +### 6. Diagramme complet des interactions +Flowchart TB complet avec 26 Ă©tapes numĂ©rotĂ©es, classes colorĂ©es par type (utilisateur, frontend, backend, outils, stockage, externe). + +### 7. Structure des dossiers EPT +Graph TD montrant la structure interne d'un dossier EPT (manifest, ept.json, tuiles, hiĂ©rarchie, sources). + +## 🎯 FonctionnalitĂ©s DocumentĂ©es + +1. **Upload et Conversion** - LAS/LAZ/PLY → EPT +2. **Visualisation 3D** - Potree Viewer WebGL +3. **Administration** - Liste, Debug, Suppression +4. **Traitement PDAL** - Crop 3D +5. **Configuration Dynamique** - URLs configurables +6. **Monitoring** - Health check, espace disque + +Le fichier `architecture.md` est prĂȘt Ă  ĂȘtre utilisĂ© comme contexte pour un agent AI et pour la revue des fonctionnalitĂ©s. \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..55aca16 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,30 @@ +services: + + backend_entwine: + build: + context: . + dockerfile: Dockerfile.entwine + container_name: pointcloud-backend-htmx + ports: + - "8090:8000" + volumes: + - ./backend:/app/backend + environment: + - HOST_DATA_DIR=/app/backend/data + restart: unless-stopped + + frontend_htmx: + build: + context: . + dockerfile: Dockerfile.frontend + container_name: pointcloud-frontend-htmx + ports: + - "8091:8080" + volumes: + - ./frontend:/app/frontend + environment: + - MAX_UPLOAD_SIZE_GB=10 + - BACKEND_URL=http://backend_entwine:8000 + depends_on: + - backend_entwine + restart: unless-stopped