Vai al contenuto
mud

Clonatore In Maxscript

Recommended Posts

:hello:

e la prima volta che scrivo nella sezione wip, ma era proprio arrivato il momento visto che sto

affrontando l'argomento Maxscript di cui non sapevo quasi nulla fino a qualche giorno fa, quando ho

visto i video tutorial di philix (sia benedetto!), e mi si è aperto un mondo! :o

proprio philix mi ha dato l'input per smanettare su sta roba e su suo consiglio la condivido con tutti,

sperando di ricevere qualche aiuto perchè come ho già detto e la prima volta che tratto Maxscript.

il mio obiettivo è quello di creare un "clonatore"con un' interfaccia capace di:

- copiare n volte l'oggetto selezionato;

- spostare in x, y, z le varie copie incrementando magari il valore del "delta";

- ruotare le copie in x,y,z;

- scalarle in x,y,z;

- colorare la composizione, magari assegnando due colori di partenza per creare una sfumatura;

il tutto preferibilmente in maniera dinamica, quindi intervenedo sull'interfaccia, in tempo reale potrò

osservare nella viewport cosa accade.

allora come ho già detto sono partito da uno script che mi ha dato philix che è questo:

spaziox = 10

spazioy = 0

spazioz = 0

numerocopie = 5

for i = 1 to numerocopie do (

	aa = copy $ -- copia l'oggetto e gli assegna una variabile temporanea chiamata aa

	aa.pos = [$.pos.x+(spaziox*i),$.pos.y+(spazioy*i),$.pos.z+(spazioz*i)] -- cambia la posizione della copia

	aa.name = "copia" + i as string -- cambia il nome della copia

)
impostando 4 variabili spaziox,y,z e numerocopie gestisco un ciclo for in cui per i che va da 1 al valore di numerocopie in questo caso 5, farà 5 copie dell'oggetto aa , posizionando di volta in volta la copia in punto con le seguenti coordinate: x=$.pos.x+(spaziox*i) y=$.pos.y+(spazioy*i) z=$.pos.z+(spazioz*i) infine nominerà gli oggetti :copia1, copia2, copia3, copia4, copia5 il risultato che ottengo è questo 1.jpg 5 copie spostate di una distanza di 10 nel secondo passaggio ho aggiunto la rotazione
spaziox=10

spazioy=0

spazioz=0

numerocopie=5

