HOME OGGETTI 3D LIBRI CORSI TUTORIAL FORUM SHOP CONTATTI   LOGIN









Autore Topic: PGON con fori 3  (Letto 1970 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

marcomasetti

  • Newbie
    ...sono qui da poco, il mio miglior amico è il pulsante RICERCA
  • *
  • Post: 183
PGON con fori 3
« il: 27 Luglio 2012, 20:11 »
In questo esercizio sui fori, vengono realizzati m finestre rettangolari in una parete,
ripetute n volte in verticale.

La maniera più semplice per farlo è utilizzare la forma EXTRUDE, elencando prima i punti del contorno esterno, poi quelli delle singole finestre, inseriti in una doppia nidificazione: scrivendo prima i riferimenti delle m finestre disposte in una singola riga, poi ripetendo n volte in verticale ciascuna riga.
Ogni percorso, sia quello esterno che quello delle singole finestre deve chiudersi con il primo punto ripetuto e seguito dall’indice -1 al posto di 0.

L1=  !distanza bordo-finestra (pieno)
L2=  !larghezza finestra (vuoto)
L3=  !distanza tra finestre in orizzontale (pieno)
h1=  !altezza davanzali piano 1 (pieno)
h2=  !altezza finestra (vuoto)
h3=  !distanza tra finestre in verticale (pieno)
h4=  !distanza tra finestre-sommità (pieno)
m=   !numero finestre per piano
n=   !numero piani
l=m*l2+(m-1)*l3+2*l1         !lunghezza totale parete
h=n*h2+(n-1)*h3+h1+h4   !altezza totale parete
PUT 0,0,0
PUT l,0,0
PUT l,h,0
PUT 0,h,0
PUT 0,0,-1
!fine contorno esterno
for j=0 to n-1
for i=0 to m-1
PUT l-l1-i*(l2+l3),   h1+(h2+h3)*j,0
PUT l-l1-l2-i*(l2+l3),h1+(h2+h3)*j,0
PUT l-l1-l2-i*(l2+l3),h1+h2+(h2+h3)*j,0
PUT l-l1-i*(l2+l3),   h1+h2+(h2+h3)*j,0
PUT l-l1-i*(l2+l3),   h1+(h2+h3)*j,-1
next i
next j
EXTRUDE nsp/3, 0, 0, s, 55, get (nsp)

Lo stesso risultato può essere ottenuto costruendo un grafo che attraversa tutti I punti.
Con gli stessi parametri precedenti costruiamo il grafo che prima attraversa in orizzontale tutti i davanzali, poi con un percorso a zig zag segue i contorni laterali e superiori delle finestre di un piano, per poi ricollegarsi alla fila di davanzali del piano superiore.

BASE
VERT 0,0,0
VERT l,0,0
for j=0 to n-1
VERT l,h1+(h2+h3)*j,0
for i=0 to m-1
VERT l-l1-i*(l2+l3),   h1+(h2+h3)*j,0
VERT l-l1-l2-i*(l2+l3),h1+(h2+h3)*j,0
next i
for i=0 to m-2
VERT l1+i*(l2+l3),       h1+h2+(h2+h3)*j,0
VERT l1+l2+i*(l2+l3),    h1+h2+(h2+h3)*j,0
VERT l1+l2+i*(l2+l3),    h1+(h2+h3)*j,0
VERT l1+l2+l3+i*(l2+l3), h1+(h2+h3)*j,0
next i
i=m-1
VERT l1+i*(l2+l3),       h1+h2+(h2+h3)*j,0
VERT l1+l2+i*(l2+l3),    h1+h2+(h2+h3)*j,0
VERT l1+l2+i*(l2+l3),    h1+(h2+h3)*j,0
VERT l,                  h1+(h2+h3)*j,0
next j
VERT l,h,0
VERT 0,h,0

for i=1 to n*(6*m+1)+3
EDGE i,i+1,-1,-1,0
next i
EDGE n*(6*m+1)+4,1,-1,-1,0

for i=1 to n*(6*m+1)+4 !bottom
put i
next i
PGON nsp, 0, -1, get (nsp)

BODY -1

In questo modo abbiamo costruito una primitiva piana. Nella primitiva appaiono però anche i segmenti (doppi) di collegamento; per poter nascondere gli edges sovrabbondanti bisogna suddividerli:

EDGE 1,2,-1,-1,0
EDGE 2,3,-1,-1,0
for j=0 to n-2
for i=1 to m
EDGE 2*i+1+j*(6*m+1),2*i+2+j*(6*m+1),-1,-1,1
EDGE 2*i+2+j*(6*m+1),2*i+3+j*(6*m+1),-1,-1,0
next i
for i=0 to m-1
EDGE 3+2*m+4*i+j*(6*m+1),4+2*m+4*i+j*(6*m+1),-1,-1,0
EDGE 4+2*m+4*i+j*(6*m+1),5+2*m+4*i+j*(6*m+1),-1,-1,0
EDGE 5+2*m+4*i+j*(6*m+1),6+2*m+4*i+j*(6*m+1),-1,-1,0
EDGE 6+2*m+4*i+j*(6*m+1),7+2*m+4*i+j*(6*m+1),-1,-1,1
next i
EDGE 3+6*m+j*(6*m+1),3+(j+1)*(6*m+1),-1,-1,0
next j
j=n-1
for i=1 to m
EDGE 2*i+1+j*(6*m+1),2*i+2+j*(6*m+1),-1,-1,1
EDGE 2*i+2+j*(6*m+1),2*i+3+j*(6*m+1),-1,-1,0
next i
for i=0 to m-1
EDGE 3+2*m+4*i+j*(6*m+1),4+2*m+4*i+j*(6*m+1),-1,-1,0
EDGE 4+2*m+4*i+j*(6*m+1),5+2*m+4*i+j*(6*m+1),-1,-1,0
EDGE 5+2*m+4*i+j*(6*m+1),6+2*m+4*i+j*(6*m+1),-1,-1,0
EDGE 6+2*m+4*i+j*(6*m+1),7+2*m+4*i+j*(6*m+1),-1,-1,1
next i
EDGE n*(6*m+1)+2,n*(6*m+1)+3,-1,-1,0
EDGE n*(6*m+1)+3,n*(6*m+1)+4,-1,-1,0
EDGE n*(6*m+1)+4,1,-1,-1,0

In questo modo gli spigoli utilizzati per il collegamento vengono nascosti.
Per dare uno spessore all’oggetto vanno nuovamente elencati i vertici dando un valore diverso da 0 alla variabile z, che diventerà lo spessore. Poi vanno scritti i collegamenti verticali, ripetendo lo script degli EDGES, mettendo al primo posto il valore relativo alla faccia inferiore e al secondo posto quello relativo alla faccia superiore (la differenza tra i due valori eguaglia il numero di vertici di una singola faccia, ovvero è la metà dei vertici totali).  Volendo costruire facce triangolari lungo il bordo, che permettono deformazioni, occorre pure elencare i vertici obliqui, cosa che si fa ripetendo lo script degli EDGES verticali ed aggiungendo 1 al secondo valore. Occorre però isolare l’ultimo EDGE, perché l’ultimo punto della faccia inferiore va collegato con il primo punto della faccia superiore.

Gli oggetti di riferimento per questo esercizio sono:
rect nxm fori.gsm
rect nxm fori2.gsm
Nel secondo esempio, essendo il contorno costruito con triangoli, la figura può essere deformata in vari modi, le facce anteriore e posteriori devono però rimanere composte di punti giacenti su singoli piani.