836x
004409
27.4.2020

Dotaz

Jak mohu vytvořit řez pomocí rozhraní COM?


Odpověď:
Řez je v zásadě prvek jako například prut a vytváří se stejným způsobem. Nejdříve je vyžadováno rozhraní k objektům. Pro prut by to bylo IModelData a pro řezy to je ISections. Toto rozhraní se nachází v IModel3:

Sub test_section()
' get interface from the opened model and lock the licence/program
Dim iModel As RFEM5.IModel3
Set iModel = GetObject(, "RFEM5.Model")
iModel.GetApplication.LockLicense
    
On Error GoTo E
    
Dim iSecs As RFEM5.ISections
Set iSecs = iModel.GetSections()

Všechny dříve vytvořené řezy se nejdříve smažou a vytvoří se dva nové řezy.
První řez by měl být řez tělesem s viditelnou rovinou řezu (viz Obrázek 01). Vstup je analogický k zadání v programu RFEM. Jako typ vybereme "SectionOnSectionalArea", rohové body řezu se nastaví pomocí "EdgePoint" a "Vector" udává směr řezu:

' first delete all sections
iSecs.PrepareModification
iSecs.DeleteObjects ("All")
iSecs.FinishModification
    
' set section on solid
Dim sec As RFEM5.Section
sec.EdgePointA.X = 2
sec.EdgePointA.Y = 5
sec.EdgePointA.Z = 0
sec.EdgePointB.X = 2
sec.EdgePointB.Y = 8
sec.EdgePointB.Z = 0
    
sec.no = 1
sec.Name = "solid section"
sec.Plane = GlobalPlaneInPositiveX
sec.ShowValuesInIsolines = False
sec.Type = SectionOnSolidSectionLine
sec.ObjectList = "1"
    
iSecs.PrepareModification
iSecs.SetSection sec
iSecs.FinishModification

Jak je již známo z jiných prvků, bude nový řez na konci předán v bloku Prepare-/FinishModification. Jako druhý řez má být vytvořený řez plochou (viz Obrázek 02). K tomu je třeba použít typ "SectionViaSurfacePlane". V případě řezu plochou je nutné kromě zadání vektoru směru řezu vybrat také rovinu zobrazení výsledků. V následujícím příkladu je rovina xy vybrána pomocí nastavení "GlobalPlaneInPositiveX":

' set section on surface
sec.EdgePointA.X = 2
sec.EdgePointA.Y = 0
sec.EdgePointA.Z = 0
sec.EdgePointB.X = 2
sec.EdgePointB.Y = 3
sec.EdgePointB.Z = 0
    
sec.no = 2
sec.Name = "surface section"
sec.Plane = GlobalPlaneInPositiveX
    
sec.ShowValuesInIsolines = True
sec.Type = SectionViaSurfacePlane
sec.ObjectList = "1"
    
sec.Vector.X = 0
sec.Vector.Y = 0
sec.Vector.Z = 1
    
iSecs.PrepareModification
iSecs.SetSection sec
iSecs.FinishModification

Výsledky řezu lze dostat také pomocí samostatné metody "GetResultsInSection" rozhraní "IResults2". V následujícím se dostanou smykové síly na řezu plochy. Průběh vnitřních sil se nastaví na "spojitě po ploše" pomocí "ContinuousDistributionWithinObjects":

' get results
Dim iCalc As ICalculation2
Set iCalc = iModel.GetCalculation
    
Dim iRes As IResults2
Set iRes = iCalc.GetResultsInFeNodes(LoadCaseType, 1)
    
Dim secRes() As RFEM5.SectionResult
secRes = iRes.GetResultsInSection(2, AtNo,
ShearForceVy,ContinuousDistributionWithinObjects, False)

V příloze najdete makro v Excelu a zkušební soubor pro sledování programu.