Skocz do zawartości

fn custAttributes - przekazywanie zmiennej


sbx

Rekomendowane odpowiedzi

mam taka funkcje:

 

fn boneCA target nameObj = (
anotherObjNameCA = attributes attribute(

parameters main rollout:params(
blend type:#float ui:sld default:50
)
rollout params "IK/FK Blending" 
 ( 
 button btnSik "IK" pos:[10,51] width:31 height:22
 button btnSfk "FK" pos:[119,53] width:31 height:22
 label lbl1 "" pos:[57,56] width:52 height:17
 slider sld "" pos:[5,12] width:152 height:25
 button btnDik "IK" pos:[12,86] width:31 height:22
 button btnDfk "FK" pos:[121,88] width:31 height:22
 label lbl2 "" pos:[51,86] width:61 height:17

 on btnSik pressed do(print nameObj)
 on btnSfk pressed do(print a)
 ))
cn = getnodebyname target;
custAttributes.add cn anotherObjNameCA
)


a = "nic";
boneCA $Box01.name "jakas nazwa"

 

 

 

 

------------------ pytanie 1: ------------------

wywoluje funkcje

boneCA $Box01.name "jakas nazwa"

w linijce:

 on btnSik pressed do(print nameObj)

jest blad, co zrobic by przekazac zmienna "nameObj" ?

 

dla przykladu:

on btnSfk pressed do(print a)

zmienna "a" jest odczywywana poprawnie

 

 

 

 

------------------ pytanie 2: ------------------

cn = getnodebyname target;
custAttributes.add cn anotherObjNameCA

czy jest jakis ladnieszy sposob by przekazywac do "cn" obiekt wskazany po jego nazwie ?

 

z gory dziekuje i pozdrawiam

Odnośnik do komentarza
Udostępnij na innych stronach

  • Odpowiedzi 8
  • Created
  • Ostatniej odpowiedzi

Top Posters In This Topic

Problem jest taki ze kazesz custom atrybutowi wypisac zmienna lokalna wazna tylko w obrebie funkcji boneCA, a tego nie mozna zrobic (a jest domyslne zmienna globalna). Musisz dodac do CA jakiegos stringa np. myObjName, do niego wpisac swoja zmienna czyli nameObj i wypisywac ta wewnetrzna zmienna.

 

fn boneCA target nameObj = (
anotherObjNameCA = attributes attribute(

	parameters main rollout:params(
	blend type:#float ui:sld default:50
	myObjName type:#string
	)
	rollout params "IK/FK Blending" 
	 ( 
	 button btnSik "IK" pos:[10,51] width:31 height:22
	 button btnSfk "FK" pos:[119,53] width:31 height:22
	 label lbl1 "" pos:[57,56] width:52 height:17
	 slider sld "" pos:[5,12] width:152 height:25
	 button btnDik "IK" pos:[12,86] width:31 height:22
	 button btnDfk "FK" pos:[121,88] width:31 height:22
	 label lbl2 "" pos:[51,86] width:61 height:17

	 on btnSik pressed do
		 (
		 print myObjName
		)
	 on btnSfk pressed do(print a)
	 ))
cn = getnodebyname target;
custAttributes.add cn anotherObjNameCA
cn.myObjName = nameObj
)


a = "nic";
boneCA $Box01.name "jakas nazwa"

Co do pytania 2 to chyba nie ale jeszcze pomysle :)

Odnośnik do komentarza
Udostępnij na innych stronach

dziekuje lechoo :)

 

moj scrypt ma dzialac mniej wiecej tak ze: pobiera nazwy kosci ktore sa w lancuchu i wykonuje na nich pozniej operacje ktore miedzy innymi sa pod tymi buttonami wlasnie

 

a z tego o czym rozmawiamy wynika ze nie ma mozliwosci dynamicznego tworzenia scryptu znajdujacego sie pod buttonem ?

 

 

bo czy "myObjName" w "parameters main" moze byc:

 

myObjName type:#array ??

myObjName type:#struct ??

myObjName type:#fn ??

 

 

najwyrazniej bede musial to obejsc innym sposobem :)

 

 

 

 

w drugim pytaniu chodzilo mi raczej o to zeby zapisac to w jednej linji bez przypisywania do zmiennej