for i=1 to numerocopie do (

aa=copy $ --copia l'oggetto e gli assegna una var temporanea chiamata aa

aa.pos=[$.pos.x+(spaziox*i),$.pos.y+(spazioy*i),$.pos.z+(spazioz*i)]--cambia la posizione della copia

aa.rotation = (eulerangles (($.rotation.x+i)*i) 0 0)

aa.name="copia"+ i as string

)
in questo caso solo per x che è =(la rotazione iniziale in x dell'oggetto selezionato+i)*i, è un espressione facoltativa infatti penso di cambiarla ma ho moltiplicato per i solo per variare un pò il risultato lasciando invece,i valori y e z=0 il risultato è questo: 2.jpg in seguito ho cominciato a studiare un interfaccia
utility createcopies "cloner"

(

	spinner num "number" range: [0,10,3] type:#integer

	spinner spaziox "Xdist" range: [0,100,10] type:#float

	spinner spazioy "Ydist" range: [0,100,10] type:#float

	spinner spazioz "Zdist" range: [0,100,10] type:#float

	button create "create" 

	on create pressed do

		for i = 1 to num.value do (

		aa = instance $--copia l'oggetto e gli assegna una variabile temporanea aa

		aa.pos = [$.pos.x+(spaziox.value*i), $.pos.y+(spazioy.value*i), $.pos.z+(spazioz.value*i)]--cambia la posizione della copia

		aa.rotation = (eulerangles (($.rotation.x+i)*i) 0 0)

		aa.name = "copia_box0" + (i+1) as string --cambia il nome della copia

		)


)

CreateDialog  createcopies width:200 height:200
in questo modo i valori che prima erano definiti con spaziox,y,z e numerocopie sono stati sostituiti con degli spinner, nel caso dello spinner delle copie è stato inserito il valore integer, visto che in questo caso non ha senso parlare di decimali, il tutto veniva gestito dal tasto create il risultato 3.jpg con questo script è stato aggiunto al rolluot"cloner" lo spinner per la rotazione in Z
utility createcopies "cloner"

(

	spinner num "number" range: [0,10,1] type:#integer

	spinner spaziox "Xdist" range: [0,100,10] type:#float

	spinner spazioy "Ydist" range: [0,100,0] type:#float

	spinner spazioz "Zdist" range: [0,100,0] type:#float

	spinner rotz "Zrot" range: [0,360,0] type:#float

	button create "create" 

	on create pressed do

		for i = 1 to num.value do (


		aa = instance $--copia l'oggetto e gli assegna una variabile temporanea aa

		move aa [spaziox.value*i, spazioy.value*i, spazioz.value*i]--sposta l'oggetto aa

		aa.rotation = (eulerangles 0 0 (rotz.value+i))

		aa.name = "copia_box0" + (i+1) as string --cambia il nome della copia

		)


)

CreateDialog  createcopies width:200 height:200
4.jpg dopodichè ho inserito un pick_button per consentire la selezione dalla viewport
utility createcopies "cloner"

(

	pickbutton pick_object "none" width:100

	spinner num "number" range: [0,10,1] type:#integer

	spinner spaziox "Xdist" range: [0,100,10] type:#float

	spinner spazioy "Ydist" range: [0,100,0] type:#float

	spinner spazioz "Zdist" range: [0,100,0] type:#float

	spinner rotz "Zrot" range: [0,360,0] type:#float

	button create "create" width:80 enabled:false

	on pick_object picked obj do (

		object = obj; pick_object.text = object.name

		create.enabled = true

		)


	on create pressed do

		for i = 1 to num.value do (		

		aa = instance $--copia l'oggetto e gli assegna una variabile temporanea aa

		move aa [spaziox.value*i, spazioy.value*i, spazioz.value*i]--sposta l'oggetto aa

		aa.rotation = (eulerangles 0 0 (rotz.value*i))

		aa.name = "copia_box0" + (i+1) as string --cambia il nome della copia

		)


)

CreateDialog  createcopies width:200 height:400

5.jpg

probabilmente non è un granche ma dovevo pur cominciare

ciò che mi da problemi e che sto studiando in questo momento è

-la dinamicità dell'interfaccia, infatti con questo script devo premere "create" per vedere il risultato ma se poi intervengo sui valori non ottengo nessuna modifica in tempo reale

-il cambio di colore

vabbè in effetti ognuno ci può mettere ciò che vuole

spero nella vostra partecipazione

io intanto proseguo :wallbash:


Modificato da mud

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

aggiungendo

select object

nelle azioni del pick_object button

ho risolto il problema dello script precedente (mi dava errore perchè effettivamente premendo pick button non selezionava l'oggetto ma ne copiava solo il nome sul suo tasto)

purtroppo seleziona solo un'oggetto alla volta, ma per adesso lascio perdere questo dettaglio...

si procede...


Modificato da mud

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

:lol: ragazzi che soddisfazione!

sto Maxscript è una vera figata!

anche a un imbecille come me può dare soddisfazioni!

devo dire che me lo immaginavo più ostico,invece con un pò di matematica si pò andare dappertutto..

vabbè

volevo aggiungere questo script che riesce a creare una sfumatura di colore tra la prima copia e l'ultima

copio l'intero script così se qualcuno volesse utiizzarlo non deve andare a ricostruire tutto l'ambaradan

utility createcopies "cloner"

(

	pickbutton pick_object "none" width:100

	--pickbutton pick_object "none" width:100

	spinner num "number" range: [0,10,10] type:#integer

	spinner spaziox "Xdist" range: [0,100,10] type:#float

	spinner spazioy "Ydist" range: [0,100,0] type:#float

	spinner spazioz "Zdist" range: [0,100,0] type:#float

	spinner rotz "Zrot" range: [0,360,0] type:#float

	button create "create" width:80 enabled:false

	on pick_object picked obj do (

		object = obj; pick_object.text = object.name

		select object

		create.enabled = true

		)


	on create pressed do

		for i = 1 to num.value do (

		newcolor= yellow - red --sono i due colori di partenza

		aa = instance $--copia l'oggetto e gli assegna una variabile temporanea aa

		move aa [spaziox.value*i, spazioy.value*i, spazioz.value*i]--sposta l'oggetto aa

		aa.rotation = (eulerangles 0 0 (rotz.value*i))--ruota la copia

		aa.name = "copia_box0" + (i+1) as string --cambia il nome della copia

		aa.wirecolor = (red + (newcolor/num.value)*i)--sfuma i colori

		)

)	

CreateDialog  createcopies width:200 height:400

6.jpg

in questo caso ho usato come colori di partenza il rosso e il giallo

ma il mio prossimo obiettivo sarà rendere interattiva la scelta dei due colori, magari tramite , che ne so, un picket_color, sempre se esiste ora guardo

a dopo...


Modificato da mud

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

ciao mud

carino lo script, ho iniziato anche io da pochissimo (nella sezione script trovi il mio, omino lego)

mi copio il tuo e provo ad aggiungere l'interattività

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

beh anche questa è fatta!

utility createcopies "Cloner" width:162 height:216

(

	groupBox grp1"Source Object" pos:[5,5] width:190 height:60

	pickbutton pick_object "none" pos:[25,25] width:150 height:30

	groupBox grp2 "Gradient" pos:[5,70] width:190 height:55 enabled:false

	colorPicker cpa "1" pos:[25,90] width:70 height:25 color:(color 255 255 255)enabled:false

	colorPicker cpb "2" pos:[100,90] width:70 height:25 color:(color 0 0 0)enabled:false

	groupBox grp3 "Parameter" pos:[5,130] width:190 height:240 

	spinner num "Number of Copies" pos:[25,150] width:150 height:15 range:[0,1000,10] type:#integer

	spinner spaziox "X distance" pos:[25,175] width:150 height:15 range:[0,1000,10] type:#float

	spinner spazioy "Y distance" pos:[25,195] width:150 height:15 range:[0,1000,0] type:#float

	spinner spazioz "Z distance" pos:[25,215] width:150 height:15 range:[0,1000,10] type:#float

	spinner rotx "X rotation" pos:[25,240] width:150 height:16 range:[0,360,0] type:#float

	spinner roty "Y rotation" pos:[25,260] width:150 height:16 range:[0,360,0] type:#float

	spinner rotz "Z rotation" pos:[25,280] width:150 height:16 range:[0,360,15] type:#float

	spinner scalex "X scale %" pos:[25,305] width:150 height:16 range:[-1000,1000,100] type:#float

	spinner scaley "Y scale %" pos:[25,325] width:150 height:16 range:[-1000,1000,100] type:#float

	spinner scalez "Z scale %" pos:[25,345] width:150 height:16 range:[-1000,1000,100] type:#float	  

	button create "create" pos:[25,380] width:150 height:30 


	on pick_object picked obj do(

		object = obj; pick_object.text = object.name

		select object

		grp2.enabled = true

		grp3.enabled = true

		cpa.enabled = true

		cpa.color = $.wirecolor

		cpb.enabled = true

		)


		on cpa changed col do(	

		$.wirecolor = col

		)		

		on cpb changed value do(

		sndcol = value

		)		

		on create pressed do(

		for i = 1 to num.value do (

		fstcol = $.wirecolor

		sndcol=cpb.color

		newcolor = sndcol - fstcol --sono i due colori di partenza

		aa = instance $ --copia l'oggetto e gli assegna una variabile temporanea aa

		move aa [spaziox.value*i, spazioy.value*i, spazioz.value*i]--sposta l'oggetto aa

		aa.rotation = (eulerangles (rotx.value*i) (roty.value*i) (rotz.value*i)) --ruota la copia

		aa.scale = [((scalex.value)/100)+i, ((scaley.value)/100)+i, ((scalez.value)/100)+i]

		aa.name = "copia_box0" + (i+1) as string --cambia il nome della copia

		aa.wirecolor = (fstcol + (newcolor/num.value)*i) --sfuma i colori

		)

	)

)CreateDialog  createcopies width:200 height:420

con questo script ho aggiunto all'interfaccia la selezione interattiva dei due colori con cui fare la sfumatura

e in più ho completato la sezione rotation e scale

7.jpg

direi che può andare, ma mi piacerebbe renderlo dinamico con modifiche in tempo reale

se qualcuno se lo vuole studiare poi mi faccia sapere please

io nel frattempo continuo a provare :wallbash:

ps.philix, ti ringrazio per l'appoggio, devo dire che i tuoi video mi stanno dando un grosso aiuto.

eric non sono riuscito a scaricare il tuo video però ho copiato lo scirpt, e sto cominciando a darci un'occhiata

:hello:


Modificato da mud

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

posto un esempio ottenuto con questo script

8.jpg

sarebbe carino applicare le sfumature di colore al diffuse del materiale piuttosto che al wirecolor,

in questo modo si potrebbe usare un materiale glass e rifare questo render con le caustiche, o altro ancora (bump, reflect,..) :Clap03:

avrei supposto due soluzioni per questo problema(correggetemi in caso dico delle cavolate):

- si potrebbe fare uno script che crea tanti materiali quanti sono il num. di copie e assegnare il corrispettivo diffuse color (ma questo significherebbe andare ad applicare delle eventuali modifiche ad n o addirittura infiniti materiali, un lavoraccio)

la seconda ipotesi è più "furba", ma penso improbabile:

-fare in modo di assegnare all'oggetto di partenza un materiale il cui diffuse color sia = al wirecolor, facendo in modo che cambi di n volte senza creare altri materiali, :blink2:

in pratica un materiale senza un diffuse color che in mancanza di meglio mantiene le sue caratteristiche(glossy, reflection...)ma utilizza il colore del wirecolor

boh non sò , forse ho detto delle assurdità,

ragazzi aspetto il vostro supporto!

qua mi sa che non si va avanti :wacko:


Modificato da mud

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

addirittura sono commosso :blush:

cmq non ho fatto niente di particolare

in effetti se si hanno a disposizione i video tutorial di philix

si ottengono le basi per fare un pò di tutto

ho deciso di mettermi seriamente a sperimantare maxscript, perchè permette un utilizzo inteliggente delle

risorse che si hanno a disposizione e tanto altro ancora (la discreet mi paga per dire ste cose :D )

aiutatemi ad evolverlo ;)

grazie

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

la cosa interessa anche a me sinceramente :)

