Napisano 27 Listopad 200816 l 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
Napisano 27 Listopad 200816 l 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.
Napisano 27 Listopad 200816 l Autor 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
Napisano 27 Listopad 200816 l 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 ) )
Napisano 28 Listopad 200816 l Autor 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 ? Edytowane 28 Listopad 200816 l przez gregkilla
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto