Jump to content
Shin Long

Creare Box "aurei" E Posizionarli Come Griglia Nello Spazio

Recommended Posts

Salve, sto cercando di imparare a fare delle cose in max script. Avrei voluto cimentarmi con sistemi L o algoritmi di crescita ma non sono ancora in grado.

Anzi, per il momento mi sono bloccato con questo codice:

rollout BoxTool "generatore box"

(

spinner length "Dimensione lato: " range:[1,100,1]

spinner clm "Colonne: " type:#integer range: [1,50,1]

spinner rgh "Righe: " type:#integer range: [1,50,1]

spinner lvl "Livelli: " type:#integer range: [1,50,1]

button create "Crea Box Aurei"

on create pressed do

Kube = box length:(length.value) width:(length.value*1.618) height:(length.value/1.618)

for y = 1 to clm.value do

(

for x = 1 to rgh.value do

(

for z = 1 to lvl.value do

(

obj = copy Kube

obj.pos = [length.value*x, length.value*y, length.value*z]

)

)

)

)

MyFloater = newrolloutfloater "Box Aurei" 220 300

addrollout BoxTool myFloater

qualcuno saprebbe dirmi dove sbaglio? In quanto mi dice che c'è un errore già dal primo for...

vi sarei immensamente grato se mi potreste spiegare in cosa pecca la sintassi che ho fatto finora.

Grazie mille...

Shin

Share this post


Link to post
Share on other sites

Dici? Io ho aperto 4 parentesi tonde e le ho chiuse tutte e quattro.

pensavo di dover lasciare aperte le parentesi per aggiungere gli altri comandi e chiudere tutto alla fine.

Lasciando il codice come stava prima, mi da il seguente errore:

-- Error occurred in anonymous codeblock; filename: ; position: 304

-- Syntax error: at (, expected <rollout clause>

-- In line: (

mettendo la parentesi dove mi hai detto, invece, mi crea il rollout con gli spinner che ho creato, ma andandone a modificare i valori dello spinner nell'interfaccia, non mi genera altro che il primo cubo e restituendo questo errore:

Rollout:BoxTool

-- Error occurred in anonymous codeblock; filename: ; position: 487

-- Frame:

-- clm: undefined

-- Unknown property: "value" in undefined

ora... probabile che io debba spostare la seconda parte di codice prima del on create pressed do? Ragionandoci credo di no in quanto, a rigor di logica dico a max "dopo aver premuto questo tasto fammi queste copie prendendo i valori dagli spinner..."

o sbaglio?

Share this post


Link to post
Share on other sites

ho avuto occasione di guardarci con l'editor, inanzitutto ti consigio di indentare il codice e tenerlo ordinato altrimenti non ti ci raccapezzi più.

Ogni tonda che avei aperto era chiusa, quella che dicevo io era necessaria, ma poi bisognava anche chiuderla, scusami ma ti ho risposto un pò di fretta.

Comunque ecco qua lo script funzionante

rollout BoxTool "generatore box"

(

	spinner length "Dimensione lato: " range:[1,100,1]

	spinner clm "Colonne: " type:#integer range: [1,50,1]

	spinner rgh "Righe: " type:#integer range: [1,50,1]

	spinner lvl "Livelli: " type:#integer range: [1,50,1]

	button create "Crea Box Aurei"


	on create pressed do(

		Kube = box length:(length.value) width:(length.value*1.618) height:(length.value/1.618)


		for y = 1 to clm.value do

		(

			for x = 1 to rgh.value do

			(

				for z = 1 to lvl.value do

				(

					obj = copy Kube

					obj.pos = [length.value*x, length.value*y, length.value*z]

				)

			)

		)

	)

)
come vedi ho aggiunto la parentesi che ti dicevo e poi ne ho aggiunta un'altra in fondo. Quelle parentesi ci vogliono perchè come i cicli for eseguono il comando successivo e quindi per fargliene eseguire di più è necessario usare le parentesi tonde, stessa cosa vale per gli eventi lanciati all'interno di un rollout e quindi maxscript interpretava il tuo codice come se con l'evento pressed dovesse eseguire solo la riga di codice
Kube = box length:(length.value) width:(length.value*1.618) height:(length.value/1.618)
e le righe successive come elementi del rollout da te creato, ma dato che i cicli for non possono essere elementi di un rollout allora ti dava errore. Aggiungendo le parentesi invece dici a maxscript che il blocco di codice
(

		Kube = box length:(length.value) width:(length.value*1.618) height:(length.value/1.618)


		for y = 1 to clm.value do

		(

			for x = 1 to rgh.value do

			(

				for z = 1 to lvl.value do

				(

					obj = copy Kube

					obj.pos = [length.value*x, length.value*y, length.value*z]

				)

			)

		)

	)

deve essere eseguito ogni volta che succede quell'evento.

Nella guida al capitolo 'Rollout Clauses' trovi la spiegazione della corretta sintassi all'interno di un rollout.

Se hai domande son qua

ciao!

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...