cad e c++, gli inseparabili

20
 CAD & C++ CAD & C++ Gli Inseparabili Gli Inseparabili a cura di  Roberto Rossi http://www.redchar.net Edizione 08.2011.01

Upload: roberto-rossi

Post on 07-Jul-2015

2.808 views

Category:

Documents


0 download

DESCRIPTION

Questo testo è stato creato per consentire un approccio semplice allo sviluppo di applicazioni C++ per AutoCAD, tramite l'utilizzo della libreria ObjectARX.

TRANSCRIPT

5/9/2018 CAD e C++, gli Inseparabili - slidepdf.com

http://slidepdf.com/reader/full/cad-e-c-gli-inseparabili 1/20

 

CAD & C++CAD & C++

Gli InseparabiliGli Inseparabili

a cura di 

 Roberto Rossi 

http://www.redchar.net 

Edizione 08.2011.01

5/9/2018 CAD e C++, gli Inseparabili - slidepdf.com

http://slidepdf.com/reader/full/cad-e-c-gli-inseparabili 2/20

 

Autore : Roberto RossiWeb : http://www.redchar.net

Quest’opera, per volontà dell’autore, è rilasciata sotto la disciplina della seguentelicenza.

C++ e CAD, gli inseparabili by Roberto RossiCreative CommonsAttribuzione - Condividi allo stesso modo 3.0 Italia

Tu sei libero:

• di riprodurre, distribuire, comunicare al pubblico, esporre in pubblico,rappresentare, eseguire e recitare quest'opera

• di modificare quest'opera

• di usare quest'opera per fini commerciali

Alle seguenti condizioni:

• Attribuzione - Devi attribuire la paternità dell'opera nei modi indicatidall'autore o da chi ti ha dato l'opera in licenza e in modo tale da nonsuggerire che essi avallino te o il modo in cui tu usi l'opera.

• Condividi allo stesso modo - Se alteri o trasformi quest'opera, o se la usi percrearne un'altra, puoi distribuire l'opera risultante solo con una licenzaidentica o equivalente a questa.

Prendendo atto che:

• Rinuncia - E' possibile rinunciare a qualunque delle condizioni sopra descrittese ottieni l'autorizzazione dal detentore dei diritti.

• Pubblico Dominio - Nel caso in cui l'opera o qualunque delle sue componentisiano nel pubblico dominio secondo la legge vigente, tale condizione non è inalcun modo modificata dalla licenza.

• Altri Diritti. La licenza non ha effetto in nessun modo sui seguenti diritti:

• Le eccezioni, libere utilizzazioni e le altre utilizzazioni consentitedalla legge sul diritto d'autore;

• I diritti morali dell'autore;

• Diritti che altre persone possono avere sia sull'opera stessa che sucome l'opera viene utilizzata, come il diritto all'immagine o alla tutela deidati personali.

Nota : Ogni volta che usi o distribuisci quest'opera, devi farlo secondo itermini di questa licenza, che va comunicata con chiarezza.

Questo è un riassunto in lingua corrente dei concetti chiave della licenza completa(codice legale) che è disponibile alla pagina web :

http://creativecommons.org/licenses/by-sa/3.0/it/legalcode

5/9/2018 CAD e C++, gli Inseparabili - slidepdf.com

http://slidepdf.com/reader/full/cad-e-c-gli-inseparabili 3/20

 

Edizione 08.2011.01

Indice

1 Il CAD e il linguaggio C++.................................................................2

1.1 I Linguaggi..........................................................................................21.2 C/C++................................................................................................21.3 Lisp....................................................................................................31.4 Microsoft .NET......................................................................................31.5 Interfaccia COM / ActiveX......................................................................41.6 Alcune considerazioni............................................................................41.7 Il Futuro..............................................................................................51.8 Riassumendo.......................................................................................51.9 Linguaggi Alternativi..............................................................................61.10 Cos'è e cosa puo fare C++...................................................................61.11 Le versioni di ObjectARX......................................................................7

1.12 Sistemi operativi alternativi..................................................................82 Salve Mondo....................................................................................9

2.1 Gli strumenti necessari..........................................................................92.2 La strada dell'applicativo........................................................................92.3 La creazione e configurazione del progetto.............................................102.4 Struttura del programma di base...........................................................15

9 agosto 2011 1

5/9/2018 CAD e C++, gli Inseparabili - slidepdf.com

http://slidepdf.com/reader/full/cad-e-c-gli-inseparabili 4/20

 

