Interfaccia COM in VBA 2: creazione di un'asta 1

Articolo tecnico

La prima parte della serie di articoli sull'interfaccia COM descriveva l'apertura e la creazione di un modello in RFEM. La seconda parte illustra la creazione e la modifica di elementi di un'asta. Gli elementi descritti nella Parte 1 non saranno ripresi qui nuovamente.

Fondamenti

Un'asta in RFEM è costituita da diversi elementi collegati tra di loro. Se manca un elemento, l'asta non può essere creata. È necessario rispettare la seguente struttura.

LinkToImage01

Per creare tale elemento, è necessario avere l'interfaccia per i dati strutturali:
' Get interface for model data.
Dim iModelData As iModelData
Set iModelData = iModel.GetModelData()
Tale interfaccia consente di trasferire i dati in RFEM.

Modifica

Per creare o modificare i dati in RFEM, è necessario passare alla modalità di modifica. Ad esempio, non è possibile eseguire calcoli in questa modalità ed i dati trasferiti sono disponibili solo dopo essere usciti dalla modalità. È necessario usare il metodo PrepareModification() per passare alla modalità di modifica e FinishModification() per uscire dalla modalità:
' Transfer elements to editing mode.
iModelData.PrepareModification
' ...
iModelData.FinishModification

Creazione degli elementi

Lo scopo è creare un'asta con la sezione trasversale IPE 100 e costituita da un acciaio S235 dal punto P0(0,0,0) al punto P1(1,0,0). Prima di tutto è necessario creare i nodi. Nell'esempio seguente, viene utilizzato un array perché ci garantisce la massima flessibilità per ulteriori modifiche future:
' Create nodes.
Dim nodeList (0 To 1) As RFEM5.Node
nodeList(0).RefObjectNo = 0
nodeList(0).No = 1
nodeList(0).X = 0#
nodeList(0).Y = 0#
nodeList(0).Z = 0#

nodeList(1).RefObjectNo = 0
nodeList(1).No = 2
nodeList(1).X = 1#
nodeList(1).Y = 0#
nodeList(1).Z = 0#

iModelData.PrepareModification
iModelData.SetNodes nodeList
iModelData.FinishModification
L'array che include i dati dei nodi viene trasferito con i metodi PrepareModification() e FinishModification(). Per la numerazione è importante quanto segue: quando deve essere trasferito un nuovo elemento  che include già i numeri di riferimento, allora gli elementi esistenti non sono sovrascritti, ma l'elemento è aggiunto alla fine della lista. Se si inserisce uno zero, l'elemento è automaticamente impostato alla prossima posizione libera.

Il processo per la creazione delle linee è simile, con la piccola differenza di fare riferimento ai nodi, ovviamente. La lista dei nodi è trasferita come stringa:
' Create lines.
Dim lineList(0 To 0) As RFEM5.Line
lineList(0).nodeList = "1,2"
lineList(0).Type = LineType.PolylineType

' Transfer elements to editing mode.
iModelData.PrepareModification
iModelData.SetLines lineList
iModelData.FinishModification

Modifica degli elementi

Per creare una sezione trasversale, è necessario creare il materiale. In un nuovo modello di RFEM vengono utilizzati sempre prima i materiali creati precedentemente. Per assicurarsi di usare il materiale pertinente, è necessario eliminare o modificare tutti i materiali esistenti. Eliminare tutti i materiali e crearne uno nuovo è la strada più semplice da seguire in questo esempio. A differenza della creazione di nuovi elementi, per eliminare o modificare deve essere attivata l'interfaccia dei singoli elementi attraverso i seguenti step:
' Get number of existing materials.
Dim num As Integer
num = iModelData.GetMaterialCount

