Skocz do zawartości

maxscript na na zmiane wierzchołkow splajna - pomocy


gregkilla

Rekomendowane odpowiedzi

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

Odnośnik do komentarza
Udostępnij na innych stronach

  • Odpowiedzi 4
  • Created
  • Ostatniej odpowiedzi

Top Posters In This Topic

Top Posters In This Topic

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.

  • Confused 1
Odnośnik do komentarza
Udostępnij na innych stronach

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

Odnośnik do komentarza
Udostępnij na innych stronach

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

)

)

Odnośnik do komentarza
Udostępnij na innych stronach

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 przez gregkilla
Odnośnik do komentarza
Udostępnij na innych stronach

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ę



×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Wykorzystujemy cookies. Przeczytaj więcej Polityka prywatności