500x
001352
27.4.2020

FAQ 004409 | Jak mohu vytvořit řez pomocí rozhraní COM?

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.