Vai al contenuto

Funzione Ciclica


johnwhile

Recommended Posts

Allora io ho il seguente problema che non sò proprio da che parte prenderlo:

Voglio fare uno script che mi rinomini automaticamente gli oggetti su cui clicco, in particolare vorrei che ad ogni clic su ogni oggetto me li rinomini in ordine crescente con un nome tipo nome01 nome02 ecc...

Link al commento
Condividi su altri siti

bn-top

cioè mi spiego meglio con un script di prova:

macroScript Auto_Name category:"MyTool" tooltip:"AutoReName"

(

local i=0

while true do

	(

	obj = pickObject()

	obj.name = "name_" + i as string

	messageBox ("obj picked: " + obj.name)

	i+=1

    if i>10 do exit

	)

)

solo che ovviamente quel if non lo voglio, magari un clic destro o cosa simile, praticamente voglio rinominare una lunga serie di oggetti in ordine crescente semplicemente cliccandoci sopra con un solo clic.

Questo nasce dall'esigenza che ho di rinominare grandi quantità di oggetti nell'ordine che voglio io e con un nome ripetitivo a meno di un nomero o due che comunque non avro problemi.

Link al commento
Condividi su altri siti

scusa, tu che sai, io voglio proprio usare le variabili globali proprio per memorizzare l'ultimo valore, per la variabile CpxCount funziona ma penchè ad ogni avvio le altre variabili rimangono a 1 ???

global CpxCount as integer

global StrCount as integer

global NumCount as integer


macroscript AutoReNameScript category:"M2TW_tools" tooltip:"MTW2_Autorename"

(

-- inizializzare le variabili globali e se già utilizzate usare il loro valore


if  CpxCount==undefined do CpxCount=1

if  StrCount==undefined do StrCount=1

if  NumCount==undefined do NumCount=1


rollout message "options" width:112 height:112

(

	function start = 

	(

	while true do

		(

		obj = pickObject()

		if obj==undefined do exit

		select obj

		Cpx = formattedPrint CpxCount format:"02i"

		Str = formattedPrint StrCount format:"02i"

		Num = formattedPrint NumCount format:"03i"

		obj.name = "Cpx"+Cpx + "_Str"+ Str + "_Obj" + Num + "_1"

		NumCount+=1

		spn3.value = NumCount

		)

	)


	spinner spn1 "Complex " pos:[16,8] width:88 height:16 range:[0,99, CpxCount] type:#integer

	spinner spn2 "Structure" pos:[16,32] width:88 height:16 range:[0,99,StrCount] type:#integer

	spinner spn3 "Objects  " pos:[16,56] width:88 height:16 range:[0,999,NumCount] type:#integer

	button btn1 "Start" pos:[8,80] width:96 height:24


	on btn1 pressed do

	(

	CpxCount=spn1.value

	StrCount=spn2.value

	NumCount=spn3.value

	start()

	)

	-- salvare i nuovi valori nelle variabili globali

	on spn1 changed theState do

		(

		CpxCount = theState

		)

	on spn2 changed theState do

		(

		StrCount = theState

		)

	on spn3 changed theState do

		(

		NumCount = theState

		)

)CreateDialog message


)

Link al commento
Condividi su altri siti

Nella Definizione delle tue globali non devi mettere 'as integer'

global CpxCount as integer

global StrCount as integer

global NumCount as integer
in maxscript le variabili non funzionano come in C++ dove tu devi dichiararle e nella dichiarazione è necessario specificare il tipo di variabile e se provi ad assegnare "ciao" ad una variabile di tipo integer ti dà errore. difatti se scrivi
a=10

a="ciao"

maxscript non dà errore

con la modifica che ti ho detto non mi dà errore e funziona.

Comunque ti suggerisco di mettere come prefisso alle tue variabili globali un qualcosa tipo "M2TW_" così avrai la certezza che i tuoi script non andranno in conflitto con altri script di terze parti.

Oppure dà un'occhiata alle 'global tracks' nell'help.

Utili per memorizzare dati che rimangono legati alla tua scena e che una volta riaperta in un successivo momento manterrà sempre in memoria i valori che vuoi.(un'alternativa alle global tracks sono le variabili persistenti, ma si fa fatica a tenerne traccia, mentre con le global tracks è molto più semplice risalirvi)

ciao

Link al commento
Condividi su altri siti

ok, darò un'occhiata, intanto il tool che ho fatto mi ha aiutato non poco a scrivere 500 nomi...

Ne approfitto, io ho preso un portatile con win7, però max9 mi dà errore in ogni dove, anche con il service pack 2, non mi apre alcuni menù come F10, nel material editor crasha se provo a cambiare qualcosa nel canale diffuse, alcuni script con l'ActiveControl come interfaccia mi danno errori e via dicendo...

Sai se il 2011 è compatibile con win7 ?

Link al commento
Condividi su altri siti

ho da poco istallato max2011 64bit ma adesso alcuni script non mi funzionano più:

--runtime error: cannot create the activeX control:

reported error message : class not registered 

sembra che tutti gli activeX control non mi funzionino più, e come faccio adesso, gli script non c'è modo di riscriverli senza usare Tree View o quello della lista ....

Link al commento
Condividi su altri siti

mi sembra sia dal max 2008 che i controlli activex non sono più supportati.

Mi sembra che nell'help ci sia un esempio di applicazione del dotnet ad un precedente esempio fatto con activex, dove spiega anche le differenze.

altrimenti guarda su cgtalk dove ci sono molti esempi.

utilissimo questo sito:

link

in particolare guarda in alto a destra dove ci sono link a tutorial specifici.

mi dispiace ma in questo periodo non ho tempo di guardare il tuo script.

ciao!

Link al commento
Condividi su altri siti

non importa, si trattava solo di capire i corrispondenti comandi da ActiveX a DotNet dato che nell'help c'è poco o niente a riguardo.

Potevano dato che c'erano fare dei tutorial su DotNet invece di continuare con ActiveX.....

Adesso mi guardo quel link che a prima vista sembra proprio quello che c'ercavo.

Comunque è vero, CgTalk ha moltissimi utenti esperti.

Link al commento
Condividi su altri siti

Accedi per commentare

Sarai in grado di lasciare un commento dopo l'accesso



Accedi ora
  • Navigazione recente   0 utenti

    Non ci sono utenti registrati da visualizzare in questa pagina.

×
×
  • Crea nuovo...