3dsmaxman Napisano 10 Marzec 2005 Napisano 10 Marzec 2005 oto pierwsze pytanie - czy ktos wie, gdzie moge znalesc skrypty/pluginy podstawowych bryl geometrycznych? bo np. proubuje zrobic plugin tworzacy graniastoslup foremny o podstawie kwadratu i co? jak zwykle mam problemy :P z tworzeniem siatki - w helpie "How To - Scripted Geometry Plugin" (czy cos takiego) bylo opisane jak stworzyc jeden plugin; wzorujac sie na nim chcialem stworzyc moj plugin; do tworzenie siatki uzywalem funkcji 'setMesh'; jak potem moc np. dodawac modyfikator do takiej siatki? gdzie w wywolaniu funkcji mam podana nazwe? bo mi, jak potem probowalem ustawic automatycznym sposobem smoothgroups, to nie chcial :/ setMesh ost verts:vert_array faces:face_array addmodifier ost (Smooth autosmooth:true threshold:30) czy to jest poprawne wywolanie? :P
lechoo Napisano 10 Marzec 2005 Napisano 10 Marzec 2005 Wywolanie jest jak najbardziej poprawne. Co do podstawowych bryl mozesz poszukac w przykladowych pluginach do maxa ktore sa w sdk. Sama geometrie tworzy sie dosc podobnie. Mozesz tez sprobowac na www.scriptspot.com w dziale objects.
3dsmaxman Napisano 10 Marzec 2005 Autor Napisano 10 Marzec 2005 obie linijki? bo ja mam taki skrypt (pomijam interfejs itp. - sam glowny kod: plugin simpleObject OstFor name: "OstFor" category: "Own Geometric Objects" classID:#(0x61e203b2, 0x63656b19) ( ... on buildMesh do ( vert_array = #() face_array = #() tmp = (a * sqrt(2) / 2) tmp *= tmp tmp2 = a * a - tmp h = sqrt(tmp2) v1 = [-a/2,-a/2,0] v2 = [a/2,-a/2,0] v3 = [a/2,a/2,0] v4 = [-a/2,a/2,0] v5 = [0,0,h] append vert_array v1 append vert_array v2 append vert_array v3 append vert_array v4 append vert_array v5 append face_array [1,4,3] append face_array [3,2,1] append face_array [1,2,5] append face_array [2,3,5] append face_array [3,4,5] append face_array [4,1,5] setMesh ost verts:vert_array faces:face_array addmodifier ost (Smooth autosmooth:true threshold:30) convertToMesh(ost) for i = 1 to 2 do ( setEdgeVis ost i 1 false setEdgeVis ost i 2 true setEdgeVis ost i 3 true ) for i = 3 to 6 do ( setEdgeVis ost i 1 true setEdgeVis ost i 2 true setEdgeVis ost i 3 true ) update ost ) ... )--end create )--end plugin i przy brobie stworzenia po raz pierwszy obiektu uzywajac myszki wyskakuje taki oto blad: co wiec trzeba z tym zrobic?
lechoo Napisano 10 Marzec 2005 Napisano 10 Marzec 2005 Myslalem ze chodzi C o sam modyfikator :) Najprawodpodobniej nie zadeklarowales zmiennej ost, przynajmniej ja mam identyczny blad w takiej sytuacji. Sprobuj zmienic sam poczatek skryptu na: plugin simpleObject OstFor name: "OstFor" category: "Own Geometric Objects" classID:#(0x61e203b2, 0x63656b19) ( local ost a dalej po staremu.
3dsmaxman Napisano 10 Marzec 2005 Autor Napisano 10 Marzec 2005 nadal jest jakis blad; -- Error occurred in buildMesh() -- Frame: -- tmp: 0.5 -- v5: [0,0,0.707107] -- tmp2: 0.5 -- face_array: #([1,4,3], [3,2,1], [1,2,5], [2,3,5], [3,4,5], [4,1,5]) -- v3: [0.5,0.5,0] -- v4: [-0.5,0.5,0] -- v1: [-0.5,-0.5,0] -- v2: [0.5,-0.5,0] -- vert_array: #([-0.5,-0.5,0], [0.5,-0.5,0], [0.5,0.5,0], [-0.5,0.5,0], [0,0,0.707107]) -- h: 0.707107 >> MAXScript Scripted Plugin Handler Exception: -- No ""setMesh"" function for undefined dochodze do wniosku, ze pokpilem cos chyba we fragmencie, gdzie uzytkownik poprzez szuranie myszka wzdluz osi X okresla dlugosc boku :) tool create ( on mousePoint click do ( case click of ( 1: coordsys grid (nodeTM.translation = gridPoint) ) ) on mouseMove click do ( case click of ( 2: (a = abs(gridDist.x)) 3: (#stop) ) ) )--end create bowiem blad wyskakuje, gdy tylko klikne myszka w aktywnym oknie, a nie dobiero gdy przeciagne kursorem i puszcze
lechoo Napisano 11 Marzec 2005 Napisano 11 Marzec 2005 Moglbys wrzucic caly skrypt, tak najlatwiej bedzie znalesc jakis blad.
3dsmaxman Napisano 11 Marzec 2005 Autor Napisano 11 Marzec 2005 plugin simpleObject OstFor name: "OstFor" category: "Own Geometric Objects" classID:#(0x61e203b2, 0x63656b19) ( parameters main rollout: params ( a type:#integer ui:a default:1 ) rollout params "Object Settings" ( spinner a "Edge Length" range:[1,10,1] type:#integer ) on buildMesh do ( vert_array = #() face_array = #() tmp = (a * sqrt(2) / 2) tmp *= tmp tmp2 = a * a - tmp h = sqrt(tmp2) v1 = [-a/2,-a/2,0] v2 = [a/2,-a/2,0] v3 = [a/2,a/2,0] v4 = [-a/2,a/2,0] v5 = [0,0,h] append vert_array v1 append vert_array v2 append vert_array v3 append vert_array v4 append vert_array v5 append face_array [1,4,3] append face_array [3,2,1] append face_array [1,2,5] append face_array [2,3,5] append face_array [3,4,5] append face_array [4,1,5] setMesh ost verts:vert_array faces:face_array addmodifier ost (Smooth autosmooth:true threshold:30) convertToMesh(ost) for i = 1 to 2 do ( setEdgeVis ost i 1 false setEdgeVis ost i 2 true setEdgeVis ost i 3 true ) for i = 3 to 6 do ( setEdgeVis ost i 1 true setEdgeVis ost i 2 true setEdgeVis ost i 3 true ) update ost ) tool create ( on mousePoint click do ( case click of ( 1: coordsys grid (nodeTM.translation = gridPoint) ) ) on mouseMove click do ( case click of ( 2: (a = abs(gridDist.x)) 3: (#stop) ) ) )--end create )--end plugin
lechoo Napisano 11 Marzec 2005 Napisano 11 Marzec 2005 W funkcji buildMesh musisz zmienic wszystkie ost na mesh. Jest to lokalna zmienna na ktorej operuje skryptowy plugin, czyli obiekt ktory tworzy. Wyrzuc tez addmodifier i convertToMesh. Drugie jest niepotrzebne a nadawanie modyfikatora w funkcji buildMesh oznaczaloby nakladanie nowego modyfikatora za kazdym razem kiedy zmieniasz jakis parametr obiektu, bo wlasnie tak wywolywana jest funkcja buildMesh. Sama funkcja setMesh sluzy to zdefiniowania topologi jakiegos juz istniejacego mesha (to ze mesh istnieje nie oznacza ze na zdefiniowana topologie), natomiast Ty uzywales setMesh na zmiennej ost pod ktora nie bylo zadnego mesha i dlatego wywalalo Ci blad. W normalnym skrypcie musialbys najpierw napisac ost = mesh() i dopiero wtedu setMesh.
3dsmaxman Napisano 11 Marzec 2005 Autor Napisano 11 Marzec 2005 jednak jesli nie zdefiniuje grup wygladzania, to owszem - skrypt dziala bez zarzutu, ale efekt nie jest dosc dobry... wkleisz tu fragment skryptu, w ktory nalezy wcisnac ta instrukcje?
lechoo Napisano 14 Marzec 2005 Napisano 14 Marzec 2005 Zmodyfikuj ten kawalek kodu: case click of ( 2: (a = abs(gridDist.x)) 3: ( addmodifier selection[1] (Smooth autosmooth:true threshold:30) #stop ) ) Podejrzewam ze moznaby zrobic to bardziej elegancko ale to bylo najprostsze rozwiazanie.
3dsmaxman Napisano 14 Marzec 2005 Autor Napisano 14 Marzec 2005 dziekuje i skacze z radosci! :) moj pierwszy plug-in dziala (prymitywny, ale co?)! :P
Rekomendowane odpowiedzi
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ę