Il CAD e il linguaggio C++ Edizione 08.2011.01

1 Il CAD e il linguaggio C++

1.1 I Linguaggi

Quale linguaggio di programmazione scegliere per sviluppare applicativi perAutoCAD ? Chiunque intenda farlo si sarà certamente posto questa domanda.

Per rispondere adeguatamente è necessario, prima di tutto, esaminare i sistemidi sviluppo disponibili per questo software.

A questo punto non ci rimane che esaminarli uno ad uno, per scoprirne i pregi e idifetti.

1.2 C/C++

Prima di tutto abbiamo C++, che meglio di tutti gli altri si presta allarealizzazione di applicazioni performanti, di qualsiasi tipo. Tutti gli applicativi

maggiori sono scritti completamente, o almeno in parte, sfruttando questolinguaggio.

Le librerie di sviluppo (ObjectARX) mettono a disposizione il massimo sia perquanto riguarda velocità di esecuzione e flessibilità di gestione, sianell'interazione con il disegno e con le funzionalità del sistema operativo, sulquale il CAD si poggia. Queste caratteristiche le rendono adatte alla realizzazionedi qualsiasi tipo di applicazione sia interna che esterna.

Il vero inconveniente con C++ è rappresentato prima di tutto dalla curva diapprendimento molto ripida, quindi dalla scarsa produttività raggiungibile nellarealizzazione di piccolo e medie applicazioni. Nonostante sia, in assoluto, il più

potente e performante, il suo apprendimento è decisamente più difficoltoso e ilsuo utilizzo, soprattutto su progetti medio/piccoli, risulta spesso

2 9 agosto 2011

5/9/2018 CAD e C++, gli Inseparabili - slidepdf.com

http://slidepdf.com/reader/full/cad-e-c-gli-inseparabili 5/20

 

Edizione 08.2011.01

controproducente. Questo avviene, non solo in fase di stesura del programma,ma anche in fase di debug (ricerca e correzione di eventuali errori o anomalie).

C/C++ diviene indispensabile in due sole circostanze :

1. quando si richiedono funzioni non disponibili in altri ambienti;

2. quando l'applicazione da realizzare richiede prestazioni elevate;

Si può comunque affermare, senza paura di essere smentiti, che qualsiasisoftware professionale non può prescindere dall'uso di C++.

1.3 Lisp

Presente sin dalle prime versioni di AutoCAD, Lisp è un linguaggio interpretato edeseguito senza alcun processo intermedio, come ad esempio la compilazione,

