Robitex's Blog

Ideas in the web

Assegnare le coordinate x y o z ai nodi in Nolian


Nolian scripting series, episode 2

Prima che finisca questo video che spesso mi accompagna nel pensare a mio padre, e prima che venga Natale, vi posto una versione evoluta del codice della puntata precedente alias episode 1.

Un paio di modifiche…

Per prima cosa ho ampliato la funzione al caso in cui l’utente non specifichi la coordinata da applicare, desumendola da un nodo campione selezionato dall’utente stesso.

Possiamo quindi lanciare il comando az(), cliccare su un nodo che si trova già alla quota desiderata (coordinata z), e selezionare i nodi destinazione. Oppure possiamo specificare il valore di zeta, sempre tra parentesi tonde, e applicare la modifica selezionando direttamente i nodi sul modello.

La seconda modifica è a livello implementativo per la generalizzazione della funzionalità: ho scritto una metafunzione che ho chiamato assegnaCoordNodi che accetta come primo argomento una stringa relativa al nome dell’asse coordinato “x”, “y” o “z”. In questo modo è immediato scrivere le funzioni utente ax(), ay(), ed az(), tutte con la stessa sintassi e con lo stesso comportamento.

Adesso potete assegnare ad un qualsiasi gruppo di nodi del modello in Nolian una coordinata x, y o z. Ecco il codice:

-- 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

-- meta function
-- Assegna ai nodi selezionati una stessa coordinata
function assegnaCoordNodi( coord , val )
   if not coord then
       print ("Errore di libreria: asse coordinato non specificato.")
       return
   elseif not(coord ~= "x" or  coord ~= "y" or coord ~= "z") then
       print ("Errore di libreria: asse "..coord .." non riconosciuto.")
       print("Deve essere o 'x' o 'y' o 'z'")
       return
   end
   
   if not val then
      print("Selezionare il nodo con la "..coord.." desiderata...")
      _sel.doselect( true )
      local nodobase = _sel.nodes()
      _sel.clear()
      if #nodobase > 1 then
         print ("Selezionati più nodi, riprova.")
         return
      else
         val = _n.get(nodobase[1])[coord]
      end
   end
   
   print("Selezionare nodi da cambiare con " .. coord .."="..val .." ...")
   
   _sel.doselect( true )
   nodi = _sel.nodes()
   _sel.clear()
   
   local pointAux = {}
   for i, nodeIndex in ipairs( nodi ) do
       pointAux[coord] = val
       _n.set(nodeIndex, pointAux)
   end
   
   print( #nodi .." nodi modificati con coord. " .. coord .. "=" ..val)
end


function ax(x)
   assegnaCoordNodi("x", x)
end

function ay(y)
   assegnaCoordNodi("y", y)
end

function az(z)
   assegnaCoordNodi("z", z)
end

Un uso con variabili

Per come è costruita Lua, nella console (nella finestra di comando dello scripting interno di Nolian che appare con CTRL + T), abbiamo a disposizione un ambiente interattivo completo. Ciò significa che possiamo settare variabili ed utilizzare espressioni numeriche come argomento delle funzioni ax, ay, az. Per esempio questa sessione in console è valida:

> z1 = 145.5
> z2 = 258.5
> az ( (z1+z2)/2 )
> az (2/3*(z1+z2))

Le variabili rimangono disponibili fino all’uscita da Nolian. Possiamo perfino pre-caricare valori costanti inserendoli nel file mylib.lua, file dove abbiamo deciso di custodire i nostri script. Sempre più fantastico vero?

So,
Dedicated to my father.

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: