![]()
Výkres AutoCADu se skládá ze souboru objektů, které jsou uloženy v databázi. Databáze obsahuje:
Všechny objekty vytvořené v AutoCADu jsou automaticky přidány i do správného kantejnerového objektu. Entity jsou přidány do záznamu tabulky symbolů, záznam je poté vložen do tabulky symbolů. Ostatní objekty jsou přidány do slovníků nebo objektů, které vlastní jiné objekty.
Aby byla výkresová databáze použitelná musí obsahovat minimálně:
![]()
Každý objekt vytvořený v AutoCADu (libovolným způsobem) má vlastní manipulátor (handle) a identifikátor ID. Manipulátor jednoznačně určuje objekt z pohledu jednotlivé databáze, zatím co ID jednoznačně určuje objekt ve všech databázích nahraných v jednom okamžiku v AutoCADu. ID objektu je platné pouze pro aktuální editovací seanci. Manipulátor je platný po celou dobu existence objektu ve výkresu (je uložen s výkresem). Pomocí ID objektu můžeme s objektem manipulovat. Získání ID objektu je možné několika způsoby:
V AutoCADu se entity vložené do výkresu výkresu ukládají zároveň do tzv. výkresové databáze. Grafické objekty ve výkresu leží v tzv. modelovém prostoru. Modelový prostor je ve výkresové databázi umístěn v tzv. tabulce bloků v záznamu *MODEL_SPACE.
Čáry do modelového prostoru v AutoCADu vložíme například příkazy:
_line 2,2 10,7
_line 3,3 5,5
Zadání čár se projeví ve výkresové databázy přidáním dalších položek. Po zadání obou čar bude tabulka bloků obsahovat následující položky:

Standardní nastavení AutoCADu je takové, že vkládané entity jsou automaticky umístěny do modelového prostoru.
![]()
AcDbObjectId vytvorCaru()
{
AcGePoint3d startBod(2.0, 2.0, 0.0);
// zadání souřadnic počátečního a koncového bodu
AcGePoint3d endBod(10.0, 7.0, 0.0);
AcDbLine *pCara = new AcDbLine(startBod, endbod);
// vytvoření pointru na nový objekt typu AcDbLine
AcDbBlockTable *pBlockTable;
// vytvoření ukazatele na objekt AcDbBlockTable
acdbCurDwg()->getBlockTable(pBlockTable, AcDb::kForRead);
// otevření tabulky bloků výkresu pro čtení
// a předání ukazatele na ní
AcDbBlockTableRecord *pZaznamBlockTable;
// vytvoření ukazatele na objekt AcDbBlockTableRecord
acdbCurDwg()->getAt(ACDB_MODEL_SPACE,
pZaznamBlockTable, AcDb::kForWrite);
// otevření záznamu tabulky bloků výkresu pro zápis
// a předání ukazatele na ní
pBlockTable->close(); // zavření tabulky bloků
AcDbObjectId IDCary;
// vytvoření proměnné pro uchování ID čáry
pZaznamBlockTable->appendAcDbEntity(IDCary, pCara);
// přidání entity čára do modelového prostoru
pZaznamBlockTable->close(); // uzavření modelového prostoru
pCara->close(); // uzavření objektu čára
return IDCary; // vrácení hodnoty ID čáry
}
Druhá čára by se vytvářela analogicky.
![]()
V aplikacích budeme často potřebovat editovat (pracovat s) již jednou vytvořenou entitou. Práce s objekty v AutoCADu předpokládá, že objekty jsou uloženy někde na disku. Pouze při práci s objekty jsou přesunuty do operační paměti a po skončení manipulace s nimi jsou opět uloženy na disk. Tomuto schématu odpovídá i práce s objekty pomocí funkcí ObjectARX. Schéma práce s objekty v prostředí ObjectARX:
![]()
K otevření objektu potřebujeme znát ID objektu, jinak se k němu nedostaneme. Objekt se dá otevřít pro:
Příkaz otevření má syntaxi:
acdbOpenObject(pObject, object, způsob_otevření)
![]()
Po skončení práce s objektem nesmíme zapomenout uzavřít objekt příkazem:
pObject->close();
![]()
Příklad ilustruje změnu již jednou vytvořeného objektu. Vytvářená funkce změní barvu entity na novou hodnotu.
Acad::ErrorStatus zmenBarvu
(AcDbOjectId idObjektu, Adesk::UInt16 novaBarva)
{
AcDbEntity *pEntita;
// vytvoření ukazatele typu AcDbEntity
acdbOpenObject(pEntita, idObjektu, AcDb::kForWrite);
// otevření objektu idObjektu pro zápis, nastavení ukazatele
pEntita->setColorIndex(novaBarva);
// změna barvy na novou
pEntita->close(); // uzavření objektu
return Acad::eOK; // vrácení návratové hodnoty
}
![]()