tipica di altri sistemi (come ad esempio C++, C#, VB.NET).I suoi maggiori pregi sono la semplicità e l'immediatezza di utilizzo, che sitraduce in una curva di apprendimento particolarmente favorevole.

E' possibile, con Lisp, iniziare a scrivere le prime procedure, dopo poche ore distudio. La sua potenza consente lo sviluppo di un ampio spettro di applicazioni,garantendo sempre una elevatissima produttività, con tempi ridotti e un processodi debug (correzione errori) molto rapido. Anche la sua velocità di esecuzione ènotevole, anche se non raggiunge i livelli di C++.

Ovviamente, sono presenti anche alcuni 'difetti'. Il primo nasce proprio dallasemplicità di Lisp, infatti questo linguaggio, che nella versione adottata da

AutoCAD viene chiamato AutoLISP è un sottoinsieme del più famoso Lisporiginale ( Lisp ) e non presenta molte delle caratteristiche comuni ai modernilinguaggi di programmazione.

Altro inconveniente è dato dalla gestione delle interfacce grafiche (GUI). Inquesto caso, l'uso di un apposito sotto linguaggio, DCL (Dialog ControlLanguage), limita fortemente lo sviluppo, rendendo accessibili solamente finestredi dialogo modali, con un numero ristretto di tipologie di controlli inseribili al lorointerno (bottoni, caselle di testo, ecc...).

Nonostante ciò, AutoLISP è la scelta migliore quando si devono realizzaresemplici procedure di interazione con il CAD. Grazie alla sua immediatezza e

produttività, riduce drasticamente i tempi di sviluppo e consente a chiunque lacreazione di procedure personalizzate.

1.4 Microsoft .NET

A Partire dalla versione 2005, AutoCAD consente di caricare direttamente modulisviluppati con la tecnologia .NET di Microsoft. Due sono i linguaggi supportatiufficialmente :

• Visual Basic .NET;

• C#.

9 agosto 2011 3

5/9/2018 CAD e C++, gli Inseparabili - slidepdf.com

http://slidepdf.com/reader/full/cad-e-c-gli-inseparabili 6/20

 

Edizione 08.2011.01

Entrambe, ovviamente, si basano sulla piattaforma .NET. Ciò consente ai due diavere il medesimo potenziale, distinguendosi per la sintassi del linguaggio e peralcune semplificazioni inserite nel solo VB.NET. Solitamente la scelta dell'uno odell'altro è una questione di gusti personali. Rispetto ad AutoLISP, i linguaggi

basati su .NET sono molto più potenti e flessibili riuscendo, da questo punto divista, ad eguagliare C++.

Dal punto di vista delle prestazioni, .NET necessita di una notevole quantità dimemoria anche se, disponendo di un hardware adeguato, la velocità diesecuzione è di tutto rispetto, riuscendo a renderlo più performante di Lisp,anche se non riesce ad eguagliare C++.

1.5 Interfaccia COM / ActiveX

Questa non è un linguaggio di programmazione, ma è una tecnologia (targatamicrosoft) che consente ai software di interagire fra loro. AutoCAD possiedeun'interfaccia ActiveX che fornisce una gerarchia di oggetti a tutti i linguaggi ingrado di utilizzare questa tecnica. In pratica è possibile pilotare l'ambiente CADda un'applicazione esterna, come se questa fosse integrata nell'ambiente stesso.

Questo ci consente di sviluppare software con Delphi, PHP, Python, Visual FoxPro,ecc...

Nonostante le possibilità offerte siano allettanti, si presentano alcuni rilevantiproblemi. Prima di tutto è impossibile definire comandi all'interno dell'ambienteCAD, cosa che ci costringe ad appoggiarci a linguaggi interni (come Lisp).Abbiamo poi un grosso problema prestazionale. Purtroppo, ogni operazioneeffettuata attraverso l'interfaccia ActiveX, risulterà parecchie volte più lenta dellamedesima operazione fatta con uno dei linguaggi interni (Lisp, .NET, C++),pregiudicando il funzionamento di applicazioni, anche molto semplici. Tutto ciòconsente di scrivere solamente software con una limitata interazione con il CAD.

1.6 Alcune considerazioni

Iniziamo col dire che, non esiste il linguaggio perfetto. Ogni applicazione che sisviluppa è un mondo a se. Se un linguaggio si dimostra adatto per larealizzazione di un determinato software, non è affatto detto che sia la sceltamigliore per la realizzazione di un'altra tipologia di programma.

Ci sono pero alcuni fatti da considerare durante la scelta del sistema di sviluppo edel linguaggio di programmazione. Inizieremo col valutare cos'è lo sviluppo di unapplicativo CAD.

Questa tipologia di software, possiede un livello di complessità superiore rispettoad un normale programma.

Nel caso di un 'Software Standard', l'interazione avviene esclusivamente con ilsistema operativo, di conseguenza qualsiasi linguaggio che supportiadeguatamente quel SO è un buon candidato per la realizzazione di programmi

efficaci.

4 9 agosto 2011

5/9/2018 CAD e C++, gli Inseparabili - slidepdf.com

http://slidepdf.com/reader/full/cad-e-c-gli-inseparabili 7/20

 

Edizione 08.2011.01

Vediamo una rappresentazione grafica per confrontare un software applicativo edun normale programma.

Quando invece parliamo dello sviluppo di applicativi, che estendono lefunzionalità di altri software (come nel caso di AutoCAD), siamo di fronte ad unlivello di difficoltà maggiore. Non solo dobbiamo scegliere un linguaggio in gradodi lavorare bene con il sistema operativo (SO), ma anche in grado di operare nel

miglior modo possibile, con il programma da estendere, inoltre è indispensabiletenere sempre a mente il livello di produttività che un sistema di sviluppopossiede, considerandone i pregi e i difetti, per evitare scelte troppo onerose dalpunto di vista delle risorse umane e di tempo.

Un altro fattore da considerare è la difficoltà, per un programmatore,nell'utilizzare contemporaneamente diversi linguaggi e ambienti di sviluppo.Ovviamente, più cose ci saranno da apprendere ed utilizzare, più confusione sigenererà, riducendo in maniera progressiva, sia la produttività, sia la qualità delsoftware prodotto. Ne consegue che, un limitato numero di strumenti sceltiattentamente, rappresenta sempre la soluzione migliore.

1.7 Il Futuro

Come se tutto ciò non bastasse, è necessario avere un'idea di come sievolveranno, nei prossimi anni, i sistemi di sviluppo per AutoCAD.

Fermo restando che C++ e AutoLISP saranno certamente supportati e sviluppati,ActiveX e soprattutto VBA subiranno un fermo nel loro sviluppo e diffusione. VBAsarà presto eliminato, già oggi è necessario scaricarlo a parte per poterlo usare,in quanto NON più sviluppato da Microsoft, che lo fornisce come ambienteintegrabile in altri software.

E' evidente che, nelle intenzioni di AutoDESK ci sia la volontà di puntare sullatecnologia .NET ed in particolare su VB.NET e C# per sostituire il vecchio VBA.

1.8 Riassumendo

Come abbiamo detto, il miglior linguaggio non esiste!

Il miglior linguaggio per la realizzazione di un applicativo, può dimostrarsi ilpeggiore per lo sviluppo di un software di tipo differente. Ad esempio, per unapiccola procedura di interazione con il CAD, è più produttivo procedere usando

Lisp, piuttosto che scomodare C++. Al contrario, un grosso software

9 agosto 2011 5

5/9/2018 CAD e C++, gli Inseparabili - slidepdf.com

http://slidepdf.com/reader/full/cad-e-c-gli-inseparabili 8/20

 

Edizione 08.2011.01

architettonico è molto meglio realizzarlo con C++, grazie alla sua potenza erapidità di esecuzione.

In casi intermedi, la soluzione maggiormente redditizia può essere quella di

mischiare i sistemi di sviluppo, scrivendo parti del software con un sistema e altrecon un altro, il tutto al fine di ottimizzare i tempi di realizzazione mantenendoun'elevata qualità generale.

1.9 Linguaggi Alternativi

In alternativa ai linguaggi ufficiali, tramite l'interfaccia COM/ActiveX e latecnologia .NET è possibile accedere ad una vasta schiera di strumenti disviluppo. Tanto per fare alcuni esempi, è certamente possibile utilizzare Python,Delphi e molti altri. Purtroppo questa scelta crea una serie di problemi, di nonpoca importanza :

1. Nessun supporto ufficiale. Le aziende sviluppatrici dei software CAD e inparticolare di AutoCAD, per limitare il numero di problematiche possibili,supportano solamente una piccola schiera di linguaggi, ignorando gli altri.Ovviamente questo fatto incide negativamente quando ci si trova adaffrontare i vari problemi legati allo sviluppo del software;

2. Scarse Informazioni. Vista la ridotta comunità di sviluppatori che segue ilinguaggi non ufficiali, anche il supporto che arriva da Internet è scarso e,alle volte, di poco aiuto;

3. Scarse prestazioni. Sia Python, sia Delphi possono interagire con

l'ambiente CAD, attraverso l'interfaccia ActiveX, cosa che però pregiudicafortemente le prestazioni dell'applicativo;

4. Come avrete certamente capito, non è possibile ignorare i linguaggiufficiali, che comunque devono essere studiati ed utilizzati, soprattutto sesi desidera assistere adeguatamente i propri clienti durante lo sviluppodelle loro personalizzazioni. Aggiungere a questi altre tecnologie e sistemidi sviluppo, porterebbe ad un aumento significativo di informazioni daapprendere ed utilizzare.

Un ultimo appunto va fatto a quei linguaggi che possiedono un'implementazioneper la piattaforma .NET. Nel nostro esempio, sia Delphi, sia Python, possiedono

un apposito compilatore. Ciò risolverà il precedente punto 3), lasciandocomunque inalterati i punti 1) 2) e 4), inoltre, come per tutti i linguaggi basatisu .NET, il loro utilizzo è limitato al solo AutoCAD (versione 2005 o successiva) ealla piattaforma Windows.

