Следующая функция эквивалентна команде AutoCAD:

Acad:: ErrorStatus

AcDbDatabase::insert (const AcGeMatrix3d& Xform,

AcDbDatabase* pDb);

Эта функция копирует объекты с образцового пространства{*пробела*} входной базы данных (pDb) и помещает их в текущее пространство{*пробел*} новой базы данных (бумажное пространственное или образцовое пространство{*пробел*}), применяя указанное преобразование (xform) к объектам.

Установка Текущих Значений Базы данных

Если свойство данных типа цвета или linetype не определено для объекта, текущее значение базы данных, для которого данные используются. Следующие разделы выделяют функции, имел обыкновение определять текущие значения данных, связанные с базой данных.

Номер цвета Базы данных

Если цвет не определен для объекта, текущего номера цвета базы данных, сохранен в CECOLOR системной переменной, используется. Следующий набор функций и восстанавливает{*отыскивает*} текущий номер цвета в базе данных:

Acad::ErrorStatus

AcDbDatabase::setCecolor(const AcCmColor& color);

AcCmColor AcDbDatabase::cecolor() const;

База данных Linetype Значение

Следующий набор функций и восстанавливает{*отыскивает*} поток{*ток*} linetype значение в базе данных:

Acad::ErrorStatus

AcDbDatabase::setCeltype(AcDbObjectId);

AcDbObjectId AcDbDatabase::celtype() const;

База данных Linetype Значение Масштаба

База данных имеет три linetype параметры настройки масштаба:

§  установка масштаба linetype для текущего объекта, сохраненного в CELTSCALE системной переменной.

НЕ нашли? Не то? Что вы ищете?

§  установка масштаба linetype для текущего рисунка, сохраненного в LTSCALE системной переменной.

§  флажок, который указывает, применить ли linetype, масштабирующий к пространству{*пробелу*}, объект постоянно находится в или к появлению{*виду*} объекта в бумажном пространстве{*пробеле*}. Эта установка сохранена в PSLTSCALE системной переменной.

Глобальная переменная LTSCALE и PSLTSCALE параметры настройки используется, когда рисунок восстановлен (см. главу 6, “примитивы”). Используйте следующие функции, чтобы устанавливать и запросить эти значения:

Acad::ErrorStatus

AcDbDatabase::setLtscale(double);

double AcDbDatabase::ltScale() const;

Acad::ErrorStatus

AcDbDatabase::setCeltscale(double);

double AcDbDatabase::celtscale() const;

Acad::ErrorStatus

AcDbDatabase::setPsltscale(Adesk::Boolean)

Adesk::Boolean AcDbDatabase::psltscale() const;

Значение Уровня Базы данных

Следующий набор функций устанавливает и восстанавливает текущее значение уровня в базе данных:

Acad::ErrorStatus

AcDbDatabase::setClayer(AcDbObjectId);

AcDbObjectId AcDbDatabase::clayer() const;

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

Следующий пример показывает 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;

}

Длинные транзакции

Длинные транзакции используются, чтобы поддержать Особенность редактирования Ссылки{*справочников*} AutoCAD и очень полезны для Приложений ObjectArx. Эти классы и функции обеспечивают схему приложений, чтобы проверить объекты для редактирования и проверяют{*отмечают*} их назад в к их первоначальному местоположению. Эта операция заменяет первоначальные объекты отредактированными. Имеются три типа длинного операционного контроля:

§  От нормального блока в пределах того же самого рисунка

§  От внешней ссылки (таблица перекрестных ссылок) рисунка

§  От несвязанной, временной базы данных

Класс и Функциональный Краткий обзор

Основные классы и функции

§  AcDbLongTransaction класс

§  AcDbLongTransWorkSetIterator класс

§  AcApLongTransactionReactor класс

§  AcApLongTransactionManager класс

§  AcDbDatabase:: wblockCloneObjects () функция

AcDbLongTransaction Класс

AcDbLongTransaction - класс, который содержит информацию, необходимую, чтобы проследить длинную сделку. AcDbLongTransactionManager класс берет ответственность за создание и добавление в конец объектов AcDbLongTransaction к базе данных. Это тогда возвращает AcDbObjectId объекта AcDbLongTransaction. Подобно всем другим объектам резидента базы, его разрушение обработано базой данных.

ОБРАТИТЕ ВНИМАНИЕ, что объекты AcDbLongTransaction добавлены к базе данных, в то время как они активны и стерты, как только сделка завершила. Они не сохранены в DWG или DXF файлах, и поэтому не постоянны.

AcDbLongTransWorkSetIterator Класс

AcDbLongTransWorkSetIterator обеспечивает доступ только для чтения к объектам в наборе работ. В течение конструкции в AcDbLongTransaction:: newWorkSetIterator (), это может быть установлено, чтобы включить только активный набор работ, или включать объекты, добавлялся к набору работ, потому что они упомянуты объектами в наборе работ (вторичные объекты). Это может также обрабатывать объекты, удаленные из набора работ, или AcDbLongTransaction:: removeFromWorkSet (), или, стирая.

AcApLongTransactionReactor Класс

AcApLongTransactionReactor обеспечивает уведомление определенным к длинным операционным операциям. Это разработано{*предназначено*}, чтобы использоваться вместе с глубокими уведомлениями аналога, которые будут также посланы, но изменятся, в зависимости от которого тип контроля / в выполняется. Чтобы подключить эти уведомления с глубокими уведомлениями аналога, объект AcDbIdMapping, используемый для имитации может быть восстановлен{*отыскан*}, вызывая AcDbLongTransaction:: activeIdMap () функция.

AcApLongTransactionManager Класс

AcApLongTransactionManager - менеджер для старта и управления длинными трудами. Имеется только один для каждого сеанса AutoCAD, и к этому обращаются через указатель, возвращенный объектом acapLongTransactionManager.

AcDbDatabase:: wblockCloneObjects () Функция

WblockCloneObjects () функция - элемент AcDbDatase. Это будет глубоко имитировать объекты от одной базы данных до другой и следовать за жесткими ссылками{*справочниками*} так, чтобы все зависимые объекты также имитировались. Поведение отчетов{*записей*} таблицы идентификаторов, когда дубликаты найдены, определено параметром типа. Следующая диаграмма показывает отношениям между типом таблицы идентификаторов (перечисление DuplicateRecordCloning) и глубокий тип аналога (перечисление DeepCloneType).

Отношения между DeepCloneTypes и DuplicateRecordCloning для Различные команды и функции

Command or API Function

DeepCloneType

DuplicateRecordCloning

COPY

kDcCopy

kDrcNotApplicable

EXPLODE

kDcExplode

kDrcNotApplicable

BLOCK

kDcBlock

kDrcNotApplicable

INSERT/BIND

kDcXrefInsert

kDrcIgnore

XRESOLVE

kDcSymTableMerge

kDrcXrefMangleName

INSERT

kDcInsert

kDrcIgnore

insert()

kDcInsertCopy

kDrcIgnore

WBLOCK

kDcWblock

kDrcNotApplicable

deepCloneObjects()

kDcObjects

kDrcNotApplicable

wblockObjects()

kDcObjects

kDrcIgnore

wblockObjects()

kDcObjects

kDrcReplace

wblockObjects()

kDcObjects

kDrcMangleName

wblockObjects()

kDcObjects

kDrcUnmangleName

Пример длинной транзакции

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132