CAD
I costi delle licenze aumentano, una parte della progettazione deve passare a BricsCAD – e i propri add-in devono seguirla. La buona notizia: BricsCAD parla quasi la stessa lingua .NET di AutoCAD. Quella meno buona: il «quasi» si nasconde in namespace, interfaccia e setup, e tende a manifestarsi solo presso l'utente.
Che cosa resta uguale
Chi è abituato a guidare a destra e prende un'auto a noleggio in Inghilterra trova acceleratore, freno e volante come sempre. Solo la leva del cambio sta a sinistra, e alla prima freccia si accende il tergicristallo. Più o meno così ci si sente con il passaggio. Le classi dell'API di BricsCAD si chiamano come in AutoCAD: Database, Transaction, BlockTableRecord, Editor, CommandMethod. Una transazione viene avviata, confermata e rilasciata allo stesso modo. Bricsys stessa scrive nella sua guida per sviluppatori che di norma dallo stesso codice sorgente si possono compilare assembly per entrambi i programmi.
Diversi sono gli involucri attorno a queste classi:
| Tema | AutoCAD | BricsCAD |
|---|---|---|
| Database, geometria, runtime | Autodesk.AutoCAD.DatabaseServices, .Geometry, .Runtime |
Teigha.DatabaseServices, Teigha.Geometry, Teigha.Runtime |
| Applicazione e input | Autodesk.AutoCAD.ApplicationServices, .EditorInput |
Bricscad.ApplicationServices, Bricscad.EditorInput |
| Barra multifunzione | Autodesk.Windows |
Bricscad.Windows |
| Riferimenti | accoremgd, acdbmgd, acmgd | BrxMgd, TD_Mgd |
| .NET | 2025 e 2026: .NET 8, con aggiornamenti .NET 10; 2027: .NET 10 | V25: .NET Framework 4.8; V26: .NET 8 |
| Interfaccia C++ | ObjectARX | BRX |
Due punti fanno parte di ogni pianificazione. Secondo la panoramica della guida per sviluppatori di Bricsys, .NET e BRX sono disponibili solo da BricsCAD Pro, non in Lite. E BricsCAD V26 non carica più add-in compilati per il .NET Framework 4.8. Devono essere ricompilati con l'SDK di .NET 8.
Un codice sorgente per entrambi: un interruttore invece di una copia
La via più ovvia – copiare il progetto, sostituire i namespace con cerca e sostituisci – si paga dopo il primo anno. A quel punto esistono due versioni, e ogni correzione va fatta due volte. Meglio un codice sorgente con un interruttore. Il file di progetto imposta per la destinazione BricsCAD un simbolo come BRICSCAD, e il codice sceglie con esso i namespace:
#if BRICSCAD
using Bricscad.ApplicationServices;
using Teigha.DatabaseServices;
using Teigha.Runtime;
#else
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Runtime;
#endif
public class Befehle
{
// Lo stesso comando per AutoCAD e BricsCAD
[CommandMethod("ZaehleKreise")]
public void ZaehleKreise()
{
var dokument = Application.DocumentManager.MdiActiveDocument;
var db = dokument.Database;
var anzahl = 0;
using (var tr = db.TransactionManager.StartTransaction())
{
var blockTable = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);
var modellbereich = (BlockTableRecord)tr.GetObject(
blockTable[BlockTableRecord.ModelSpace], OpenMode.ForRead);
foreach (ObjectId id in modellbereich)
{
if (tr.GetObject(id, OpenMode.ForRead) is Circle)
{
anzahl++;
}
}
tr.Commit();
}
dokument.Editor.WriteMessage($"\n{anzahl} Kreise im Modellbereich.");
}
}
Tutto ciò che sta sotto le righe using è uguale per entrambi i programmi. Nel file di progetto ogni destinazione riceve i propri riferimenti, per BricsCAD BrxMgd.dll e TD_Mgd.dll dalla cartella del programma. Come per AutoCAD, Private è impostato su false, affinché le DLL non finiscano nella cartella di output. Poiché BricsCAD V26 gira su .NET 8 e AutoCAD 2027 su .NET 10, un progetto con TargetFrameworks compila le due versioni una dopo l'altra. Dove i programmi differiscono davvero, il codice va in un sottile strato adattatore – non come #if sparsi in tutti i file.
Dove stanno davvero le differenze
- Barra multifunzione e immagini: le classi in
Bricscad.Windowssomigliano a quelle di AutoCAD, ma non sono uguali. Nei nostri add-in il tooltip di un pulsante della barra multifunzione in BricsCAD era solo un testo, senza immagine e formattazione. Le immagini tramite indirizzo pack di WPF restavano vuote. Caricate dal flusso delle risorse, comparivano in modo affidabile. - Caricamento e setup: AutoCAD carica comodamente gli add-in da una cartella bundle. Per BricsCAD, Bricsys descrive il caricamento tramite il registro, sotto
Software\Bricsys\BricsCAD\<Version>\<Sprache>\Applicationscon i valoriLOADEReLOADCTRLS, noti da AutoCAD. Il Suo setup ha bisogno per questo di un ramo proprio. - Funzioni non documentate: ciò che in AutoCAD viene da
Autodesk.AutoCAD.Internalo tramite COM è il primo candidato a creare problemi. Verifichi questi punti uno per uno. - Comportamento: un metodo con lo stesso nome non si comporta allo stesso modo in ogni caso limite. Il compilatore dimostra solo che i nomi esistono. Se il risultato è corretto lo mostra solo un test in BricsCAD.
- LISP e C++: BricsCAD conosce LISP con le funzioni Visual LISP. Per il codice ObjectARX c'è BRX, e spesso lì basta ricompilare.
Dalla pratica
Per una grande software house CAD abbiamo modernizzato un applicativo verticale per l'ingegneria civile cresciuto nell'arco di oltre dodici anni: diverse centinaia di migliaia di righe in C++, COM, MFC e ObjectARX. Dopo uno studio di fattibilità e un'analisi di convenienza economica abbiamo portato interfaccia e nucleo CAD in C# sull'API .NET di AutoCAD – in modo che l'applicativo giri anche in BricsCAD. Nel farlo il codice è diventato nettamente più breve e più semplice. Secondo lo stesso principio è costruito il nostro strumento per la verifica delle norme di disegno: il nucleo di verifica non conosce alcun programma CAD, adattatori snelli dialogano con BricsCAD e con Revit.
Errori tipici
- Il progetto viene copiato, i namespace vengono sostituiti. Dopo un anno le due versioni divergono.
- Per BricsCAD V26 si continua a compilare con il .NET Framework 4.8. V26 non carica l'add-in.
- Il calcolo parte da BricsCAD Lite. Lì non gira alcun add-in .NET.
- La DLL è arrivata via e-mail o download ed è bloccata da Windows. BricsCAD segnala allora «Operation is not supported». Il rimedio è «Annulla blocco» nelle proprietà del file.
- Il setup conosce solo il bundle di AutoCAD. In BricsCAD l'add-in allora non si carica da solo.
Come La aiutiamo
- Check per il passaggio AutoCAD → BricsCAD: verifichiamo l'eseguibilità in BricsCAD dei Suoi add-in, programmi LISP e menu e stimiamo l'impegno per ciascun componente – come pacchetto di avvio a prezzo fisso.
- Formazione: nel corso «BricsCAD .NET API con C#» sviluppa add-in per BricsCAD. Il lato AutoCAD è coperto dal corso «AutoCAD .NET API con C#».
- Porting come progetto: portiamo il Suo add-in su BricsCAD o affianchiamo il Suo team nel farlo. Fissi un primo colloquio.
- Caso di studio: Modernizzazione di un applicativo AutoCAD per l'ingegneria civile
Fonti: Bricsys Developer Reference, «dotNET overview» e «Registry DemandLoad»; guida di Bricsys, «How to develop and run .NET plugins in BricsCAD V26»; Ebi F. Eilber, AutoCAD .NET API (libro tecnico, uscita prevista nel 2027); caso di studio «Modernizzazione di un applicativo AutoCAD per l'ingegneria civile», Casi di studio Cadida.
