✨ feat(data_processing.py): add raw_data parameter to get_advanced_data function to improve flexibility The L variable was not being computed in the get_advanced_data function, which is necessary for the calculation of the tortuosity. The raw_data parameter was added to the get_advanced_data function to improve flexibility and allow for more advanced calculations to be performed. 🐛 fix(input.py): add filename attribute to ScannedObject class The filename attribute was not being set in the ScannedObject class, which is necessary for generating the output file headers. ✨ feat(output.py): add function to generate headers for output file The generate_headers function was added to generate the headers for the output file. The headers include the filename, date, version, discretisation method, and whether the data was verticalised. 🚀 chore(MainWindow.py): enable process_advanced_data function 🎨 style(MainWindow.ui, UI_MainWindow.py): adjust GUI layout and label text for better user experience The GUI layout has been adjusted to improve the user experience. The window width has been reduced from 1419 to 1336 pixels to better fit the screen. The minimum and maximum sizes of the MainSettings widget have been increased from 518 to 600 pixels to allow for more space for the labels. The labels have been updated to include the units of measurement to improve clarity. 🐛 fix(AdvancedDataWorker.py): add raw_data parameter to __init__ method ✨ feat(AdvancedDataWorker.py): add support for raw data processing in get_advanced_data method The AdvancedDataWorker class now has a raw_data parameter in its __init__ method, which is used in the get_advanced_data method. This allows for raw data processing in addition to the existing discrete data processing. 🐛 fix(DiscreteDataWorker.py): generate headers before formatting data ✨ feat(DiscreteDataWorker.py): add support for generating headers in output file The DiscreteDataWorker class now generates headers for the output file if the add_headers setting is enabled. The headers are generated before formatting the data to ensure that the headers are included in the output file. 🐛 fix(PreProcessWorker.py): set filename of ScannedObject The PreProcessWorker class now sets the filename of the ScannedObject to the basename 🎨 style(UI_Settings.py): reorganize widgets in the settings UI for better readability 🐛 fix(data_extraction.py): fix standard deviation calculation to use unbiased estimator 🔧 chore(SettingManager.py): add "add_headers" setting with default value of True The changes in UI_Settings.py are purely cosmetic and do not affect the functionality of the code. The fix in data_extraction.py corrects the standard deviation calculation to use the unbiased estimator. The addition of the "add_headers" setting in SettingManager.py allows for the addition of headers to output files. |
||
|---|---|---|
| builded docs | ||
| docs | ||
| images | ||
| utils | ||
| .gitignore | ||
| install_deps.bat | ||
| install_deps.command | ||
| install_deps.sh | ||
| launch.bat | ||
| launch.command | ||
| launch.sh | ||
| LICENSE | ||
| main.py | ||
| README.md | ||
| requirements.txt | ||
Analyse Morphologique
"Analyse morphologique" est un outil développé par le laboratoire de géomécanique du centre PACA d'INRAE. Son objectif est d'extraire des informations sur la morphologie de scans 3D provenant de tests HET (Hydraulic Erosion Test).
Fonctionnalités
L'outil dispose des fonctionnalités suivantes :
Analyse de l'objet
- Lecture de fichiers .obj, .xyz et .stl
- Redressement et normalisation de l'objet
- Discrétisation de l'objet en couches de taille égale
- Calcul d'indices morphologiques
- Export des indices morphologiques dans un fichier
Affichage de graphiques
L'outil permet également l'affichage de plusieurs graphiques, tels que :
- Le maillage de l'objet
- La coupe de l'objet sur les axes xz et yz
- L'évolution du rayon moyen en fonction de la hauteur
- L'évolution de la différence entre le rayon moyen de chaque couche et la moyenne des rayons moyens en fonction de la hauteur
- La coupe d'une couche sélectionnée
- L'évolution de la différence entre le rayon de chaque point et le rayon moyen de la couche en fonction de l'angle theta (de 0 à 2pi).
Installation et utilisation
Veuillez noter que ce programme nécessite une version de Python 3.10 ou supérieure.
Installation automatisée
Le dépôt contient des scripts qui facilitent l'utilisation du programme. Cependant, ces scripts supposent que Python 3 est installé et accessible dans le PATH.
Utilisateurs Windows : Exécutez install_deps.bat pour installer les dépendances. Cette étape n'est nécessaire qu'une seule fois. Ensuite, exécutez launch.bat pour lancer le programme.
Utilisateurs Linux/Mac : Exécutez install_deps.sh pour installer les dépendances. Cette étape n'est nécessaire qu'une seule fois. Ensuite, exécutez launch.sh pour lancer le programme.
Utilisateurs Mac : Exécutez install_deps.command pour installer les dépendances. Cette étape n'est nécessaire qu'une seule fois. Ensuite, exécutez launch.command pour lancer le programme.
Installation manuelle
Pour utiliser le programme, vous pouvez le cloner à partir du dépôt Git ou télécharger l'une des versions disponibles et installer les dépendances à l'aide de pip.
git clone https://forgemia.inra.fr/scanner3d/analysemorphologique.git
cd analysemorphologique
pip install -r requirements.txt
python main.py
Problème de compatibilité avec la bibliothèque pyQt et utilisation de l'environnement virtuel
Si vous utilisez Anaconda, il est possible que vous rencontriez des problèmes avec la bibliothèque pyQt. Vous pourriez rencontrer une erreur telle que :
line 9, in <module>
from PyQt5.QtWidgets import QApplication
ImportError: DLL load failed while importing QtWidgets: La procédure spécifiée est introuvable.
Cependant, vous pouvez toujours utiliser le programme en créant un environnement virtuel avec les dépendances nécessaires. Pour cela, vous devez créer un environnement virtuel, l'activer, puis installer les dépendances.
pip install venv
python -m venv venv
# Pour les utilisateurs de windows
venv\Scripts\activate.bat
# Pour les utilisateurs de linux ou mac
source venv/bin/activate
pip install -r requirements.txt
python main.py
Instructions pour l'utilisation des graphiques 2D et 3D
Graphiques 2D :
- Pour zoomer, utilisez la molette de la souris.
- Pour vous déplacer, cliquez sur le graphique et déplacez la souris.
- Pour modifier l'échelle, cliquez avec le bouton droit de la souris sur le graphique et déplacez la souris :
- vers le haut pour augmenter l'échelle de l'axe y.
- vers le bas pour diminuer l'échelle de l'axe y.
- vers la gauche pour diminuer l'échelle de l'axe x.
- vers la droite pour augmenter l'échelle de l'axe x.
Graphiques 3D :
- Pour zoomer, utilisez la molette de la souris ou maintenez le clic droit et déplacez la souris vers le haut ou le bas.
- Pour vous déplacer, maintenez le bouton 'Majuscule', puis cliquez sur le graphique et déplacez la souris.
- Pour effectuer une rotation, maintenez le clic gauche et déplacez la souris :
- pour une rotation autour de l'axe x, déplacez la souris vers le haut ou le bas dans la zone indiquée en bleu.
- pour une rotation autour de l'axe y, déplacez la souris dans une trajectoire de cercle suivant la zone indiquée en vert.
- pour une rotation autour de l'axe z, déplacez la souris vers la gauche ou la droite dans la zone indiquée en rouge.
Informations et Documentation pour les Developpeurs
Informations
- Convention des variables :
- snake_case pour les fonctions et les variables.
- PascalCase pour les classes.
- Les imports sont relatif au fichier exécuté. (ici main.py)
- L'interface graphique est modifiable avec Qt Designer.
- Le fichier .ui est ensuite converti en fichier .py avec la commande suivante :
pyuic5 -x <fichier.ui> -o <fichier.py>
- Le fichier .ui est ensuite converti en fichier .py avec la commande suivante :
- Le code est commenté et documenté en anglais.
- Le backend du rendu de graphe "matplotlib" n'est (actuellement) pas compatible avec le programme. Il peut cepandant etre utilisé independamment du programme pour des scripts ou des notesbooks.
Stack trace de l'analyse d'un fichier .obj :
flowchart TD
A(app.py)-- calls --> B(MainWindow.py)
B -- event loop--> B
B -- calls in a thread --> C(PreProcessWorker.py)
C -- When finished, triggers and calls in a thread --> D(RawDataWorker.py)
C -- When finished, triggers and calls in a thread --> E(DiscreteDataWorker.py)
D -- Stores results in --> B
D --> G(Save result in a file)
E -- Stores results in --> B
E --> G
E -- When finished triggers and calls in a thread --> F(AdvancedDataWorker.py)
F -- Stores results in --> B
La documentation du code est dans le dossier builded doc, il suffit d'ouvrir le fichier index.html avec un navigateur web.
Pour generer la documentation apres modification du code il faut passer par sphinx, ensuite il faut installer le theme readthedocs
pip install sphinx_rtd_theme
et executer la commande suivante dans le dossier doc :
make html
Cela generera la documentation dans le dossier docs/build.
Contributeurs
-
- Implementation de la specification du projet.
-
Alexis DOGHMANE : mail
- Redacteur des specifications du projet.
Avec du code de :



