#==================================== # T U T O R I A L C O M P U T R E E # 10/02/2021 # A. PIBOULE (ONF) # alexandre.piboule@onf.fr #==================================== #================ # L E A R N I N G #================ # Pour lire et comprendre les fichiers de ce tutoriel, l'ordre préconisé est le suivant (header, # puis source) : # 1) plugintutorialfr (ce fichier) # 2) tufr_pluginentry # 3) tufr_pluginmanager # 4) steps/tufr_steptutorial01 # 5) steps/tufr_steptutorial02 # 6) steps/tufr_steptutorial03 # 7) steps/tufr_steptutorial04 # 8) filters/tufr_filtertutorial05 # 9) metrics/tufr_metrictutorial06 # 10) readers/tufr_readertutorial06 # 11) exporters/tufr_exportertutorial06 # 12) items/tufr_itemtutorial06 #========================== # C O N F I G U R A T I O N #========================== # Ce fichier est le point de départ de ce tutoriel. Ce projet est un plugin fonctionnel pour # Computree. Il contient des étapes visant à expliquer les mécanismes de création d'un plugin. # Chaque étape est commentée en détail. # Chaque plugin a un nom qui apparaitra dans l'interface. Dans le code, chaque plugin est par # convention identifié par à un code de 2 à 4 lettres majuscules qui préfixent également les # noms de toutes les classes du plugin. Le présent plugin a pour code TUFR (comme TUtoriel # version FRançaise). Le Plugin Generator gère automatiquement la casse (tufr/TUFR), les noms # et codes doivent ici être en minuscules. PLUGIN_NAME = tutorialfr PLUGIN_CODE = tufr # Ce fichier est le fichier 'projet Qt'. Ainsi par convention le fichier projet d'un plugin # est nommé pluginnomduplugin.pro. C'est lui qui permet à Qt Creator de connaître les fichiers # du projet. Pour plus d'information sur les fichiers .pro, voir la documentation de Qt. # Un plugin Computree doit contenir en début de son fichier .pro la ligne # 'include(../../computreev6/config/plugin_shared.pri)' # Cela permet d'importer dans le projet les éléments de Computree nécessaires. Afin d'inclure # automatiquement les dépendences nécessaires (via 'include <*>'), il faut ajouter deux choses # avant cette ligne : # 1) les noms des librairies Computree utilisées, # 2) les options d'activation des dépendances externes. # Pour ce tutoriel, nous avons besoin des librairies Computree suivantes (attention à ne pas # en mettre inutilement, cela rallongerait le temps de compilation) : COMPUTREE += ctlibclouds COMPUTREE += ctlibstep COMPUTREE += ctlibstepaddon COMPUTREE += ctlibio COMPUTREE += ctlibfilters COMPUTREE += ctlibaction COMPUTREE += ctlibstdactions COMPUTREE += ctlibmath COMPUTREE += ctliblas # De plus, nous avons besoin de dépendences externes, certaines de manière optionnelle (avec # CHECK_CAN_USE_*), et/ou d'autres de manière obligatoire (avec MUST_USE_*). CHECK_CAN_USE_GDAL = 1 #MUST_USE_GDAL = 1 #CHECK_CAN_USE_OPENCV = 1 MUST_USE_OPENCV = 1 CHECK_CAN_USE_PCL = 1 #MUST_USE_PCL = 1 #CHECK_CAN_USE_MUPARSER = 1 #MUST_USE_MUPARSER = 1 #CHECK_CAN_USE_BOOST = 1 #MUST_USE_BOOST = 1 #CHECK_CAN_USE_GSL = 1 #MUST_USE_GSL = 1 #CHECK_CAN_USE_FLANN = 1 #MUST_USE_FLANN = 1 #CHECK_CAN_USE_QHULL = 1 #MUST_USE_QHULL = 1 #CHECK_CAN_USE_DGTAL = 1 #MUST_USE_DGTAL = 1 # Voici la liste des dépendences gérées par défaut (si elles sont déjà installées sur le # système, sinon il faudra modifier/ajouter les fichiers 'user_path_*.pri' nécessaires dans # le dossier 'computreev6/config/' ) : # > EIGEN - C++ template library for linear algebra (https://eigen.tuxfamily.org) # > LIBQGLVIEWER - C++ library based on Qt that eases the creation of OpenGL 3D viewers (http://libqglviewer.com/) # > GDAL - Geospatial Data Abstraction Library (https://gdal.org/) # > OPENCV - Open Compute Vision (https://opencv.org/) # > PCL - Point Cloud Library (https://pointclouds.org/) # > MUPARSER - C++ math expression parser library (https://beltoforion.de/en/muparser/) # > BOOST - Complementary set of libraries for C++ (https://www.boost.org/) # > GSL - GNU Scientific Library (https://www.gnu.org/software/gsl/) # > FLANN - Fast Library for Approximate Nearest Neighbors (https://github.com/mariusmuja/flann) # > QHULL - Quickhull algorithm for computing the convex hull (http://www.qhull.org/) # > DGTAL - Digital Geometry Tools and Algorithms Library (https://dgtal.org/) # Une fois les options choisies, nous importons le fichier pour plugin : include(../../computreev6/config/plugin_shared.pri) # Ensuite le fichier .pro doit contenir la directive suivante. Cela définira le nom de la # librairie du plugin une fois compilée. Ici le nom du plugin est 'tutorialfr', ce qui donne : # TARGET = plug_tutorialfr TARGET = plug_$${PLUGIN_NAME} #========== # F I L E S #========== # On déclare ensuite les fichiers d'entête (*.h), sources (*.cpp) et interface (*.ui). A minima, un # plugin Computree doit contenir deux classes (à la racine) : # > CODE_PluginEntry (tufr_pluginentry.h/.cpp) # > CODE_PluginManager (tufr_pluginmanager.h/.cpp) # La première classe permet à Computree d'utiliser le plugin, et la seconde définit les fonctions du # plugin utilisables. Il faut également faire le lien avec les définitions de Computree via l'API # 'pluginentryinterface.h'. # Ensuite, on ajoute une classe pour chaque étape ou item du plugin, respectivement dans des # repertoires step et itemdrawable, des métriques, des filtres, etc. Dans le cas général la création # d'item n'est pas utile étant donné qu'il est préférable de n'utiliser que des items standard # définis dans l'API. La plupart du temps un plugin ne contient que des étapes. HEADERS += $$CT_PREFIX_LIB/ctlibplugin/pluginentryinterface.h HEADERS += $${PLUGIN_CODE}_pluginentry.h HEADERS += $${PLUGIN_CODE}_pluginmanager.h HEADERS += $$files( actions/$${PLUGIN_CODE}_*.h , true) HEADERS += $$files( exporters/$${PLUGIN_CODE}_*.h , true) HEADERS += $$files( filters/$${PLUGIN_CODE}_*.h , true) HEADERS += $$files( items/$${PLUGIN_CODE}_*.h , true) HEADERS += $$files( metrics/$${PLUGIN_CODE}_*.h , true) HEADERS += $$files( readers/$${PLUGIN_CODE}_*.h , true) HEADERS += $$files( steps/$${PLUGIN_CODE}_*.h , true) HEADERS += $$files(views/actions/$${PLUGIN_CODE}_*.h , true) SOURCES += $${PLUGIN_CODE}_pluginentry.cpp SOURCES += $${PLUGIN_CODE}_pluginmanager.cpp SOURCES += $$files( actions/$${PLUGIN_CODE}_*.cpp, true) SOURCES += $$files( exporters/$${PLUGIN_CODE}_*.cpp, true) SOURCES += $$files( filters/$${PLUGIN_CODE}_*.cpp, true) SOURCES += $$files( items/$${PLUGIN_CODE}_*.cpp, true) SOURCES += $$files( metrics/$${PLUGIN_CODE}_*.cpp, true) SOURCES += $$files( readers/$${PLUGIN_CODE}_*.cpp, true) SOURCES += $$files( steps/$${PLUGIN_CODE}_*.cpp, true) SOURCES += $$files(views/actions/$${PLUGIN_CODE}_*.cpp, true) FORMS += $$files(views/actions/$${PLUGIN_CODE}_*.ui , true) #========== # E X T R A #========== # Pour d'éventuelles traductions, voir la documentation Qt. Cela passe par l'utilisation de des # outils lupdate/lrelease. Les fichiers de traduction pour chaque langue au format *.ts devront # préférablement être placé dans un dossier 'languages'. TRANSLATIONS += languages/plugin$${PLUGIN_CODE}_*.ts # Les éventuelles images, icones et autres documents devront être gérés dans un fichier *.qrc, dont # le chemin sera indiqué via la ligne suivante : RESOURCES += # Les options spécifiques de pré-compilation peuvent être passées via la commande suivante, qui se # comporte comme '#define' : DEFINES += # Les options spécifiques de compilation peuvent être passées via la commande suivante, qui passe # son contenu directement au compilateur : QMAKE_CXXFLAGS += # On peut également modifier la configuration des modules Qt utilisés (par exemple si l'on a besion # de fonctionalités tierces comme le réseau ou les bases de données), via la commande suivante : QT += #QT += concurrent #QT += xml #QT += network #QT += sql # Enfin, on peut personalisé la configuration générale du projet via la commande suivante # (voir documentation Qt : https://doc.qt.io/qt-5/qmake-variable-reference.html#config) : CONFIG +=