Viewer écrit en C++, utilisant Assimp, CGAL5, Qt5, pour optimiser la visualisation et le traitement de maillages surfaciques multi-couches provenant de dissections chirurgicales. Le code de ce répertoire génère plusieurs binaires : match, prop et view (le programme de test est utilisé seulement pour le développement des applications).
Ce programme crée un découpage de maillages en détectant les parties similaire entre plusieurs maillages. Le détection s'effectue en fonction d'un seuil sur la distance entre deux maillages.
Create a new mesh by matching parts of multiple similars meshes.
Usage: match [options] <threshold> <input-files>...
Options:
-c, --colorize Colorize geometrical objects by files.
-e <offset>, --epsilon <offest> Augment threshold to make transition regions.
-a, --export-all Export all meshes components
-h --help Show this screen
--version Show version
# En supposant que l'utilisateur se trouve dans surgery-viewer/build
./bin/match 1 ../data/decoupe/plan_02.obj ../data/decoupe/plan_03.obj
Le résultat de l’exécution du programme est l'ensemble de maillages suivant :
- M0_close.obj : decoupage de M0 contenant les parties proches de M1
- M0_distant.obj : découpage de M0 contenant les parties distantes de M2
- M1_distant.obj : découpage de M1 adapté à la géométrie de M0 et distant de M0
Si le programme est executé avec l'option '-a' ou '--export-all' des maillages en plus sont exportés
- M1_close.obj : découpage de M1 adapté à la géométrie de M0 et proche de M0
- M1_proj_close.obj : partie proche d'une projection de M1 sur M0
- M1_proj_distant.obj : partie distante d'une projection de M1 sur M0
voici d'autres exemples d'executions
# l'option -c applique un code couleur sur nos maillages (visualisable avec le programme view)
./bin/match -c 0.02 ../data/test/plan_1.ply ../data/decoupe/plan_2.ply
./bin/view M0_close.obj M0_distant.obj M1_distant.obj # permet de voir les maillages principaux
# l'option -e ajoute une zone de transition de 1 en plus du seuil de 1 sur les distances ce qui permettra de mieux adapter la géométrie de M2 sur M1 pour la reprojection
./bin/match -e 1 1 ../data/decoupe/plan_02.obj ../data/decoupe/plan_03.obj
./bin/view M0_close.obj M0_distant.obj M1_distant.obj # permet de voir les maillages principaux
# l'option -a exportera tout les maillages
./bin/match -a 1 ../data/decoupe/plan_02.obj ../data/decoupe/plan_03.obj
./bin/view M0_close.obj M0_distant.obj M1_close.obj M1_distant.obj M1_proj_close.obj M1_proj_distant.obj # permet de voir tout maillages exportés
Ce programme affiche les propriétés d'une maillage (nombre de sommets, arêtes, faces, coordonnées de textures, etc...).
List geometrical properties from mesh.
Usage: prop <input-file>
Options:
-h, --help Show this screen.
--version Show version.
Les propriétés sont notés sous la forme element:property_name
- v:point → information de position sur les sommets
- v:texcoord → information de coordonnée de texture sur les sommets
- f:connectivity → information de connectivité sur les faces
- e:removed → information d'arêtes enlevés
- h:connectivity → information de connectivité sur les demi-arêtes
# En supposant que l'utilisateur se trouve dans surgery-viewer/build
./bin/prop mon_maillage.ply
Ce programme ouvre un fenêtre de visualisation de maillages.
3D viewer for geometrical file formats (OFF, PLY, OBJ, ...).
Usage: view [options] <input-files>...
Options:
-c, --colorize Colorize geometrical objects by files.
-h, --help Show this screen.
--version Show version.
# En supposant que l'utilisateur se trouve dans surgery-viewer/build
./bin/view maillage1.obj maillage2.ply
# L'option -c applique un code couleur sur les maillages (M1:rouge, M2:vert, M3:bleu, ..., Mn:random)
./bin/view -c maillage1.obj maillage2.ply
ATTENTION : si un maillage faire référence à une image/texture, cette image/texture devra être placé dans le même dossier que le maillage lu sinon le programme ne pourra pas afficher les maillage
- L'utilisateur peut cacher/afficher
- L'aide du programme avec la touche H
- Les maillages d'entrés
- de 0 à 5 en utilisant les touches respectives : W, X, C, V, B, N.
- de 6 à 11 en utilisant les touches respectives : Q, S, D, F, G, H.
- Les axes 3D avec la touche A
- Les arêtes des maillages avec la touche E
- Les points des maillages avec la touche P
- L'utilisateur peut tourner autour du maillage avec un clic gauche et un déplacement de la souris
- L'utilisateur peut déplacer la caméra avec un clic droit et un déplacement de la souris
Le répertoire est composé des éléments suivants :
- cmake : contient les modules CMake utilisés pour la construction des binaires
- data : contient les maillages qui servent de données d'entrée à nos programmes
- doc : contient la documentation rédigée durant le stage
- src : contient les sources des programmes
- instance : contient les déclaration des types utilisés dans nos programmes (permet de simplifier le code en éviter de ré-instancier les templates dans chacun de nos programmes)
- mesh : contient les fonctionnalités développer pour les maillages
- pch : contient les headers à pré-compiler avec cmake (cela permet d’éviter de recompiler les headers et fait gagner un temps non négligeable sur la compilation durant le développement des programmes)
- shader : contient les shaders du viewer (mesh/viewer.cpp). Le viewer utilise un fragment shader différent selon le mode d'affichage.
- match.cpp, prop.cpp, test.cpp, view.cpp, *.cpp : ce sont les sources contenant les fonctions main qui généreront nos programmes (le cmake considèrent que tout les fichiers *.cpp qui sont directement dans src/ sont des programmes à générer).
Les templates C++ sont fortement utilisés par la bibliothèque CGAL. Cela lui permet d'être flexible et générique cependant la durée de compilations s'en retrouve fortement affectée.
Pour accélérer la durée de compilation et donc le développement ce projet applique des optimisations de compilations utilisable seulement avec une version de CMake capable de pré-compiler les fichiers d'en-têtes C++.
- CMake 3.16+
Les traitements géométriques nécessites les bibliothèques suivantes
- CGAL
- Boost
- GMP
- MPFR
- Eigen
Le viewer utilise quant à lui Qt5 pour l'affichage fenêtré et Assimp pour l'importation de maillages
- Qt5
- Assimp
La majorité des dépendances sont installés durant la configuration du projet avec CMake cependant CGAL et Qt5 doivent être installer manuellement par l'utilisateur.
# Installation des bibliothèques et programmes de build
sudo apt-get install libcgal-qt5-dev build-essential cmake python3-pip # avec git et le compilateur de votre choix (gcc, clang, ...)
# Installation de conan un gestionnaire de paquets c++
sudo pip3 install conan
# 1. clonez le repertoire surgery-viewer
git clone https://github.com/todorico/surgery-viewer.git
# 2. creez puis déplacez vous dans le repertoire build
mkdir surgery-viewer/build && cd surgery-viewer/build
# 3. compilez le projet
cmake .. -DCMAKE_BUILD_TYPE=Release && make
Installez les version 64 bit des bibliothèques et pour Qt installer la version compatible avec votre compilateur (MinGW ici)
- Installeur CGAL-5.0.2 sur Github : https://github.com/CGAL/cgal/releases/download/releases%2FCGAL-5.0.2/CGAL-5.0.2-Setup.exe
- Installeur Qt5-5.15 sur qt.io : https://www.qt.io/download-open-source
Pour éviter d'installer les programmes suivants sur Windows je recommande l'utilisation d'un gestionnaire de package (Chocolatey). Autrement les programmes devrons être installés manuellement.
- Ouvrir PowerShell.exe en tant qu'administrateur
- Exécutez la commande suivante pour installer Chocolatey
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
- Fermez puis ré-ouvrez le terminal en tant qu'administrateur
choco install -y git
choco install -y cmake --installargs 'ADD_CMAKE_TO_PATH=System'
choco install -y mingw
choco install -y make
choco install -y conan
Tous les programmes nécessaires sont désormais installés.
Ouvrez PowerShell (en tant qu'utilisateur) et déplacez vous dans le dossier ou vous voulez installer surgery-viewer
# 1. clonez le repertoire surgery-viewer
git clone https://github.com/todorico/surgery-viewer.git
# 2. creez puis déplacez vous dans le repertoire build
mkdir surgery-viewer/build
cd surgery-viewer/build
# ATTENTION! : Sur windows cmake à du mal à reperer ou les bibliothèques (CGAL et Qt5) se trouvent.
# Ont peux donc spécifier des chemin manuellement comme avec la commande ci-dessous pour résoudre ce problème.
# Pour Qt5 il faut faire attention a utiliser la bibliothèque adapté au compilateur utilisé (MinGW dans notre cas).
# 3. compilez le projet
cmake .. -G"MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release -DCGAL_DIR="C:/dev/CGAL-5.0.2" -DQt5_DIR="C:/dev/Qt/5.15.0/mingw81_64/lib/cmake/Qt5"
make
Une fois les binaires générés les dll associés à Qt doivent être déployés dans le dossier des binaires. Pour faire cela de manière automatique utilisez le programme windeployqt.exe fournis avec la version de Qt5 utilisée. En reprenant notre version utilisée le programme devrait avoir le chemin suivant "C:/dev/Qt/5.15.0/mingw81_64/bin/windeployqt.exe".
# windeployqt.exe analyse les binaires et copie dans le même dossier les Dlls nécessaires. le programme prend un binaire en paramètre comme ceci :
windeployqt.exe bin/match.exe