infatti sto seguendo interessato e mi sto studiando un po' di tutorial del phillo...

ps: fai un salto in chat se ci sei...ho alcune domande!

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

con questo script ho migliorato la definizione del nome(non che ce ne possa fregare granchè),

e soprattutto ho aggiunto lo Scale Multiplier che definisce il fattore di incremento della scala tra una copia e l'altra

es. se è =0 le copie hanno tutte la stessa scala se è=1 la scala incrementa maggiormante

ecco il codice

utility createcopies "Cloner" width:162 height:216

(

	groupBox grp1"Source Object" pos:[5,5] width:190 height:60

	pickbutton pick_object "none" pos:[25,25] width:150 height:30

	groupBox grp2 "Gradient" pos:[5,70] width:190 height:55 enabled:false

	colorPicker cpa "1" pos:[25,90] width:70 height:25 color:(color 255 255 255)enabled:false

	colorPicker cpb "2" pos:[100,90] width:70 height:25 color:(color 0 0 0)enabled:false

	groupBox grp3 "Parameter" pos:[5,130] width:190 height:260 

	spinner num "Number of Copies" pos:[25,150] width:150 height:15 range:[0,1000,10] type:#integer

	spinner spaziox "X distance" pos:[25,175] width:150 height:15 range:[0,1000,10] type:#float

	spinner spazioy "Y distance" pos:[25,195] width:150 height:15 range:[0,1000,0] type:#float

	spinner spazioz "Z distance" pos:[25,215] width:150 height:15 range:[0,1000,10] type:#float

	spinner rotx "X rotation" pos:[25,240] width:150 height:16 range:[0,360,0] type:#float

	spinner roty "Y rotation" pos:[25,260] width:150 height:16 range:[0,360,0] type:#float

	spinner rotz "Z rotation" pos:[25,280] width:150 height:16 range:[0,360,15] type:#float

	spinner sm "Scale Multiplier" pos:[25,305] width:150 height:16 range:[-1,1,0] type:#float

	spinner scalex "X scale %" pos:[25,325] width:150 height:16 range:[-1000,1000,100] type:#float

	spinner scaley "Y scale %" pos:[25,345] width:150 height:16 range:[-1000,1000,100] type:#float

	spinner scalez "Z scale %" pos:[25,365] width:150 height:16 range:[-1000,1000,100] type:#float	  

	button create "create" pos:[25,400] width:150 height:30 


	on pick_object picked obj do(

		object = obj; pick_object.text = object.name

		select object

		grp2.enabled = true

		grp3.enabled = true

		cpa.enabled = true

		cpa.color = $.wirecolor

		cpb.enabled = true

		)


		on cpa changed col do(	

		$.wirecolor = col

		)		

		on cpb changed value do(

		sndcol = value

		)




		on create pressed do(

		for i = 1 to num.value do (

		fstcol = $.wirecolor

		sndcol=cpb.color

		newcolor = sndcol - fstcol --sono i due colori di partenza

		aa = instance $ --copia l'oggetto come istanza e gli assegna una variabile temporanea aa

		move aa [spaziox.value*i, spazioy.value*i, spazioz.value*i]--sposta l'oggetto aa

		aa.rotation = (eulerangles (rotx.value*i) (roty.value*i) (rotz.value*i)) --ruota la copia

		aa.scale = [((scalex.value)/100)+i*sm.value, ((scaley.value)/100)+i*sm.value, ((scalez.value)/100)+i*sm.value]

		aa.name = "copia"+ $.name + (i+1) as string --cambia il nome della copia

		aa.wirecolor = (fstcol + (newcolor/num.value)*i) --sfuma i colori

		)

	)

)CreateDialog  createcopies width:200 height:440