1.10 Cos'è e cosa puo fare C++

La possibilità di estendere le funzioni di AutoCAD attraverso l'utilizzo di partiscritte in C++ venne introdotta nelle primissime versioni e, da allora, le funzionia disposizione del linguaggio di programmazione sono cresciute costantemente

rendendolo, oggi, il sistema pii completo per interagire con il CAD e con il"mondo" circostante.

6 9 agosto 2011

5/9/2018 CAD e C++, gli Inseparabili - slidepdf.com

http://slidepdf.com/reader/full/cad-e-c-gli-inseparabili 9/20

 

Edizione 08.2011.01

Una delle caratteristiche più interessanti di C++ è la sua capacità di esseremultipiattaforma, infatti è possibile riutilizzare tutto o parte di un programma sudiversi sistemi operativi.

E' comunque necessario chiarire che tale possibilità, soprattutto su softwarecomplessi, non è mai indolore, richiedendo sempre compromessi e modifiche peradattare il proprio lavoro ai vari sistemi operativi.

C++, come già detto è il perfetto candidato per la scrittura di grosse applicazioniche necessitano di prestazioni velocistiche elevate, anche se, questo si paga conuna maggiore difficoltà nello sviluppo, data dalla complessità superiore sia dellinguaggio (C++) sia delle librerie di funzioni usate per pilotare il CAD(ObjectARX).

