2091x
001379
20.12.2016

Interface COM en VBA | 2.1 Création d'une barre

Im ersten Teil der Serie ging es um das Öffnen und Erstellen eines Modells in RFEM. Im zweiten Teil soll es am Beispiel eines Stabes um das Anlegen und Verändern von Elementen gehen. Die Elemente aus Teil 1 werden daher nicht erneut angesprochen.

Fonctions de base

Dans RFEM, une barre est composée de plusieurs éléments plus ou moins dépendants les uns des autres. Si l'un de ces éléments est manquant, la barre ne peut pas être créée. La structure suivante doit être respectée :

Pour créer ce type d'élément, vous devez disposer de l'interface pour les données structurelles :

'Obtenir l'interface pour les données de modèle.
Dim iModelData As iModelData

Set iModelData = iModel.GetModelData()

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

Mode de modification

Une fois les données à modifier ou à créer dans RFEM, RFEM doit passer en mode de modification. Par exemple, il est impossible d'effectuer des calculs dans ce mode et les données transférées ne sont disponibles qu'après avoir quitté ce mode. Il faut utiliser la méthode PrepareModification() pour passer en mode de modification et FinishModification() pour quitter le mode :

' Transférer des éléments en mode de modification.
iModelData.PrepareModification
' ...
iModelData.FinishModification

Création des éléments

L'objectif est de créer une barre avec la section IPE 100 et l'acier structurel S235 depuis le point P0 (0,0,0) au point P1 (1,0,0). Tout d'abord, vous devez créer des nœuds. Dans cet exemple, un tableau est utilisé car celui-ci offre la plus grande flexibilité pour d'autres modifications de programme :

' Créer des nœuds.
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é ci-dessus, le tableau, y compris les données de nœud, est transféré à l'aide des méthodes PrepareModification() et FinishModification(). Pour la numérotation, les éléments suivants sont importants : lorsqu'un nouvel élément qui contient déjà les numéros de référence doit être transféré, les éléments existants ne sont pas écrasés. Cependant, l'élément est ajouté à la fin de la liste. Si vous entrez un zéro, l'élément est automatiquement défini sur la position libre suivante.

Le processus de création de lignes est similaire, avec la petite différence de se référer aux nœuds. La liste de nœuds est transférée sous forme de chaîne comme dans RFEM :

' Créer des lignes.
Dim lineList(0 To 0) As RFEM5.Line
lineList(0).nodeList = "1,2"
lineList(0).Type = LineType.PolylineType

' Transférer des éléments en mode de modification.
iModelData.PrepareModification
iModelData.SetLines lineList
iModelData.FinishModification

Modification des éléments

Pour créer une section, vous devez d'abord créer un matériau. Dans un nouveau modèle RFEM, les matériaux du modèle créé précédemment sont toujours utilisés en premier. Afin de vous assurer que le bon matériau est utilisé, vous devez supprimer ou modifier tous les matériaux existants. Dans ce cas, la méthode la plus simple est de supprimer tous les matériaux existants et d'en créer un nouveau. Contrairement à la création de nouveaux éléments, l'interface de chaque élément doit être activée en cas de suppression ou de modification. Les étapes sont les suivantes :

' Obtenir le nombre de matériaux existants.
Dim num As Integer
num = iModelData.GetMaterialCount

' Faire une boucle sur les matériaux existants.
iModelData.PrepareModification
Dim iAs Integer
For i = 0 To num - 1
' Obtenir l'interface avec le matériau.
Dim iMat As RFEM5.IMaterial
Set iMat = iModelData.GetMaterial(i, AtIndex)
' Supprimer le matériau.
iMat.Delete
Next i
iModelData.FinishModification

L'interface d'un matériau peut être obtenue via le numéro d'article correspondant (AtNo) ou via l'index dans la liste de tous les matériaux. Contrairement au numéro de matériau, l'index commence à zéro et ne présente pas d'écarts.

Achèvement de la barre

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

' Créer un nouveau matériau à partir de la bibliothèque de matériaux.
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

' Transférer des éléments en mode de modification.
iModelData.PrepareModification
iModelData.SetMaterials mats
iModelData.FinishModification
Une section est créée de la même manière que le matériau. De plus, le numéro du matériau est spécifié :
' Créer une nouvelle section à partir de la bibliothèque.
Dim crs(0 To 0) As RFEM5.CrossSection
crs(0).TextID = "IPE 100"
crs(0).MaterialNo = 1
crs(0).No = 1

' Transférer des éléments en mode de modification.
iModelData.PrepareModification
iModelData.SetCrossSections crs
iModelData.FinishModification
Étant donné que tous les éléments de la barre ont été créés, la barre peut maintenant être transférée :
' Créer une nouvelle barre.
Dim mems(0 To 0) As RFEM5.Member
mems(0).LineNo = 1
mems(0).StartCrossSectionNo = 1
mems(0).No = 1

' Transférer des éléments en mode de modification.
iModelData.PrepareModification
iModelData.SetMembers mems
iModelData.FinishModification

Comme dans RFEM, il suffit ici de préciser la section au début de la barre. Il n'est pas nécessaire de créer une libération à l'extrémité de barre, car elle est automatiquement supposée rigide.

Optimisation

Jusqu'à présent, le mode de modification a été récupéré pour chaque élément individuellement. Pour accélérer le traitement des données, vous pouvez transférer tous les éléments dans un même mode de modification. Les exceptions sont la suppression de matériaux et la création de nouveaux matériaux. Dans ce cas, vous devez utiliser deux blocs séparés, car il est impossible de supprimer et de créer des éléments dans un même bloc :

' Supprimer des éléments en mode de modification.
iModelData.PrepareModification
Dim iAs Integer
For i = 0 To num - 1
' Obtenir l'interface avec le matériau.
Dim iMat As RFEM5.IMaterial
Set iMat = iModelData.GetMaterial(i, AtIndex)
' Supprimer le matériau.
iMat.Delete
Next i
iModelData.FinishModification

' Transférer des éléments en mode de modification.
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 constituent la base de tous les éléments structuraux qui peuvent être transférés via COM. Les libérations de barre non linéaires ou les appuis nodaux, qui incluent une imbrication supplémentaire, sont des exceptions. Ces éléments seront expliqués dans les articles suivants de cette série.


Auteur

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

Liens
Téléchargements