h1. %{color:darkred}Types d'items disponibles dans Computree% |{width:4000px;text-align:left;border-color:transparent}. !/attachments/download/18/en_US.png! [[En_datatypes|...english version of this page]] | p<>. *Computree* comporte des items de différentes natures, afin de gérer les différents types de données nécessaires aux algorithmes développés. Un certain nombre de types d'items standards sont proposés dans le *coeur*, ce qui permet de rendre compatibles les plugins entre eux. notice<>. Cependant si nécessaire, un plugin peut définir des types d'items ad hoc, utilisés uniquement par ce plugin. h1. Gestion des points et types d'items correspondants p<>. *Computree* est conçu pour gérer des nuages de points 3D. A ce titre les points ont une place spécifique dans la plateforme. Ainsi les points (classe d'item : _CT_Point_) ne sont pas des items, afin d'optimiser la gestion de la mémoire. tip<>. Les classes dans Computree sont préfixées par un code permettant de déterminer leur plugin d'appartenance. Le préfixe _CT_ signifie que la classe est implémentée dans le coeur de CompuTree. p<>. Un point est simplement un tableau de trois nombres décimaux (de type float, à 7 chiffres significatifs) contenant ses coordonnées (x,y,z). Tous les points créés dans une session sont regroupés dans un *dépôt de points*, et indexés de façon continue. warning<>. A ce jour, l'utilisation de nombres décimaux de type float (pour des raisons d'optimisation mémoire), pose des problèmes quand les nuages de points sont projetés en cordonnées géographiques comme par exemple en Lambert 93, du fait du nombre important de chiffres significatifs nécessaires. Dans ces cas il y aura perte de précision par troncature lors de l'importation des points dans *Computree*. Pour le moment il est donc préférable de travailler en géométrie capteur (centre de scan à (0,0,0)). {TODO} Il est prévu à court terme d'intégrer un système de changement de repère à l'importation pour éviter ce problème. Cela sera en particulier nécessaire pour l'utilisation de données LiDAR aériennes. p<>. Afin de pouvoir gérer / afficher les points, ceux-ci sont gérés à l'aide d'items "contenant des points", et donc héritant de la classe d'item : _CT_AbstractItemDrawableWithPointCloud_. p<>. Il existe deux types d'items de ce genre à ce jour : * Les *scènes* (classe d'item : _CT_Scene_), conçue pour gérer des nuages de points importants, en optimisant l'occupation mémoire des index. Dans le cas d'une scène tous les points sont ajoutés en une fois à la création. * Les *clusters* (classe d'item : _CT_PointCluster_), plutôt adaptés à la gestion de "petits" ensembles de points (même s'il n'y a pas de limite définie au nombre de points d'un cluster). Dans ce cas les points peuvent être ajoutés successivement au cours de l'étapes. De plus les clusters mettent à jour en temps réel leur barycentre (ce que ne font pas les scènes), qui sont donc affichables. notice<>. Il est possible d'avoir des algorithmes génériques pouvant utiliser indifféremment tout type d'item dérivé de _CT_AbstractItemDrawableWithPointCloud_. h1. Maillages p<>. Sur le même modèle que les points, *Computree* peut gérer des maillages. Ainsi un maillage est contitué de *points*, de *faces* et de *demi-arêtes*. Chacun de ces éléments est géré similairement au points (ce ne sont pas des items). Il y a donc un *dépôt de faces* et un *dépôt de demi-arêtes*. p<>. Comme pour les points, il existe un type d'item gérant l'agencement des *points*, *faces* et *demi-arêtes* : les *modèle de mesh* (classe d'item : _CT_MeshModel_). C'est lui qui va gérer la construction, la modification et l'affichage des éléments unitaires du maillage. h1. Attributs p<>. Nous avons vu les items permettant de stocker les informations 3D pour les points, les faces et les demi-arêtes. Cependant, on utilise fréquemment des données associées à ces éléments, tels qu'une intensité, une couleur ou une normale. p<>. Il existe donc des types d'items chargés de stocker ces informations liés aux éléments unitaires cités : les *attributs*. p<>. Il existe un type d'item pour chaque croisement *attribut (nature de donnée)* / *type d'élément*. p<>. A ce jour, *Computree* gère les *attributs* suivants : * *Attributs scalaires* : une valeur est attachée à chaque élément. Le type de valeur (entier, décimal, booléen) est spécifié dans un _template_. Les items d'attributs scalaires appartiennent aux classes d'items _CT_PointsAttributesScalarTemplated_, _CT_FaceAttributesScalarTemplated_, _CT_EdgeAttributesScalarTemplated_ respectivement pour les points, les faces et les demi-arêtes. * *Couleurs* : pour chaque élément, on définit une couleur par 4 valeurs entières comprises entre 0 et 255 (rouge, vert, bleu, alpha = transparence). Les items d'attributs "couleur" appartiennent aux classes d'items _CT_PointsAttributesColor_, _CT_FaceAttributesColor_, _CT_EdgeAttributesColor_ respectivement pour les points, les faces et les demi-arêtes. * *Normales / Courbures* : pour chaque élément, on définit une normale par 4 nombres décimaux (float) : un vecteur direction (dx, dy, dz) et une courbure. Les items d'attributs "Normales / Courbures" appartiennent aux classes d'items _CT_PointsAttributesNormal_, _CT_FaceAttributesNormal_, _CT_EdgeAttributesNormal_ respectivement pour les points, les faces et les demi-arêtes. h1. Formes géométriques p<>. *Computree* propose une série de types d'items pour gérer les formes géométriques 3D, sur une logique commune. p<>. Ainsi il existe un type d'item pour chaque forme géométrique, héritant tous de la classe d'item _CT_AbstractShape_ : * Des *cercles* (classe d'item : _CT_Circle_) : un centre (x,y,x), une direction normée (x,y,z), un rayon * Des *ellipses* (classe d'item : _CT_Ellipse_) : un centre (x,y,x), une direction normée (x,y,z), un petit rayon et un grand rayon * Des *cylindres* (classe d'item : _CT_Cylinder_) : un centre (x,y,x), une direction normée (x,y,z), un rayon et une hauteur * Des *lignes* (classe d'item : _CT_Line_), en fait des segments constitués de deux extrémités (x,y,z) * Des *polygones 2D* (classe d'item : _CT_Polygon2D_) : une liste de sommets dans un plan horizontal {TODO} Il est prévu à moyen terme d'ajouter d'autres formes géométriques : polygones 3D, rectangle, parallélépipède, cône,courbes de bézier,... h1. Grilles de données *Computree* propose deux types d'item pour gérer les données sous forme de "grille" : * Les *grilles 2D* (classe d'item : _CT_Grid2D_) permettent de gérer des grilles en deux dimensions ou *raster*. Ces items contiennent un tableau en deux dimensions, chaque case contenant une valeur. * Les *grilles 3D* (classe d'item : _CT_Grid3D_) permettent de gérer des grilles en trois dimensions ou *voxels*. Ces items contiennent un tableau en trois dimensions, chaque case contenant une valeur. p<>. Ces classes d'items sont des *templates*, c'est à dire qu'on peut les décliner pour différents types de données dans les cases. tip<>. Par exemple des voxels contenant des entiers seront de classe _CT_Grid3D_. p<>. Ces structures fonctionnent de façon très semblables. Elle gèrent les valeurs manquantes (sauf dans le cas de grilles booléennes). h1. Autres types d'items p<>. Il existes d'autres types d'items plus spécifiques à certains usages : * Les *positions de scanner* (classe d'item : _CT_Scanner_) stockent la position et les paramètres d'un scan T-Lidar * Les *rayons* (classe d'item : _CT_Beam_) permettent de gérer un rayon laser, émis depuis un scanner _____ | [[Fr_introduction|Page précédente (Présentation générale)]] | [[Fr_overview|Retour au sommaire]]| [[Fr_computreeGUI|Page suivante (Interface graphique standard)]] |