ArchiRADAR Forum
ArchiRADAR Forum =>
GDL => Topic aperto da: marcomasetti - 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.