Skip to content

Visualisateur optimisé pour la visualisation de maillages provenant de dissections chirurgicales (Ecrit en C++ et basé sur CGAL5 et Qt5).

Notifications You must be signed in to change notification settings

todorico/surgery-viewer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

44 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Surgery Viewer

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).

Table des matières

Programmes

Match

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

Exécution

# En supposant que l'utilisateur se trouve dans surgery-viewer/build
./bin/match 1 ../data/decoupe/plan_02.obj ../data/decoupe/plan_03.obj

Résultat

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

Examples

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

Prop

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

Exemples

  • 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

Exécution

# En supposant que l'utilisateur se trouve dans surgery-viewer/build
./bin/prop mon_maillage.ply

View

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.

Exécution

# 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

Fonctionnalités

  • 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

Développement

Structure du répertoire

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).

Dépendances

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.

Linux (debian)

Installation des dépendances

# 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

Build

# 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

Windows

Installation des dépendances

Installez les version 64 bit des bibliothèques et pour Qt installer la version compatible avec votre compilateur (MinGW ici)

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.

  1. Ouvrir PowerShell.exe en tant qu'administrateur
  2. 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'))
  1. 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.

Build (Windows)

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 

About

Visualisateur optimisé pour la visualisation de maillages provenant de dissections chirurgicales (Ecrit en C++ et basé sur CGAL5 et Qt5).

Resources

Stars

Watchers

Forks

Packages

No packages published