Jump to content
Pawelkos

[MaxScript]Edit poly modifier selector - prosba o skrypt

Recommended Posts

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 :)

Share this post


Link to post
Share on other sites

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 ()
)
--

)


Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

Wielkie dzieki! To jest dokladnie to o co mi chodzilo:) Probowalem googlac maja nadzieje ze wlasnie na scritpspocie takie cos sie znajdzie, ale mi sie nie udalo na to natknac a tu prosze, jednak bylo :) Jeszcze raz dzieki

Share this post


Link to post
Share on other sites

Spoko że problem rozwiązany. "U mnie działa" ten skrypt, pewnie musiał bym zobaczyć scenkę, ale teraz juz nie potrzebne ;)

Share this post


Link to post
Share on other sites

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
)

Share this post


Link to post
Share on other sites

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? :)

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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?

Edited by Pawelkos

Share this post


Link to post
Share on other sites

I jak deshu bedzie co z tego? :) Nie popedzam tylko pytam z ciekawosci, bo nie wiem czy tu jeszcze zagladac ;)

Share this post


Link to post
Share on other sites

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!

Share this post


Link to post
Share on other sites

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!

Share this post


Link to post
Share on other sites

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 ;)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

We are using cookies. Read about our Privacy Policy