ObjectARX, AutoCAD. Среда программирования библиотеки C++

Пример Операций Базы данных


Следующий пример показывает createDwg () подпрограмма, которая создает новую базу данных, получает образцовый пространственный блочный отчет{*запись*} таблицы, и создает два круга, которые добавлены, чтобы моделировать пространство{*пробел*}. Это использует AcDbDatabase:: saveAs () функция, чтобы сохранить{*экономить*} рисунок. Вторая подпрограмма, readDwg (), читает в сохраненном рисунке, открывает образцовый пространственный блочный отчет{*запись*} таблицы, и выполняет итерации через это, печать имена класса объектов, которые это содержит.

void

createDwg()

{

AcDbDatabase *pDb = new AcDbDatabase();

AcDbBlockTable *pBtbl;

pDb->getSymbolTable(pBtbl, AcDb::kForRead);

AcDbBlockTableRecord *pBtblRcd;

pBtbl->getAt(ACDB_MODEL_SPACE, pBtblRcd,

AcDb::kForWrite);

pBtbl->close();

AcDbCircle *pCir1 = new AcDbCircle(AcGePoint3d(1,1,1),

AcGeVector3d(0,0,1),



1.0),

*pCir2 = new AcDbCircle(AcGePoint3d(4,4,4),

AcGeVector3d(0,0,1),

2.0);

pBtblRcd->appendAcDbEntity(pCir1);

pCir1->close();

pBtblRcd->appendAcDbEntity(pCir2);

pCir2->close();

pBtblRcd->close();

// AcDbDatabase::saveAs() does not automatically

// append a DWG file extension, so it

// must be specified.

//

pDb->saveAs("test1.dwg");

delete pDb;

}

void

readDwg()

{

// Set constructor parameter to kFalse so that the

// database will be constructed empty. This way only

// what is read in will be in the database.

//

AcDbDatabase *pDb = new AcDbDatabase(Adesk::kFalse);

// The AcDbDatabase::readDwgFile() function

// automatically appends a DWG extension if it is not

// specified in the filename parameter.

//

pDb->readDwgFile("test1.dwg");

// Open the model space block table record.

//

AcDbBlockTable *pBlkTbl;

pDb->getSymbolTable(pBlkTbl, AcDb::kForRead);

AcDbBlockTableRecord *pBlkTblRcd;

pBlkTbl->getAt(ACDB_MODEL_SPACE, pBlkTblRcd,

AcDb::kForRead);

pBlkTbl->close();

AcDbBlockTableRecordIterator *pBlkTblRcdItr;

pBlkTblRcd->newIterator(pBlkTblRcdItr);

AcDbEntity *pEnt;

for (pBlkTblRcdItr->start(); !pBlkTblRcdItr->done(); pBlkTblRcdItr->step())

{

pBlkTblRcdItr->getEntity(pEnt,

AcDb::kForRead);

acutPrintf("classname: %s\n",

(pEnt->isA())->name());

pEnt->close();

}

pBlkTblRcd->close();

delete pBlkTblRcdItr;

delete pDb;

}



Содержание раздела