Jump to content
bn-top

Script X Escludere/includere + Oggetti Dal Fgcast/receive?


fabergambis
 Share

Recommended Posts

Abbiate pietà della mia ignoranza, ma devo far sì che più pPlanes una volta selezionati, vengano esclusi/inclusi dal Cast/Receive FG. Se li seleziono e apro l'Attr. Spread Sheet, non c'è (o almeno non trovo) il comando per il FG Cast/Receive, ci sono miHide, miVisible, miTrace...ma dopo averli provati non mi pare abbiano sortito l'effetto sperato.

Trattandosi di più di 100 pPlanes, mi sembra ovvio che non posso mettermi a selezionarli uno alla volta, aprire l'AE e cliccare le spunte CastFG e ReceiveFG, quindi immagino che debba esistere un comando MEL che permette di assegnare a più oggetti una o più funzioni.

per es. setAttr "pPlaneShape1.miFinalGatherCast" 1;

setAttr "pPlaneShape1.miFinalGatherReceive" 1;

(può darsi che abbia sbagliato qualche spazio, ma non ho Maya davanti dal PC da dove sto scrivendo, e non ricordo a memoria se sia giusto così)

Al che, cosa dovrei scrivere per assegnare gli stessi comandi dal pPlaneShape1 al pPlaneShape149?

Non ditemi che devo ripetere quella trafila scritta sopra per 150 volte!

Grazie anticipatamente.

Link to comment
Share on other sites

bn-top

Premetto che mel ne so poco ma programmo in java...mi sembra un banale ciclo for nel quale gli dici di creare un array (cioè una collezione di elementi) che contiene i nomi degli oggetti che ti interessano...ovviamente come ho detto non sono sicuro quindi se sbaglio correggetemi! ;)

Link to comment
Share on other sites

Sì, ragazzi, capisco che un ciclo for potrà essere banale, come anche un array, ma se uno dice che non capisce niente di linguaggi di programmazione che fa, si arrangia?

Nelle mie fantasie, ho salvato gli script

setAttr ".miFinalGatherCast" 1 e 0 e

setAttr ".miFinalGatherReceive" 1 e 0

come pulsanti nella shelf MEL; bene, se seleziono un pPlane funziona, se ne seleziono più di uno mi dice "Not enough data was provided. The last N items was skipped"

Simpatico, però!

Link to comment
Share on other sites

Sto cercando di capire...ho letto i tuotrials di chick presenti su questo sito, e nel secondo si parla di array e di ciclo for...in...

Cito testualmente dal 2° tut.

Per dichiarare una variabile in MEL sarà sufficiente utilizzare una di queste tre keyword e metterla prima del nome della variabile. I nomi di variabili in MEL devono sempre iniziare con $ e possono essere costituiti da una qualsiasi serie di lettere, numeri e underscore (_); l'unica eccezione è che il nome non può iniziare con un numero.

---------------------------------------------------------------------------------------

MEL supporta anche degli operatori particolari, che sono ++ -- += -= *= e /=

Questi sono delle "scorciatoie" per modificare il valore di una variabile.

In particolare:

$a++ equivale a $a = $a + 1

$a-- equivale a $a = $a – 1

$a += 5 equivale a $a = $a + 5

$a -= 5 equivale a $a = $a - 5

$a *= 5 equivale a $a = $a * 5

$a /= 5 equivale a $a = $a / 5

Per quanto riguarda le stringhe, invece, MEL supporta l'operatore + per concatenare le stringhe

Ad esempio:

CODE

$str1 = "Ciao";

$str2 = ", come stai?";

$str3 = $str1 + $str2;

print($str3);

Darà come output

Ciao, come stai?

--------------------------------------------------------------

for...in...

Questo tipo di ciclo è utile quando si usano degli array

Se vogliamo definire un array di dati (cioè una lista di valori) usiamo l'operatore []

La sintassi è:

for (variabile in array)

{

istruzioni da ripetere;

}

Ad esempio, questo script scrive i nomi degli oggetti selezionati nella scena

CODE

string $selection[] = `ls -selection`;

string $obj;

print ("Hai selezionato:\n");

for ($obj in $selection)

{

print ($obj+"\n");

}

Il comando ls dà come output un array di stringhe contenenti i nomi degli oggetti nella scena. Usando il parametro –selection, restringiamo l'output ai soli oggetti selezionati.

Il nostro loop prende gli elementi di questo array uno alla volta e li assegna ad $obj.

Dell'inizio del codice, mi sfugge il significato di $obj che da micle è $x...lo so, sono una pippa ma vi chiedo di avere solo un po' di compassione :blush:

Poi sostituendo il comando print dell'esempio di sopra,

con il

setAttr ($x+".miFinalGatherCast") 1;

setAttr ($x+".miFinalGatherReceive") 1;

dell'esempio di micle, ne risulta che dovrei:

A. selezionare i pPlanes interessati

B. definire l'array usando l'operatore [] o è già 'ls -sl' (che immagino sia uguale a 'ls -selection')?

C. capire se $obj o $x sono solo dei nomi a caso da affibiare ad una variabile

D. e infine dare il comando da ripetere.

I pezzi li ho trovati tutti, ma siccome sono le 2:41 e sono pure ignorante in materia, non riesco a capire perchè lo script non mi funziona.

Non sto quì ad elencare le prove che ho fatto, nella speranza che magari domattina qualche anima pia mi illumini molto gentilmente sul da farsi.

O forse il sonno mi porterà consiglio...

A quest'ora se avessi selezionato i pPlanes e dato il comando ad uno ad uno, avrei già finito, ma ormai voglio capire come si fa, per principio!

Buona notte.

Edited by fabergambis
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...