====== 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é. Lorsque ''getDrawable'' 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'' et ''DBSet3'' qui géraient auparavant les champs affichés (scalaires et vecteurs). C'est maintenant le ''ElementSetDrawable'' qui s'en occupe. * Suppression des classes ''CurrentPositionsSets'' et ''PositionSetDrawable''. Gère la postion courante des points pour VTK. Tout ceci est maintenant géré en une seule fonction dans ''ElementSetDrawable''. * Réorganisation des ''Drawable''s. La nouvelle philosophie est la suivante: un ''Drawable'' 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, le ''SideSetDrawable'' affiche toutes les faces. Le ''SideDrawable'' affiche une seule face. On voit donc que le ''SideDrawable'' est un cas particulier du ''SideSetDrawable''. En allant plus loin, on peut même dire que le ''SkinDrawable'' et le ''SkinSetDrawable'' 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 de ''Drawable''s affichent des ensembles de lignes (''CurveDrawable'', ''CurveSetDrawable'', ''WireDrawable'' et ''WiresSetDrawable''). J'ai nommé les classes de base ''MachinCloud'' (parce que ma première classe de base était ''PointCloud'', nuage de points). On a donc au final ''PointCloud'', ''WireCloud'', ''SkinCloud'' et''SolidCloud''. * 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 au ''Drawable'' 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 du ''Drawable''. * 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 --- //[[r_boman@yahoo.fr|Romain BOMAN]] 2006/05/10 16:24//