Portare un add-in AutoCAD su BricsCAD: che cosa resta uguale e che cosa no

Wohnraum halb als Strichzeichnung, halb fertig eingerichtet – ein Bild für ein Add-in, das in zwei CAD-Programmen läuft

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:

TemaAutoCADBricsCAD
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.Windows somigliano 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>\Applications con i valori LOADER e LOADCTRLS, 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.Internal o 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

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.

CONTACT

Seleziona la tua lingua

Primo colloquiofissare oraPrimo colloquiofissare ora