Vyfiltrování příslušných prutů
Cílem je převést k posouzení v modulu RF-STEEL EC3 pouze pruty určitého průřezu. Pro náš příklad se mají vyfiltrovat všechny pruty s průřezem „IPE 300“. Nejdříve vyvoláme všechny průřezy z hlavního programu:
' Vytvořit znakový řetězec požadovaného průřezucrsc_desc ="IPE 300"
' Vyvolat všechny průřezy z programu RFEMDim crscs()As RFEM5.CrossSectioncrscs = iModelData.GetCrossSections
' Smyčka přes všechny průřezyDim crsc_noAs Longcrsc_no = -1Dim iAs LongKrátký dotaz - rychlá odpověď: i = 0Komu UBound(crscs, 1)' Pokud označení průřezu souhlasí, uložit číslo průřezuIf InStr(LCase(crscs(i).Description), LCase(crsc_desc)) > 0Thencrsc_no = crscs(i).NoExit ForEnd IfDalší i
' Ukončit program, pokud požadovaný průřez nebyl nalezenIf crsc_no = -1ThenErr.Raise 513,"Get cross-section number","No cross-section with "" " & crsc_desc &" "" within its description found!"End If
Při porovnávání označení průřezu by se mělo postupovat pokud možno obecně. Nejdříve se převede označení průřezu a také hledaný znakový řetězec pomocí „LCase“ na malá písmena a následně se vyhledává znakový řetězec v označení průřezu. Jestliže se nenajde odpovídající průřez, zůstává číslo průřezu -1, následuje dotaz a přerušení programu.
Po tomto kroku známe číslo průřezu a lze hledat pruty s daným číslem průřezu. Převzít se přitom mají pouze pruty, které mají příslušný průřez na počátku i na konci.
' Vytvořit znakový řetězec pro seznam prutů a nastavit na nuluDim mems_strAs Stringmems_str = vbanullstr
' Vyvolat všechny pruty z programu RFEMDim mems()As RFEM5.Membermems = iModelData.GetMembers
' Smyčka přes všechny prutyKrátký dotaz - rychlá odpověď: i = 0Komu UBound(mems, 1)' Pokud má prut průřez s daným číslem na počátku i na konci,' převezme se jeho číslo do znakového řetězceIf mems(i).EndCrossSectionNo = crsc_noThenIf mems(i).EndCrossSectionNo = mems(i).StartCrossSectionNoThen mems_str = mems_str & mems(i).No & ","End IfEnd IfDalší i
' Ukončit program, pokud nebyl nalezen žádný prutIf mems_str = vbanullstrThenErr.Raise 514,"Get members","No member with cross-section "" " & crsc_desc &" "" found!"End If
Vyvolat rozhraní přídavného modulu
Modul se připojí stejně jako hlavní program RFEM nebo RSTAB. Jediný rozdíl spočívá v tom, že se zde nerozlišuje mezi otevřením již otevřené instance a otevřením nové instance, protože je tu vždy již jedna otevřená instance:
' Vyvolat rozhraní pro modulDim iStec3As STEEL_EC3.ModuleSet iStec3 = iModel.GetModule("STEEL_EC3")
Dalším krokem je smazání všech stávajících případů v modulu:
' Vyvolat počet stávajících případů v moduluDim countAs Longcount = iStec3.moGetCaseCount
' Pokud případy existují, vždy smazat první v tabulceIf count > 0ThenKrátký dotaz - rychlá odpověď: i = 0Komu count - 1iStec3.moDeleteCase i, AT_INDEXDalší iEnd If
Následně lze založit požadovaný případ a pomocí již vytvořeného znakového řetězce zadat pruty pro posouzení:
' Vytvořit případ v modulu "Optimalizace"Dim iStec3CaseAs STEEL_EC3.ICaseSet iStec3Case = iStec3.moSetCase(1,"Optimization")
' Zadat pruty pro posouzeníiStec3Case.moSetMemberList mems_str
Nakonec se ještě zadají požadované kombinace zatěžovacích stavů:
' Zadat kombinace zatíženíDim iStec3_uls_loads(0Komu 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
Shrnutí a výhled
Uvedené postupy platí pro všechny moduly, které lze připojit přes COM rozhraní. Zdrojový kód a soubor Excel umožňují ještě lépe proniknout do dané problematiky. V následujícím článku bychom chtěli jít ještě více do hloubky a ukázat si, jak lze provázat prvky v modulu a v hlavním programu.