Rozhraní COM ve VBA 2: Vytvoření prutu 1

Odborný článek

V prvním dílu série článků o rozhraní COM jsme se věnovali otevření a vytvoření modelu v programu RFEM. V druhé části si na příkladu prutu ukážeme vytváření a úpravu prvků. Kroky popsané v prvním příspěvku již ponecháme stranou.

Základy

Prut se v programu RFEM skládá z několika prvků, které jsou na sobě více či méně závislé. Pokud některý z daných prvků chybí, nelze prut vytvořit. Je přitom třeba zachovávat následující hierarchii.

Obr. 01 - Hierarchie prvků u prutu

Pokud chceme takový prvek vytvořit, je třeba vyvolat rozhraní pro údaje o konstrukci:

' Vyvolat rozhraní pro údaje o modelu.
Dim iModelData As iModelData
Set iModelData = iModel.GetModelData()

Toto rozhraní umožňuje nakonec předat data do programu RFEM.

Editační režim

Pokud chceme údaje v programu RFEM zadat nebo upravit, je třeba RFEM přepnout do editačního režimu. V tomto režimu nelze například provádět žádné výpočty a předaná data jsou k dispozici teprve po ukončení režimu. Pro přechod do editačního režimu je třeba použít metodu PrepareModification() a pro ukončení režimu FinishModification():

' Převést prvky do editačního režimu.
iModelData.PrepareModification
' ...
iModelData.FinishModification

Vytváření prvků

Cílem je vytvořit prut s průřezem IPE 100 z oceli S235 z bodu B0(0,0,0) do bodu B1(1,0,0). Nejdříve je třeba vytvořit uzly. V následujícím příkladu použijeme array, protože poskytuje značnou flexibilitu v případě dalších změn v programu:

' Vytvořit uzly.
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

Jak jsme již výše zmínili, array s údaji o uzlech se pak předá do programu za použití metod PrepareModification() a FinishModification(). Pro číslování je důležitá následující skutečnost: Pokud se předává nový prvek a uvedené číslo již existuje, pak se stávající prvky nepřepíšou, ale nové prvky se připojí na konec seznamu. Pokud zadáme nulu, prvek se automaticky umístí na nejbližší volné místo.

Linie se vytvoří podobně s tím menším rozdílem, že je v tomto případě pochopitelně třeba odkázat na dané uzly. Seznam uzlů se převádí jako znakový řetězec stejně jako v programu RFEM:

' Vytvořit linie.
Dim lineList(0 To 0) As RFEM5.Line
lineList(0).nodeList = "1,2"
lineList(0).Type = LineType.PolylineType

' Převést prvky do editačního režimu.
iModelData.PrepareModification
iModelData.SetLines lineList
iModelData.FinishModification

Úprava prvků

Pokud chceme zadat průřez, je třeba nejdříve vytvořit materiál. V novém modelu v programu RFEM se vždy nejdříve používají materiály z naposledy vytvořeného modelu. Pokud chceme mít jistotu, že se použije požadovaný materiál, je třeba nejdříve smazat nebo upravit všechny stávající materiály. Nejjednodušší je přitom všechny stávající materiály smazat a vytvořit nový materiál. Na rozdíl od vytváření nových prvků je třeba při mazání nebo úpravě prvků vyvolat rozhraní k jednotlivým prvkům. Postupujeme přitom následovně:

' Vyvolat počet stávajících materiálů.
Dim num As Integer
num = iModelData.GetMaterialCount

' Smyčka přes stávající materiály.
iModelData.PrepareModification
Dim i As Integer
For i = 0 To num - 1
' Vyvolat rozhraní k materiálu.
Dim iMat As RFEM5.IMaterial
Set iMat = iModelData.GetMaterial(i, AtIndex)
' Smazat materiál.
iMat.Delete
Next i
iModelData.FinishModification

Rozhraní materiálu se vyvolá buď přes příslušné číslo materiálu (AtNo) anebo přes index v seznamu všech materiálů. Na rozdíl od čísla materiálu začíná index nulou a nevykazuje žádné mezery.

Dokončení prutu

Jakmile jsou nyní smazány všechny materiály, můžeme vytvořit nový materiál. Stejně jako v programu RFEM lze i tady materiál vyvolat na základě jeho názvu přímo z databáze materiálů. Pro zadání příslušného znakového řetězce použijeme vlastnost TextID (pro detaily viz RF‑COM‑5.chm v SDK):

' Zadat nový materiál z databáze.
Dim mats(0 To 0) As RFEM5.Material
mats(0).TextID = "NameID|Baustahl S 235@TypeID|STEEL@NormID|DIN EN 1993-1-1-10"
mats(0).No = 1

' Převést prvky do editačního režimu.
iModelData.PrepareModification
iModelData.SetMaterials mats
iModelData.FinishModification

Stejně jako materiál se vytvoří také průřez. Navíc uvedeme ještě číslo materiálu:

' Zadat průřez z databáze.
Dim crs(0 To 0) As RFEM5.CrossSection
crs(0).TextID = "IPE 100"
crs(0).MaterialNo = 1
crs(0).No = 1

' Převést prvky do editačního režimu.
iModelData.PrepareModification
iModelData.SetCrossSections crs
iModelData.FinishModification

Vytvořili jsme tak všechny prvky pro prut, proto můžeme nyní prut převést:

' Vytvořit nový prut.
Dim mems(0 To 0) As RFEM5.Member
mems(0).LineNo = 1
mems(0).StartCrossSectionNo = 1
mems(0).No = 1

' Převést prvky do editačního režimu.
iModelData.PrepareModification
iModelData.SetMembers mems
iModelData.FinishModification

Stejně jako v programu RFEM stačí i zde zadat průřez na počátku prutu a není třeba vytvářet kloub na konci prutu, automaticky se bude uvažovat tuhé podepření.

Optimizace

Dosud jsme jednotlivě pro každý seznam prvků vyvolávali editační režim. Pokud chceme editaci zrychlit, můžeme všechny prvky převést v rámci jednoho editačního režimu. Výjimku představuje mazání materiálů a vytváření nového materiálu. V tomto případě je třeba použít dva samostatné bloky, protože v rámci jediného bloku nelze prvky mazat a vytvářet:

' Smazat prvky v editačním režimu.
iModelData.PrepareModification
Dim i As Integer
For i = 0 To num - 1
' Vyvolat rozhraní k materiálu.
Dim iMat As RFEM5.IMaterial
Set iMat = iModelData.GetMaterial(i, AtIndex)
' Smazat materiál.
iMat.Delete
Next i
iModelData.FinishModification

' Převést prvky do editačního režimu.
iModelData.PrepareModification

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

iModelData.FinishModification

Shrnutí

Výše uvedený postup tvoří základ pro všechny konstrukční prvky, které lze převádět prostřednictvím COM. Výjimku představují nelineární klouby na koncích prutů nebo uzlové podpory, které obsahují další vnoření. Z tohoto důvodu se budeme v následujících článcích této série zabývat těmito prvky.

Odkazy

Kontakt

Kontakt

Máte dotazy nebo potřebujete poradit?
Kontaktujte nás nebo využijte stránky s často kladenými dotazy.

+420 227 203 203

info@dlubal.cz