Selezione di nodi lungo una linea tramite l'interfaccia COM

Articolo tecnico

Questo articolo è stato tradotto da Google Traduttore

Visualizza il testo originale

Se si leggono i risultati di una superficie tramite l'interfaccia COM, si ottiene un campo unidimensionale con tutti i risultati nei nodi FE o nei punti della griglia. Per ottenere i risultati sul bordo di una superficie o lungo una linea all'interno delle superfici, è necessario filtrare i risultati nell'area della linea. Il seguente articolo descrive una funzione per questo passaggio.

Sfondo teorico per il calcolo della distanza

Per trovare i nodi FE vicini o sulla linea, è necessario calcolare la distanza del nodo dalla linea. Sono indicati la linea con il punto iniziale e finale (N0 e N1 ) e il punto P la cui distanza deve essere determinata dalla linea. Un modo comune per calcolare questa distanza è estendere un piano che attraversa il punto P ed è perpendicolare alla linea retta. A tale scopo, è necessario impostare prima un'equazione lineare adatta. In questo caso, si consiglia di utilizzare il modulo parametri, che contiene un vettore di direzione v. Puoi usarlo per impostare l'equazione del piano.

$\mathrm{Gerade}\;\mathrm G:\;\overset\rightharpoonup{\mathrm X}\;=\;\overset\rightharpoonup{\mathrm A}\;+\;\mathrm s\;\cdot\;\overset\rightharpoonup{\mathrm v}\;(1)\\\mathrm{mit}\\\mathrm A\;=\;{\mathrm N}_0\\\mathrm v\;=\;{\mathrm N}_1\;-\;{\mathrm N}_0$

Per il vettore di supporto A, viene utilizzato il punto iniziale (vettore di posizione) della linea e per il vettore di direzione v, viene utilizzata la differenza dei due vettori di posizione. La forma normale viene utilizzata come equazione del piano per il motivo già menzionato.

$\mathrm{Ebene}\;\mathrm E:\;0\;=\;(\overset\rightharpoonup{\mathrm X}\;-\;\overset\rightharpoonup{\mathrm P})\;\cdot\;\overset\rightharpoonup{\mathrm n}\;(2)\\\mathrm{mit}\\\overset\rightharpoonup{\mathrm n}\;=\;\overset\rightharpoonup{\mathrm v}\\\overset\rightharpoonup{\mathrm P}\;=\;\overset\rightharpoonup{{\mathrm P}_{\mathrm{res}}}$

Il supporto vettore P è il risultatores punto P da analizzare. Il vettore normale è il vettore di direzione della linea retta perché il piano è ortogonale alla linea retta. Prima di poter calcolare la distanza, è necessario determinare il fattore s della linea in cui il piano interseca la linea. A tale scopo, il vettore di posizione X nell'equazione del piano viene sostituito dall'equazione della linea retta.

$(1)\;\mathrm{in}\;(2):\;0\;=\;((\overset\rightharpoonup{\mathrm A}\;+\;\mathrm s\;\cdot\;\overset\rightharpoonup{\mathrm v})\;-\;\overset\rightharpoonup{\mathrm P})\;\cdot\;\overset\rightharpoonup{\mathrm n}\;(3)$

Convertito in s e $ \ overset \ rightharpoonup {\ mathrm n} \; = \; \ overset \ rightharpoonup {\ mathrm v} $ risulta nella seguente equazione.

$\mathrm s\;=\;\frac{(\overset\rightharpoonup{\mathrm P}\;-\;\overset\rightharpoonup{\mathrm A})\;\cdot\;\overset\rightharpoonup{\mathrm v}}{(\overset\rightharpoonup{\mathrm v}\;\cdot\;\overset\rightharpoonup{\mathrm v})}\;(4)$

Pertanto, è possibile determinare il punto di intersezione S usando l'equazione 1.

$\overset\rightharpoonup{\mathrm S}\;=\;\overset\rightharpoonup{\mathrm A}\;+\;\mathrm s\;\cdot\;\overset\rightharpoonup{\mathrm v}\;(5)$

La distanza d tra S e Pres è determinata per mezzo della quantità vettoriale della differenza tra i due.

$\mathrm d\;=\;\left|\overset\rightharpoonup{{\mathrm P}_{\mathrm{res}}}\;-\;\overset\rightharpoonup{\mathrm S}\right|\;(6)$

La Figura 01 mostra la rappresentazione schematica di tutti gli elementi elencati. La superficie blu è la superficie da analizzare e la superficie rossa rappresenta il piano di sezione che è stato impostato con il punto Pres e il vettore di direzione $ \ overset \ rightharpoonup {\ mathrm v} $. Il fattore s è solo 0,5 nella figura in modo che l'intersezione del piano e della linea sia esattamente al centro della linea.