1.11 Le versioni di ObjectARX

Cos'è ObjectARX? ObjectARX è una libreria di classi/funzioni, integrata inAutoCAD, che consente a C++ di interagire e pilotare l'ambiente CAD.

In questo testo, per lo sviluppo di applicazioni utilizzeremo l'ambiente microsoftVisual Studio (Visual C++). E' doveroso dire che, a seconda della release diAutoCAD su cui il software dovrà funzionare, sarà necessario utilizzare unaappropriata versione di Visual Studio. Ad esempio, per realizzare un'applicazioneper AutoCAD 2012 è necessario usare Visual Studio 2008 o 2010, mentre sevolessi utilizzare AutoCAD 2010, sarebbe indispensabile affidarsi a Visual Studio2008. Ovviamente, per conoscere la versione corretta da usare è sufficienteconsultare la documentazione presente all'interno delle librerie ObjectARX,disponibili sul sito AutoDESK (http://www.objectarx.com/). Allo stesso modo,ogni AutoCAD richiede una versione specifica delle librerie ObjectARX.

Ecco l'elenco riassuntivo delle varie versioni :

AutoCAD Versione Interna Visual Studio

2002 15.0 6.0

2004 16.0 .Net, 2002 (7.0)

2005 16.1 .Net, 2002 (7.0)

2006 16.2 .Net, 2002 (7.0)

2007 17.0 2005 (8.0)

2008 17.1 2005 (8.0)

2009 17.2 2005 (8.0)

2010 18.0 2008 (9.0)

2011 18.1 2008 (9.0)

2012 18.2 2008 (9.0) / 2010

9 agosto 2011 7

5/9/2018 CAD e C++, gli Inseparabili - slidepdf.com

http://slidepdf.com/reader/full/cad-e-c-gli-inseparabili 10/20

 

Edizione 08.2011.01

1.12 Sistemi operativi alternativi

Molto di quello che è stato detto finora è valido a patto che, la piattaforma che

stiamo utilizzando, sia Windows, in una qualsiasi delle sue versioni recenti (Xp,Vista, 7 o successivo).

Nel panorama attuale è possibile però imbattersi in sistemi alternativi come OsX(Mac). In questo caso, è bene sapere che le possibilità rispetto all'ambienteWindows si riducono drasticamente. Sicuramente, vi sono alcuni linguaggi che,per loro natura sono presenti su tutti i sistemi operativi. Ad esempio,l'incarnazione di AutoCAD per Mac OsX (introdotta con la v.2011) permette losviluppo in C/C++ e Lisp, eliminando invece qualsiasi supporto a COM/ActiveX,VBA e .NET, tecnologie Microsoft disponibili solo su Windows.

Quindi, nel caso si desiderasse sviluppare sia per Windows, sia per OsX, sarà

necessario concentrarsi sui due soli sistemi di sviluppo comuni, cioè C++ conObjectARX e Lisp.

8 9 agosto 2011

5/9/2018 CAD e C++, gli Inseparabili - slidepdf.com

http://slidepdf.com/reader/full/cad-e-c-gli-inseparabili 11/20

 

Salve Mondo Edizione 08.2011.01

2 Salve Mondo

2.1 Gli strumenti necessari

Prima di tuffarci nel mare di C++ e AutoCAD è indispensabile chiarire comedobbiamo attrezzarci per affrontare questa nuova esperienza.

Prima di tutto è necessario avere una versione di AutoCAD, molto meglio sarebbedisporre di una recente versione di AutoCAD (2008 o successiva). Altrostrumento necessario è Visual C++ di Microsoft, infine gli ObjectARX, che sono lelibrerie che collegano C++ al CAD.

Per rendere più "universale" questo testo, tutti gli esempi proposti sono statisviluppati usando la versione gratuita dell'ambiente di sviluppo Microsoft, inparticolare si è scelto di utilizzare Visual C++ 2008 Express.

Per riassumere, ecco cosa serve :

• AutoCAD (non LT). Disponibile su http://www.autodesk.com, anche inversione dimostrativa, ma completamente funzionante per un limitatoperiodo di tempo;

• Visual C++ 2008 Express. Per questo testo ho scelto la versione in linguainglese (a 32bit). Scaricabile gratuitamente dall'indirizzohttp://www.microsoft.com/visualstudio/en-us/products/2008-editions/express;

• Librerie ObjectARX. Disponibile su http://www.objectarx.com/.

2.2 La strada dell'applicativo

Per evitare brutte esperienze è importante comprendere quali siano le fasi chepermettono lo sviluppo e l'utilizzo di un'applicazione C++ in AutoCAD.

Ecco una piccola descrizione delle varie fasi :

1. Si inizia con la creazione di un nuovo progetto in Visual C++;2. Il progetto creato dovrà essere configurato in modo da generare un libreria

a collegamento dinamico (le famose DLL) che, per convenzione, avràestensione .ARX;

3. Il progetto creato dovrà includere al suo interno tutti i riferimenti necessariper utilizzare le librerie ObjectARX;

4. Dopo la fase di configurazione sarà necessario scrivere il codice relativoalla struttura base in grado di connettere il nostro ARX (che nella pratica èuna libreria a collegamento dinamico) al CAD;

5. Una volta preparata la struttura base si potrà iniziare ad inserire i nostricomandi e le nostre funzioni;

9 agosto 2011 9

5/9/2018 CAD e C++, gli Inseparabili - slidepdf.com

http://slidepdf.com/reader/full/cad-e-c-gli-inseparabili 12/20

 

Salve Mondo Edizione 08.2011.01

6. Dopo aver scritto il codice sorgente si passa alla compilazione, fase chepermette di trasformare il nostro scritto in un file binario con estensione.ARX;

7. A questo punto, ottenuto il nostro file .ARX non rimane che aprire AutoCADe quindi caricarlo usando il comando APPLOAD.

2.3 La creazione e configurazione del progetto

Iniziamo a creare il nostro primo programma, aprendo Visual C++ :

Dal menu File selezioniamo la voce per creare un nuovo progetto. Quello chedobbiamo generare è un semplice Progetto Win32, selezionato il tipo correttoprocediamo all'inserimento dei necessari dati :

10 9 agosto 2011

5/9/2018 CAD e C++, gli Inseparabili - slidepdf.com

http://slidepdf.com/reader/full/cad-e-c-gli-inseparabili 13/20

 

Salve Mondo Edizione 08.2011.01

Dopo aver osservato un breve riassuntivo del progetto che stiamo realizzando,procediamo con l'apposito tasto Next :

Nella successiva maschera impostiamo con attenzione la tipologia di applicazioneda realizzare (DLL), inoltre assicuriamoci di generare un progetto completamentevuoto :

9 agosto 2011 11

5/9/2018 CAD e C++, gli Inseparabili - slidepdf.com

http://slidepdf.com/reader/full/cad-e-c-gli-inseparabili 14/20

 

Salve Mondo Edizione 08.2011.01

Eccoci arrivato al nostro progetto, nuovo di zecca, pronto per essereconfigurato :

Prima di passare alla configurazione vera e propria, aggiungiamo il primo file,vuoto, del nostro programma. Clicchiamo con il tasto destro sulla cartellaSource File, selezioniamo Add, infine New Item. Nella maschera di selezionedel tipo file indichiamo C++ File (.cpp), infine inseriamo il nome del file dacreare, ad esempio main.cpp :

Una volta premuto il tasto di conferma Add ci troveremo nel nuovo file diprogramma, completamente vuoto. Per ora dimentichiamolo! In realtà questo fileè stato creato esclusivamente per accedere ad alcune configurazioni che, aprogetto completamente vuoto, risulterebbero inaccessibili.

Dopo main.cpp procediamo a creare un secondo file, questa volta il suo nome

sarà main.def , al suo interno troveremo :

EXPORTSacrxEntryPoint PRIVATEacrxGetApiVersion PRIVATE

Queste poche righe consentono l'esposizione (verso l'esterno della DLL) dellefunzioni base con cui, il nostro applicativo, potrà interagire con il CAD.

