1783x
001617
10.01.2020

Sélection de nœuds le long d'une ligne à l'aide de l'interface COM

Lorsqu'on affiche les résultats d'une surface via l'interface COM, on obtient un champ unidimensionnel avec tous les résultats au niveau des nœuds EF ou des points de grille. Les résultats dans la zone d'une ligne doivent d'abord être filtrés pour obtenir les résultats au bord d'une surface ou le long de cette ligne à l'intérieur des surfaces. Cet article explique comment effectuer cette tâche.

Principes théoriques du calcul de la distance

La distance du nœud à la ligne doit être calculée pour trouver les nœuds EF proches ou sur la ligne. On dispose de la ligne avec les points de début et de fin (N0 et N1) et du point P. La distance entre ce point et cette ligne doit être déterminée. Une méthode classique pour calculer cette distance consiste à étendre un plan de sorte à ce qu'il passe par le point P et soit perpendiculaire à la ligne. Pour ce faire, une équation linéaire appropriée doit d'abord être définie. Dans ce cas, il est recommandé d'utiliser la forme de paramètre qui contient un vecteur de direction v. Ce vecteur peut être utilisé pour définir l'équation du plan.

Le point de départ (vecteur de position) de la ligne est utilisé pour le vecteur d'appui A et la différence des deux vecteurs de position pour le vecteur de direction v. La forme normale est utilisée comme équation du plan pour la raison mentionnée ci-dessous.

Le vecteur d'appui P est ici le point de résultat Pres à analyser. Le vecteur normal est le vecteur de direction de la ligne droite, car le plan est orthogonal à cette ligne. Avant de pouvoir calculer la distance, le facteur s de la ligne droite au point d'intersection avec le plan doit être déterminé. Pour ce faire, le vecteur de position X dans l'équation du plan est remplacé par l'équation de la ligne droite.

Ajustée selon s et avec

, on obtient l'équation suivante :

Il est ainsi possible de déterminer le point d'intersection S à l'aide de l'Équation 1.

La distance d entre S et Pres est déterminée à l'aide de la valeur vectorielle de la différence entre les deux points.

La Figure 01 montre la représentation schématique de tous les éléments mentionnés ici. La surface bleue est la surface à analyser et la surface rouge le plan de coupe, qui a été défini avec le point Pres et le vecteur de direction

. Le facteur s n'est que de 0,5 sur la figure afin que l'intersection du plan et de la ligne droite se trouve exactement au centre de la ligne.

Implémentation du calcul de la distance dans un programme

Une fois les formules disponibles, vous pouvez créer le programme correspondant. EXCEL VBA est utilisé pour la conversion. La Figure 02 montre la numérotation des éléments.

Une connexion avec RFEM est d'abord nécessaire. Ensuite, l'interface est récupérée pour les données du modèle. Cette procédure ayant déjà été présentée dans divers autres articles (voir les « Liens » au bas de cet article), elle n'est pas détaillée ici. Le code source pour démarrer le programme est le suivant :

Sub selection_test2()
    
    Dim line_no As Integer
    Dim surface_no As Integer
    Dim loadcase_no As Integer
    Dim d_tol As Double
    line_no = 11
    surface_no = 1
    loadcase_no = 1
    d_tol = 0.001
    
    '   get interface from the opened model and lock the licence/program
    Dim iModel As RFEM5.IModel2
    Set iModel = GetObject(, "RFEM5.Model")
    iModel.GetApplication.LockLicense
    
On Error GoTo e
    
    Dim iModelData As RFEM5.IModelData2
    Set iModelData = iModel.GetModelData

Les paramètres variables doivent être définis avant de lancer le programme. Il s'agit notamment du numéro line_no de la ligne pour laquelle les résultats sont recherchés et du numéro surface_no de la surface où se trouve la ligne. De plus, le numéro loadcase_no du cas de charge auquel les résultats appartiennent est également nécessaire. Comme il s'agit d'un calcul numérique avec une précision limitée, une tolérance d_tol est requise afin de définir la distance maximale entre la ligne et le nœud. Une tolérance d'un millimètre est utilisée dans cet exemple.

L'interface des données du modèle (IModelData) est désormais disponible et il faut alors rechercher la ligne, ainsi que ses points de début et de fin.

   '   get line
    Dim ILin As RFEM5.ILine
    Set ILin = iModelData.GetLine(line_no, AtNo)
    Dim lin As RFEM5.RfLine
    lin = ILin.GetData
   
    
    '   get nodes from line
    Dim n(0 To 1) As RFEM5.Node
    
    Dim ints() As Integer
    ints = strToIntArr(lin.NodeList)
    
    Dim iNd As RFEM5.INode
    Set iNd = iModelData.GetNode(ints(0), AtNo)
    n(0) = iNd.GetData
    Set iNd = iModelData.GetNode(ints(UBound(ints, 1)), AtNo)
    n(1) = iNd.GetData
    
    Set iNd = Nothing

