Vai al contenuto
fabergambis

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

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.

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

per attivare

for ($x in `ls -sl`){

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

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

}
per disttivare
for ($x in `ls -sl`){

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

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

}

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

Grazie per la risposta, però ripeto sono totalmente ignorante non solo di MEL ma di programmazione in generale,

perciò mi sfugge quel for ($x in `ls -sl`){ starebbe per?

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

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! ;)

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

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

Condividi questo messaggio


Link al messaggio
Condividi su altri siti
Inviata (modificato)

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.


Modificato da fabergambis

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

su wiki è spiegato bene come funziona il ciclo for...

LINK

ls -sl o ls -selection è la stessa roba solo che scrivendo molto codice ti abitui ad usare la froma più breve...

cmq il mio script dovrebbe funzionare, almeno teoricamente (non l'ho provato)...

:hello:

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora

  • Navigazione recente   0 utenti

    Non ci sono utenti registrati da visualizzare in questa pagina.

×