Skocz do zawartości

[MaxScript]Edit poly modifier selector - prosba o skrypt


Rekomendowane odpowiedzi

Napisano

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

  • Odpowiedzi 17
  • Created
  • Ostatniej odpowiedzi

Top Posters In This Topic

Napisano

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

)


Napisano

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.

Napisano

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

Napisano

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
)

Napisano

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

Napisano

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.

Napisano (edytowane)

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
Napisano

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!

Napisano

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!

Napisano

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

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