Figura 01 - Diagramma dei componenti per il calcolo della distanza

Implementazione del calcolo della distanza in un programma

Una volta che le formule sono disponibili, è possibile creare il programma corrispondente. EXCEL VBA viene utilizzato per la conversione. La Figura 02 mostra la numerazione degli elementi.

Figura 02 - Modello per il calcolo di esempio

Innanzitutto, è necessario un collegamento a RFEM. Quindi, ottenere l'interfaccia per i dati del modello. Poiché questa procedura è già stata descritta in vari altri articoli (vedere i collegamenti), non sarà descritta in dettaglio qui. Di seguito è riportato il codice sorgente per l'avvio del programma.

Sub selection_test2 ()
    
Dim line_no Come intero
Dim surface_no Come intero
Dim loadcase_no Come intero
Dim d_tol come doppio
line_no = 11
surface_no = 1
loadcase_no = 1
d_tol = 0,001
    
'ottenere l'interfaccia dal modello aperto e bloccare la licenza/programma
Dim iModel As RFEM5.IModel2
Imposta iModel = GetObject (, "RFEM5.Model")
iModel.GetApplication.LockLicense
    
On Error Vai a e
    
Dim iModelData As RFEM5.IModelData2
Impostare iModelData = iModel.GetModelData

Prima di avviare il programma, definire prima i parametri delle variabili. Questi includono il numero di riga line_no della riga in cui si desidera cercare i risultati e, naturalmente, il numero di superficie surface_no della superficie in cui si trova la linea. Inoltre, è necessario il numero del caso di carico loadcase_no a cui appartengono i risultati. Poiché si tratta di un calcolo numerico con precisione limitata, è richiesta una tolleranza d_tol che specifica la distanza massima tra linea e nodo. In questo esempio, viene utilizzata una tolleranza di un millimetro.

Poiché l'interfaccia per i dati del modello (IModelData) è ora disponibile, è possibile cercare prima la linea e quindi anche il suo punto iniziale e finale.

'get line
Dim ILin Come RFEM5.ILine
Impostare ILin = iModelData.GetLine (line_no, AtNo)
Dim lin As RFEM5.RfLine
lin = ILin.GetData
   
    
'ottenere nodi dalla linea
Dim n (da 0 a 1) Come RFEM5.Node
    
Dim ints () Come intero
ints = strToIntArr (lin.NodeList)
    
Dim iNd As RFEM5.INode
Impostare iNd = iModelData.GetNode (ints (0), AtNo)
n (0) = iNd.GetData
Impostare iNd = iModelData.GetNode (ints (UBound (ints, 1)), AtNo)
n (1) = iNd.GetData
    
Impostare iNd = Nothing

Ottieni i nodi e la linea singolarmente direttamente tramite la loro interfaccia (INode o ILine). Per estrarre i numeri dei nodi dalla stringa (RfLine.NodeList), utilizzare la funzione strToIntArr descritta in un altro articolo (vedere collegamenti). Converte la stringa in un campo intero.

Con i punti ora indicati della linea $ \ overset \ rightharpoonup {{\ mathrm N} _0} $ (punto iniziale) e $ \ overset \ rightharpoonup {{\ mathrm N} _1} $ (punto finale), puoi impostare i primi parametri dell'equazione.

Dim v As RFEM5.Point3D
vX = N (1) .X - N (0) .X
vY = N (1) .Y - N (0) .Y
vZ = N (1) .Z - N (0) .Z

    
Dim A As RFEM5.Point3D
AX = N (0) .X
AY = N (0) .Y
AZ = N (0) .Z
    
Dim v2 come doppio
v2 = vX ^ 2 + vY ^ 2 + vZ ^ 2
    
Dim P_res As RFEM5.Point3D
Dim s doppio
Dim d come doppio

Il vettore di direzione $ \ overset \ rightharpoonup {\ mathrm v} $ (v), il vettore di supporto $ \ overset \ rightharpoonup {\ mathrm A} $ (A) e il prodotto in scala del vettore di direzione $ \ overset \ rightharpoonup { \ mathrm v} \ cdot \; \ overset \ rightharpoonup {\ mathrm v} $ (v2) sono calcolati o preparati. Inoltre, sono definite anche le variabili Pres (P_res) per il punto del risultato e s per il fattore dall'equazione lineare (1).

Calcolo della distanza in un loop

