Skocz do zawartości

Rekomendowane odpowiedzi

Napisano

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

  • Odpowiedzi 10
  • Created
  • Ostatniej odpowiedzi

Top Posters In This Topic

Napisano

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.

Napisano

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?

Napisano

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.

Napisano

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

Napisano

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

Napisano

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.

Napisano

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

Napisano

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.

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