Table of Contents

Commit 2015-05-22

Visualisation Memory Leaks

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.

Mécanisme

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.

Visualisation des matrices rigides de contact

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é !

Visualisation des points de projection de contact - Contact Onglet

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.

Visualisation des points de projection de contact - Projection Lines

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

Visualisation des points de projection de contact - Projection Points

Visualisation des points de projection de contact - Projection Points - Représentation

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 :

Visualisation des points de projection de contact - Projection Points - Coordonnées

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

Visualisation des champs de contact

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 :

A l'heure actuelle, il n'est pas possible de choisir l'interaction de contact qui est projetée sur le maillage ! C'est la dernière interaction de contact ajoutée à l'interaction set dans le jeux de donnée, qui est affichée pour le moment ! Le choix de l'interaction de contact sera pour le prochain commit !

Pour se faire, nous devons gérer au maximum trois scalar bars dans la fenêtre de visualisation principale (ScalarValues, VectorValues et Scalar0DValues).

Visualisation des champs de contact - Nuage de points

On peut configurer la taille des points affichés.

Visualisation des champs de contact - Nuage de symboles

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.

Time Integration Interactor Widget - Python Window

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 :

Time Integration Information Widget - Python Window

Suite aux remarques de Romain, j'ai amélioré le Time Integration Information widget :

ActiveInteractionIterator

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

Fichiers/Dossiers ajoutés/supprimés

[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]:

Tests ajoutés/supprimés

[r]:
[a]: 

Gaëtan WAUTELET 2015/05/22