sbx Napisano 1 Marzec 2005 Napisano 1 Marzec 2005 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
lechoo Napisano 2 Marzec 2005 Napisano 2 Marzec 2005 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 :)
sbx Napisano 2 Marzec 2005 Autor Napisano 2 Marzec 2005 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 :))
lechoo Napisano 2 Marzec 2005 Napisano 2 Marzec 2005 Czy funkcja pod buttonem ma dzialac na obiektach bedacych dziecmi lub rodzicami obiektu do ktorego button jest przypisany?
sbx Napisano 2 Marzec 2005 Autor Napisano 2 Marzec 2005 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 ? :)
lechoo Napisano 3 Marzec 2005 Napisano 3 Marzec 2005 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
sbx Napisano 3 Marzec 2005 Autor Napisano 3 Marzec 2005 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 )
lechoo Napisano 3 Marzec 2005 Napisano 3 Marzec 2005 Dobrym pomyslem byloby zamienic getnodeByName na getNodeByHandle. Nigdy nie bedziesz mial dwoch nodow o tym samym ID a z nazwami moze byc roznie.
sbx Napisano 5 Marzec 2005 Autor Napisano 5 Marzec 2005 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 :(
Rekomendowane odpowiedzi
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ę