12 aprile 2018

Chi implementa il DCL ?

Presente ormai da più di 26 anni in AutoCAD, il linguaggio per la descrizione delle finestre di dialogo dei programmi AutoLISP non è stato mai più implementato da Autodesk. Solo BricsCAD, recentemente, ha rivitalizzato il DCL. La speranza, però, è di ottenere quello che offrono due programmi di terze parti...



Il Dialog Contol Language, (D.C.L.) è il linguaggio per la descrizione delle finestre di dialogo che i programmi AutoLISP possono utilizzare come interfaccia utente per azioni di input e/o output.

Il linguaggio DCL ha fatto la sua comparsa nella versione di AutoCAD 12 (eravamo nel 1992). Da questa versione di AutoCAD l’interfaccia delle finestre di dialogo cambiava, dalla primitiva AUI ad una più conforme agli standard dell’ambiente Windows.

Questo modulo software integrato in AutoCAD, a parte qualche piccola correzione di bug, non è stato mai più realmente implementato.

Il linguaggio permette di creare finestre di dialogo con vari elementi : pulsanti, liste, caselle di testo, caselle di riepilogo, liste a comparsa, pulsanti di scelta, caselle con immagini di slide, slider, toggle tutti raggruppabili in colonne o righe, anche nidificate.

La maggior parte dei CAD ‘AutoCAD compatibili’ lo supporta per garantire la fruizione dei tanti programmi AutoLISP presenti sul mercato.

Il DCL di BricsCAD

Tra i tanti CAD  ‘AutoCAD compatibili’ solo  BricsCAD ha mostrato la volontà di implementare il linguaggio DCL e renderlo performante su tutte le piattaforme dove il CAD è disponibile (Win, Mac, Linux).
Nell'ambito del processo di riscrittura dell’intero codice sorgente, in BricsCAD, si sono serviti delle librerie C++ 'cross-platform' wxWidgets per gestire l’interfaccia grafica. 
Qualche leggera difformità di rappresentazione delle finestre di dialogo si è avuta rispetto allo standard delle finestre di dialogo di AutoCAD essendo, quest’ultime, realizzate con un motore basato su MFC (Microsoft Foundation Class).

Cosa c’è di nuovo

Vediamo nel dettaglio cosa è stato aggiunto in BricsCAD.

I due attributi: fixed_height e fixed_width , se impostasti su False e attribuiti al riquadro principale fanno si che la finestra di dialogo diventi ridimensionabile !.

le finestre DCL ridimesnionabili di BricsCAD
Il nuovo attributo tool_tip è davvero utile. Consente di far apparire una stringa di testo racchiusa in una nuvoletta non appena si sovrappone il puntatore del mouse su un elemento e lo si lascia stazionare per qualche istante.
alcuni 'Tooltips' assegnati ad elementi della finestra


Notate che si può utilizzare “\n” per andare a capo ed ottenere più linee di testo, come mostrato nel codice seguente:

:edit_box{ label = "Casella di testo";
value = "TEST";key="e1";
tool_tip="Inserisci il testo\nhttps://cadsemplice.blogspot.it"; 
}


Nelle liste si può ottenere una griglia con delle intestazioni delle colonne. Le colonne sono ridmensionabili. Il segreto sta nell'attribuire con il nuovo attributo bcad_label i titoli delle future colonne separandoli con “\t”:
bcad_label = "Gen\tFeb\tMar\tApr\tMag";

l'elemento Lista strutturato con colonne ridimensionabili e griglia

Alcuni attributi perfezionano l’aspetto di alcune Tile (componenti della finestra).
Due attributi come bcad_width e bcad_height consentono di definire al meglio le dimensioni degli elementi nel caso in cui ci sia qualche imperfezione nel layout finale della finestra. I loro valori sovrascrivono evidentemente i valori degli attributi width e height. I casi in cui utilizzarli sono comunque rari.

L’attributo bcad_win_wrap si può applicare ai Text presenti nella finestra di dialogo per evitare che subiscano un ‘word-wrap’ su più line di testo. Bisogna assegnare il valore di false (il valore di default è True) ed il testo deve essere allineato a sinistra.

L’attributo bcad_skip_next_child se impostato su true fa si che, tutti i successivi attributi o elementi nidificati inclusi, siano ignorati. L’utilizzo di questo attributo va inteso nell'ottica della produzione di codice DCL che sia utilizzabile (e compatibile) su diversi sw CAD.
Attributi che risultino non utili alla rappresentazione in BricsCAD, ma necessari per la fruizione del codice DCL su altri CAD, andrebbero preceduti da questo attributo.

In BricsCAD per Linux e Mac è possibile che alcune finestre appaiano più grandi rispetto alla piattaforma Windows. È  stato così aggiunto un meccanismo per evitare che queste finestre di dialogo (oltre 800x600 pixel) risultino inutilizzabili. Le finestre si possono ridimensionare ed i controlli presenti ma, non visibili, visualizzare tramite le scrol-bars orizzontali e verticali che appaiono.

Cosa ci vorrebbe

I componenti disponibili in DCL sono sufficienti per offrire una interazione ‘dignitosa’ all'utente ma occorrerebbe di più: altri controlli avanzati includibili nelle finestre.

Per farsi una idea di ciò che ci sarebbe potuto essere e non c’è, basta dare una occhiata a cosa offrono due prodotti di terze parti che estendono le funzionalità del DCL:

entrambi mettono a disposizione un buon numero di controlli come quelli elencati nell'immagine che ho composto prelevandola dall'help di OpenDCL :

Come si vede sono controlli classici dell’ambiente Windows ed altri specifici del CAD (Hatch, DWGlist, Blocklist ecc.).

Entrambi i sw funzionano alla stessa maniera: occorre caricare in memoria un modulo runtime .ARX (o .BRX per BricsCAD) che gestisce le chiamate a funzioni Lisp apposite per interagire con i nuovi controlli. Entrambe offrono un editor visuale per la definizione dei riquadri di dialogo che sono poi salvati in file binari (e non .DCL).

Il problema di queste applicazioni esterne sembra essere principalmente la portabilità. Insieme all’applicazione principale in linguaggio LISP bisogna distribuire il runtime e, naturalmente, caricarlo in memoria prima dell’esecuzione dell’applicazione LISP.
Inoltre bisogna prestare attenzione a fornire, per ogni diversa versione del CAD, la corretta versione di ARX (deve essere stato compilato con la stessa versione di Visual Studio richiesta da quella versione di CAD) .

Conclusione

Auguriamoci che l’iniziativa della Bricsys nel rivitalizzare il DCL non si fermi alle novità descritte in precedenza e serva anche da stimolo agli altri produttori di CAD compatibili.

Tracce di esperimenti, poi abbandonati, sono presenti spulciando gli help di altri sw provenienti dal consorzio Intellicad (ITC).  Una sorta di ‘fantasmi di codice’ la cui traccia è rimasta in file di help non aggiornati. Si legge, così, di un nuovo tile  :multi_edit_box, e degli attributi upper_only, lower_only, typeface e pointsize.
Attendiamo fiduciosi... "Chi implementa il DCL?" non è una domanda... è una supplica!

Nessun commento:

Posta un commento