Metafor

ULiege - Aerospace & Mechanical Engineering

User Tools

Site Tools


commit:2006:05_10

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 Drawables. 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 Drawables 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 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 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

Romain BOMAN 2006/05/10 16:24

commit/2006/05_10.txt · Last modified: 2016/03/30 15:23 (external edit)