Skocz do zawartości

[MaxScript]Edit poly modifier selector - prosba o skrypt


Pawelkos

Rekomendowane odpowiedzi

Witam chcialbym zwrocic z mala prosba do maxscriptowych wyjadaczy :). Dla mnie napisanie takiego skryptu to byloby godziny a niestety nie mam na to teraz czasu, a dla kogos kto maxscript ma w jednym palcu to zapewne 15 min roboty. Otoz przydalby mi sie script ktory by po jego aktywacji wybieral pierwszy "napotkany" edit poly modyfikator na stosie(liczac od szczytu stosu) aktualnie wybranego obiektu i automatycznie przechodzil w tryb selekcji vertexow. Wiec jesli ktoras z forumowych duszyczek zechciala poswiecic pare minut swojego wolnego czasu i machnac taki skripcik bylbym wdzieczny :) Z gory dziekuje wszystkim dobroczyncom :)

Odnośnik do komentarza
Udostępnij na innych stronach

  • Odpowiedzi 17
  • Created
  • Ostatniej odpowiedzi

Top Posters In This Topic

coś takiego na szybko

for i in selection where classof i.modifiers[1] == Edit_Poly do (
--
SetCommandPanelTaskMode #modify
subObjectLevel = 1
/* zaznaczy tylko te vertexy ktore byly juz w stacku
i.modifiers[#Edit_Poly].Select #Vertex
*/

-- zaznaczy wszystkie vertexy obiektu
for vert in (i.mesh.verts as bitarray) do (
i.modifiers[#Edit_Poly].Select #Vertex #{vert}
i.modifiers[#Edit_Poly].Commit ()
)
--

)


Odnośnik do komentarza
Udostępnij na innych stronach

Dzieki za probe pomocy, niestety nie dziala ten skrypt:/. Kiedy go uruchamiam nic sie nie dzieje. Co prawda w MaxScript Listenerze zadnych bledow nie pokazuje tylko "OK", ale na samym obiekcie zadna selekcja sie po pojawia i tak samo na stosie modyfikatorow.

Odnośnik do komentarza
Udostępnij na innych stronach

http://www.scriptspot.com/3ds-max/scripts/rapid-edit

 

Kiedyś sie na niego natknąłem na scriptspocie. Działa z edit poly i edit spline, musisz tylko po wybraniu obiektu uruchomić go przypisanym skrótem klawiszowym, który musisz zdefiniować

I nawet wybiera domyślnie vertexy :D

Edytowane przez stormwind
Odnośnik do komentarza
Udostępnij na innych stronach

Tak się wyrwałem a tu proszę, takie kwiatki.

 

Mój błąd, fakt. Tutaj powinno być lepiej, choć kod nie za piękny.

for obj in selection do (
--subObjectLevel = 1
check = 0
for i = 1 to obj.modifiers.count do (
if check 	if classof obj.modifiers[i] == Edit_Poly do (
	check = i
)
)
)

	modPanel.setCurrentObject obj.modifiers[check]
	all_verts = obj.mesh.verts as bitarray
	SetCommandPanelTaskMode #modify
	subObjectLevel = 1
	obj.modifiers[check].Select #Vertex all_verts
)

Odnośnik do komentarza
Udostępnij na innych stronach

KrzyM mialbym jeszcze jedna prosbe... Na to chwile mam ten skrypt podpiety pod skrot klawiaturowy. Bylbys w stanie zmodyfikowac ten skrypt tak ze jak wciskam moj skrot klawiaturowy to skrypt dziala tak jak teraz, a jesli wsciskam go drugi raz to po prostu selekcja vertexow zostaje wylaczona i przeskakuje na pierwszy modyfikator na gorze stosu? :)

Odnośnik do komentarza
Udostępnij na innych stronach

fn yoyoyo obj = (	
topModSelected = (modPanel.getModifierIndex obj (modPanel.getCurrentObject())) == 1

if topModSelected then (
	modToSel = 0
	for i = 1 to obj.modifiers.count do (
		if modToSel 				if classof obj.modifiers[i] == Edit_Poly do (
				modToSel = i
			)
		)
	)

	modPanel.setCurrentObject obj.modifiers[modToSel]
	SetCommandPanelTaskMode #modify
	subObjectLevel = 1
)
else(
	modPanel.setCurrentObject obj.modifiers[1]
)

)

obj = selection[1]
if (superclassof obj == GeometryClass) do (yoyoyo obj)

 

Przełącza miedzy:

