Robitex's Blog

Ideas in the web

Verticalizzare nodi in Nolian


Scarica l’articolo nel formato PDF per la stampa

Nolian scripting series, episode 3

Verticalizzare! Quando?

Di solito non modello le fondazioni a platea direttamente in InMod perché preferisco costruire la mesh per conto mio direttamente in Nolian, mi è capitato quindi, di importare da un file binario, i dati di una platea di una struttura molto simile rispetto in quella in lavorazione (in realtà la stessa struttura modificata in varie versioni, sigh!).

L’operazione è riuscita perfettamente ma alcuni nodi al piede dei pilastri, risultavano collegati alla mesh con un rigel non perfettamente verticale. Nolian ha aggiustato le posizioni dei nodi che capitavano vicini a nodi esistenti, di sua spontanea volontà.

Per rendere i rigel di nuovo verticali, occorreva risistemare le coordinate dei nodi corrispondenti della mesh, ma ecco che una manciata di righe di codice Lua può abbreviarci il lavoro.

La nuova funzione axy()

Ho pensato ad una funzione chiamata axy(), ovvero assegna x ed y, con il seguente funzionamento: seleziono il nodo al piede del pilastro e poi quello sulla platea, dopo di che la funzione esce fatta la modifica.

Ecco il codice da gestire secondo le indicazioni contenute nel primo episodio (ricordo che dopo la configurazione sarà disponibile in console il comando axy() ):

function axy(x,y)
     if not x or not y then
          print("Sel node con la posizione planimetrica desiderata...")
          _sel.doselect( true )
          local nodobase = _sel.nodes()
          _sel.clear()
          if #nodobase > 1 then
             print ("Selezionati più nodi, riprova.")
             return
          else
	     local p = _n.get(nodobase[1])
	     x = p.x
             y = p.y
          end
     end
     
     print("Selezionare nodo da cambiare con x=" .. x .." e y="..y .." ...")
   
     _sel.doselect( true )
     local nodo = _sel.nodes()
     _sel.clear()
     
     if #nodo > 1 then
         print ("Selezionati più nodi, riprova.")
         return
     end
     
     local pointAux = {}
     pointAux.x = x
     pointAux.y = y
     nodeIndex = nodo[1]
     
     _n.set(nodeIndex, pointAux)
end

Commento al codice

La prima parte del codice della funzione non fa altro che decidere se le coordinate planimetriche sono o no state specificate dall’utente. Se no, aspetta che si selezioni un nodo prelevandone poi i valori utili delle coordinate con la funzione di libreria _n.get() che, come recita il manuale stringatissimo di Softing (più stringato di così…), restituisce il punto relativo all’indice del nodo specificato. Punto che non è altro che una tabella Lua con chiavi x, y, e z.
Riassumendo, la funzione _sel.nodes() restituisce una tabella con gli indici dei nodi selezionati, che in realtà in questo caso sono solo uno, appunto di posizione 1. L’indice dell’array viene passato alla _n.get() per il prelievo dei valori.

La seconda parte invece, effettua l’assegnazione ad un secondo nodo selezionato: si crea infatti un punto detto pointAux con le nuove coordinate e lo si passa alla funzione _n.set() assieme all’indice del nodo selezionato. Più difficile a dirsi che a farsi!

Grazie ed alla prossima!

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: