Posted November 27, 200816 yr Witam, jestem zielony w maxscripcie ale bardzo zalezy mi na zrobieniu takiego, aby zaznaczal wszystkie wierzcholki danego splajna i zmienial je na corner (wiem, wiem, prawy przycisk myszy i zaznaczenie corner - problem polega na tym ze przy duzej ilosci splajnow powtarzanie tej samej czynnosci jest meczace). Po studiowaniu helpa wywnioskowalem cus takiego: s = splineShape () subobjectLevel = 1 actionMan.executeAction 0 "40021" -- Selection: Select All setKnotType s 1 1 #corner updateShape s actionMan.executeAction 0 "40043" -- Selection: Select None subobjectLevel = 0 "Prawie" dziala ;] tzn. wyskakuje blad w jednej linijce: $Editable_Spline:Shape11 @ [0.000000,0.000000,0.000000] 1 true -- Runtime error: shape spline index out of range: 1 OK true 0 blad popelniam w linijce : setKnotType s 1 1 #corner ale na litosc nie wiem co mam tu wpisac pomocy
November 27, 200816 yr Witam, maxScript nie musi mieć zaznaczonych obiektów żeby wykonywać na nich operacje. Wystarczy mu, że wie co ma z czym zrobić. Najpierw, pokaże Tobie gdzie jest błąd w Twoim skrypcie: s = splineShape () - tutaj tworzysz linię, która nie ma żadnego wierchołka actionMan.executeAction 0 "40021" -- Selection: Select All - tutaj karzesz maxowi zaznaczyć wszystkie wierzchołki na lini setKnotType s 1 1 #corner - a tutaj z kolei, ma on zamienić pierwszy wierzchołek (którego nie ma) na corner I właśnie to samo on stara się ci powiedzieć - "shape spline index out of range: 1". Czyli- "W lini jaką mi pokazałeś nie ma wierzchołka o numerze 1" Jeśli przyjrzeć się dokładniej jak wygląda funkcja, z której korzystasz: getKnotType (#smooth | #corner | #bezier | #bezierCorner ) = spline = numer splinu w spline:P (jak masz spline to mozesz tam mieć kilka lini, np jak użyjesz przycisku attach = numer wierzchołku (#smooth | #corner | #bezier | #bezierCorner ) = typ na jaki chcesz zamienić wierzchołek Zatem żeby zrobić skrypt, który będzie zamieniał wierzchołki trzeba przejść przez takie kroki: 1. Stworzyć zbiór wybranych przez Ciebie linii (w maxscript nazywa się to array) 2. Dla każdej linii w tym zbiorze sprawdzić czy ile jest tam linii 3. Dla Każdej wewnętrznej linii, okreslić ile ona ma wierzchołków 4. Dla każdego wierzchołka w każdej wewnętrznej linii zmienić tym z #smooth na #corner Czyli zakładając, że wybierasz na raz tylko linie a nie np Geometrie, kości, helpery itd, skrypt powinien wyglądac tak: b=selection as array for s in b do ( for o = 1 to (numSplines s) do ( for i = 1 to (numKnots s o) do ( setKnotType s o i #corner ) ) updateshape s ) Pozdrawiam, i Życzę miłej zabawy ze skryptowaniem w maxie.
November 27, 200816 yr Author bardzo bardzo dziekuje ale zdolalem odniesc polowiczny sukces. tzn. Twoj skrypt dziala w listenerze (f11 -> shift+enter) natomiast kiedy wrzucam go jako ikonke wyskakuje blad: --Syntax error: at name, expected ( --In line: b= Skrypt jaki wkleilem to: macroScript cornerknot category:"greg" b=selection as array for s in b do ( for o = 1 to (numSplines s) do ( for i = 1 to (numKnots s o) do ( setKnotType s o i #corner ) ) updateshape s ) Gdzie zrobilem blad? pozdrawiam
November 27, 200816 yr Zapomniałeś dodać nawiasów na początku i końcu makra. Powinno być tak macroScript cornerknot category:"greg" ( b=selection as array for s in b do ( for o = 1 to (numSplines s) do ( for i = 1 to (numKnots s o) do ( setKnotType s o i #corner ) ) updateshape s ) )
November 28, 200816 yr Author super ekstra wielkie dzieki - ulatwiles mi zycie bardzo! i tak sobie mysle - skoro dales palec... ;] Gdybym chcial dodac do tego skryptu weldowanie wszystkich wierzcholkow musze dodac taka opcje: splineOps.weld czyli w tym konkretnym przypadku gdzie nalezaloby taka linijke wstawic? btw. czy jest jakis tutek dla hiper-poczatkujacych, ktory moglbys polecic ? Edited November 28, 200816 yr by gregkilla
Create an account or sign in to comment