Jump to content
sbx

fn custAttributes - przekazywanie zmiennej

Recommended Posts

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
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 ? :)

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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
)

Share this post


Link to post
Share on other sites

Dobrym pomyslem byloby zamienic getnodeByName na getNodeByHandle. Nigdy nie bedziesz mial dwoch nodow o tym samym ID a z nazwami moze byc roznie.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

We are using cookies. Read about our Privacy Policy