commit:2006:05_10
Table of Contents
Commit 2006-05-10
Modifs
- Nettoyage partiel de la vizu (à suivre)
- L'idée est de supprimer la fonction
Drawable::getDrawable()
pour éclaircir la gestion de la mémoire. Ce lien est en effet ennuyeux puisqu'il permet de lier le pipeline VTK d'un objet à celui d'un autre. Quand on veut supprimer un objet de la fenêtre graphique, on ne sait plus trop ce qui est partagé. LorsquegetDrawable
sera définitivement supprimée, on pourra alors ajouter de nouvelles fonctionnalités facilement sans avoir peur d'exploser la RAM. - J'ai viré
DBSet
etDBSet3
qui géraient auparavant les champs affichés (scalaires et vecteurs). C'est maintenant leElementSetDrawable
qui s'en occupe. - Suppression des classes
CurrentPositionsSets
etPositionSetDrawable
. Gère la postion courante des points pour VTK. Tout ceci est maintenant géré en une seule fonction dansElementSetDrawable
. - Réorganisation des
Drawable
s. La nouvelle philosophie est la suivante: unDrawable
gère complètement l'affichage de ses composants. Il ne va donc plus piocher des acteurs à gauche et à droite (pour les raisons de mémoire données ci-dessus). Autrement dit, leSideSetDrawable
affiche toutes les faces. LeSideDrawable
affiche une seule face. On voit donc que leSideDrawable
est un cas particulier duSideSetDrawable
. En allant plus loin, on peut même dire que leSkinDrawable
et leSkinSetDrawable
ont la même fonction: afficher une liste de faces. Il est donc logique de définir une classe commune à toutes celles-ci. De même, une série deDrawable
s affichent des ensembles de lignes (CurveDrawable
,CurveSetDrawable
,WireDrawable
etWiresSetDrawable
). J'ai nommé les classes de baseMachinCloud
(parce que ma première classe de base étaitPointCloud
, nuage de points). On a donc au finalPointCloud
,WireCloud
,SkinCloud
etSolidCloud
. - Mon but est également de pouvoir afficher des éléments complexes tels que les XFEM (éléments présentant une discontinuité dans les déplacements (fissure). Pour ce faire, j'ai décidé de revoir complètement la manière dont sont gérées les données (
vtkDataSet
de VTK) affichées à l'écran. Auparavant, je construisais soit un ensemble de points qui correspondait à la liste complète des noeuds/points de la géométrie, soit une liste propre auDrawable
concerné. Les deux méthodes avaient des inconvénients:- la première permet de conserver les connexions entre cellules voisines mais bouffe beaucoup de mémoire. De plus, si on doit ajouter des points supplémentaires pour discrétiser des courbes ou des surfaces non maillées, on perd les connexions (deux faces qui partagent un arc vont discrétiser chacune l'arc d'ou grosse perte mémoire et discontinuité dans l'affichage). Les connexions ne sont donc effictives qu'aux points.
- la seconde ne conserve pas les connexions même au niveau points.
- Pour arriver à conserver les connexions, même sur des lignes et conserver une consommation mémoire minimale, j'ai dû mettre au point une sorte de “mapping” des points Metafor (ou nouveaux points de visu) vers les points VTK. Ce mapping est géré par des
std::map
au niveau duDrawable
. - Quelques avantages de la nouvelle architecture:
- moins de code
- plus clair: on a supprimé tous les templates
- possibilité d'afficher le maillage avant le calcul (ca peut paraitre bête mais c'etait pas possible avant!!)
- possibilité d'afficher des faces (convexes uniquement). L'ancienne gestion des faces (qui allait rechercher le contour et la surface associés) a été supprimé ⇒ les faces s'affichent donc mal en 3D tant qu'on n'inclut pas un mailleur surfacique pour les discrétiser. D'ici la, affichez les contours et les surfaces au lieu des faces en 3D.
- gestion de mémoire correcte: les objets non visibles sont détruits et non plus simplement cachés!
- Gestion uniformisée des labels: la (nouvelle) classe
Labeled
s'en charge. - Gestion uniformisée des normales: la classe
WithNormal
s'en charge. J'ai ajouté une normale aux courbes indiquant leur sens. Pour les autres entités (surfaces, contours), je n'ai tracé qu'une seule normale au milieu (c'est plus léger et c'est même plus clair dans certains cas). Les faces n'ont plus de normales (pour l'instant). - Découpage de la classe
VTKManager
: création d'une classe qui gère l'axe (Axe
), une qui gère le titre (Title
), une qui gère le plan de coupe (CuttingPlane
) et la scalarbar (ScalarBar
). C'est plus clair et moins gourmand en mémoire (les acteurs sont désalloués si on n'affiche pas ces objets).
Fichiers ajoutés/supprimés
R mtDrawables/ArcDrawable.cpp R mtDrawables/ArcDrawable.h R mtDrawables/BezierCurveDrawable.cpp R mtDrawables/BezierCurveDrawable.h R mtDrawables/CircleDrawable.cpp R mtDrawables/CircleDrawable.h R mtDrawables/Cloud.cpp R mtDrawables/Cloud.h R mtDrawables/CoonsDrawable.cpp R mtDrawables/CoonsDrawable.h R mtDrawables/CubicSplineDrawable.cpp R mtDrawables/CubicSplineDrawable.h R mtDrawables/CubicSplineSegDrawable.cpp R mtDrawables/CubicSplineSegDrawable.h R mtDrawables/DBSet3Drawable.cpp R mtDrawables/DBSet3Drawable.h R mtDrawables/DBSetDrawable.cpp R mtDrawables/DBSetDrawable.h R mtDrawables/LineDrawable.cpp R mtDrawables/LineDrawable.h R mtDrawables/NurbsCurveDrawable.cpp R mtDrawables/NurbsCurveDrawable.h R mtDrawables/NurbsSurfaceDrawable.cpp R mtDrawables/NurbsSurfaceDrawable.h R mtDrawables/PlaneDrawable.cpp R mtDrawables/PlaneDrawable.h A mtDrawables/PointCloud.cpp A mtDrawables/PointCloud.h R mtDrawables/PositionSetDrawable.cpp R mtDrawables/PositionSetDrawable.h R mtDrawables/PythonCurveDrawable.cpp R mtDrawables/PythonCurveDrawable.h R mtDrawables/RevolutionSurfaceDrawable.cpp R mtDrawables/RevolutionSurfaceDrawable.h A mtDrawables/SkinCloud.cpp A mtDrawables/SkinCloud.h A mtDrawables/SolidCloud.cpp A mtDrawables/SolidCloud.h R mtDrawables/SplineSurfaceDrawable.cpp R mtDrawables/SplineSurfaceDrawable.h A mtDrawables/SurfaceCloud.cpp A mtDrawables/SurfaceCloud.h R mtDrawables/Tm2Volume2DElementDrawable.cpp R mtDrawables/Tm2Volume2DElementDrawable.h R mtDrawables/Tm2Volume3DElementDrawable.cpp R mtDrawables/Tm2Volume3DElementDrawable.h A mtDrawables/VolumeDrawable.cpp A mtDrawables/VolumeDrawable.h A mtDrawables/VolumeSetDrawable.cpp A mtDrawables/VolumeSetDrawable.h A mtDrawables/WireCloud.cpp A mtDrawables/WireCloud.h A mtDrawables/WithNormal.cpp A mtDrawables/WithNormal.h A mtViz/Axes.cpp A mtViz/Axes.h R mtViz/CurrentPositionsSets.cpp R mtViz/CurrentPositionsSets.h A mtViz/CuttingPlane.cpp A mtViz/CuttingPlane.h A mtViz/ScalarBar.cpp A mtViz/ScalarBar.h A mtViz/Title.cpp A mtViz/Title.h
— Romain BOMAN 2006/05/10 16:24
commit/2006/05_10.txt · Last modified: 2016/03/30 15:23 by 127.0.0.1