Metafor

ULiege - Aerospace & Mechanical Engineering

User Tools

Site Tools


commit:2015:08_09

This is an old revision of the document!


Commit 2015-08-09

Ceci est un commit de visualisation. Le code source a juste été compilé sur chaque station et la batterie n'a pas été lancée.

Modifications - Scalar Field

Champ disponible

J'ai établi une procédure pour aller récupérer les champs matérielles ou élémentaires disponibles dans chaque interaction/élément repris dans le drawable list de la fenêtre BWIN.

Désormais, nous n'avons plus tous les champs exotiques dans les combox box des champs vectorielles ou scalaires.

Dans la structure du code, vous avez les fonctions d'interface suivantes dans les interactions et/ou les éléments pour ajouter les champs scalaires disponibles ou les champs vectorielles disponibles.

    virtual void fillIndependentMaterialFieldID(std::map<ScalarNatureID*, VisualisationScalarID> &scalarIDMap);
    virtual void fillIndependentElementFieldID(std::map<ScalarNatureID*, VisualisationScalarID> &scalarIDMap); 
    virtual void fillIndependentMaterialVectorialFieldID(std::map<Vect3NatureID*, VisualisationVectorID> &vectorIDMap);
    virtual void fillIndependentElementVectorialFieldID(std::map<Vect3NatureID*, VisualisationVectorID> &vectorIDMap);

Malheureusement, les éléments de Metafor sont beaucoup trop riches et nous sommes forcés de passer par les éléments pour récupérer le matériau. En fait, il n'est pas possible de récupérer le matériau via le shortcut dans la classe FieldApplicator. Il n'existe pas d'interaction pour les éléments de ressort, de coque, … etc mais juste des matériaux différents et des éléments différents. J'ai du me calquer sur la structure existante pour ajouter cette fonctionnalité, ce qui n'a pas toujours très aisé !

La propriété élémentaire se distincte de la propriété matérielle par le fait qu'elle est disponible dans l'élément peu importe le matériau associé. Par exemple, pour les éléments de contact, nous avons l'aire de contact et pour les éléments de volume, nous avons l'aspect ratio.

Voici quelques exemples pour les matériaux de contact :

void 
NormalMechanicalContactMaterial::fillIndependentMaterialFieldID(std::map<ScalarNatureID*, VisualisationScalarID> &scalarIDMap) const
{
    MechanicalContactMaterial::fillIndependentMaterialFieldID(scalarIDMap);
    scalarIDMap[&CF_NORMAL_GAP]=VISUSCALAR_CONTACT;
    scalarIDMap[&CF_CONTACT_PRESSURE]=VISUSCALAR_CONTACT;
}
void 
ContactInteraction::fillIndependentElementFieldID(std::map<ScalarNatureID*, VisualisationScalarID> &scalarIDMap)
{
    if(static_cast<ContactElShcuts *>(getShortcuts())->getAreaInContact()!=AIC_NO)
    {
        scalarIDMap[&CF_SLAVE_NODE_AREA]=VISUSCALAR_CONTACT;
    }
}

Il faut constater que l'on ajoute un Tag (“VISUSCALAR_CONTACT”) pour chaque option scalaire ou vectorielle ajoutée dans la map. Ce tag est jusqu'à présent unique afin de pouvoir filtrer les champs scalaires ou vectorielles par la suite.

Les champs matérielles disponibles précédemment dans la combobox ont été placés dans les différents matériaux ad hoc. J'ai fait mon possible … il se peut qu'il y ait des erreurs, étant donné que les noms repris dans “NatureIDs” ne sont pas toujours très claires !
Grâce à une adaptation des macros disponibles dans “NatureIDs”, tous les champs de la combo box sont ajoutés avec leur nom étendu et non leur nom “clé” pour les récupérer dans le singleton NatureIDList. La combox box contenant l'ensemble des champs scalaires ou vectorielles est trié par ordre alphabétique et est terminé par l'indicatif unknown.