' Loop over existing materials.
iModelData.PrepareModification
Dim i As Integer
For i = 0 To num - 1
' Get interface to material.
Dim iMat As RFEM5.IMaterial
Set iMat = iModelData.GetMaterial(i, AtIndex)
' Delete material.
iMat.Delete
Next i
iModelData.FinishModification
È possibile ottenere l'interfaccia di un materiale o tramite il numero del materiale (AtNo) o tramite l'indice nella lista dei materiali. A differenza del numero del materiale, l'indice inizia da zero e non ci sono interruzioni.

Completamento dell'asta

Dopo aver eliminato tutti i materiali, è possibile creare un nuovo materiale. Come in RFEM, anche qui è possibile trasferire direttamente il materiale dalla libreria utilizzando il suo nome. A tal fine, viene inserita la stringa corrispondente utilizzando la proprietà TextID (per ulteriori informazioni, vedere RF COM 5.chm in SDK):
' Create new material from material library.
Dim mats(0 To 0) As RFEM5.Material
mats(0).TextID = "NameID|Steel S 235@TypeID|STEEL@StandardID|DIN EN 1993-1-1-10"
mats(0).No = 1

' Transfer elements to editing mode.
iModelData.PrepareModification
iModelData.SetMaterials mats
iModelData.FinishModification
La sezione trasversale viene creata con la stessa procedura usata per il materiale. Inoltre, viene specificato il numero del materiale:
' Create new cross-section from library.
Dim crs(0 To 0) As RFEM5.CrossSection
crs(0).TextID = "IPE 100"
crs(0).MaterialNo = 1
crs(0).No = 1

' Transfer elements to editing mode.
iModelData.PrepareModification
iModelData.SetCrossSections crs
iModelData.FinishModification
Poiché sono stati creati tutti gli elementi dell'asta, quest'ultima può essere infine trasferita:
' Create new member.
Dim mems(0 To 0) As RFEM5.Member
mems(0).LineNo = 1
mems(0).StartCrossSectionNo = 1
mems(0).No = 1

' Transfer elements to editing mode.
iModelData.PrepareModification
iModelData.SetMembers mems
iModelData.FinishModification
Come in RFEM,  è sufficiente specificare la sezione trasversale solo ad inizio asta e non è necessario definire i vincoli interni che vengono assunti incastrati per definizione automatica.

Ottimizzazione

Fino adesso, la modalità di modifica è stata utilizzata per ogni singolo elemento. Per incrementare la velocità di processione dei dati,  è possibile trasferire tutti gli elementi all'interno di un'unica modalità di modifica eccetto per l'eliminazione e la creazione di un nuovo materiale. In questo caso è possibile utilizzare due blocchi separati poiché non è possibile eliminare e creare elementi all'interno di un unico blocco:
' Delete elements in editing mode.
iModelData.PrepareModification
Dim i As Integer
For i = 0 To num - 1
' Get interface to material.
Dim iMat As RFEM5.IMaterial
Set iMat = iModelData.GetMaterial (i, AtIndex)
' Delete material.
iMat.Delete
Next i
iModelData.FinishModification

' Transfer elements to editing mode.
iModelData.PrepareModification

iModelData.SetNodes nodeList
iModelData.SetLines lineList
iModelData.SetMaterials mats
iModelData.SetCrossSections crs
iModelData.SetMembers mems

iModelData.FinishModification

Sommario

Le procedure illustrate in questo articolo sono le basi per tutti gli elementi strutturali che possono essere trasferiti tramite COM. Un'eccezione sono i vincoli interni delle aste ed i vincoli esterni dei nodi non-lineari che includono annidamenti aggiuntivi. Questi elementi saranno spiegati nei prossimi articoli di questa serie.

Link

Contattaci

Contattaci

Hai domande o hai bisogno di un consiglio?
Contattaci o trova soluzioni e consigli utili nella nostra pagina FAQ.


    +39 051 9525 443

    info@dlubal.it

    RFEM Programma principale
    RFEM 5.xx

    Programma principale

    Software di progettazione strutturale per l'analisi con elementi finiti (FEA) di sistemi strutturali piani e spaziali costituiti da piastre, pareti, gusci, aste (travi), elementi solidi e di contatto