Robitex's Blog

Ideas in the web

Assegnare coordinate ai nodi in Nolian


Nolian scripting series, episode 1

Scarica l’articolo in PDF per la stampa

Benvenuti,
da qualche versione a questa parte Nolian permette l’esecuzione di comandi personalizzati. Questa funzionalità è chiamata dalla Softing scripting interno.
Questo post è il primo di una spero lunga e proficua serie dedicata a potenziare le nostre capacità di modellazione agli elementi finiti in Nolian. Lasciate un commento per qualsiasi cosa.

Il primo problema che affrontiamo è questo: assegnare una stessa coordinata ad un gruppo di nodi. Ci dilungheremo solo per questa volta sulle questioni pratiche per poi risolvere brillantemente ciò che con le funzioni standard risulta noioso.

Questioni implementative

Con il roboante titolo di questo paragrafo, intendo spiegare come far eseguire un nostro comando con riferimento alla versione EWS32 di Nolian.
La prima e piacevole cosa da sapere è che il motore di scripting interno funziona con Lua. La bellissima notizia è motivata dal fatto che Lua è un linguaggio elegante e potente, e con esso è possibile non solo gestire ogni aspetto del nostro modello ma anche ideare comandi con una sintassi flessibile, in puro stile hacker.

The Nolian scripting Console

The Nolian scripting Console

1 – Avviamo dunque una sessione di Nolian e premiamo la combinazione di tasti CTRL + T per avviare la console di scripting.
La console offre una riga di comando ed un pannello testuale per visualizzare l’output (vedi screenshot). D’ora in poi quando diremo console ci riferiremo ad essa.

2 – Operazione matematica
Al prompt della console che non è altro che un ambiente di comando Lua, per prima cosa eseguiamo un calcolo digitando:

> 2*math.pi*100

Il risultato è prontamente stampato nella finestra di output.

3 – Creazione di una prima funzione
Metti che non ci ricordiamo l’area di una barra d’acciaio, allora al prompt digitiamo riga dopo riga il seguente codice:

> function area( d )
>> return math.pi * d^2 / 4
>> end
> area (1.4)
> area(1.2)
> area(1.6)

Da questo momento fino a che non viene definitivamente chiusa la sessione di Nolian, la funzione area() sarà a disposizione.

Il nostro primo vero script

Creiamo una nuova directory nella cartella d’installazione di Nolian chiamata lua, dove sistemeremo i file di testo dei nostri script, quindi aprite un editor (vi consiglio l’ottimo e gratuito SciTE), scrivete il codice print(“Ciao, questo è il mio primo script!”) e salvate il file con il nome primo.lua nella directory appena creata.
Eseguite lo script dando in console il comando dofile(“lua/primo.lua”).

Caricando in questo modo un file, tutte le funzioni in esso contenute vengono compilate e caricate nell’ambiente di scripting interno. Useremo questa tecnica per scrivere un file di nome mylib.lua, nella solita directory lua, caricando il quale avremo a disposizione le nostre funzioni personalizzate.

Ai nodi un ordinata

La funzione per assegnare un dato valore per la coordinata z dei nodi selezionati, si chiamerà az (assegna zeta). La selezione di un gruppo di nodi si implementa con la funzione _sel.doselect() memorizzata nella tabella _sel.
Poi dovremo gestire i nodi selezionati tramite un array contenente gli indici degli stessi:

_sel.doselect( true )
nodi = _sel.nodes()
_sel.clear()

Per ogni nodo dovremo poi modificare la coordinata zeta con la funzione _n.set(nodeIndex, pointAux) che si aspetta come primo argomento l’indice del nodo e come secondo argomento un punto, ovvero una tabella (l’unica struttura dati messa a disposizione da Lua), contenente la chiave z settata al valore voluto.

Queste funzioni, che cominciano un po’ discutibilmente con il carattere di trattino basso, sono quelle che ci permettono di interagire con il modello attualmente caricato nella sessione di Nolian.
Ecco il codice completo della funzione:

-- libreria delle funzioni personali in Nolian
--
-- Copyright (c) 2010 Roberto Giacomelli
-- email: giaconet dot mailbox at gmail dot com
--
-- 2010/12/15
-- released under the term of https://robitex.wordpress.com/legalese

-- Assegna ai nodi selezionati una stessa coordinata zeta
function az( z )
   if not z then
      print"Coordinata non specificata!"
      return
   end

   _sel.doselect( true )
   nodi = _sel.nodes()
   _sel.clear()
   
   local pointAux = {}
   for i, nodeIndex in ipairs( nodi ) do
       pointAux.z = z
       _n.set(nodeIndex, pointAux)
   end
end

Il suo uso è semplice: carichiamo la funzione memorizzata nel file individuato precedentemente, con dofile(“lua/mylib.lua”) in console. Poi diamo il comando seguente ed eseguiamo la selezione. I nodi prenderanno la quota specificata.

> az( 1203 )

Conclusioni

Uno script Lua non è altro che un file di testo. Caricando nostre librerie, possiamo accedere a funzioni che abbreviano senza errori e senza fatica l’inserimento dei dati del modello in Nolian.

Bibliografia

Acquistate il PiL e aiuterete lo sviluppo di Lua!!! Pure utile è la guida in linea di Nolian alla sezione dedicata.
The End.

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger cliccano Mi Piace per questo: