Diskuzní fórum a databáze tipů a utilit pro AutoCAD, Inventor, Revit a další produkty Autodesk - od firmy Arkance Systems [www.cadforum.cz]
CZ | SK | EN | DE
Přihlášení
či registrace
   právě nás čte: 7468 

Vývojové prostředky AutoCADu

Použití .NET a ObjectARX v AutoCADu

Vývoj aplikací pro AutoCAD - přehled API, LISP

Vývojové prostředky AutoCADu AutoCAD API

Visual LISP, Visual Basic/VBA, Java, ObjectARX, ActiveX, Skripty
České vysoké učení technické Praha, Fakulta elektrotechnická
Bc. Srník Albert, albert.srnik@mybox.cz

Základy práce s technologií .NET


Knihovny tříd

Ve vytvářených aplikacích budeme muset používat prostředky, které nám umožní pracovat s AutoCADem. V prostředí .NET se těmto prostředkům říká třídy a funkce. Třídy a funkce jsou uloženy v knihovnách tříd. ObjectARX obsahuje několik knihoven tříd pro různé použití. Ve výkladu se dozvíte jaké třídy a funkce knihovny obsahují a které knihovny musíte přidat do projektu, aby pracoval správně.

Managed třídy implementují funkčnost databáze a umožňují psát aplikace, které čtou a píšou do souborů ve formátu drawing(DWG). Také poskytují pžístup k UI elementům AutoCADu včetně příkazového řádku, dialogových oken a dalších.Pro úplný přehled manager wrapper tříd můžete nahlédnout do AutoCAD Managed Class Reference.

ObjectARX managed wrappery jsou umístěny ve dvou souborech:
  • acdbmgd.dll obsahuje wrappery pro ObjectDBX™ API. Tato DLL je součástí Autodesk® RealDWG SDK a je obsažena v AutoCADu
  • acmgd.dll obsahuje wrappery pro většinu API AutoCADu. Tato DLL je obsažena v AutoCADu

Primitivní datové typy C++ a ObjectARX jsou mapovány na korespondující ekvivalenty v .NET. Většina tříd ObjectARX mapuje jednu managed wrapper třídu. Ačkoli jsou zde vyjímky, první čtyři písmena názvu třídy ObjectARX často poskytují klíč ke korespondující managed jmenný prostor(namespace). Následující tabulka ukazuje nejobvyklejší mapování prefixů tříd ObjectARX na .NET jmenné prostory.



Tabulka..mapování prefixů na jmenné prostory

Vytvoření nového projektu .NET
Základní kroky k vytvoření .NET solution použitím Visual Studia a manager wrapperů ObjectARX jsou stejné ať použijete Microsoft Visual C# .NET nebo Visual Basic .NET.

Ručně vytvořený

1. Ve Visual Studiu .NET, vytvořte class library solution a projekt.
2. Vyberte Add Reference z Project menu nebo Solution Exploreru.
3. Zadejte cestu k umístění AutoCADu a vyberte acdbmgd.dll and acmgd.dll.
4. V hlavním souboru třídy přidejte prostory, které budete používat.

using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Runtime;


Pomocí nástroje AutoCAD Managed C# Application Wizard:
  • Nejdříve je nutné ho nainstalovat a to předtím, než spustíme Visual Studio. Pomocník se nachází v balíku ObjectARX SDK v adresáři \utils\ObjARXWiz. Pomocníka musíme nejprve rozbalit a poté můžeme spustit instalaci. Přes celou instalaci budete naváděni.,
  • Po skončení instalace můžeme spustit Visual Studio
  • V dialogovémokně New Project vybereme Visual C# projekty a šablonu AutoCAD Managed C# Project. Pojmenujeme a nastavíme adresáře, kam se soubory uloží. Povrdíme.
  • Objeví se AutoCAD Manager CSharp Application Wizard. Necháme Enable Unmanaged Debugging neoznačené. Registered Developer Symbol bude mít hodnotu, kterou jsme vložili, když jsme pomocníka instalovali. Klikneme na Finis pro vytvoření projektu
  • Když se podíváme na projekt, který pomocník vytvořil, v Solution Explorer vidíme, že na acdbmgd a acmgd už byly vytvořeny reference. V hlavním souboru .cs byly rovněž přidány jmenné prostory a atribut CommandMethod

Tvorba aplikace .NET

Definování Příkazů AutoCADu:
Poté, co máme vytvořen .NET projekt, jsme připraveni definovat třídy, které budou implementovat a vykazovat funkcionalitu naší aplikace. Musíme dodržovat specifický protokol AutoCADu k registraci příkazů.

Pro každý příkaz AutoCADu, který je definován, musí aplikace obsahovat metodu s atributem CommandMethod. Tento atribut může mít jeden nebo více atributů. V jeho nejjednodušší formě předáváme pouze jeho název.

Příkazové metody by měly být deklarovány buď jako instance nebo statické metody. Statické příkazové metody jsou v C# deklarovány jako statická klíčová slova.

Používání transakcí

1. Začněte transakci před try blokem zavoláním metody Transaction.StartTransaction()
2. Uvnitř try bloku použijte objekt transaction pro operace s databází
3. Předejte transakci na konci try bloku zavoláním metody Transaction.Commit()
4. Uvolněte transakci zavoláním metody Transaction.Dispose()

Tato sekvence zaručuje, že objekt transaction je zrušen nehledě na výjimky, které se mohou vyskytnout uvnitř try bloku.

Přístup k uživatelskému rozhraní

AutoCAD managed třídy dovolují aplikacím používat mnoho AutoCAD UI zdrojů a připojit efektivně nové formuláře do rozhraní AutoCADu. Některé třídy ve jmenném prostoru Autodesk.AutoCAD.Windows poskytují pístup do dialogových oken, jako je Linetype and Color. Tyto třídy poskytují metodu ShowDialog, která zobrazí formulář. Při používání těchto tříd aplikace automaticky získává trvalou velikost a pozici dialogového okna.

Třídy Autodesk.AutoCAD.Windows také předkládají rozhraní některých rozšiřitelných UI elementů včetně palet, tray položek, status baru. Palety nástrojů obdrží rozsáhlé pokrytí v třídách a rozhraní ve jmenném prostoru Autodesk.AutoCAD.Windows.ToolPalette. Ikona AutoCADu zrovna jako pick point pick set bitmapy, mohou být zpřístupněny přes třídu Autodesk.AutoCAD.Windows.Visuals.

K implementaci uživatelských formulářů do AutoCAD managed API, aplikace rozšiřují třídy .NET System.Windows.Forms přímo. Nicméně by by takové aplikace neměly volat metodu Form.ShowDialog. Místo toho by měly používat metody Autodesk.AutoCAD.ApplicationServices.Application.ShowModalDialog a ShowModelessDialog pro zobrazení jejich uživatelských formulářů. Použití Form.ShowDialog v rozšiřující aplikaci AutoCAD může vyústit v neočekávané chování.

Používání ExtensionApplication a CommandClass Attributů Když AutoCAD načte managed aplikaci, dotáže se aplikace na uživatelský atribut ExtensionApplication. Pokud je atribut nalezen, AutoCAD nastaví přidružený typ atributu jako vstupní bod aplikace. Pokud nalezen není, AutoCAD prohledává všechny exportované typy implementace IExtensionApplication. Pokud není nalezen vůbebec, AutoCAD jednoduše přeskočí inicializační krok aplikace. Atribut ExtensionApplication může být připojen pouze k jednomu typu.

Atribut CommandClass může být deklarován pro kterýkoliv typ, který definuje příkazové handleny AutoCADu. Pokud aplikace užívá atribut CommandClass, musí deklarovat instanci tohoto atributu pro každý typ, který obsahuje metada příkazového handlenu AutoCADu.