868x
004409
2020-04-27

Domanda

Come posso creare un profilo tramite l'interfaccia COM?


Risposta:
Di solito, un profilo è fondamentalmente un elemento, come un'asta, ed è anche creata nello stesso modo. Innanzitutto, è necessaria l'interfaccia per gli oggetti. Per un asta, questo sarebbe IModelData, e per le sezioni, sarebbe ISections. Questa interfaccia si trova in 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()

Tutte le sezioni create in precedenza vengono prima eliminate e vengono create due nuove sezioni.
La prima sezione dovrebbe essere una sezione solida con un'area della sezione visibile (vedi la Figura 01). I dati vengono inseriti in modo simile a RFEM. Come tipo, è selezionato "SectionOnSectionalArea", i punti d'angolo della sezione sono impostati utilizzando "EdgePoint" e un "Vettore" definisce la direzione della sezione:

' prima elimina tutte le sezioni
iSecs.PrepareModification
iSecs.DeleteObjects ("Tutti")
iSecs.FinishModifica
    
' imposta la sezione sul solido
Dim sec Come RFEM5.Section
sec.PuntoMargineA.X = 2
sec.PuntoMargineA.Y = 5
sec.PuntoMargineA.Z = 0
sec.PuntoBordiB.X = 2
sec.PuntoBordiB.Y = 8
sec.PuntoBordiB.Z = 0
    
sec.no = 1
sec.Name = "sezione solida"
sec.Plane = GlobalPlaneInPositiveX
sec.ShowValuesInIsolines = False
sec.Type = SectionOnSolidSectionLine
sec.ObjectList = "1"
    
iSecs.PrepareModification
iSecs.SetSection sec
iSecs.FinishModifica

Come già noto da altri elementi, la nuova sezione viene finalmente trasferita in un blocco Prepare-/FinishModification. Come seconda sezione, deve essere creata una sezione di superficie (vedere la Figura 02). Per questo, è necessario utilizzare il tipo "SectionViaSurfacePlane". Oltre al vettore della direzione della sezione, è necessario selezionare il piano di visualizzazione dei risultati per la sezione della superficie. Nell'esempio seguente, il piano xy viene selezionato impostando "GlobalPlaneInPositiveX".

' imposta la sezione sulla superficie
sec.PuntoMargineA.X = 2
sec.PuntoMargineA.Y = 0
sec.PuntoMargineA.Z = 0
sec.PuntoBordiB.X = 2
sec.PuntoBordiB.Y = 3
sec.PuntoBordiB.Z = 0
    
nr.sec = 2
sec.Name = "sezione della superficie"
sec.Plane = GlobalPlaneInPositiveX
    
sec.ShowValuesInIsolines = True
sec.Type = SectionViaSurfacePlane
sec.ObjectList = "1"
    
sec.Vettore.X = 0
sec.Vettore.Y = 0
sec.Vettore.Z = 1
    
iSecs.PrepareModification
iSecs.SetSection sec
iSecs.FinishModifica

È anche possibile ottenere i risultati di una sezione utilizzando il metodo separato "GetResultsInSection" dell'interfaccia "IResults2". Di seguito, si ottengono le forze di taglio sulla sezione della superficie. La distribuzione delle forze interne è impostata su "Continua nelle superfici" tramite "Distribuzione continua entro gli oggetti":

' ottieni risultati
Oscura iCalc come ICalcolo2
Imposta iCalc = iModel.GetCalculation
    
Dim iRes As IResults2
Imposta iRes = iCalc.GetResultsInFeNodes(LoadCaseType, 1)
    
Dim secRes() As RFEM5.SectionResult
secRes = iRes.GetResultsInSection(2, AtNo,
ShearForceVy,Distribuzionecontinuaall'interno diOggetti,Falso)

Sotto Download, puoi trovare la macro di Excel e il file di prova per comprendere il programma.