Jump to content
3dsmaxman

Pytania 3dsmaxmana - MaxScript :)

Recommended Posts

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

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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:

bladmaxa5fm.jpg

co wiec trzeba z tym zrobic?

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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?

 

fotka7dx.jpg

Share this post


Link to post
Share on other sites

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.

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