Filtrage des barres pertinentes
L'objectif est de transférer uniquement les barres d'une certaine section vers le calcul RF-/STEEL EC3. Dans l'exemple suivant, toutes les barres avec la section IPE 300 doivent être filtrées. Pour ce faire, toutes les sections doivent d'abord être extraites du programme principal :
' Créer une chaîne de la section souhaitéecrsc_desc ="IPE 300"
' Obtenir toutes les sections de RFEMDim crscs()As RFEM5.CrossSectioncrscs = iModelData.GetCrossSections
' Faire un boucle sur toutes les sectionsDim crsc_noAs Longcrsc_no = -1Dim iAs LongFor i = 0To UBound(crscs, 1) ' Si la description de la section est correcte, enregistrez le numéro de la sectionIf InStr(LCase(crscs(i).Description), LCase(crsc_desc)) > 0Then crsc_no = crscs(i).No Exit ForEnd IfNext i
' Quitter le programme si la section souhaitée n'a pas été trouvéeIf crsc_no = -1ThenErr.Raise 513, "Get cross-section number","No cross-section with "" " & crsc_desc &" "" within its description found!"End If
La description de la section doit être synchronisée aussi généralement que possible. Pour ce faire, la description de la section ainsi que la chaîne à rechercher sont d'abord définies en lettres minuscules via « LCase », puis la chaîne est recherchée dans la description de la section. Si aucune section appropriée n'est trouvée, le numéro de section reste à -1, ce qui peut être demandé et acquitté par un abandon.
Après cette étape, le numéro de section est connu et les barres avec ce numéro de section peuvent être recherchées. Seule la barre avec cette section au début et à la fin de la barre doit être reprise :
' Créer une chaîne pour la liste de barres et la définir à zéroDim mems_strAs Stringmems_str = vbanullstr
' Obtenir toutes les barres de RFEMDim mems()As RFEM5.Membermems = iModelData.GetMembers
' Faire un boucle sur toutes les barresFor i = 0To UBound(mems, 1)' Si une barre a ce numéro de section au début et à la fin,' alors prenez ce nombre dans la chaîneIf mems(i).EndCrossSectionNo = crsc_noThenIf mems(i).EndCrossSectionNo = mems(i).StartCrossSectionNoThen mems_str = mems_str & mems(i).No & ","End IfEnd IfNext i
' Quitter le programme si aucune barre n'a été trouvéeIf mems_str = vbanullstrThenErr.Raise 514, "Get members","No member with cross-section "" " & crsc_desc &" "" found!"End If
Obtenir l'interface du module additionnel
Le lien vers un module est identique à celui vers RFEM ou RSTAB. La seule différence est qu'il n'y a pas de différence entre l'ouverture d'une instance déjà ouverte et l'ouverture d'une nouvelle instance, car il y a toujours une instance déjà ouverte :
' Obtenir l'interface pour le moduleDim iStec3As STEEL_EC3.ModuleSet iStec3 = iModel.GetModule("STEEL_EC3")
Tous les cas de module existants sont ensuite supprimés :
' Obtenir le nombre de cas de module existantsDim countAs Longcount = iStec3.moGetCaseCount
' S'il y a des cas, supprimez toujours le premier dans le tableauIf count > 0Then For i = 0To count - 1 iStec3.moDeleteCase i, AT_INDEXNext iEnd If
Vous pouvez maintenant créer le cas souhaité et entrer la barre à vérifier à l'aide de la chaîne créée précédemment.
' Création du cas de module 'Optimization'Dim iStec3CaseAs STEEL_EC3.ICaseSet iStec3Case = iStec3.moSetCase(1,"Optimization")
' Définir les barres pour le calculiStec3Case.moSetMemberList mems_str
Enfin, vous pouvez entrer les combinaisons de charges souhaitées :
' Définir les combinaisons de chargesDim iStec3_uls_loads(0To 2) As STEEL_EC3.ULS_LOAD
iStec3_uls_loads(0).DesignSituation = DS_FUNDAMENTALiStec3_uls_loads(0).No = 1iStec3_uls_loads(0).Type = ILOAD_GROUP
iStec3_uls_loads(1).DesignSituation = DS_FUNDAMENTALiStec3_uls_loads(1).No = 2iStec3_uls_loads(1).Type = ILOAD_GROUP
iStec3_uls_loads(2).DesignSituation = DS_FUNDAMENTALiStec3_uls_loads(2).No = 3iStec3_uls_loads(2).Type = ILOAD_GROUP
iStec3Case.moSetULSLoads iStec3_uls_loads
Résumé et perspectives
Les procédures décrites dans cet article peuvent être utilisées pour tous les modules qui peuvent être contrôlés par COM. Le code source et le fichier Excel vous aident à mieux comprendre le sujet traité. Dans le prochain article, nous approfondirons ce sujet en expliquant le lien entre les éléments dans le module et dans le programme principal.