moderatori! spero che non ci siano problemi se copio ogni volta il codice intero, penso sia più facile per chi lo vuole utilizzare, cmq nel caso contrario avvisatemi

:hello:

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

per l'interattività basta che assegni la procedura di creazione non alla pressione del bottone ma al cambiamento di valore di tutti gli spinner ("on spinnername changed valore do", dove valore è una variabile che contiene il nuovo valore)

c'è un problema, così facendo non ti cancella le copie precedenti, sicchè per ogni valore ti crea n copie!!

sto problemino comunque stasera lo risolvo io, basta fargli cancellare le copie di prima

per il mat non c'è problema, basta assegnare a tutti gli oggetti un mat e poi cambiare i rispettivi valori di diffuse, fa tutto lui e nell'editor non dovresti vedere niente

non l'ho mai fatto ma non può essere così complesso, magari provo pure questo

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

esatto

ma va studiato un metodo che considera i valori dello spinner e non uno che rilascia i valori dopo un cambiamento, ho trovato qualche script e sto osservando i risultati, cmq è fattibile

per il materiale purtroppo ho già fatto una prova come dici tu :

-assegnando all'oggetto di partenza un materiale

-associando delle variabili al material.diffuse

il risultato è che tutte le copie hanno lo stesso materiale e quindi ogni modifica di colore viene apportata su tutti, in effetti se ci pensi gerarchicamente parlando comanda il materiale che ha un solo valore di diffuse color, magari se fosse posibile assegnarli + valori contemporaneamente...

