A l'aide du vtkDebugLeaks widget, j'ai fait la chasse aux memory leaks de la fenêtre de visualisation.
J'ai constaté que :
Finalement, j'ai effectué une comparaison des memory leaks avec le chargement d'une analyse Metafor avec aucun drawable dans la fenêtre de Visualisation (cf. utilities.py). Dans cette analyse Metafor (vide dans le fenêtre de visualisation graphique), j'ajoute par exemple le PointSet pour le représenter et ensuite je l'enlève. A l'aide du vtkDebugLeaks widget, je constate qu'il y a une différence dans le nombre de références de certains objets VTK avant et après (⇒ Memory Leaks !!!!).
Dès lors, il y a toujours des memory leaks mais elle semble minime… et elles sont peut être dues aux objets de la librairie VTK et non de Metafor car ce sont des objets vtk qui ne sont pas immédiatement déclarés et définis dans le code source de Metafor mais dans les objets vtk utilisés !
Finalement, je n'ai pas vérifié la présence d'éventuelles memory leaks pour la visualisation de courbes en temps réel.
Sous l'onglet General de la fenêtre BWin, j'ai interfacé des options pour configurer les éléments de masse concentrée et de ressort (Element0DCloud et Element1DCloud).
J'en ai profité également pour pouvoir représenter les champs vectoriels (DBVector) et les champs scalaires (DBScalar) sur les éléments de ressort et/ou de masse concentrée.
Dans le cas d'une interaction de contact rigide déformable en pilotage en force, il y avait un bug d'affichage et les courbes disparaissaient de la fenêtre principale de visualisation. Ce bug est désormais corrigé !
Il est possible de représenter les quatre contact projection state :
Il est possible d'afficher une légende dans le coin supérieur droit de la fenêtre de visualisation principale !
Pour chaque contact projection state, il est possible
Pour chaque contact projection state, nous pouvons représenter soit les points de projection ou les segments de droite de projection.
Il est possible de représenter le segment de droite qui joint le point de projection et le point/noeud esclave.
On peut configurer l'épaisseur du trait et le style (en ligne solide ou en ligne pointillée).
Il est possible d'afficher les points de projection sous la forme d'une cellule VTK_VERTEX ou sous la forme d'un symbole (cône) :
Pour la configuration de chaque symbole, il est possible :
Il est possible d'afficher les coordonnées cartésiennes (x, y, z) ou réduites (u, v) pour chaque point de projection.
On peut configurer la taille du texte affiché.
Il existe désormais un onglet intitulé “scalar0Dfield” afin de visualiser les champs de contact. Du point de vue de la visualisation, j'ai fait le choix de représenter les éléments de contact par une cellule “VTK Vertex” c'est-à-dire un point, qui correspond au noeud/point esclave. La représentation VTK ne correspond pas du tout à l'élément de contact Metafor. En effet, si on prend une interaction de contact défo-défo en simple passe, les éléments de contact en 2D sont soit deux noeuds (un noeud esclave + un noeud maître) ou soit trois noeuds (un noeud esclave + un segment de droite maître fait de deux noeuds). La situation est plus complexe en 3D.
Dans la version actuelle de Metafor, il est possible aussi de représenter les champs de contact :
Pour se faire, nous devons gérer au maximum trois scalar bars dans la fenêtre de visualisation principale (ScalarValues, VectorValues et Scalar0DValues).
Il est possible de représenter le point/noeud esclave en fonction d'un symbole relatif au statut de contact (Double pyramide = pas de contact, pyramide = contact glissant, cube = contact collant) :
Finalement, on peut afficher une légende relative au status de contact associé à chaque symbole dans le coin supérieur droit de la fenêtre de visualisation principale.
Suite à la dernière réunion de service, j'ai amélioré le Time Integration Interactor widget afin de le rendre plus robuste du point de vue utilisateur :
-Bouton Play/Pause :
-Bouton Stop :
-Bouton BFAC (Nouvelle Fonctionnalité) :
-Bouton Step/Time/Iteration/Augmentation :
Suite aux remarques de Romain, j'ai amélioré le Time Integration Information widget :
Dans un soucis de clarté du code source, j'ai ajouté un “active interaction iterator” en plus du “interaction iterator”. C'est équivalent au “active element iterator” et au “element iterator”.
[a]:mtDrawables/CFScalars.cpp [a]:mtDrawables/ContactElementCloud.cpp [a]:mtDrawables/ContactElementDataSet.cpp [a]:mtDrawables/ContactMesh.cpp [a]:mtDrawables/ContactProjection.cpp [a]:mtDrawables/ContactProjectionLines.cpp [a]:mtDrawables/ContactProjectionLinesDatatSet.cpp [a]:mtDrawables/ContactProjectionManager.cpp [a]:mtDrawables/ContactProjectionPoints.cpp [a]:mtDrawables/ContactProjectionPointsDatatSet.cpp [a]:mtDrawables/ContactProjectionPointsLabel.cpp [a]:mtDrawables/ContactStatus.cpp [a]:mtDrawables/SurfaceDataSet.cpp [a]:mtFEMBase/ActiveInteractionIterator.cpp [a]:mtKernel/ContactProjectionConfiguration.cpp [a]:mtQt/Scalar0DValuesWidget.cpp [a]:mtViz/ContactProjectionOptionSet.cpp [a]:mtViz/ContactStatusLegend.cpp [a]:mtViz/LegendsManager.cpp [a]:mtViz/ProjectionPointsLegend.cpp [a]:mtViz/Scalar0DFieldScalarBar.cpp [a]:mtDrawables/CFScalars.h [a]:mtDrawables/ContactElementCloud.h [a]:mtDrawables/ContactElementDataSet.h [a]:mtDrawables/ContactMesh.h [a]:mtDrawables/ContactProjection.h [a]:mtDrawables/ContactProjectionLines.h [a]:mtDrawables/ContactProjectionLinesDatatSet.h [a]:mtDrawables/ContactProjectionManager.h [a]:mtDrawables/ContactProjectionPoints.h [a]:mtDrawables/ContactProjectionPointsDatatSet.h [a]:mtDrawables/ContactProjectionPointsLabel.h [a]:mtDrawables/ContactStatus.h [a]:mtDrawables/SurfaceDataSet.h [a]:mtDrawables/WithScalarFieldValuesLabel.h [a]:mtFEMBase/ActiveInteractionIterator.h [a]:mtKernel/ContactProjectionConfiguration.h [a]:mtQt/Scalar0DValuesWidget.h [a]:mtViz/ContactProjectionOption.h [a]:mtViz/ContactProjectionOptionSet.h [a]:mtViz/ContactStatusLegend.h [a]:mtViz/LegendsManager.h [a]:mtViz/ProjectionPointsLegend.h [a]:mtViz/Scalar0DFieldScalarBar.h [a]:mtFEMBase/ActiveInteractionIterator.inl [a]:mtQt/icons/saveFac.png [a]:mtQt/Scalar0DValuesWidget.ui [r]:
[r]: [a]:
— Gaëtan WAUTELET 2015/05/22