1. Aktywowaniem modyfikatora na szczycie stosu

2. Zaznaczeniem najwyższego na liście Edit Poly i wejściem w edycje werteksów.

 

Zmieniłem skrypt tak, że działa tylko na jednym obiekcie na raz (wcześniej działał na multiselekcji), oraz ze nie zaznacza wszystkich verteksów.

 

Można jeszcze dopisać, że będzie wchodziło w vertexy bazowego obiektu Editable Poly jeżeli w stacku nie ma modyfikatora Edit Poly.

Odnośnik do komentarza
Udostępnij na innych stronach

Hej deshu, dzieki za skrypcik. Moglbys go tak zmodyfikowac, ze kiedy wracam na gore stosu to selekcja z edit poly nie jest zachowana, bo w tym momencie jest tak ze jak wracam na gore stostu, to przekazywana jest selekcja z edit poly. Z gory dziekuje:)

 

Edit:

Zauwazylem tez dziwne dzialanie jesli dzialam na instacji obiektu. Otoz jesli uruchamiam skrypt na obiekcie ktory jest instancja, selekcja zmienia sie z instancji na obiekt ktory jest oryginalem. Dal bys rade zmienic to tak zeby to dzialalo na obiekcie aktualnie wyselekcjonowanym bez wzgledu czy jest on instacja czy nie?

Edytowane przez Pawelkos
Odnośnik do komentarza
Udostępnij na innych stronach

Hmm widzę temat się rozwija ;) Ja nie miałem czasu kontynuować.

Chwilkę poklikałem i jest update - powinien wracać na górę stosu ;)

Z instancjami nic nie kombinowałem i chyba pasuje. Nie pisałem nigdy w maxscrypcie więcej niż 1 linię i jakoś nie leży mi tę język ^^

fn resetSelectionSet = (
callbacks.removeScripts #modPanelSelChanged id: #max3dPL
obj = selection[1]
fEp = findFirstEditPoly(obj)

modPanel.setCurrentObject obj.modifiers[fEp]
SetCommandPanelTaskMode #modify
subObjectLevel = 1
obj.modifiers[fEp].SetSelection #Vertex #{}
subobjectLevel = 0
modPanel.setCurrentObject obj.modifiers[1]
)

fn findFirstEditPoly obj = (
topModSelected = (modPanel.getModifierIndex obj (modPanel.getCurrentObject())) == 1
if topModSelected then (
	modToSel2 = 0
	for i = 1 to obj.modifiers.count do (
		if modToSel2 				if classof obj.modifiers[i] == Edit_Poly do (
				modToSel2 = i
			)
		)
	)
)
return modToSel2
)

fn yoyoyo obj = (
max modify mode
modToSel = findFirstEditPoly(obj)
topModSelected = (modPanel.getModifierIndex obj (modPanel.getCurrentObject())) == 1

if topModSelected then (
	modPanel.setCurrentObject obj.modifiers[modToSel]
	SetCommandPanelTaskMode #modify
	subObjectLevel = 1
	callbacks.addScript #modPanelSelChanged "resetSelectionSet()" id:#max3dPL
)
else(
	modPanel.setCurrentObject obj.modifiers[1]
)

)

obj = selection[1]
if (superclassof obj == GeometryClass) do (yoyoyo obj)

Pozdro!

Odnośnik do komentarza
Udostępnij na innych stronach

KrzyM dzieks, rzeczywiscie teraz powraca na gore stosu, ale zatrzymuje selekcje z edit poly z dolu (a chcialbym zeby selekcja byla wylaczana i nie przekazywana do gory stosu) i niestety jesli uruchamiam skrypt na instancji to selekcja przeskakuje na oryginalny obiekt. Generalnie Twoj skrypt dziala jak skrypt deshu, a mi by zalezalo na zmianie tych dwoch "mankamentow". Ale wielkie dzieki ze Ci sie chcialo! i jak na kogos kto maxscripcie nigdy nie napisal wiecej niz 1 linijke kodu to idzie ci calkiem niezle;)

 

Pozdro!

Odnośnik do komentarza
Udostępnij na innych stronach

Hmm działa tak samo z tą różnicą że dodany jest taki callback który po zmianie selekcji odznacza wszystko w tym "pierwszym" edit poly i wraca na górę stacku.

Z instancjami nic nie próbowałem bo brak czasu. Wczoraj sprawdzałem i mi jakoś to działa, ale te callbacki to dziwna sprawa i też nie wczytywałem się w temat ;)

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