andiamo avanti! ;)

sono contento che ti sei unito alla causa!

:hello:

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

basta applicare n materiali diversi, copiare su ognuno un set di caratteristiche da un materiale sorgente e poi variare il diffuse

chettefrega a te se ci sono molti materiali...al max ottieni una scena molto pesante

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

il problema si pone nel caso volessi apportare delle modifiche al materiale (sai, eventualmente il render non soddisfi...), mi toccherebbe modificare tutti i materiali creati dallo script....

cmq sto provando a fare nel modoche hai detto, eventualmente mi accontenterò del risultato, ma è sempre unpasso in +

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

basta inserire nella procedura di creazione un ciclo che assegni a tutti gli oggetti una copia di un mat(chessò, il primo dell'editor) e che ne cambi poi il diffuse

la procedura andrà richiamata ogni qualvolta il mat viene modificato, o con apposito pulsante :D

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

:wallbash::wallbash::wallbash:

ci ho porconato parecchio, ma l'interattività sembra raggiunta correttamente

testate e diteci se ci son problemi

utility createcopies "Cloner" width:162 height:216

(

groupBox grp1"Source Object" pos:[5,5] width:190 height:60

pickbutton pick "none" pos:[25,25] width:150 height:30

groupBox grp2 "Gradient" pos:[5,70] width:190 height:55 enabled:false

colorPicker cpa "1" pos:[25,90] width:70 height:25 color:(color 255 255 255)enabled:false

colorPicker cpb "2" pos:[100,90] width:70 height:25 color:(color 0 0 0)enabled:false

groupBox grp3 "Parameter" pos:[5,130] width:190 height:260

spinner num "Number of Copies" pos:[25,150] width:150 height:15 range:[0,1000,10] type:#integer

spinner spaziox "X distance" pos:[25,175] width:150 height:15 range:[0,1000,10] type:#float

spinner spazioy "Y distance" pos:[25,195] width:150 height:15 range:[0,1000,0] type:#float

spinner spazioz "Z distance" pos:[25,215] width:150 height:15 range:[0,1000,10] type:#float

spinner rotx "X rotation" pos:[25,240] width:150 height:16 range:[0,360,0] type:#float

spinner roty "Y rotation" pos:[25,260] width:150 height:16 range:[0,360,0] type:#float

spinner rotz "Z rotation" pos:[25,280] width:150 height:16 range:[0,360,15] type:#float

spinner sm "Scale Multiplier" pos:[25,305] width:150 height:16 range:[-1,1,0] type:#float

spinner scalex "X scale %" pos:[25,325] width:150 height:16 range:[-1000,1000,100] type:#float

spinner scaley "Y scale %" pos:[25,345] width:150 height:16 range:[-1000,1000,100] type:#float

spinner scalez "Z scale %" pos:[25,365] width:150 height:16 range:[-1000,1000,100] type:#float

button create "create" pos:[25,400] width:150 height:30

button esci "esci" pos:[25,440] width:150 height:30

function crea =

(

select geometry

while selection.count>1 do

for i in selection do if trimleft i.name "0123456789" == "copia"+pick.object.name as string then delete i

clearselection()

for i = 1 to num.value do (

fstcol = pick.object.wirecolor

sndcol=cpb.color

newcolor = sndcol - fstcol --sono i due colori di partenza

aa = instance pick.object --copia l'oggetto come istanza e gli assegna una variabile temporanea aa

move aa [spaziox.value*i, spazioy.value*i, spazioz.value*i]--sposta l'oggetto aa

aa.rotation = (eulerangles (rotx.value*i) (roty.value*i) (rotz.value*i)) --ruota la copia

aa.scale = [((scalex.value)/100)+i*sm.value, ((scaley.value)/100)+i*sm.value, ((scalez.value)/100)+i*sm.value]

aa.name = (i+1) as string +"copia"+ pick.object.name as string --cambia il nome della copia

aa.wirecolor = (fstcol + (newcolor/num.value)*i) --sfuma i colori

)

)

on pick picked obj do(

object = obj; pick.text = object.name

select object

grp2.enabled = true

grp3.enabled = true

cpa.enabled = true

cpa.color = pick.object.wirecolor

cpb.enabled = true

)

on cpa changed col do(

pick.object.wirecolor = col

crea()

)

on cpb changed value do(

sndcol = value

crea()

)

on create pressed do crea()

on esci pressed do destroydialog createcopies

on num changed temp do crea()

on spaziox changed temp do crea()

on spazioy changed temp do crea()

on spazioz changed temp do crea()

on rotx changed temp do crea()

on roty changed temp do crea()

on rotz changed temp do crea()

on sm changed temp do crea()

on scalex changed temp do crea()

on scaley changed temp do crea()

on scalez changed temp do crea()

)CreateDialog createcopies 200 480 100 100


Modificato da Erik

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

:Clap03::Clap03::Clap03:

complimentoni che spettacolo

è strepitoso!

io sto ancora smaronando :wallbash:, seguivo una strada simile ma forse questa è più semplice

ma non capisco perchè intervenendo sui valori di scala non succede niente.

cmq adesso mi studio meglio lo script

mi spieghi esattamente cosa fa questa stringa?:

select geometry

while selection.count>1 do

[b]for i in selection do if trimleft i.name "0123456789" == "copia"+pick.object.name as string then delete i[/b]

clearselection()

evidentemente parte tutta da qui la novità!

personalmente ti ringrazio per la passione con cui ti sei dedicato spontaneamente, e grazie a quelli come te che questo forum è inimitabile :Clap03:

:hello:

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

trimleft e trimright non li avevo ancora provati, grazie per il suggerimento :Clap03:

io al posto della riga

for i in selection do if trimleft i.name "0123456789" == "copia"+pick.object.name as string then delete i
avrei scritto
execute ("delete " + "$*copia" + pick.object.name as string)
ma il risultato è lo stesso :D @mud trimleft toglie da una stringa tutti i caratteri che incontra a sinistra della stringa e che sono contenuti nella lista che gli si da quindi se scrivo:
trimleft "100all'ora" "0123456789"
mi verrà restituito: "all'ora" se scrivo:
trimleft "100all'ora" "01a"
mi verrà restituito: "ll'ora" se scrivo:
trimleft "100all'ora" "01al"

mi verrà restituito: "'ora"


Modificato da philix

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

ragazzi ci ho pensato tutta stanotte, il mio script non è proprio corretto, funzia solo se non vi sono altri oggetti in scena

philix: non ne do fuori co sta cancellzione, provo come dici tu

ma come faccio a selezionare tutti gli oggetto contenenti una stringa???non mi lascia usare il *

mud: devi modificare molto i valori di scala per vedere l'effetto

ora vado se no perdo la corriera :blush:

Condividi questo messaggio


Link al messaggio
Condividi su altri siti

ahhhh

ora funzia correttamente :D ho anche modificato il nome delle copie, vedi tu se mantenerlo

ora manca il materiale... :)

