Oh, meravigliosa intelligenza artificiale, mostrati in tutta la tua potenza!
Dopo aver visto un impressionante video, in cui si mostrava un’intelligenza artificiale cinese che con pochi prompt creava una app sbalorditiva, ho deciso di mettere alla prova quelle che ormai tutti abbiamo nei nostri browser, per scrivere un semplice oggetto GDL.
Ho quindi aperto Chrome e ho fatto questa domanda a Gemini:
Sono un programmatore e uso il linguaggio GDL di ArchiCAD. Voglio realizzare un oggetto parametrico, puoi aiutarmi a scrivere il codice? |
Risposta:
Certamente! Sarò lieto di aiutarti a scrivere il codice GDL per un oggetto parametrico in ArchiCAD.
Per iniziare, avrei bisogno di maggiori informazioni sull'oggetto che desideri creare. Potresti fornirmi una descrizione dettagliata dell'oggetto, delle sue dimensioni, delle sue caratteristiche e di eventuali parametri che desideri controllare? Ad esempio, se volessi creare un semplice parallelepipedo, potremmo iniziare con questo codice di base: Snippet di codice DEFINE PARAMETERS Questo codice crea un parallelepipedo con dimensioni predefinite (1 metro per 1 metro per 1 metro). I parametri Lunghezza, Larghezza e Altezza possono essere modificati dall'utente per personalizzare le dimensioni dell'oggetto. Naturalmente, questo è solo un esempio molto semplice. Per oggetti più complessi, il codice GDL può diventare più elaborato. Potremmo aggiungere ulteriori parametri per controllare altri aspetti dell'oggetto, come il materiale, il colore, la rotazione, ecc. Inoltre, il GDL offre una vasta gamma di funzioni e comandi che consentono di creare oggetti parametrici altamente personalizzati. Ad esempio, possiamo utilizzare cicli FOR per creare array di oggetti, funzioni matematiche per definire relazioni tra parametri, e comandi grafici per disegnare forme complesse. Se mi fornisci una descrizione più dettagliata dell'oggetto che vuoi creare, sarò in grado di fornirti un codice GDL più specifico e completo. Inoltre, se hai già scritto del codice GDL, ma hai bisogno di aiuto per risolvere un problema o aggiungere una funzionalità, non esitare a condividerlo con me. Sarò felice di esaminarlo e offrirti il mio supporto. Spero di esserti d'aiuto! |
La forma discorsiva è abbastanza piacevole, e sembra di chattare con qualcuno che sa cosa dice ed è pronto ad aiutarti.
Non dice, ma in effetti io non l’ho chiesto esplicitamente, come fare in pratica per “usare” questo codice. Va bene lo stesso, ci penso io. Apro ArchiCAD e dal menu Archivio>Librerie e Oggetti scelgo il comando NUOVO OGGETTO.
Proviamo a mettere il codice nel TESTO MASTER di un nuovo oggetto e vediamo che cosa succede premendo il pulsante CONTROLLA SCRIPT.
ERRORE alla riga 1
In effetti non ho mai saputo dell’esistenza di un comando chiamato DEFINE PARAMETERS, anche se devo precisare che uso una versione obsoleta di ArchiCAD (la 22) e ormai anche io sono piuttosto arrugginito. Vabbè, metto un punto esclamativo davanti al comando (che in GDL vuol dire “Ignora il testo che segue, su questa riga”) e riprovo. Altri 3 errori (e altrettanti punti esclamativi) dopo, lo script di esempio finalmente funziona in tutto il suo splendore.
Andiamo a dire a Gemini che cosa vogliamo fare ora.
Voglio creare una libreria. In pratica uno scaffale formato da due fianchi verticali e una serie di mensole. Lo scaffale è alto 2,40 metri, largo 1,50 e profondo 45 cm. Voglio che le misure siano parametriche e anche il numero di ripiani, variabile da 3 a 10. |
Risposta:
Ottimo! Creare una libreria parametrica per uno scaffale è un progetto interessante. Ecco un codice GDL di base per iniziare, con alcune spiegazioni e suggerimenti per personalizzarlo ulteriormente: Snippet di codice DEFINE PARAMETERS Spiegazione del codice DEFINE PARAMETERS: Definisce i parametri personalizzabili dall'utente, come dimensioni, spessori e numero di ripiani. Calcolo DistanzaRipiani: Calcola automaticamente la distanza tra i ripiani in base all'altezza totale, al numero di ripiani e allo spessore delle mensole. BODY: Contiene la descrizione geometrica dell'oggetto. Fianchi: Crea due blocchi verticali per i fianchi, uno a sinistra e uno a destra (traslato in larghezza). Mensole: Utilizza un ciclo FOR per creare le mensole. Per ogni mensola: Calcola l'altezza della mensola in base alla sua posizione. Posiziona la mensola all'altezza calcolata. Crea un blocco per la mensola. Suggerimenti e personalizzazioni Materiali: Aggiungi parametri per definire i materiali di fianchi e mensole, utilizzando il comando MATERIAL. Posizionamento: Puoi controllare il posizionamento dell'oggetto nel modello utilizzando le coordinate x, y, z. Rotazione: Aggiungi parametri per controllare la rotazione dell'oggetto attorno agli assi x, y, z utilizzando il comando ROTATE. Ulteriori dettagli: Aggiungi dettagli come zoccoli, cornici o altri elementi decorativi. Condizioni: Utilizza istruzioni IF per definire comportamenti diversi in base ai parametri (ad esempio, se il numero di ripiani è pari o dispari). Come utilizzare il codice Apri l'editor GDL in ArchiCAD. Copia e incolla il codice nell'editor. Modifica i parametri secondo le tue esigenze. Salva l'oggetto GDL. Inserisci l'oggetto nel tuo progetto ArchiCAD. Spero che questo codice ti sia utile per iniziare a creare la tua libreria parametrica. Se hai domande o bisogno di aiuto per personalizzare ulteriormente il codice, non esitare a chiedere! |
Io non gli ho fatto notare gli errori quindi, come mi aspettavo, ha rimesso DEFINE PARAMETERS, END DEFINE, BODY, END BODY (a cui antepongo subito il punto esclamativo, come fatto in precedenza).
Per il resto, buona la spiegazione di quello che ha fatto, ottima la presenza di suggerimenti ulteriori, e benino anche la sezione “come utilizzare il codice”. Molto chiara anche la formattazione di tutto l’output (che qui non ho rispettato del tutto)
Noto subito che ha inserito anche una serie di commenti (sempre utilissimi) all’interno dello script. Purtroppo come carattere separatore, ha usato l’apostrofo (che si usa in altri linguaggi) al posto del punto esclamativo che usa il GDL.
Provvedo a usare il comando “Trova e sostituisci” per cambiare tutti gli apostrofi con altrettanti punti esclamativi.
Ottimo. Ora il controllo sintattico mi dice che non ci sono errori e lo script può essere interpretato.
Purtroppo, l’intelligenza artificiale ha dimenticato di usare l’istruzione DEL per annullare gli spostamenti quindi la posizione di ogni singolo elemento è relativa all’elemento precedente, anziché riferirsi a un’origine comune.
Provo a farglielo notare, anzi a suggerirgli direttamente la correzione…
Va abbastanza bene, ma gli elementi non hanno la posizione corretta. Considera la possibilità di usare il comando DEL per riportare l'origine al punto di partenza, dopo aver usato il comando ADD |
Risposta:
Hai ragione! L'uso del comando ADD sposta l'origine del sistema di coordinate, quindi le mensole non vengono posizionate correttamente. Per risolvere questo problema, possiamo utilizzare il comando DEL per riportare l'origine al punto di partenza dopo aver disegnato ciascun elemento.
Ecco il codice corretto: Snippet di codice DEFINE PARAMETERS Spiegazione delle modifiche DEL: Dopo aver disegnato il fianco destro e ogni mensola, ho aggiunto il comando DEL per riportare l'origine del sistema di coordinate al punto di partenza. In questo modo, il prossimo elemento verrà disegnato nella posizione corretta. Con questa correzione, le mensole dovrebbero essere posizionate correttamente all'interno dello scaffale. Spero che questo codice funzioni correttamente per te. Se hai ancora problemi o domande, non esitare a chiedere! |
Bene, ma non benissimo. Quella usata non è la sintassi giusta del comando DEL, che richiede un numero (quante operazioni di spostamento annullare) o la parola chiave TOP, per annullare tutti gli spostamenti in una volta sola. In questo caso (oltre alle modifiche fatte in precedenza) provvedo a sostituire le istruzioni che ha aggiunto, con un più corretto DEL 1.
Ci siamo! L’intelligenza artificiale e quella naturale, lavorando insieme, sono riuscite a fare un oggetto che funziona. Togliendo da questo script i parametri, e mettendoli nella lista Parametri, otteniamo effettivamente un oggetto parametrico che funziona, anche se, a dirla tutta, i ripiani si conficcano nei fianchi in modo poco elegante…
Bene. Adesso vediamo come va, se faccio esattamente la stessa richiesta a Copilot, l’AI di Microsoft che troviamo in Edge.
Sono un programmatore e uso il linguaggio GDL di ArchiCAD. Voglio realizzare un oggetto parametrico, puoi aiutarmi a scrivere il codice? |
Risposta:
Certo, posso aiutarti a scrivere il codice per un oggetto parametrico in GDL per ArchiCAD. Potresti dirmi quale tipo di oggetto vuoi creare e quali parametri desideri che siano personalizzabili? Questo mi aiuterà a capire meglio le tue esigenze e a fornirti un codice più appropriato. |
Molto più stringato, rispetto a Gemini, ma tutto sommato va bene, visto che ancora non gli ho detto cosa voglio.
Voglio creare una libreria. In pratica uno scaffale formato da due fianchi verticali e una serie di mensole. Lo scaffale è alto 2,40 metri, largo 1,50 e profondo 45 cm. Voglio che le misure siano parametriche e anche il numero di ripiani, variabile da 3 a 10. |
Risposta:
Perfetto, posso aiutarti a creare il codice GDL per una libreria parametrica. Ecco un esempio di come potrebbe essere il codice: GDL ! Definizione delle variabili parametriche In questo script: A, B e C sono i parametri per la larghezza, l'altezza e la profondità della libreria rispettivamente. _ripiani_count è il parametro per il numero di ripiani, variabile da 3 a 10. Il ciclo FOR crea i ripiani alla distanza corretta l'uno dall'altro. Puoi copiare questo codice in ArchiCAD e modificarlo secondo le tue esigenze specifiche. Fammi sapere se hai bisogno di ulteriori personalizzazioni o se ci sono altri aspetti che desideri esplorare! |
Anche in questo caso nella risposta c’è una formattazione che aiuta a distinguere i riferimenti al codice, anche se le spiegazioni sono ridotte all’osso.
Creo un nuovo oggetto in ArchiCAD e copio lo script nel Testo Master.
Questa volta ci sono i commenti correttamente preceduti da punto esclamativo, ma comunque il primo errore è già lì alla riga 2.
Mai sentito un comando DEFINE LIB_version. Certo, potrebbero averlo introdotto in versioni più recenti rispetto alla mia, ma non trovo nessun riferimento neanche cercando online. Poi c’è “MASTER_SCRIPT” che magari è un’indicazione su dove inserire il codice… in ogni caso non è un’istruzione valida.
Anche l’istruzione MAIN non esiste nel GDL, e l’istruzione DIM ha qualcosa che non va. Dovrebbe servire per creare una matrice, cioè una serie di valori correlati (es. la quota di ogni ripiano). Analizzando tutto lo script noto che non viene utilizzata, o almeno non come matrice, quindi decido di eliminarla insieme alle precedenti istruzioni “inventate”.
Usando ancora la funzione “Controlla script” mi segnala un errore alla riga 9, dicendo che la variabile _shelf_Height non è definita. Certo, l’istruzione PARAMETERS con cui assegna un valore alle variabili funziona solo se quei parametri sono presenti nella lista Parametri dell’oggetto.
Allora, per adesso mettiamoli scritti in forma esplicita in questo script.
Finalmente il testo è privo di errori. O almeno di errori di sintassi, visto che l’anteprima dell’oggetto mostra solo un blocco solido. In effetti analizzando il codice, dove dice “Creazione dei fianchi verticali” vedo che c’è un “fianco” solo e per di più grande quanto l’intera libreria… a questo punto vado a dirglielo!
Nel tuo codice non vengono generati due fianchi, ma solo uno, largo quanto l'intera libreria. puoi correggere questo errore, creando due fianchi distinti, dello spessore di 3 cm? |
Risposta:
Hai ragione, grazie per averlo segnalato. Ecco il codice aggiornato che crea due fianchi distinti dello spessore di 3 cm: GDL ! Definizione delle variabili parametriche In questo aggiornamento: _spessore_fianchi è il parametro per lo spessore dei fianchi, impostato a 3 cm (0.03 metri). Sono stati aggiunti due BLOCK per creare i fianchi a sinistra e a destra della libreria. Le mensole sono state modificate per adattarsi alla larghezza tra i fianchi. Prova a inserire questo codice in ArchiCAD e fammi sapere se ci sono altre modifiche o miglioramenti necessari! |
La “reazione” è molto umana… sembra di sentirlo dire “caspiterina, che sciocco sono stato!”.
Anche la descrizione delle modifiche la giudico positivamente, con una modifica non richiesta esplicitamente, ma necessaria, alla larghezza dei ripiani.
Bene, rifaccio le solite modifiche e mi accingo a testare l’oggetto.
Buone le intenzioni, ma con il risultato non ci siamo. I fianchi si allineano lungo l’asse X, mentre le mensole vanno in direzione Y.
La posizione del primo fianco è spostata in direzione X di mezzo spessore (perché?). Le mensole sono scostate correttamente di uno spessore intero, ma nella direzione sbagliata.
Mosso a compassione (o stressato a sufficienza) decido di sostituire tutti gli ADDx con altrettanti ADDy. Scelgo comunque di non correggere lo spostamento del fianco sinistro.
Alla fine funziona, ma che fatica!
Da notare, e forse è un caso, ma chissà!, che entrambi i miei assistenti hanno deciso, da soli, di fare i ripiani di due centimetri di spessore, e di metterne 5. Io avevo detto “fra 3 e 10” e mi sarei aspettato un numero più centrale, 6 o 7.
Infine ho provato a sovrapporre i due oggetti, per vedere se c’erano differenze cha a prima vista sfuggivano, e in effetti qualcosa c’è.
A parte il fianco spostato di 1,5 cm, i due programmi utilizzano calcoli diversi per determinare la posizione delle mensole. Nessuno dei due ha un metodo corretto per ottenere spazi tutti uguali, non solo fra i singoli ripiani, ma anche fra il primo ripiano e il pavimento, ma Copilot (verde) ci prova prendendo in considerazione lo spessore dei ripiani, mentre Gemini (rosso) lo trascura.
La differenza diventa evidente esagerando lo spessore dei ripiani. Nel caso di Gemini c’è anche il parametro apposito, mentre con Copilot si deve intervenire sul numero (0.02) scritto direttamente nell’istruzione BLOCK.
Conclusioni? Certamente è solo un esempio ed è un po’ poco per trarre conclusioni degne di essere prese in considerazione, ma l’impressione è che sia ancora presto per utilizzare questi strumenti nella scrittura di oggetti parametrici per ArchiCAD. Io ho una discreta conoscenza del linguaggio GDL, e sono stato in grado di individuare e correggere diversi errori, cosa non semplice per un principiante.
Consideriamo inoltre che l'oggetto creato così, senza altre aggiunte, è del tutto privo di un simbolo in pianta. Quindi assolutamente invisibile e non selezionabile... poco male. Diciamo che si può risolvere aggiungendo una riga con il comando PROJECT2 3,270,2 alla fine dello script, prima dell'istruzione END, se presente (è opzionale).
Vista la relativa semplicità del compito richiesto, e l'esiguo numero di istruzioni (tolta la definizione dei parametri e i commenti, ci sono solo una quindicina di comandi), il numero di errori riscontrati è decisamente troppo alto. E' vero che ci sono intelligenze artificiali specifiche, dedicate alla programmazione ("ovviamente" in altri linguaggi), ma io ho voluto provare appositamente ad usare quelle che un po' tutti abbiamo a portata di mano, per verificare se un "utente medio" di ArchiCAD potesse utilizzarle per crearsi così, al volo, un oggetto di cui potrebbe avere bisogno. In questa ottica, la risposta è NO.
Lo sviluppo delle AI è però così veloce che queste valutazioni valgono solo per il “qui e adesso” in cui sono state scritte.
-- Roberto Corona --