920x
004409
27.4.2020

Vytvoření vzoru pomocí rozhraní COM

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.


Autor

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

Stahování


;