utility createcopies "Cloner" width:162 height:216

(

groupBox grp1"Source Object" pos:[5,5] width:190 height:60

pickbutton pick "none" pos:[25,25] width:150 height:30

groupBox grp2 "Gradient" pos:[5,70] width:190 height:55 enabled:false

colorPicker cpa "1" pos:[25,90] width:70 height:25 color:(color 255 255 255)enabled:false

colorPicker cpb "2" pos:[100,90] width:70 height:25 color:(color 0 0 0)enabled:false

groupBox grp3 "Parameter" pos:[5,130] width:190 height:260

spinner num "Number of Copies" pos:[25,150] width:150 height:15 range:[0,1000,10] type:#integer

spinner spaziox "X distance" pos:[25,175] width:150 height:15 range:[0,1000,10] type:#float

spinner spazioy "Y distance" pos:[25,195] width:150 height:15 range:[0,1000,0] type:#float

spinner spazioz "Z distance" pos:[25,215] width:150 height:15 range:[0,1000,10] type:#float

spinner rotx "X rotation" pos:[25,240] width:150 height:16 range:[0,360,0] type:#float

spinner roty "Y rotation" pos:[25,260] width:150 height:16 range:[0,360,0] type:#float

spinner rotz "Z rotation" pos:[25,280] width:150 height:16 range:[0,360,15] type:#float

spinner sm "Scale Multiplier" pos:[25,305] width:150 height:16 range:[-1,1,0] type:#float

spinner scalex "X scale %" pos:[25,325] width:150 height:16 range:[-1000,1000,100] type:#float

spinner scaley "Y scale %" pos:[25,345] width:150 height:16 range:[-1000,1000,100] type:#float

spinner scalez "Z scale %" pos:[25,365] width:150 height:16 range:[-1000,1000,100] type:#float

button create "create" pos:[25,400] width:150 height:30 enabled:false

button esci "esci" pos:[25,440] width:150 height:30

global lista = #() --array in cui vengono memorizzate le copie create, al momento vuoto

function crea =

(

for i = 1 to lista.count do delete lista --cancella gli oggetti contenuti nell'array (copie precedenti)

lista = #() --svuota l'array

for i = 1 to num.value do (

fstcol = pick.object.wirecolor

sndcol=cpb.color

newcolor = sndcol - fstcol --sono i due colori di partenza

prefisso = trimright pick.object.name as string + "_copia" --prefisso a cui max aggiungerà un num progressicvo

aa = instance pick.object prefix: prefisso --copia l'oggetto come istanza e gli assegna una variabile temporanea aa

move aa [spaziox.value*i, spazioy.value*i, spazioz.value*i]--sposta l'oggetto aa

aa.rotation = (eulerangles (rotx.value*i) (roty.value*i) (rotz.value*i)) --ruota la copia

aa.scale = [((scalex.value)/100)+i*sm.value, ((scaley.value)/100)+i*sm.value, ((scalez.value)/100)+i*sm.value]

aa.wirecolor = (fstcol + (newcolor/num.value)*i) --sfuma i colori

lista = append lista aa --aggiunge all'array la nuova copia appena creata

)

)

on pick picked obj do

(

object = obj; pick.text = object.name

select object

grp2.enabled = true

grp3.enabled = true

cpa.enabled = true

cpa.color = pick.object.wirecolor

cpb.enabled = true

create.enabled = true

)

on cpa changed col do

(

pick.object.wirecolor = col

crea()

)

on cpb changed col do

(

sndcol = col

crea()

)

on esci pressed do destroydialog createcopies

on create pressed do crea()

on num changed temp do crea()

on spaziox changed temp do crea()

on spazioy changed temp do crea()

on spazioz changed temp do crea()

on rotx changed temp do crea()

on roty changed temp do crea()

on rotz changed temp do crea()

on sm changed temp do crea()

on scalex changed temp do crea()

on scaley changed temp do crea()

on scalez changed temp do crea()

)CreateDialog createcopies 200 480 100 100

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.

×