Jump to content
Druigant

Messaggio Iniziale E Random Select

Recommended Posts

Ciao a tutti avrei alcune domande da farvi nella speranza di unarisposta, ma nn ho idea se siano semplici o meno:

1) come fare a selezionare nell' edit poly, un numero X (da me scelto, sia come numero intero che come percentuale) di facce.

2) tempo fa, aprendo un file di nn so quale artista che aveva condiviso, all'apertura si aprì una piccola finestra, con le info sull'autore etc. sarei interessato a fare la stessa cosa, sapete come si fa?

Ciao a tutti e grazie

Share this post


Link to post
Share on other sites

Purtroppo non tocco mxs da un bel po' e non ho neanche max in mano per guardare la guida in linea, quindi sono risposte mooolto alla larga:

1) e' una cosa molto semplice, basta accedere al sotto livello delle facce, fare un po' di matematica tra il numero delle facce totali e la tue scelta quindi con un for loop crei un array e lo usi come selezione

2) anche qui non dovrebbe essere troppo difficile, e' probabile che nel file da te aperto ci sia un callback che rintraccia quando si fa l'open del file e questo fa partire una window in automatico

Scusa se sono moooolto vago ma di piu' non ricordo.

Share this post


Link to post
Share on other sites

1)prova questo

struct numeriCasuali(

	vetNumeri=#(),--VETTORE DOVE TERRO' I NUMERI

	numMax=0,--NUMERO DEI NUMERI POSSIBILI

	--CON QUESTA FUNZIONE INIZIALIZZO IL VETTORE NUMERI

	fn inizializza quanti:numMax=(

		numMax=quanti

		vetNumeri=for i=1 to numMax collect i

	),

	--QUESTA FUNZIONE RESTITUISCE IL NUMERO CASUALE IN MODO CHE NON CI SIANO

	--RIPETIZIONI

	fn getNum=(

		--QUESTO CONTROLLO C'è NEL CASO CHE VENGANO RICHIESTI PIU'

		--NUMERI DI QUELLI CHE C'ERANO(REINIZIALIZZO IL VETTORE)

		if vetNumeri.count==0 then inizializza()


		--CALCOLO L'INDICE CASUALE

		indice=random 1 (vetNumeri.count)

		--SALVO IL NUMERO CORRISPONDENTE ALL'INDICE CALCOLATO

		risultato=vetNumeri[indice]

		--ELIMINO IL NUMERO DAL VETTORE vetNumeri

		deleteItem vetNumeri indice

		--RESTITUISCO IL RISULTATO

		return risultato

	)

)







fn selezionaFacce sel val =(

	for obj in sel where classof obj==Editable_Poly do

	(

		facceTotali=(polyop.getNumFaces obj)

		quanteFacce=undefined

		if classof val==Float then

		(

			quanteFacce=(facceTotali/100.0*val)as integer

		)

		if classof val==Integer then

		(

			if val<facceTotali then 

				quanteFacce=val

			else

				quanteFacce=facceTotali

		)	


		if (quanteFacce!= undefined ) and (quanteFacce>=1)then

		(

			generaNumeri=numeriCasuali()

			generaNumeri.inizializza quanti:facceTotali


			selezioneNuova=for i=1 to quanteFacce collect (generaNumeri.getNum())

			polyop.setFaceSelection obj selezioneNuova

		)

	)	

)




rollout selectFacesRollout "selezioniamo facce!!!" width:162 height:158

(

	button btnEsegui "Seleziona!!!" pos:[36,116] width:88 height:26

	radioButtons rdoSelType "Seleziona per" pos:[40,10] width:82 height:46 labels:#("numero fisso", "percentuale") columns:1

	spinner spnValFloat "valore:" pos:[41,72] width:84 height:16 range:[0.001,100,1] type:#float scale:0.1 enabled:false visible:false

	spinner spnValInt "valore:" pos:[41,72] width:84 height:16 range:[1,1e+006,1] type:#integer scale:0.1


	on rdoSelType changed val do

	(

		if val ==1 then 

		(

			spnValFloat.enabled=false

			spnValInt.enabled=true


			spnValFloat.visible=false

			spnValInt.visible=true


		)

		else

		(

			spnValFloat.enabled=true

			spnValInt.enabled=false


			spnValFloat.visible=true

			spnValInt.visible=false


		)

	)


	on btnEsegui pressed do

	(

		selezionaFacce (selection as array) (if rdoSelType.state==1 then spnValInt.value else spnValFloat.value)

		redrawviews()

	)

)




createdialog selectFacesRollout
non è testato e potrebbe sempre creare dei problemi, salva!!! 2)prova questo esempio
callbacks.addScript #filePostOpenProcess "messageBox\"qui ci metti quello che vuoi\"" id:#provaFinestrellaDiApertura persistent:true
in pratica il parametro persistent settato a true fa si che la callback che viene eseguita dopo l'apertura di un file(questo è definito da àfilePostOpenProcess ) non venga mantenuta in memoria e quindi persa una volta chiuso max, ma invece venga salvata all'interno del file che hai aperto nel momento di definizione della callback. per rimuoverlo ti basta usare:
callbacks.removeScripts

e metterci come parametro l'ID della callback (nel mio esempio è #provaFinestrellaDiApertura)

se hai bisogno di chiarimenti son qua.

ciao

Share this post


Link to post
Share on other sites

grandissimo Coren.

il primo codice ancora nn l'ho provato che c'ho lamacchina impegnata per una coonsegna e vorrei evitare "piantamenti" proprio ora che vedo la luce in fondo al tunnel^^!

Ho provato il secondo perfetto! ammetto che mi ricordavo qualcosa di lggermente diverso, come un pop up senza il pulsante OK. ma chissà a quando risale. Ho provato a riaprire vecchi file di pepeland.com, ma lui usa gli slider per mettere il suo nome nel file. Ma direi che il pop up come me l'hai fatto tu è + che sufficente.

Ti ringrazio di nuovo!

ciao

Share this post


Link to post
Share on other sites

in quella callback è possibile mettere qualsiasi cosa, anche una callback che ti chiude il file...

basta cambiare il codice all'interno dei doppi apici esterni.

In pratica ci metti il comando che deve essere eseguito al momento della callback, è possibile metterne anche più di uno.

Se vuoi metterci una finestra senza il pulsante è possibile.

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...