Pawelkos Napisano 17 Czerwiec 2012 Napisano 17 Czerwiec 2012 Witam Ostatnio postanowilem zapoznac sie z MaxScriptem. Jako ze zaczynam kompletnie od zera, wiec na poczatek wzialem sie za prosty skrypt: rollout rename_obj "Quick Rename" width:300 height:100 ( groupBox grp1 "Categories" pos:[16,8] width:272 height:72 button btn_props "[Prop]" pos:[96,32] width:52 height:35 button btn_set "[set]" pos:[160,32] width:52 height:35 button btn_photo "[Photo]" pos:[224,32] width:52 height:35 button btn_product "[Product]" pos:[24,32] width:64 height:35 ) -- DEFINE 'RENAME' FUNCTION --------------------------------------------------- fn renameIt objName = ( -- function "rename" global objName for i in selection do i.name = uniquename objName )-- end on btn_photo pressed do renameIt "[Photo]" createDialog rename_obj Jak dla wprawnym Maxscripterow, nie ma tu nic skomplikowanego... Jednak kiedy probuje go wykonac Listner wywala mi oto taki blad: [color=#ff0000]-- Error occurred in anonymous codeblock; filename: D:\Moje projekty\QuickRename1.ms; position: 591; line: 17 -- Type error: Call needs function or class, got: true -- Error occurred in anonymous codeblock; filename: D:\Moje projekty\QuickRename1.ms; position: 628; line: 18 -- Syntax error: at name, expected while -- In line: createDialog r[/color] Gdyby ktorys z doswiadczony forumowiczow bylby tak mily powiedziec co i dlaczego jest zle, skad ten error bede wdzieczny :)
Pawelkos Napisano 17 Czerwiec 2012 Autor Napisano 17 Czerwiec 2012 Naprawde nikt nie wiem co jest przyczyna tego bledu i jak to naprawic ....?
gonre Napisano 18 Czerwiec 2012 Napisano 18 Czerwiec 2012 Funkcje rolloutu powinny być wewnątrz definicji rolout rollout rename_obj "Quick Rename" width:300 height:100 ( groupBox grp1 "Categories" pos:[16,8] width:272 height:72 button btn_props "[Prop]" pos:[96,32] width:52 height:35 button btn_set "[set]" pos:[160,32] width:52 height:35 button btn_photo "[Photo]" pos:[224,32] width:52 height:35 button btn_product "[Product]" pos:[24,32] width:64 height:35 -- DEFINE 'RENAME' FUNCTION --------------------------------------------------- fn renameIt objName = ( -- function "rename" global objName for i in selection do i.name = uniquename objName )-- end on btn_photo pressed do renameIt "[Photo]" ) createDialog rename_obj 1
Pawelkos Napisano 19 Czerwiec 2012 Autor Napisano 19 Czerwiec 2012 gonre OMG wielkie dzieki, taka bzdura i nie moglem wyczaic tego bledu... rep polecial :)
Pawelkos Napisano 20 Czerwiec 2012 Autor Napisano 20 Czerwiec 2012 OK mam kolejny problem, ktory moze ktos pomoglby rozwiazac. Ogolnie powyzszy skrypt ma dodawac dodawac prefix [jakas nazwa] do oryginalnej nazwy obiektu i potem jako sufix kolejny numer. Niestety chyba nie do konca rozumiem jak dziala, albo po prostu to nie dziala tak jak ja mysle ze dziala:] wiec mam taki kawalek kodu: global objName= "[Photo]" for i in selection do i.name = objName + uniquename i.name No i prawie robi to co chce zeby robilo. Otoz dla kazdego wybranego obiektu dodaje prefix [Photo]Oryginalna nazwa obiektu ale problem jest z sufixem. Zamiast zwiekszac sie co 1 na kazdym wybranym obiekcie, zwieksza sie tylko na pierwszym obiekcie a dla pozostalych przypisuje taki sam, czyli jesli dla pierwszego obiektu suffix byl 2 nastepne obiekty zamist miec 3,4 itd. maja tez suffix 2. Ogolnie pewnie moglbym sobie z tym poradzic dodajac ten sufix w nastepnej petli, ale jestem ciekaw czy da sie jakos to zapisac w jednej linii jak probowalem powyzej i zrozumiec co zrobilem zle
t0m3k Napisano 20 Czerwiec 2012 Napisano 20 Czerwiec 2012 narzedzie do zmiany nazw obiektow juz jest w maxie (Tools > Rename Object...) wic mam nadzieje, ze piszesz ten skrypt zeby pocwiczyc :)
gonre Napisano 21 Czerwiec 2012 Napisano 21 Czerwiec 2012 w max 2011 skrypt działa natomiast global objName= "[Photo]" for i in selection do i.name = objName + uniquename i.name po wielokrotnym wywołaniu daje nazwę obiektu: [Photo][Photo][Photo][Photo][Photo]091 wcześniej było dobrze: for i in selection do i.name = uniquename objName moglbym sobie z tym poradzic dodajac ten sufix w nastepnej petli, ale jestem ciekaw czy da sie jakos to zapisac w jednej linii na początku skryprowania proponuję Ci pisać jak najprościej, czyli nie oszczędzać linii, rozbijać operacje na prostsze (wydzielać je) kondensowanie kodu zmniejsza jego czytelność
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ę