Interface COM en VBA | 2.1 Créer une barre

Article technique

La première partie de cette série d’articles traitant de l’interface COM a décrit l’ouverture et la création de modèle dans RFEM. Cette deuxième partie explique la création et la modification des éléments à l’aide d’un exemple de barre. Les éléments décrits dans la Partie 1 ne seront pas décrits à nouveau.

Théorie

Une barre dans RFEM consiste en plusieurs éléments plus ou moins interdépendants. Si l’un de ces éléments est manquant, la barre ne peut alors pas être créée. La structure suivante doit être respectée.

Figure 01 – Structure d’une barre

Pour créer un élément de la sorte, il vous faut l’interface pour les données de structure :

' Get interface for model data.
Dim iModelData As iModelData
Set iModelData = iModel.GetModelData()

Cette interface permet de transférer les données vers RFEM.

Mode édition

Une fois que les données dans RFEM sont à modifier, ou encore pour la création de données, RFEM doit passer en mode édition. Il n’est par exemple pas possible de réaliser des calculs dans ce mode, de même, les données transférées ne sont que disponibles après avoir quitté le mode édition. Il est nécessaire d’utiliser la méthode PrepareModification() pour passer en mode édition et FinishModification() pour quitter le mode :

' Transfer elements to editing mode.
iModelData.PrepareModification
' ...
iModelData.FinishModification

Création d’éléments

L’objectif est de créer une barre de section IPE 100 et en acier S235 à partir du point P0(0,0,0) jusqu’au point P1(1,0,0). Il est d’abord nécessaire de créer les nœuds. Dans l’exemple suivant, nous utilisons une bibliothèque, c’est la méthode qui permet le plus de flexibilité pour la modification :

' Create nodes.
Dim nodeList (0 To 1) As RFEM5.Node
nodeList(0).RefObjectNo = 0
nodeList(0).No = 1
nodeList(0).X = 0#
nodeList(0).Y = 0#
nodeList(0).Z = 0#

nodeList(1).RefObjectNo = 0
nodeList(1).No = 2
nodeList(1).X = 1#
nodeList(1).Y = 0#
nodeList(1).Z = 0#

iModelData.PrepareModification
iModelData.SetNodes nodeList
iModelData.FinishModification

Comme mentionné précédemment, la bibliothèque comprenant les données de nœud est transférée par les méthodes PrepareModification() et FinishModification(). Avant la numérotation, il est important de savoir que : lorsqu’un nouvel élément à transférer comprend déjà des numéros de référence, les éléments existants ne sont pas écrasés, mais l’élément est ajouté en fin de liste. Si vous entrez un zéro, l’élément est automatiquement disposé à la position suivante.

Le processus de création de lignes est similaire, avec la différence de relation aux nœuds. La liste de nœuds est transférée comme une chaîne de caractères comme dans RFEM :

' Create lines.
Dim lineList(0 To 0) As RFEM5.Line
lineList(0).nodeList = "1,2"
lineList(0).Type = LineType.PolylineType

' Transfer elements to editing mode.
iModelData.PrepareModification
iModelData.SetLines lineList
iModelData.FinishModification

Modification d’éléments

Pour créer une section, il est d’abord nécessaire de créer un matériau. Dans un nouveau modèle RFEM, les matériaux du modèle créés précédemment sont utilisés en priorité. Pour vous s’assurer que le bon matériel est utilisé, il est nécessaire de supprimer ou modifier tous les matériaux existants. Supprimer tous les matériaux et créer un nouveau matériau est la méthode la plus simple. Contrairement à la création de nouveaux éléments, l’interface des éléments individuels doit être activée dans le cas d’une suppression ou modification. La marche à suivre est :

' Get number of existing materials.
Dim num As Integer
num = iModelData.GetMaterialCount

' Loop over existing materials.
iModelData.PrepareModification
Dim i As Integer
For i = 0 To num - 1
' Get interface to material.
Dim iMat As RFEM5.IMaterial
Set iMat = iModelData.GetMaterial(i, AtIndex)
' Delete material.
iMat.Delete
Next i
iModelData.FinishModification

