Non è possibile fare riferimento allo stesso insieme (group) in uno stesso script.
Tuttavia se si inserisce un oggetto con booleane in un loop il problema non sussiste e l'oggetto può essere ripetuto.
Riporto la traduzione della parte della guida che riguarda l'algebra di Boole applicata al GDL:
•GROUP "nome"
Inizio gruppo (insieme). Tutti gli oggetti fino al prossimo ENDGROUP faranno parte dell’insieme “nome”.
GROUP "nome" e ENDGROUP vanno dunque intesi come le parentesi che definiscono l’insieme "nome".
Gli insiemi definiti, per essere visualizzati, devono essere chiamati con il comando :
PLACEGROUP "nome", che esegue i calcoli per inserire nella memoria i dati relativi alla struttura 3D.
Un solido GDL può essere composto di uno o più oggetti scatolari (lumps=zollette), che possono apparire anche come corpi separati nel modello. Un oggetto scatolare possiede una superficie o guscio o involucro esterno (shell) e può contenere vuoti (i vuoti (voids) possono essere intesi come involucri “negativi” interni, compresi entro la struttura scatolare) . Ad esempio due cubi separati, uno dei quali risulta cavo, è composto di due "lumps" e di un "void".
Corpi GDL come BLOCK, SPHERE, etc., appaiono come gusci esterni nei gruppi. Un gruppo può essere composto di diversi involucri.
I comandi GROUP non possono essere nidificati ( cioè usati all’interno gli uni degli altri come sottoinsiemi), ma possono essere richiamati in un GROUP macro calls contenenti comandi GROUP e PLACEGROUP.
Il nome assegnato a un GROUP non può essere utilizzato per un altro GROUP nel corrente script.
E’ possibile però ripetere in un loop lo stesso oggetto costruito con operazioni booleane.
(questa è una mia osservazione)
Spostamenti, CUT (operazioni di taglio) interni a un GROUP non hanno effetti al di fuori del gruppo (cioè vengono azzerati come se si fosse utilizzato DEL TOP o i CUTEND). Le definizioni GROUP sono trasparenti agli attributi DEFINE e SET (pens, materials, fills): gli attributi DEFINE e SET scritti prima della definizione GROUP e quelli interni ad essa sono tutti effettivi.
Tuttavia cambiare nome penna o tipo di materiale in insiemi che vanno uniti, disturba poi l'unione
(questa è una mia osservazione)
• ADDGROUP (g_expr1, g_expr2)
UNIONE
• SUBGROUP (g_expr1, g_expr2)
DIFFERENZA
• ISECTGROUP (g_expr1, g_expr2)
INTERSEZIONE
• ISECTLINES (g_expr1, g_expr2)
calcola le LINEE DI INTERSEZIONE tra due solidi.
Nota: g_expr1 che è il nome del gruppo deve essere posto tra virgolette, se è stato scritto così dopo GROUP per dargli un nome, se invece rappresenta il risultato di una operazione booleana non devono essere utilizzate virgolette (né nel definirlo come risultato, né nel richiamarlo).
Le suddette operazioni corrispondono a: ADDITION, SUBSTRACTION, INTERSECTION, INTERSECTION LINES.
Il risultato è un nuovo gruppo che può essere visualizzato con il comando PLACEGROUP, o che può essere inserito in memoria come variabile od essere utilizzato come parametro in un’altra operazione tra gruppi.
Es. r_1= ADDGROUP (“a”, “b”) definisce il nuovo gruppo ottenuto dall’unione di GROUP "a" con
GROUP "b".
r_2= ADDGROUP (r_1, “c”) definisce il nuovo gruppo ottenuto dal gruppo risultato dell’operazione booleana precedente, denotato con r_1, con GROUP "c".
Le operazioni booleane possono essere eseguite tra gruppi definiti in precedenza (quelli nominati dopo GROUP con stringa (string expression) tra virgolette) o tra gruppi risultato di un’ operazione booleana (nominati senza virgolette da carattere alfa-numerico (variable), cioè parametro).
•KILLGROUP g_expr
Toglie dalla memoria i corpi appartenenti al gruppo specificato, svuotando il gruppo, per migliorare le prestazioni del calcolatore, se non più necessari. Pertanto se vengono definiti gruppi tipo GROUP “nome” dopo una etichetta (label) , scrivere KILLGROUP “nome” impedirà la corretta lettura del contenuto della label nel caso di un richiamo con GOSUB della label stessa dopo RETURN. In un caso siffatto è però possibile utilizzare KILLGROUP per svuotare dalla memoria i risultati delle operazioni (quelli non tra virgolette), che verranno rifatti al richiamo della label.
•SWEEPGROUP (g_expr, x, y, z)
Fornisce un nuovo gruppo realizzato dallo scorrimento del gruppo nominato lungo la direzione del vettore dato. I modelli utilizzati devono essere solidi.
Come esempi allego un semplice oggetto GDL ricavato da un esercizio nell'istituto d'arte Venturi: per realizzare le visioni PO e PL ho effettuato una rotazione in 3D (si poteva usare anche un diverso indice in project2, ma se non si utilizzano rotazioni e duplicazioni in 3D non è possibile inserire tutte le viste). Per farlo ho dovuto ripetere lo script dell'oggetto cambiando i nomi ai gruppi.
Se però avessi utilizzato il loop si poteva, probabilmente, non riscrivere l'oggetto. Lascio ai visitatori la sperimentazione.
Riporto invece sempre lo stesso oggetto del post precedente dove ho applicato il loop.
Il terzo oggetto è un altro esercizio di disegno geometrico.
Voglio infine sottolineare il fatto che i programmi 3D rovesciano la metodologia del disegno tradizionale:
infatti si parte dal modello 3D per arrivare alle rappresentazioni 2D. In effetti i "disegni" li costruisce il computer sulla base dei dati 3D. Da un punto di vista didattico ciò è errato: occorre saper interpretare le rappresentazioni 2D per intuire la forma 3D. Naturalmente per un progettista che ha già una visione dello spazio è più comodo ragionare subito sul 3D.