Napisano 12 Styczeń 20178 l 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 :)
Napisano 12 Styczeń 20178 l 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 13 Styczeń 20178 l Autor 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 13 Styczeń 20178 l 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 13 Styczeń 20178 l przez stormwind
Napisano 13 Styczeń 20178 l Autor 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 13 Styczeń 20178 l Ja też googlowałem bo nie pamiętałem nazwy. btw znalazłem jeszcze coś takiego, do wybierania konkretnego modyfikatora, ale tego juz nie testowałem. http://www.scriptspot.com/3ds-max/scripts/modifier-auto-select
Napisano 13 Styczeń 20178 l Spoko że problem rozwiązany. "U mnie działa" ten skrypt, pewnie musiał bym zobaczyć scenkę, ale teraz juz nie potrzebne ;)
Napisano 13 Styczeń 20178 l Autor KrzyM scenka, bardzo prost bo testowa: https://dl.dropboxusercontent.com/u/2055196/test%20scene.max Nie wiem moze jakos zle probuje uzyc tego skryptu, ale nie moglem go zmusic do dzialania u siebie. Jak bys mogl zerknac i sprawdzic co jest nie tak, byloby fajnie. Pozdrawiam
Napisano 13 Styczeń 20178 l 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 17 Styczeń 20178 l Autor 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 17 Styczeń 20178 l 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 18 Styczeń 20178 l Autor 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 18 Styczeń 20178 l przez Pawelkos
Napisano 20 Styczeń 20178 l Autor I jak deshu bedzie co z tego? :) Nie popedzam tylko pytam z ciekawosci, bo nie wiem czy tu jeszcze zagladac ;)
Napisano 20 Styczeń 20178 l 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 24 Styczeń 20178 l Autor 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 26 Styczeń 20178 l 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