Creare file DWG con LibreOffice e progeCAD

Automatizzare la creazioni dei disegni

Scritto da Roberto Rossi il 11-2019

Oggi parliamo della suite di office automation LibreOffice e di uno dei CAD che utilizzo, progeCAD. In realtà molto di quello che vedremo è valido per molti altri CAD, come AutoCAD, BricsCAD, IntelliCAD e simili.

Ciò che faremo utilizzando il linguaggio Basic presente in LibreOffice, ed in particolare quello del modulo Calc, sarà creare un disegno partendo da una piccola tabella contenente le coordinate di alcuni punti.

Ogni punto definito nel foglio di Calc corrisponderà poi ad una entità punto nel disegno finale.

E quindi? Buona lettura con LibreOffice e progeCAD...

Cosa diamo per scontato?

Per comprendere questo articolo ci sono alcune cose che il lettore deve conosce.

Prima di tutto chi legge deve sapere cos'è LibreOffice Basic oppure deve avere avuto qualche esperienza con i prodotti Microsoft quali Visual Basic, VBA, VB.NET. A dire il vero basterebbe anche una qualche esperienza di programmazione in genere.

Inoltre, per capire ciò che si farà con i file DWG, è bene conosce anche le nozioni base relative ai disegni tecnici realizzabili con AutoCAD, progeCAD o CAD compatibili.

Per chi invece è completamente a digiuno di tutto ciò, nella sezione Riferimenti ho raccolto i link chiave per iniziare il proprio viaggio nel mondo di LibreOffice, Basic e progeCAD.

Per quanto riguarda la dotazione software, in questo articolo ho utilizzato solamente due programmi. LibreOffice Calc e progeCAD.

LibreOffice e progeCAD

Come possiamo, da LibreOffice, pilotare progeCAD in modo da utilizzarlo come tramite per interagire con i file DWG?

Usando l'interfaccia ActiveX di progeCAD. Per chiarire, l'ActiveX Automation è un "sistema" che consente, a qualsiasi applicazione esterna, di utilizzare le funzionalità di progeCAD. In realtà anche molti altri CAD possiedono una interfaccia ActiveX (es.: AutoCAD, BricsCAD, zwCAD, IntelliCAD, ecc...), alcuni dispongono di una struttura di oggetti simile a quella di progeCAD, altri un po meno, comunque, in senso generale, i concetti espressi qui sono validi in molte altre situazioni.

Modello ad oggetti progeCAD

Quello che è rappresentato qui a fianco è il modello ad oggetti adottato dall'interfaccia ActiveX di progeCAD. Cliccando sull'immagine si potrà vedere l'intero albero.

Mediante questi oggetti sarà possibile interagire, quasi completamente, con le entità presenti nel DWG ed, eventualmente, si potrà crearne di nuove.

Chiarito il "come" comunicare con progeCAD, diciamo due cose anche su LibreOffice.

LibreOffice possiede un linguaggio di programmazione interno, molto semplice, e disponibile in tutte le versioni, il suo nome è Basic.

Chiunque sia abituato a una versione di Microsoft Visual Basic e VBA si troverà subito a sui agio con LibreOffice Basic, infatti la sua sintassi è simili e molto codice è portabile tra i vari ambienti. Naturalmente anche il vecchio, e ormai obsoleto, OpenOffice utilizza il medesimo Basic.

La funzione fondamentale, di cui LibreOffice Basic dispone, e che ci permetterà di interagire con progeCAD è piuttosto semplice, il suo nome è CreateObject e questa è la sua sintassi:

oObj = CreateObject ( type )

Con questa istruzione potremo creare un oggetto che incapsulerà interamente il CAD, con il quale effettuare la manipolazione diretta di qualsiasi DWG.

Guardiamo dentro progeCAD

Ciò che a questo punto potrebbe passare per la mente di chi legge è:

"Ma come faccio a sapere come usare l'oggetto progeCAD?"

Legittima domanda.

Tutto quello che può fare progeCAD, tutta la documentazione relativa alla sua interfaccia ActiveX, è già incluso nel programma stesso.

Basta aprirlo, andare nel menu Help/Aiuto/? e cliccare sul Developer Reference. Ecco qui tutto ciò che serve per padroneggiare gli oggetti, i metodi e le proprietà supportate dal CAD:

Developer Reference

Certo, se non si sa nulla di CAD non sarà semplice capirne il funzionamento però, con un po di impegno nulla è impossibile.

La cosa interessante è che questa documentazione è valida indipendentemente dal software che pilota progeCAD, che sia LibreOffice, OpenOffice o qualsiasi altro programma, un reference che vale per tutti.

LibreOffice che crea i DWG

Bene. Iniziamo a lavorare.

Non servono molte conoscenze per realizzare ciò che ci serve.

Prima di tutto diamo uno sguardo al foglio in Calc:

LibreOffice Calc

Una semplice sequanza di punti, numerati da 1 a N, ognuno con le proprie coordinate X,Y,Z. Nulla di complicato.

Prima di guardare il programma Basic nel suo insieme soffermiamoci sulle operazioni fondamentali, su ciò che dobbiamo sapere per disegnare, nel CAD, i nostri punti.

Le prima cosa di cui necessitiamo è sapere come aprire progeCAD che, automaticamente, creerà un nuovo disegno. Ecco le linee di codice:

pCad = CreateObject("Icad.Application")
pCadDoc = pCad.ActiveDocument
pCadModel = pCadDoc.ModelSpace

In questo modo si inizializzerà una nuova sessione di progeCAD ottenendo poi l'istanza al documento presente e al suo spazio modello. Ricordo che lo spazio modello è la zona del disegno dove, solitamente, vengono inserite le entità grafiche.

Dando per scontato che già sappiamo come leggere le celle del nostro foglio elettronico è necessario conoscere il metodo per inserire un oggetto punto nel nostro disegno, eccolo:

ent = pCadModel.AddPointEntity(pt)

Ci sono due cose da notare.

Prima di tutto la variabile pt. Questa è speciale e deve essere inizializzata con l'apposito metodo:

Dim pt as Object
pt = pCad.Library.CreatePoint(x, y, z)

Ovviamente i valori x, y e z saranno dei semplici numeri reali di tipo Double.

La seconda cosa a cui fare attenzione è il fatto che viene restituita l'entità creata nel CAD, nel nostro caso sarà inserita nella variabile ent, con la quale poter interagire con il nuovo oggetto.

In teoria ent non sarebbe necessaria però, come si vedrà dal codice sorgente completo, dopo aver creato un oggetto punto nel disegno gli verrà assegnato un colore. Per fare ciò ent è indispensabile. Vediamo come assegnare un colore all'oggetto contenuto in ent:

Dim col As Object 
col = pCad.Library.CreateColor(0)
col.ColorIndex = 1
ent.Color = col

In questo poche linee, viene creato un oggetto adibito a rappresentare un colore (variabile col), gli viene assegnato il colore 1(che nei cad è il rosso), infine il colore viene assegnato alla proprietà Color dell'oggetto contenuto in ent. Tutto qui.

Ci sono poi tre particolarità interessanti nel programma. Dopo aver inserito tutti i punti nel disegno vengono eseguite queste tre linee:

pCadDoc.SetVariable("PDMODE", 33)
pCadDoc.SetVariable("PDSIZE", 0.3)
pCad.ZoomExtents()

In questo caso:

  • Viene impostata la variabile PDMODE in modo che le entità punto vengano visualizzato come piccoli cerchi;
  • Viene impostata la dimensione dei punti usando la variabile CAD PDSIZE.
  • Viene effettuato uno zoom sul disegno in modo da visualizzare al meglio quanto disegnato.

Infine ecco Il codice completo del nostro programma scritto in LibreOffice Basic:

Codice sorgente completo

Natualmente è possibile scaricare il file completo più avanti, nella sezione Riferimenti.

Il risultato finale

Ciò che si ottiene una volta eseguito il nostro programma è questo simpatico disegno:

Il file DWG

Credo di aver detto tutto, almeno per ora.

Come sempre, qualsiasi commento, idea, suggerimento sarà sempre ben accetto.

Riferimenti

Di seguito ecco dove scaricare i protagonisti di questo articolo.

 

Licenza di questo articolo

Ad esclusione dell'immagine di intestazione, l'articolo è distribuito con questa licenza:

Licenza Creative Commons
Quest'opera è distribuita con Licenza Creative Commons Attribuzione - Condividi allo stesso modo 4.0 Internazionale.

L'immagine di intestazione di questo articolo: