Vai al contenuto

Script Che Prende Dei Quadrati E Posiziona Oggetti Su Di Essi: Si Può Fare?


sefiroths

Recommended Posts

Prima di impararmi come si fanno gli script in max, volevo sapere se si potesse fare una cosa simile:

1) ho dei rettangoli importati da un dwg -> spline

2) vorrei posizionare delle box che, ruotate di un certo angolo, abbiano le stesse dimensioni in pianta...

3) altra soluzione possibile: prendo le coordinate delle spline rettangolo per rettangolo, alzo i primi 2 vertici di una altezza assegnata, estrudo la faccia ottenuta di un'altra lunghezza assegnata

4) ancora meglio: se disponessi già di un parallelepipedo texturizzato e ruotato, potrei disporlo in modo che in pianta le coordinate coincidano?

è possibile scrivere uno script che faccia questo?

grazie, scusate per la domanda

Link al commento
Condividi su altri siti

bn-top

In max script si può fare qualsiasi cosa, specialmente quello che dici tu.

Ma devi essere preciso nella spiegazione:

1. Da cosa parti (spline, superfici, parallelepipedi ecc...)

2. Cosa vuoi ottenere.

Da come ho capito tu hai la piantina di un edificio fatta tramite spline, tipo questa:

http://upload.wikimedia.org/wikipedia/commons/f/f8/Casteldelmontepln.png

e vuoi estrudere tutti i muri secondo un'altezza prefissata per ottenere un muro o un piano dell'edificio in 3d, giusto ?

Link al commento
Condividi su altri siti

Inviata (modificato)

mi spiego meglio allegando delle immagini sul procedimento che avevo pensato...

1) importo un dwg fig.1

2) disegno un piano che ha per vertici gli stessi del rettangolo fig.2

3) metto il numero di segmenti a 1 per entrambi i lati

4) converto in editable poly

5) muovo i vertici in alto dell'altezza desiderata. fig.3

6) estrudo la faccia usando le normali locali

7) applico alle facce una texture con un tiling che dipende dalla lunghezza del rettangolo fig.5

8) ripeto il procedimento per ciascun rettangolo importato al passo 1

post-28117-12736686505157_thumb.jpg

post-28117-12736686647266_thumb.jpg

post-28117-12736686797774_thumb.jpg

post-28117-12736686924339_thumb.jpg

Modificato da sefiroths
Link al commento
Condividi su altri siti

quando importo un dwg tutto quello che c'è dentro me lo vede come un'unica editable spline,

suppongo che il primo passo sia dividerlo in più spline (rettangoli), in modo da poter fare un loop su tutte le spline...(correggetemi se sto dicendo cavolate)

ho cercato nell'help ma non sono riuscito a capire quale sia il comando

Link al commento
Condividi su altri siti

il debugger bisogna farselo a mano con una serie di format che ti permettono di vedere i vari valori delle variabili.

Per esplodere la spline quello script va benissimo.

sempre un link da scriptspot che per chi inizia è utilissimo: link

per capire un pò come funziona maxscript prova ad abilitare il listener.

Oppure guarda i vari esempi 'how to...' della guida che ti spiegano passo a passo come procedere per fare gli script di esempio.

Poi guardati i video tutorial di philix qui su treddi.

Per domande son qua

Link al commento
Condividi su altri siti

Non sò se ti è d'aiuto, ma quello che vuoi fare tu si fà in tre mosse senza MaxScript:

Se hai una spline "chiusa" basta convertirla in poly e automaticamente ti costruisce la superficie, poi selezioni tutte le facce e fai estrude.

Io ad esempio, per farlo in MaxScript ho creato una spline chiusa a caso di nome "Line01" (la base di un muro a zigzag), aprendo il listener senza creare uno script ho scritto e premuto invio per eseguirlo tutte queste 3 righe (che corrispondono ai passaggi fatti manualmente):

poligono = ConvertToPoly $Line01

polyop.setFaceSelection poligono #{1..poligono.numFaces}

poligono.extrudeFaces 10.0

testmaxwall.th.jpg

Link al commento
Condividi su altri siti

grazie a tutti per le risposte.

@ johnwhile

non capisco perchè, ma quando carico una planimetria da un file dwg, mi parte che è tutta una grande editable spline, se faccio tasto destro->converti to editable poly, alcuni pezzi scompaiono dalla scena.....

appena ho un secondo o carico il dwg, o faccio un video

Link al commento
Condividi su altri siti

carica il file piuttosto, è possibile che alcune superfici scompaiano perchè la spline non è chiusa, ci sarebbe il modificatore "Surface" che crea superfici da spline anche stacchette purchè i vertici si trovino molto vicini e non ci siano superfici con numero di lati maggiore di 4, quindi non andrebbe bene...

Se mi dai il file magari riusciamo a fare uno script che simula il ConvertToPoly con qualche opzione in più

Link al commento
Condividi su altri siti

ok, lo ritrovo e lo carico.

ho usato visto i tutorial e ho usato il listener...però se scrivo qualcosa che lo manda in errore

(per esempio avevo scritto: theObj = selection[1] senza aver nulla selezionato)

mi scrive undefined, da quel momento in poi, anche se scrivo 2+6, il risultato non compare più, devo chiudere e riavviare max.....possibile???

Link al commento
Condividi su altri siti

anche a me è successo di recente che il listener si era bloccato poi ho fatto partire uno script e si era sbloccato, boh (comunque io faccio degli errore ogni volta strani e diversi che non sò neanche come fa a non danneggiarsi max :w00t: )

Comunque non è normale, anche se fai errore il listener non si dovrebbe "bloccare".

Poi non so come far eseguire una righa di istruzioni scritta precedentemente, tocca sempre cancellare tutte quelle sucessive...

Prova a riavviare Max , se si blocca ancora allora c'è qualcosa che non va !!! :blink2:

Comunque adesso che ci penso, se vuoi eseguirlo tutto in una riga usa il ";"

esempio:

( poligono = ConvertToPoly $Line01 ; polyop.setFaceSelection poligono #{1..poligono.numFaces} ; poligono.extrudeFaces 10.0 )

Modificato da johnwhile
Link al commento
Condividi su altri siti

sì questo lo avevo visto ieri sera mentre studiavo sull'help di maxscript...

ho notato che si era bloccato quando andava in un'istruzione di loop.

io, non vedendo il risultato sullo schermo, ho cancellato la roba dal listener e scritto altre cose, col risultato che non me le valutava.

può essere che, avendo iniziato il loop, ma non avendo premuto invio fino alla fine del loop, tutto il resto non me lo valutava?

anche facendo evaluate all, non mi dava nessun risultato.

stando attento non mi si blocca più...

esistono plugin che hanno un debug migliore?

ora prima di fare un loop faccio sempre una serie di istruzioni di prova, poi se funzionano le metto in un ciclo...

ieri sera sono riuscito a fare un pezzo dello script disegnando delle box, posizionandole sul centro della spline, ed assegnando lunghezza e larghezza

avevo iniziato a prendere i punti della spline ed assegnando i vertici ai vertici del piano nello stesso ordine, ma il risultato mi dava una x (in wireframe).

ho notato che i vertici della spline sono (non so se sempre) in senso orario, ma i vertici del piano?

se i vertici della spline sono numerati in senso orario come 1,2,3,4...quelli del piano sono 4,3,1,2...ma la faccia è rivolta verso il basso

Link al commento
Condividi su altri siti

per il loop non sò cosa tu abbia fatto, comunque quello che sò quando faccio i loop e scriverlo in un'unica riga e premere invio, se scrivi due righe non so se funziona o se devi metterci le parentesi...

Per le superfici è un bel casino, la tua soluzione appunto non può funzionare, infatti l'orientazione di una superfici indica il senso di rotazione nella numerazione dei vertici secondo la regola della "mano destra".

Una superficie triangolare ha i seguenti indici : [x,y,z], un'operazione di "flip" cambia il senso di rotazione: [z,y,x].

(PS:Ho messo xyz perchè l'indice 1 si scrive anche così: Faccia.x infatti è di tipo point3, non conforderti con le coordinate di un punto )

Potresti fare un controllo alla fine della creazione del poligono che riimponga l'orientazione delle facce secondo una normale che si orienta all'asse Z cioè l'altezza... Comunque allega un file di sline che hai tu così capiamo meglio e possiamo fare dei tentativi

Link al commento
Condividi su altri siti

siete troppo gentili ma sto studiando per impararlo, non per farmelo fare da qualcuno.

comunque: è vero, alcune erano spline non chiuse, e quelle venivano cancellate da convertto->editable poly

faccio qualche altra prova, se poi non ce la faccio proprio torno a rompervi le scatole :lol:

Link al commento
Condividi su altri siti

...e neanche lo avrei fatto per te lo script XD !! Cioè non per pigrizia ma perchè sono impegnato con un'altro quindi dato che anchio sono un novizio (da febbraio sto imparando maxScript) magari quello che tu non sai forse lo so io, se chiedi a Coren vai sul sicuro, è una biblioteca vivente !!!

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