12 9 agosto 2011

5/9/2018 CAD e C++, gli Inseparabili - slidepdf.com

http://slidepdf.com/reader/full/cad-e-c-gli-inseparabili 15/20

 

Salve Mondo Edizione 08.2011.01

Iniziamo ora l'operazione di configurazione. Prima di tutto dal menu Projectutilizziamo la voce per la visualizzazione delle proprietà del progetto helloWorld(helloWorld Properties) :

Le impostazione da effettuare non sono molte. Nella sezione ConfigurationProperties->General assicuriamoci che Character Set sia impostato su UseUnicode Character Set. Passiamo alla sezione C/C++->General, nella qualecompileremo la voce Additional Include Directories, specificando le cartellainc presente nella directory degli ObjectARX (nel mio caso c:\ObjectARX\inc):

C:\ObjectARX\inc-$(PlatformName);C:\ObjectARX\inc

9 agosto 2011 13

5/9/2018 CAD e C++, gli Inseparabili - slidepdf.com

http://slidepdf.com/reader/full/cad-e-c-gli-inseparabili 16/20

 

Salve Mondo Edizione 08.2011.01

Andiamo ora alla sezione C/C++->Preprocessor, nella quale inseriamo lePreprocessor Definitions :

_WIN32_IE=0x0600;WIN;WIN32;_CRT_SECURE_CPP_OVERLOAD_STANDARD_

