867x
004409
2020-04-27

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.