Le interfacce di programmazione di NextFEM (o API) consentono a tutti i programmi dotati di un’interfaccia COM (Microsoft Office, Autodesk Autocad, ecc.) di usare le funzionalità di NextFEM Designer. In questa breve guida vedremo come utilizzare i risultati di un modello analizzato in Designer all’interno di un foglio di calcolo Excel®.
A partire
dalla versione 1.5, il programma di installazione di NextFEM salva
automaticamente la libreria API all’interno del sistema. Le API sono un gruppo
di funzioni conosciute da utilizzare in programmi che consentono l’utilizzo di
componenti COM. Nello specifico, tutti i programmi che utilizzano VBA (Visual
Basic Applications) ne permettono l’uso. In questo tutorial il nostro scopo è
quello di utilizzare alcuni risultati di calcolo in un foglio Excel.
Prendiamo ad esempio il modello One.nxf, presente nella sottocartella
“Testcases” della directory di installazione di NextFEM Designer. All’interno
della stessa si trova anche un foglio Excel di esempio chiamato “APIsample.xlsm”.
Designer è specializzato sull’architettura del processore, ovvero può essere installato a 32 o 64 bit. Anche le API lo sono, quindi è necessario verificare la versione di Excel in uso. Per verificarlo, all'interno di Excel si vada su File / Account e si faccia clic sul pulsante Informazioni. Lì è possibile leggere la versione in uso, come mostrato nella figura seguente.
Se si
utilizza Excel a 64 bit, è necessario disporre della versione a 64 bit delle
API inclusa nella corrispondente versione a 64 bit di NextFEM Designer. Lo
stesso accade per le API a 32 bit.
Si apra il file "APIsample.xlsm", e consentire l'esecuzione di macro
in Excel. Si possono consentire sempre le macro modificando le impostazioni
predefinite in File / Opzioni / Centro protezione, pulsante Impostazioni
centro protezione e Impostazioni macro nella nuova finestra che
appare.
Nel foglio di calcolo sono presenti 2 pulsanti. Il primo è associato al modello
impostato nella cella verde, e recupera i risultati dalle travi del modello.
Per vedere come è stato creato il codice, premere ALT + F11. Si aprirà l'editor VBA, che mostra il codice associato al foglio di calcolo. Analizziamo ora in dettaglio come utilizzare le API NextFEM nel codice VBA.
Tutte le istruzioni utilizzate di seguito sono descritte all’indirizzo www.nextfem.it/api .
Prima di iniziare, premere il pulsante "Carica modello e ottieni risultati". Se non vengono visualizzati errori, le API sono state correttamente registrate nel sistema. In caso contrario, potrebbe comparire l’avviso "Interfaccia non registrata" - in questo caso, andare su Strumenti / Riferimenti nell'editor VBA e verificare se "NextFEMapi" è presente e selezionato.
Se non è presente, avviare cmd.exe come amministratore ed eseguire questa riga per registrare le API:
percorso\Regasm NextFEMapi.dll /codebase
in cui percorso è C:\Windows\Microsoft.NET\Framework\v4.0.30319 per 32 bit e in C:\Windows\Microsoft.NET\Framework64\v4.0.30319 nei sistemi a 64 bit.
Se la registrazione non dovesse andare a buon fine, sarà necessario creare manualmente il file .tlb seguendo questa procedura:
- rimuovere la registrazione precedente con la riga di comando percorso\Regasm /u NextFEMapi.dll
- creare il file NextFEMAPI.tlb attraverso la riga di comando percorso\Regasm NextFEMapi.dll /codebase /tlb:NextFEMAPI.tlb
- caricare il file .tlb appena creato in Excel da Visual Basic Editor, comando Strumenti/Riferimenti…
Prima di tutto, è necessario creare un'istanza della classe API. Una soluzione semplice e diretta è dichiararla a livello globale, consentendo a tutte le funzioni e procedure di accedervi.
' declaration for all functions
Global nfAPI As New NextFEMapi.API
La procedura associata al pulsante "Carica modello e ottieni risultati" è descritta di seguito. Innanzitutto, vogliamo aprire il modello One.nxf, in cui i risultati devono essere stati precedentemente salvati.
' open the model - if it is already opened, do nothing
Call nfAPI.openModel(GetCurDir() & Range("A3"))
Quindi, vogliamo avere le unità di lunghezza e forza nel modello nelle celle B4 e C4:
' write units of the model
Range("B4") = nfAPI.getLenUnit()
Range("C4") = nfAPI.getForceUnit()
Lo stesso per nodi ed elementi nel modello:
' number of nodes and elements
Range("F7") = nfAPI.nodesNumber
Range("F8") = nfAPI.elemsNumber
Ora la parte interessante. Possiamo ottenere risultati da un modello precedentemente calcolato e includerli nei nostri calcoli. Per le travi sono disponibili le seguenti funzioni:
' get beam moment Mz for element no. 1, case "Qk1", station 5 (end of the beam). Last parameter type: 1=N, 2=Vy, 3=Vz, 4=Mt, 5=My, 6=Mz
Range("B7") = nfAPI.getBeamForce(1, "Qk1", 1, 6, 5)
' get beam deflection for element no. 2 in the middle of the span, case "Qk1", station 3 (middle of the span). Last parameter type: 1=local x, 2=loca y, 3=local z, 4=local rx, 5=local ry, 6=local rz
Range("B11") = nfAPI.getBeamDeflection(1, "Qk1", 1, 5, 3)
' get nodal displacement in global Z from node 2. Global direction: 1=X, 2=Y, 3=Z, 4=RX, 5=RY, 6=RZ
Range("B14") = nfAPI.getNodalDisp(2, "Qk1", 1, 3)
' get nodal reaction in global Z from node 1. Global direction: 1=X, 2=Y, 3=Z, 4=RX, 5=RY, 6=RZ
Range("B17") = nfAPI.getNodalReact(1, "Qk1", 1, 3)
Prossimamente, le API verranno potenziate per consentire la visualizzazione di qualsiasi tipo di risultato e persino immettere il modello (nodi, elementi, sezioni e così via).