In questo esempio, è stata selezionata l'elaborazione dei risultati sulla base dei nodi FE. Il controllo della distanza avviene in un ciclo sopra il campo di questi risultati. Innanzitutto, è necessario ottenere questi risultati tramite l'interfaccia ICalculation2 e quindi IResults. All'interno del loop, il punto Pres viene prima descritto con le coordinate del valore del risultato (per chiarezza). Quindi, è possibile eseguire il calcolo diretto dell'equazione (4). Dopo che s è stato calcolato, è possibile verificare se il valore è inferiore a zero o maggiore di uno perché questi valori si trovano all'esterno o prima e dopo la linea retta. Se un valore è compreso in questo intervallo, la distanza viene calcolata con l'equazione (6).

'ottenere risultati in nodi-fe
Dim iCalc As ICalculation2
Impostare iCalc = iModel.GetCalculation
    
Dim iRes As RFEM5.IResults
Impostare iRes = iCalc.GetResultsInFeNodes (LoadCaseType, loadcase_no)
    
Dim surfBaStr () Come RFEM5.SurfaceBasicStresses
surfBaStr = iRes.GetSurfaceBasicStresses (surface_no, AtNo)
    
'Effettuare il ciclo tra le tensioni e calcolare la distanza dalla linea
Dim i come intero
Per i = 0 a UBound (surfBaStr, 1)
P_res.X = surfBaStr (i) .Coordinates.X
P_res.Y = surfBaStr (i) .Coordinates.Y
P_res.Z = surfBaStr (i) .Coordinates.Z
'calcola il fattore per l'equazione della linea di intersezione
s = ((P_res.XA.X) * vX + (P_res.YA.Y) * vY + (P_res.ZA.Z) * vZ)/v2
        
Se s <= 1 + d_tol E s> = 0 - d_tol Quindi
'calcola la distanza del punto di intersezione e del nodo fe
d = ((P_res.X- (A.X + s * vX)) ^ 2
+ (P_res.Y- (A.Y + s * vY)) ^ 2
+ (P_res.Z- (A.Z + s * vZ)) ^ 2) ^ 0,5
            
If (d <d_tol) Quindi
'qui è possibile elaborare il punto risultato trovato
End If
End If
        
Quindi

La tolleranza si applica sia al controllo del fattore se alla distanza d in modo che eventuali piccole imprecisioni non comportino l'esclusione di un risultato.

Risultati del programma

I valori trovati dal programma sono mostrati nella tabella, con i valori arrotondati al secondo decimale.

σy + [N/mm²]Fattore s [-]
21.900,0
17.280,1
12.790.2
8.430,3
4.170.4
-0.040.5
-4,250.6
-8,510.7
-12,870.8
-17,360.9
-21,981,0

A titolo di confronto, i valori del diagramma dei risultati sulla riga corrispondente sono visualizzati nella Figura 03.

Figura 03 - Diagramma dei risultati sulla linea esaminata

È evidente che i valori sono gli stessi e che esiste una corrispondenza del 100% o che tutti i valori sono stati trovati sulla linea.

Sommario

Con l'aiuto del calcolo vettoriale, è stato creato un programma in grado di trovare nodi lungo una linea. Con questo algoritmo, è anche possibile cercare non solo i risultati, ma anche tutti gli altri elementi geometrici. Ciò è particolarmente utile perché la selezione visiva non è ovviamente possibile tramite l'interfaccia COM, ma è quindi possibile tramite una funzione in un altro modo. Soprattutto per i programmi che vengono eseguiti completamente in background, è possibile eseguire una valutazione automatica dei risultati.

Parole chiave

COM Interface Lettura dei risultati di una superficie Leggi i risultati lungo una linea Trova i nodi lungo una linea Valutazione automatica dei risultati Selezione tramite interfaccia COM

Download

Link

Contattaci

Hai domande o bisogno di consigli?
Contattaci gratuitamente tramite e-mail, chat o il nostro forum di supporto o trova varie soluzioni e consigli utili nella nostra pagina delle 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

Prezzo della prima licenza
3.540,00 USD
RFEM Other
RF-COM 5.xx

Modulo aggiuntivo

Interfaccia programmabile (API) basata sulla tecnologia COM

Prezzo della prima licenza
580,00 USD
RSTAB Programma principale
RSTAB 8.xx

Programma principale

Software di progettazione strutturale per il calcolo lineare e non lineare di forze interne, spostamenti generalizzati e reazioni vincolari di telai e strutture costituite da aste e travature reticolari

Prezzo della prima licenza
2.550,00 USD
RSTAB Altri
RS-COM 8.xx

Modulo aggiuntivo

Interfaccia programmabile (API) basata sulla tecnologia COM

Prezzo della prima licenza
580,00 USD