Les nœuds et la ligne sont tous obtenus directement via leur interface (INode ou ILine). La fonction strToIntArr décrite dans un autre article de la liste ci-dessous permet d'extraire les numéros de nœud de la chaîne (RfLine.NodeList). Elle convertit la chaîne en un champ de type entier.

Avec les points maintenant donnés de la ligne (point de départ) et (point de fin), vous pouvez définir les premiers paramètres de l'équation.

    Dim v As RFEM5.Point3D
    v.X = N(1).X - N(0).X
    v.Y = N(1).Y - N(0).Y
    v.Z = N(1).Z - N(0).Z
    
    Dim A As RFEM5.Point3D
    A.X = N(0).X
    A.Y = N(0).Y
    A.Z = N(0).Z
    
    Dim v2 As Double
    v2 = v.X ^ 2 + v.Y ^ 2 + v.Z ^ 2
    
    Dim P_res As RFEM5.Point3D
    Dim s As Double
    Dim d As Double

Le vecteur de direction

(v), le vecteur d'appui (A) et le produit d'échelle du vecteur de direction (v2) sont calculés ou préparés. De plus, la variable Pres (P_res) pour le point du résultat et la variable s pour le facteur de l'équation linéaire (1) sont également définies.

Calcul de la distance dans une boucle

Cet exemple utilise le traitement des résultats à partir des nœuds EF. Le contrôle de la distance est effectué dans une boucle sur le champ des résultats. Ces résultats doivent d'abord être obtenus via l'interface ICalculation2, puis IResults. Dans cette boucle, le point Pres est d'abord décrit avec les coordonnées de la valeur de résultat pour plus de clarté. L'Équation (4) peut ensuite être calculée. Une fois la variable s calculée, il est possible de vérifier si la valeur est inférieure à zéro ou supérieure à un, car ces valeurs se situent en dehors de la ligne droite, avant ou après. Si une valeur se trouve dans cette intervalle, la distance est calculée à l'aide de l'Équation (6).

    '       get results in fe-nodes
    Dim iCalc As ICalculation2
    Set iCalc = iModel.GetCalculation
    
    Dim iRes As RFEM5.IResults
    Set iRes = iCalc.GetResultsInFeNodes(LoadCaseType, loadcase_no)
    
    Dim surfBaStr() As RFEM5.SurfaceBasicStresses
    surfBaStr = iRes.GetSurfaceBasicStresses(surface_no, AtNo)
    
    '       loop through stresses and calculate distance to line
    Dim i As Integer
    For i = 0 To UBound(surfBaStr, 1)
        P_res.X = surfBaStr(i).Coordinates.X
        P_res.Y = surfBaStr(i).Coordinates.Y
        P_res.Z = surfBaStr(i).Coordinates.Z
        '   calculate factor for line equation of intersection
        s = ((P_res.X-A.X)*v.X + (P_res.Y-A.Y)*v.Y + (P_res.Z-A.Z)*v.Z) / v2
        
        If s <= 1 + d_tol And s >= 0 - d_tol Then
            '   calculate distance of intersection point and fe-node
            d = ((P_res.X-(A.X+s*v.X))^2
                 +(P_res.Y-(A.Y+s*v.Y))^2
                 +(P_res.Z-(A.Z+s*v.Z))^2)^0.5
            
            If (d < d_tol) Then
                ' here you can process the found result point
            End If
        End If
        
    Next i

La vérification du facteur s et de la distance d est soumise à une tolérance afin qu'aucune imprécision mineure n'entraîne l'exclusion d'un résultat.

Résultats du programme

Les valeurs trouvées par le programme sont affichées dans le tableau, où elles sont arrondies à la deuxième décimale.

σy+ [N/mm²]Facteur s [-]
21,900,0
17,280,1
12,790,2
8,430,3
4,170,4
- 0,040,5
- 4,250,6
- 8,510,7
- 12,870,8
- 17,360,9
- 21,981,0

À titre de comparaison, les valeurs du diagramme de résultats sur la ligne correspondante sont affichées sur la Figure 03.

On constate que les valeurs sont les mêmes, que la correspondance est parfaite ou que toutes les valeurs ont été trouvées sur la ligne.

Résumé

Un calcul de vecteurs permet d'élaborer un programme grâce auquel on peut trouver des nœuds le long d'une ligne. Cet algorithme sert également à trouver d'autres éléments géométriques en plus des résultats. Cette méthode est particulièrement utile car il est impossible d'effectuer visuellement une sélection via l'interface COM, mais une fonction le permet. Il est possible d'évaluer automatiquement les résultats, notamment pour les programmes exécutés en tâche de fond.


Auteur

M. Günthel fournit une assistance technique aux clients de Dlubal Software.

Liens
Téléchargements