Configuration des champs disponibles

Il est possible en cliquant sur le bouton “More” du panneau ScalarWidget de configurer sa ComboBox en affichant uniquement les champs que l'on désire voir.

Les modifications sont opérés uniquement lorsque l'on a cliqué sur le bouton “Ok” de la boite de dialogue et elles sont sauvegardés dans notre vizwin.conf.

Les champs scalaires nodaux sont repris sous l'intitulé “Nodal” (Field1D(ScalarNatureID, VariantID) dans Metafor). Puisque ce sont des Field1D(ScalarNatureID, VariantID), leur nom étendu est une combinaison de la Nature et du Variant, ce qui donne un nom incompréhensible avec la combinaison des deux. Dès lors, j'ai renommé en dur chaque champ Field1D(ScalarNatureID, VariantID) affiché dans le ScalarWidget.

Modifications - Vector Field

Champ vectoriel interne

Champ vectoriel contact

Configuration des champs disponibles

Il est possible en cliquant sur le bouton “More” du panneau VectorWidget de configurer sa ComboBox en affichant uniquement les champs que l'on désire voir.

Les modifications sont opérés uniquement lorsque l'on a cliqué sur le bouton “Ok” de la boite de dialogue et elles sont sauvegardés dans notre vizwin.conf.

Les champs vectorielles nodaux sont repris sous l'intitulé “Nodal” (Field3D(Vect3NatureID, VariantID) dans Metafor). Puisque ce sont des Field3D(Vect3NatureID, VariantID), leur nom étendu est une combinaison de la Nature et du Variant, ce qui donne un nom incompréhensible avec la combinaison des deux. Dès lors, j'ai renommé en dur chaque champ Field3D(Vect3NatureID, VariantID) affiché dans le ScalarWidget.

Modifications - Scalar Bar

Afin de préparer mon prochain commit (affichage de champ vectoriel de contact), je suis repassé sur les classes gérant l'affichage des scalar/vector fields.

Au lieu d'utiliser la fonction SetScalars() ou SetVectors(), il est préférable de faire de cette manière là :

        if(!scalarData)
        {
            scalarData = vtkDoubleArray::New();
            scalarData->SetNumberOfComponents(1);
            scalarData->SetName("ScalarData");
        }
        
        Remplir scalarDate 
        
        scalarData->Modified();
        dataset->GetPointData()->AddArray(scalarData);
        //Cette méthode est plus flexible ! 
        dataset->GetPointData()->SetActiveScalars("ScalarData");

Comme ça, il est possible aisément de récupérer les valeurs scalaires ou vectorielles dans un autre contexte pour faire une colorMap par exemple.

Il faut savoir que les filtres VTK peuvent écraser des données de l'inputData pour insérer les valeurs calculées dans l'outputData. Par exemple, l'object vtkVectorNorm() travaille sur les vecteurs de l'inputData et écrase les valeurs scalaires de l'inputData pour insérer les normes des vecteurs. Dès lors, on se retrouve avec un outputData sans les valeurs scalaires initiales (que l'on désire garder pour faire une colorMap par exemple en aval du filtre).

Suite à cette modification là, j'ai pu enlever la classe d'affichage des valeurs de champ scalaire de contact.

Divers

J'ai remis certaines options de visualisation par défaut :

  • affichage des masses concentrées sous forme de pixel.
  • pas d'affichage de la lumière spéculaire sur tous les drawables.
  • pas d'affichage des outils de contact.

Fichiers ajoutés/supprimés

[a]:
[r]:mtDrawables/ContactScalarFieldValuesLabel.cpp
[r]:mtDrawables/ContactScalarFieldValuesLabel.h

Tests ajoutés/supprimés

[r]:
[a]:

Gaëtan WAUTELET 2015/08/09

commit/2015/08_09.1439126495.txt.gz · Last modified: 2016/03/30 15:22 (external edit)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki