1547x
001459
29.6.2017

Rozhraní COM ve VBA | 4.1 Optimalizace rámu

V části 4.1 a 4.2 této série se budeme zabývat optimalizací rámu pomocí přídavného modulu RF-/STEEL EC3. V následující části přitom popíšeme připojení modulu a vyvolání relevantních prutů. Prvky, kterými jsme se zabývali již v předchozích článcích, ponecháme stranou.

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ůřezu
Dim crsc_descAs String

crsc_desc ="IPE 300"

' Vyvolat všechny průřezy z programu RFEM
Dim crscs()As RFEM5.CrossSection
crscs = iModelData.GetCrossSections

' Smyčka přes všechny průřezy
Dim crsc_noAs Long
crsc_no = -1
Dim iAs Long
Krátký dotaz - rychlá odpověď: i = 0Komu UBound(crscs, 1)
' Pokud označení průřezu souhlasí, uložit číslo průřezu
If InStr(LCase(crscs(i).Description), LCase(crsc_desc)) > 0Then
crsc_no = crscs(i).No
Exit For
End If
Další i

' Ukončit program, pokud požadovaný průřez nebyl nalezen
If crsc_no = -1Then
Err.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 nulu
Dim mems_strAs String
mems_str = vbanullstr

' Vyvolat všechny pruty z programu RFEM
Dim mems()As RFEM5.Member
mems = iModelData.GetMembers

' Smyčka přes všechny pruty
Krá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ězce
If mems(i).EndCrossSectionNo = crsc_noThen
If mems(i).EndCrossSectionNo = mems(i).StartCrossSectionNoThen
mems_str = mems_str & mems(i).No & ","
End If
End If
Další i

' Ukončit program, pokud nebyl nalezen žádný prut
If mems_str = vbanullstrThen
Err.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 modul
Dim iStec3As STEEL_EC3.Module
Set 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 modulu
Dim countAs Long
count = iStec3.moGetCaseCount

' Pokud případy existují, vždy smazat první v tabulce
If count > 0Then
Krátký dotaz - rychlá odpověď: i = 0Komu count - 1
iStec3.moDeleteCase i, AT_INDEX
Další i
End 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.ICase
Set 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_FUNDAMENTAL
iStec3_uls_loads(0).No = 1
iStec3_uls_loads(0).Type = ILOAD_GROUP

iStec3_uls_loads(1).DesignSituation = DS_FUNDAMENTAL
iStec3_uls_loads(1).No = 2
iStec3_uls_loads(1).Type = ILOAD_GROUP

iStec3_uls_loads(2).DesignSituation = DS_FUNDAMENTAL
iStec3_uls_loads(2).No = 3
iStec3_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.


Autor

Ing. Günthel zajišťuje technickou podporu zákazníkům.

Odkazy
Stahování