NAMES=1;_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT=1

Entriamo ora nella sezione Linker->General e compiliamo la casella OutputFile e le Additional Library Directories con :

$(OutDir)\$(ProjectName).arxC:\ObjectARX\lib-$(PlatformName)

Siamo quindi giunti alle ultime impostazioni.

Passiamo alla sezione Linker->Input e compiliamo le caselle relative aAdditional Dependencies e Module Definition File. Nella prima inseriremol'elenco delle librerie relative alla libreria ObjectARX :

acad.lib acuiXX.lib aduiXX.lib acdbXX.lib acgeXX.libacgiapi.lib acISMobjXX.lib rxapi.lib

Si tenga presente che, al posto delle XX è necessario inserire in corretto numerorelativo alla versione di ObjectARX che si sta utilizzando, ad esempio nel caso

14 9 agosto 2011

5/9/2018 CAD e C++, gli Inseparabili - slidepdf.com

http://slidepdf.com/reader/full/cad-e-c-gli-inseparabili 17/20

 

Salve Mondo Edizione 08.2011.01

della release 2011, XX va sostituito con 18. Per quanto riguarda il ModuleDefinition File, è necessario inserire il nome del file .def creato in precedenza,main.def :

2.4 Struttura del programma di base

A questo punto possiamo passare al nostro file main.cpp. La prima cosa dasapere, quando si realizza un'applicazione C++ per AutoCAD è il da dovepartire.

Iniziamo con i file .h da includere, indispensabili per qualsiasi operazione. Nellapratica è necessario includere il file della libreria ObjectARX, e un paio di filestandard per il trattamento delle stringhe, in particolare tchar.h è di primariaimportanza. Ecco cosa utilizzeremo :

#include <string.h>#include <aced.h>#include "tchar.h"

AutoCAD interagisce con le sue applicazioni utilizzando la funzioneacrxEntryPoint che, a seconda della situazione, viene richiamata dal CAD perindicare il cosa succede. La dichiarazione di tale funzione è questa :

extern "C"

AcRx::AppRetCodeacrxEntryPoint(AcRx::AppMsgCode msg, void* pkt);

Nella quale troviamo :

• msg, rappresenta il messaggio inviato dal kernel di ObjectARXall'applicazione;

• pkt, i dati inviati;

• AppRetCode, contiene il codice di stato inviato ad AutoCAD, codice che hamolteplici funzioni, prima fra tutte quella di indicare se è avvenuto qualchetipo di problema.

9 agosto 2011 15

5/9/2018 CAD e C++, gli Inseparabili - slidepdf.com

http://slidepdf.com/reader/full/cad-e-c-gli-inseparabili 18/20

 

Salve Mondo Edizione 08.2011.01

Il nostro primissimo compito è quello di definire tale funzione che, come già dettoè la porta di ingresso di AutoCAD. Ecco la struttura base di quello che inseriremonel nostro main.cpp :

extern "C" AcRx::AppRetCodeacrxEntryPoint(AcRx::AppMsgCode msg, void* appId){

switch (msg){case AcRx::kInitAppMsg:break;

case AcRx::kUnloadAppMsg:break;

default:break;

}return AcRx::kRetOK;

}

