Objektový model AutoCADu

Přehled informací

Objektový model AutoCADu

Před tím než se budeme věnovat principům řízení (upravování) AutoCADu pomocí nástrojů automatizace, je důležité pochopit základní souvislosti v objektovém modelu AutoCADu. Znalost objektového modelu AutoCADu Vám umožní lepší orientaci v problematice ActiveX automatizaci (rozhraní ActiveX) a potažmo i v upravování AutoCADu pomocí Nástrojů automatizace (např. Visual BASIC pro Aplikace).

Prostředí rozhraní ActiveX automatizace je navrženo jako striktně objektové rozhraní. Jako základní stavební prvek je považován objekt. V ActiveX automatizaci AutoCADu je objektem každý uchopitelný (rozumějte dosažitelný) prvek reprezentující část AutoCADu. Rozhraní ActiveX AutoCADu rozlišuje následující typy objektů:

grafické objekty - čára, výseč, text, rozměry ...
objekty nastavení stylů - typ čar, styl kótování ...
objekty organizačních struktur - vrstvy, skupiny, bloky ...
objekty výkresového zobrazení - pohled, viewport ...
další objekty - výkres, aplikace AutoCADu..

Všechny objekty jsou seřazeny do hierarchické struktury s kořenem v objektu Application (aplikace). Hierarchická struktura se nazývá OBJEKTOVÝ MODEL. Z objektového modelu je patrné, jak jsou objekty mezi sebou provázány. Objekt Application umožňuje například přístup k objektu Preference (Vlastnosti), který umožňuje upravovat AutoCAD. Je možné přistupovat k objektu Document (Dokument), pomocí vlastnosti ActiveDocument, který umožňuje přístup do nižší úrovně objektů. Objekt Document obsahuje všechny Collection (soubory), specifické vlastnosti a metody dokumentu. Collection je jednoduchý mechanismus pro přístup do množiny objektů (například objekt ModelSpace je soubor všech objektů - entit - v modelovém prostoru AutoCADu).

POZNÁMKA: V AutoCADu vždy existuje objekt ActiveDocument. Jedná se o inicializační výkresový prostor při startu AutoCADu nebo aktuální otevřený soubor.

Objektový model

Použití objektového modelu při tvorbě kódu

Potřebujete-li použít libovolnou metodu nabízenou v objektovém modelu AutoCADu, musíte nejprve definovat cestu k této metodě. Cestu naleznete budete-li procházet objektovým modelem objekt po objektu směrem k požadované metodě. Podíváte-li se na model, první objekt - kořen objektového modelu - je objekt Application.

Při upravování AutoCADu s využitím rozhraní ActiveX se můžete setkat s výjimkou právě popsaného pravidla. Například při otevření nového projektu je poskytován specielní objekt "ThisDrawing" a ne "Application. ...". Objekt "ThisDrawing" totiž reprezentuje "Application.ActiveDocument".

Příklad vytvoření cesty k požadované metodě

Příklad bude pro jednoduchost vysvětlován pro použití objektového modelu ActiveX AutoCADu v nástroji automatizace VBA. Použití v jiných nástrojích by bylo obdobné.

Definice problému

Uživatel potřebuje vybrat ve své aplikaci jeden objekt z grafické obrazovky.

Řešení

K výběru objektu z grafické obrazovky slouží metoda GetEntity. Z nápovědy AutoCADu zjistíme, že metoda GetEntity patří k objektu Utility. Tyto informace nám postačují, abychom zadali správnou cestu k metodě. Při zadání cesty k metodě máme dvě možnosti. Můžeme zadat cestu ve tvaru tzv. plné cesty k metodě:

 
 Application.ActiveDocument.Utility.GetEntity Object, Point, [Prompt]

Nebo můžeme zadat cestu ve zkráceném tvaru s použitím objektu "ThisDrawing". Tvar takovéto cesty bude následující:

 ThisDrawing.Utility.GetEntity Object, Point, [Prompt]

Zkrácení cesty neušetří pouze psaní kódu, ale i zrychlí aplikaci. VBA při každé kompilaci kódu kontroluje cesty. Pokud namapujeme proceduru nekorektně, VBA zastaví kompilaci a informuje o chybě. Při použití ThisDrawing zkrátíte kontrolu o dva kroky. Při použití této teorie můžeme zkrátit kontrolu ještě více - použijeme proměnnou objekt, která spojí objekty ThisDrawing a Utility:

 Dim objUtility As Object
 Set objUtility = ThisDrawing.Utility  

teď bude mít kód následující tvar:

 objUtility.GetEntity Object, Point, [Prompt]

To ušetří čas, protože je kontrolován pouze objekt objUtility. Objekty ThisDrawing a Utility jsou kontrolovány pouze jednou, bez ohledu na to kolikrát je použit objekt objUtility v proceduře.