Vai al contenuto
Lell

Problema duplicazione oggetti maxscript

Recommended Posts

Buongiorno, ho un problema con uno script per max. Lo script finale sarà più complesso, ma se non risolvo questo step non posso continuare.

In pratica voglio duplicare la mia selezione e posizionare l'oggetto duplicato a delle coordinate [x,y,z].

La duplicazione avviene correttamente, ma poi non riesco a riferirmi all'oggetto creato. Mi dice che non è definito, per cui non posso dargli le coordinate. Ecco il codice e l'errore. Come devo modificarlo?

Grazie mille!

post-78929-0-71883600-1433580063_thumb.j

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

io scriverei


oggettocopiato =  copy $nomeoggettodacopiare

oggettocopiato.pos = [x, y, z]


Se stai lavorando su un oggetto selezionato allora

oggettocopiato = copy $

oggettocopiato.pos = [x, y, z]

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

La prima versione a te funziona? A me dà errore anche quella. Se eseguo solo la linea della copia, non fa nemmeno copia. Non capisco perchè non vada ad assegnare il nuovo oggetto alla variabile che gli dico!

Nemmeno così funziona bene

maxOps.cloneNodes ref_obj cloneType:#copy newNodes:&nnl #nodialog

select nnl

$.pos = [0,0,0]

select ref_obj

Condividi questo messaggio


Link al messaggio
Condividi su altri siti
Inviata (modificato)

Il codice del tuo primo messaggio sicuro non va.

Dichiari la variabile ref_objs come $ e poi usi ref_obj senza la S quindi non trova la variabile dichiarata e non ti copia la selezione.

Edit: uno script per generare libri? :ph34r:


Modificato da mOcrAm

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

Cavolo che svista! Ora funziona tutto! Però allora perchè se facevo solo la linea della duplicazione mi eseguiva il duplicato correttamente? E perchè l'errore non me lo dava nella riga della duplicazione essendo l'oggetto ref_obj non definito? Max mi delude continuamente, c'è poco da fare. Anche quando si cerca di trovarne lati positivi.

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

Se per caso avviando in precedenza altri script e/o spezzoni di codice hai definito una variabile ref_obj è probabile che è rimasta in memoria a 3ds. L'importante è risolvere

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

Grrr! Non capisco proprio come ragiona sto maxscript! Qualcuno mi riesce a spiegare perchè, quando eseguo questo codice, mi dice che new_obj.max è una unknow property, quando invece vado a richiamarla nel listener mi funziona perfettamente? Ho guardato anche in altri script è funziona così!

Qualcuno potrebbe provare questo codice? Basta avere uno o più cubi in scena selezionati. Dovrebbe crearne 5, uno di fianco all'altro. Grazie mille!

fn RandScale obj scale_variation =

(

    obj.scale.x = 1 + random -0.3 0.5 * scale_variation

    obj.scale.y = 1 + random -0.1 0.1 * scale_variation

    obj.scale.z = 1 + random -0.1 0.1 * scale_variation

)


fn GenObjectsGroup ref_objs starting_point group_kind gen_type objs_number row_dir =

(

    if group_kind == "ROW" then

    (

        parent_obj = Dummy pos:starting_point

        parent_obj.boxsize = [20, 20, 20]


        next_obj_loc = starting_point

        first_obj = undefined

        last_obj = undefined


         for i = 0 to 4 do -- obj_number do

         (

             n = random 1 ref_objs.count

             maxOps.cloneNodes ref_objs[n] cloneType:#copy newNodes:&new_obj #nodialog

             new_obj.parent = parent_obj


             RandScale new_obj 0.5    


              if first_obj == undefined then

              (

                  new_obj.pos.y = next_obj_loc[2]

                  obj_dim_x = new_obj.max.x - new_obj.min.x --calcolo dimensione in x

                  new_obj.pos.x = next_obj_loc[1] + row_dir*obj_dim_x/2

                  first_obj = new_obj

              ) else

              (

                  new_obj.pos.y = next_obj_loc[2]

                  obj_dim_x = new_obj.max.x - new_obj.min.x

                  new_obj.pos.x = next_obj_loc[1] + obj_dim_x/2

            )

            next_obj_loc[1] = new_obj.pos.x+obj_dim_x/2

            last_obj = new_obj


         )


    )

)



ref_objs = getCurrentSelection()

GenObjectsGroup ref_objs [0,-50,0] "ROW" "SINGLE" 10 1

Condividi questo messaggio


Link al messaggio
Condividi su altri siti
Inviata (modificato)

Ok, proverò, però c'è da dire che per la proprietà pos funziona.

Non è proprio così...

Puoi scriverci la posizione, ma non puoi leggerne la posizione


(

	global Test

	try (destroyDialog Test) catch()


	rollout Test "Copy" width:60 height:60

	(

		button btt_1 "COPY 1"

		button btt_2 "COPY 2"


		on btt_1 pressed do

		(

			test1  = copy $

			test1.pos = [0,0,0]

			print test1.pos

		)


		on btt_2 pressed do

		(

			maxOps.cloneNodes $ cloneType:#copy newNodes:&test2 #nodialog

			test2.pos = [10,10,0]

			print test2.pos

		)

	)

	createDialog Test

)

fai un cubo, selezionalo e poi premi i due bottoni, il tuo metodo restituisce errore


Modificato da mOcrAm

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

E' vero! Ma come mai sta cosa? Te lo sai spiegare? Mi piacerebbe capire bene come funziona sta cosa, se magari è un concetto che si dovesse ripresentare. Non vorrei essere dover rompere le scatole qui sul forum per ogni sciocchezza.

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora

  • Navigazione recente   0 utenti

    Non ci sono utenti registrati da visualizzare in questa pagina.

×