cos w rodzaju -> custAttributes.add (getnodebyname target) anotherObjNameCA ale to malo istotne :))

Odnośnik do komentarza
Udostępnij na innych stronach

Czy funkcja pod buttonem ma dzialac na obiektach bedacych dziecmi lub rodzicami obiektu do ktorego button jest przypisany?

 

tak :) - dobry pomysl ! a dokladnie co proponujesz ? :)

Odnośnik do komentarza
Udostępnij na innych stronach

Musisz dodac do custom attributes parametr myID type:#integer i wpisac do niego ID obiektu na ktorym jest CA: $Box01.inode.handle. Teraz pod samym buttonem odzyskujesz obiekt po jego ID: myObj = maxOps.getNodeByHandle myID. Jak masz obiekt reszta jest prosta:

myObj.parent - rodzic obiektu

myObj.children - tablica z dziecmi obiektu

Odnośnik do komentarza
Udostępnij na innych stronach

wczoraj zrobilem troche inaczej tez uzywajac .parent, dlugie to wyszlo lecz zabardzo nie widze mozliwosci by duzo zwiezlej to napisac

 

teraz tylko na chwilke, pozniej przemysle to co napisales, dziekuje Adamie

 

 

fn boneCA target = (
anotherObjNameCA = attributes attribute(

parameters main rollout:params(
blend type:#float ui:sld default:50
myIKChain type:#string
myParentBone type:#string
myChildBone type:#string
)

rollout params "IK/FK Blending" 
( 
button btnSik "IK" pos:[10,51] width:31 height:22
button btnSfk "FK" pos:[119,53] width:31 height:22
label lbl1 "" pos:[57,56] width:52 height:17
slider sld "" pos:[5,12] width:152 height:25
checkButton btnDik "IK" pos:[12,86] width:31 height:22 checked:true
checkButton btnDfk "FK" pos:[121,88] width:31 height:22 checked:true 
label lbl2 "" pos:[51,86] width:61 height:17
--on btnDfk pressed do(hide myFKobj; unhide myIKobj) 


on btnDik changed state do (
if state == true then (unhide $CHAIN_RLeg)
else(hide $CHAIN_RLeg)
)


on btnSfk pressed do (
chaintemp = getnodebyname myIKChain
chaintemp.transform.controller.Enabled = 0
 global arrayBone=#(); i=0;
 temp = getnodebyname myChildBone

while temp != undefined do (	
 i=i+1; arrayBone[i] = temp.name
if temp.name == myParentBone then exit
temp = temp.parent
)
for i=arrayBone.count to 1 by -1 do( --print arrayBone[i]
ikn = "IK_" + arrayBone[i]; 
fkn = "FK_" + arrayBone[i];
ik = getnodebyname ikn; 
fk = getnodebyname fkn;
ik.transform = fk.transform
)
chaintemp = getnodebyname myIKChain
temp = getnodebyname arrayBone[1]
chaintemp.transform = temp.transform	
chaintemp.transform.controller.Enabled = 1
)

on btnSik pressed do (
 global arrayBone=#(); i=0;
 temp = getnodebyname myChildBone

while temp != undefined do ( 
 i=i+1; arrayBone[i] = temp.name
if temp.name == myParentBone then exit
temp = temp.parent
)
for i=arrayBone.count to 1 by -1 do( --print arrayBone[i]
ikn = "IK_" + arrayBone[i];
fkn = "FK_" + arrayBone[i];
ik = getnodebyname ikn; 
fk = getnodebyname fkn;
fk.transform = ik.transform
)
)

))

cn = getnodebyname target;
custAttributes.add cn anotherObjNameCA;
cn.myParentBone = parentBone.name
cn.myChildBone = childBone.name
cn.myIKChain = "CHAIN_" + NewName
)

Odnośnik do komentarza
Udostępnij na innych stronach

dziekuje - tak, z jednej strony bardzo dobry pomysl, niestety w momecie gdy bede chcial dolaczyc ta hierarchie kosci do innej sceny (merge), wszystko poprzestawia sie, wiec chyba lepiej bedzie zostac przy getnodeByName pamietajac o stosowaniu roznych nazw dla obiektow :(

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się



×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Wykorzystujemy cookies. Przeczytaj więcej Polityka prywatności