Qui ho provveduto ad intercettare due eventi fondamentali, AcRx::kInitAppMsgche viene utilizzato al caricamento dell'ARX e AcRx::kUnloadAppMsg che vienerichiamato quando l'applicazione viene scaricata.

In teoria questo basterebbe per compilare la nostra prima applicazione ma, nonsarebbe molto corretto in quanto mancano due cosine fondamentali. La prima èuna chiamata alla funzione acrxDynamicLinker->unlockApplication che ha ilcompito di consentire al programma di essere scaricato, se non venisse invocata

l'unico modo per effettuare lo scaricamento del nostro programma sarebbe quellodi chiudere AutoCAD. La seconda funzione da richiamare è acrxDynamicLinker->registerAppMDIAware che ha il compito di “dire” al cad che il softwaresupporta l'ambiente MDI (in grado di gestire più documenticontemporaneamente), nel caso venisse omessa si attiverebbe l'ambiente SDI,impedendo cosi al CAD di aprire più file contemporaneamente.

Ecco quindi la versione corretta :

extern "C" AcRx::AppRetCodeacrxEntryPoint(AcRx::AppMsgCode msg, void* appId){

switch (msg){case AcRx::kInitAppMsg:acrxDynamicLinker->unlockApplication(appId);acrxDynamicLinker->registerAppMDIAware(appId);break;

case AcRx::kUnloadAppMsg:break;

default:break;

}return AcRx::kRetOK;

}

16 9 agosto 2011

5/9/2018 CAD e C++, gli Inseparabili - slidepdf.com

http://slidepdf.com/reader/full/cad-e-c-gli-inseparabili 19/20

 

Salve Mondo Edizione 08.2011.01

In pratica ci siamo, aggiungiamo però la ciliegina sulla torta, cioè in piccolomessaggio da visualizzare sulla linea di comando del CAD che ci confermi che ilprogramma funziona, il classico “Salve Mondo!”. Per farlo useremo la funzioneacutPrintf propria di ObjectARX che, nella pratica, è quasi identica alla classica

printf di C e C++ con la differenza che indirizza il proprio output verso il CAD,proprio sulla linea di comando Ecco la nostra funzione definitiva, completa :

#include <string.h>#include <aced.h>#include "tchar.h"

extern "C" AcRx::AppRetCodeacrxEntryPoint(AcRx::AppMsgCode msg, void* appId){

switch (msg){case AcRx::kInitAppMsg:acrxDynamicLinker->unlockApplication(appId);acrxDynamicLinker->registerAppMDIAware(appId);acutPrintf(_T("\nSalve Mondo!\n"));break;

case AcRx::kUnloadAppMsg:break;

default:break;

}return AcRx::kRetOK;

}

Importantissimo notare il come viene inserita la stringa fissa "Salve Mondo",racchiusa all'interno della macro  _T. A causa del fatto che AutoCAD ècompletamente unicode, tutte le stringhe fisse devono sempre essereutilizzare in combinazione con _T!

Inseriamo il tutto nel nostro file main.cpp :

9 agosto 2011 17

5/9/2018 CAD e C++, gli Inseparabili - slidepdf.com

http://slidepdf.com/reader/full/cad-e-c-gli-inseparabili 20/20

 

Salve Mondo Edizione 08.2011.01

Non ci resta che compilare con il comando da menu Build->Build Solution,oppure premendo F7. Il risultato finale sarà :

Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped

Se il risultato coincide, fantastico!!! Il nostro primo ARX è pronto!

Non rimane che verificarne il corretto funzionamento. Apriamo il CAD.

Una volta all'interno del software, digitiamo sulla linea di comando APPLOAD,quindi premiamo il tasto Invio, comparirà una maschera con la qualeselezioneremo il nostro file di programma (helloWorld.arx). Quest'ultimo saràpresente nella sotto cartella debug (oppure release) presente nella directory delnostro progetto.

Una volta caricato il file, se tutto è andato per il verso giusto, sulla linea dicomando dovrebbe apparire la fatidica scritta "Salve Mondo!". Nel caso questa

non sia visibile direttamente sulla linea di comando, probabilmente sarà riportataall'interno della finestra di testo, accessibile attraverso l'uso del tasto F2.

Nel caso si desiderasse scaricare dalla memoria il nostro piccolo programma, saràsufficiente richiamare nuovamente il comando APPLOAD.

18 9 agosto 2011