Vous obtenez l’interface d’un matériau soit par le numéro pertinent de matériau (AtNo) ou par l’index dans la liste de tous les matériaux. Contrairement au numéro de matériau, l’index commence à 0 et n’a pas d’interruption.

Conclure la création de barre

Après avoir supprimé tous les matériaux, vous pouvez en créer un nouveau. Tout comme dans RFEM, il est également possible ici de transférer directement le matériau à partir de la bibliothèque de matériaux avec uniquement son nom. Pour réaliser cette opération, la chaîne de caractères correspondante est entrée à l’aide de la propriété TextID (pour plus de détails, voir RF-COM 5.chm dans SDK) :

' Create new material from material library.
Dim mats(0 To 0) As RFEM5.Material
mats(0).TextID = "NameID|Steel S 235@TypeID|STEEL@StandardID|DIN EN 1993-1-1-10"
mats(0).No = 1

' Transfer elements to editing mode.
iModelData.PrepareModification
iModelData.SetMaterials mats
iModelData.FinishModification

Une section est créée tout comme un matériel. De plus, le numéro de matériau est précisé :

' Create new cross‑section from library.
Dim crs(0 To 0) As RFEM5.CrossSection
crs(0).TextID = "IPE 100"
crs(0).MaterialNo = 1
crs(0).No = 1

' Transfer elements to editing mode.
iModelData.PrepareModification
iModelData.SetCrossSections crs
iModelData.FinishModification

Maintenant que tous les éléments de la barre ont été créés, la barre peut être transférée :

' Create new member.
Dim mems(0 To 0) As RFEM5.Member
mems(0).LineNo = 1
mems(0).StartCrossSectionNo = 1
mems(0).No = 1

' Transfer elements to editing mode.
iModelData.PrepareModification
iModelData.SetMembers mems
iModelData.FinishModification

Tout comme dans RFEM, il est ici suffisant de préciser la section en début de de barre et inutile de créer une libération de fin de barre car celle-ci est automatiquement considérée comme rigide.

Optimisation

Jusqu’ici, le mode édition a été utilisé pour des éléments individuels. Pour augmenter la vitesse de traitement de données, vous pouvez transférer tous les éléments dans un mode d’édition unique, excepté pour la suppression de matériaux et pour la création d’un nouveau matériau. Dans ce cas, il est nécessaire d’utiliser deux blocs séparés car il n’est pas possible de supprimer et créer des éléments dans un bloc :

' Delete elements in editing mode.
iModelData.PrepareModification
Dim i As Integer
For i = 0 To num - 1
' Get interface to material.
Dim iMat As RFEM5.IMaterial
Set iMat = iModelData.GetMaterial (i, AtIndex)
' Delete material.
iMat.Delete
Next i
iModelData.FinishModification

' Transfer elements to editing mode.
iModelData.PrepareModification

iModelData.SetNodes nodeList
iModelData.SetLines lineList
iModelData.SetMaterials mats
iModelData.SetCrossSections crs
iModelData.SetMembers mems

iModelData.FinishModification

Résumé et aperçu

Les procédures expliquées dans cet article sont la base pour tous les éléments structurels qui peuvent être transférés via COM. Les exceptions à cette règle sont les libérations non-linéaires de barre ou les appuis nodaux avec imbrication. Ces éléments seront expliqués dans les articles à venir de cette série.

Téléchargements

Liens

Contactez-nous

Contactez-nous

Vous avez des questions relatives à nos produits ? Vous avez besoin de conseils pour votre projet en cours ? Contactez-nous ou visitez notre FAQ, vous y trouverez de nombreuses astuces et solutions.

+33 1 78 42 91 61

info@dlubal.fr

RFEM Logiciel principal
RFEM 5.xx

Programme de base

Logiciel de calcul de structures aux éléments finis (MEF) pour les structures 2D et 3D composées de plaques, voiles, coques, barres (poutres), solides et éléments d'assemblage

Prix de la première licence
3 540,00 USD