507x
001352
2020-04-27

[PL] FAQ 004409 | Jak utworzyć przekrój za pomocą interfejsu COM?

Pytanie:
Jak utworzyć przekrój za pomocą interfejsu COM?

Odpowiedź:
Przekrój jest z reguły elementem, takim jak pręt, i również jest tworzony w ten sam sposób. Po pierwsze, wymagany jest interfejs z obiektami. W przypadku pręta będzie to IModelData, a dla przekrojów będą to ISekcje. Interfejs ten można znaleźć w IModel3:

Sub test_section ()
' pobierz interfejs z otwartego modelu i zablokuj licencję/program
    Dim iModel As RFEM5.IModel3
    Set iModel = GetObject(, "RFEM5.Model")
    iModel.GetApplication.LockLicense

W przypadku błędu Idź do E

    Dim iSecs As RFEM5.ISections
    Ustaw iSec = iModel.GetSections ()

Wszystkie utworzone wcześniej przekroje są najpierw usuwane, a następnie tworzone są dwa nowe przekroje. 
Pierwszy przekrój powinien być przekrojem pełnym z widoczną powierzchnią przekroju (patrz rysunek 01). Dane są wprowadzane w podobny sposób jak w programie RFEM. Jako typ, wybierany jest "SectionOnSectionalArea", punkty narożne przekroju są ustawiane przy użyciu opcji "EdgePoint", a "Wektor" definiuje kierunek przekroju:

   ' najpierw usuń wszystkie sekcje
    iSecs.PrepareModification
    iSecs.DeleteObjects („Wszystkie”)
    iSecs.FinishModification

    ' ustawić przekrój na bryle
    Dim s Jak w RFEM5.Section
    sek.EdgePointA.X = 2
    sek.EdgePointA.Y = 5
    sek.Punkt krawędzi A.Z = 0
    sek.EdgePointB.X = 2
    sek.EdgePoint BY = 8
    sek.Punkt krawędzi B.Z = 0

    sek.no = 1
    sec.Name = "przekrój bryły"
    sec.Plane = GlobalPlaneInPositiveX
    sec.ShowValuesInIsolines = False
    sec.Type = SectionOnSolidSectionLine
    sek.ObjectList = "1"

    iSecs.PrepareModification
    iSecs.SetSection sek
    iSecs.FinishModification

Jak już wiadomo z innych elementów, nowy przekrój zostaje ostatecznie przeniesiony do bloku Prepare-/FinishModification. Jako drugi przekrój należy utworzyć przekrój powierzchni (patrz rysunek 02). W tym celu konieczne jest zastosowanie typu "SectionViaSurfacePlane". Oprócz wektora kierunku przekroju należy wybrać płaszczyznę wyświetlania wyników dla przekroju powierzchni. W poniższym przykładzie płaszczyzna xy jest wybierana poprzez ustawienie „GlobalPlaneInPositiveX”.

' ustawić przekrój na powierzchni
    sek.EdgePointA.X = 2
    sek.EdgePointA.Y = 0
    sek.Punkt krawędzi A.Z = 0
    sek.EdgePointB.X = 2
    sek.EdgePoint BY = 3
    sek.Punkt krawędzi B.Z = 0

    sek.no = 2
    sec.Name = "przekrój powierzchni"
    sec.Plane = GlobalPlaneInPositiveX

    sec.ShowValuesInIsolines = True
    sek.Typ = przekrój przez płaszczyznę powierzchniową
    sek.ObjectList = "1"

    Wektor.s.X = 0
    sek.Wektor.Y = 0
    sek.Wektor.Z = 1

    iSecs.PrepareModification
    iSecs.SetSection sek
    iSecs.FinishModification

Istnieje również możliwość pobrania wyników przekroju poprzez osobną metodę "GetResultsInSection" interfejsu "IResults2". Poniżej określane są siły tnące na przekroju. Rozkład sił wewnętrznych jest ustawiony na "Ciągły w powierzchniach" za pomocą opcji "Ciągły rozkład w obiektach":

 ' uzyskaj wyniki
    Dim iCalc As ICalculation2
    Set iCalc = iModel.GetCalculation

    Dim iRes As IResults2
    Ustaw iRes = iCalc.GetResultsInFeNodes (LoadCaseType, 1)

    Dim secRes () As RFEM5.SectionResult
    secRes = iRes.GetResultsInSection (2, AtNo,
      Siła ścinania, Ciągły rozkład wewnątrz obiektów, Fałsz)

W sekcji Pobrane znajduje się makro Excel i plik testowy do oszacowania programu.