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


         

Создание записи таблицы блоков с определениями атрибута


Блок AutoCAD - коллекция примитивов, который сохранен в записи таблицы блоков. Каждый блок имеет объект AcDbBlockBegin, сопровождаемый одним или большее количество объектов AcDbEntity, и заканчивается объектом AcDbBlockEnd (см. иллюстрацию на странице 100).

Блок может содержать определения атрибута, которые являются шаблонами для создания атрибутов. Атрибут - информационный текст, связанный с блоком. В зависимости от обеспеченной пользователем установки, атрибуты со значением могут или не может быть скопирован, когда блок вставлен в рисунок. Часто, приложение запрашивает пользователя относительно атрибута со значением во время выполнения.

Создавать запись таблицы блоков

1 Создают новую запись таблицы блоков.

2 Добавляют запись таблицы блоков на таблицу блоков.

3 Создают примитивы и добавляют их к записи таблицы блоков.

4 Создают определения атрибута, устанавливают их значения, и добавляют их к записи таблицы блоков.

Когда Вы закрываете запись таблицы блоков, блок начинает и блокирует конечные объекты,  добавлены к блоку автоматически.

Следующий пример создает новую запись таблицы блоков по имени ASDK-BLOCK-WITH-ATTR и добавляет это к таблице блоков. Затем это создает примитив круга и добавляет это к новой записи таблицы блоков. Это создает два примитива определения атрибута (второй - аналог первых) и добавляет в конец их к той же самой записи таблицы блоков.

void

defineBlockWithAttributes(

AcDbObjectId& blockId, // This is a returned value.

const AcGePoint3d& basePoint,

double textHeight,

double textAngle)

{

int retCode = 0;

AcDbBlockTable *pBlockTable = NULL;

AcDbBlockTableRecord* pBlockRecord = new AcDbBlockTableRecord;

AcDbObjectId entityId;

// Step 1: Set the block name and base point of the

// block definition.

//

pBlockRecord->setName("ASDK-BLOCK-WITH-ATTR");

pBlockRecord->setOrigin(basePoint);

// Open the block table for write.

//

acdbHostApplicationServices()->workingDatabase()

->getSymbolTable(pBlockTable, AcDb::kForWrite);




Содержание  Назад  Вперед