465x
001352
2020-04-27

[IT] FAQ 004409 | Come posso creare un profilo tramite l'interfaccia COM?

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.PrepareModulation
    iSecs.SetSection sec
    iSecs.FinishModulation

È 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 all'interno delle superfici" tramite "DistribuzioneContinuaNegliOggetti":

 ' ottieni risultati
    Dim iCalc come ICalcolo2
    Imposta iCalc = iModel.GetCalulation

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

    Dim secRes() As RFEM5.SectionResult
    secRes = iRes.GetResultsInSection(2, AtNo,
      Forza di taglioVy,DistribuzioneContinuaentroglioggetti, False)

In Download, troverai la macro di Excel e il file di prova per capire il programma.