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

       

Данные Класса или Xdata Номера версии


Номер версии может быть сохранен как 8-разрядный целочисленный компонент данных (типа Adesk:: UInt8) класса, и может быть зарегистрирован в и из как первый компонент данных для каждого объекта. Поскольку эти данные постоянны, и - первое чтение элемента{*пункта*}, это может быть проверено, чтобы определить версию объекта прежде, чем любые другие данные читаются.

Когда номер используется, чтобы дифференцировать версии объекта, родительское Приложение ObjectArx должно быть способно обработать эти два случая{*дел*} несовместимых версий объектов:

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

§         когда старшая версия приложения сталкивается с более новой версией объекта (то есть когда номер пересмотра объекта больший чем номер пересмотра приложения), dxfInFields заказного класса () и dwgInFields () функции должны немедленно возвратиться,  ошибка закодирует eMakeMeProxy к AutoCAD. AutoCAD тогда создаст полномочный объект для сеанса рисунка, и записывать первоначальный объект к файлу, когда рисунок сохранен.

Возразите, что versioning с номером версии компонента данных иллюстрирован в следующих кодовых фрагментах от \objectarx\samples\polysamp\poly.cpp в ObjectARX SDK.

// Object Version

#define VERSION 1

...

Acad::ErrorStatus

AsdkPoly::dwgInFields(AcDbDwgFiler* filer)

{

...

// Object Version - must always be the first item



Adesk::Int16 version;

filer->readItem(&version);

if (version > VERSION)

return Acad::eMakeMeProxy;

...

}

Acad::ErrorStatus

AsdkPoly::dwgOutFields(AcDbDwgFiler* filer) const

{

...

// Object Version - must always be the first item

Adesk::Int16 version = VERSION;

filer->writeItem(version);

...

}

Acad::ErrorStatus

AsdkPoly::dxfInFields(AcDbDxfFiler* filer)

{

...

// Object Version

case AcDb::kDxfInt16:

Adesk::Int16 version;

version = rb.resval.rint;

if (version > VERSION)

return Acad::eMakeMeProxy;

break;

...

}

Acad::ErrorStatus

AsdkPoly::dxfOutFields(AcDbDxfFiler* filer) const

{

...

// Object Version

Adesk::Int16 version = VERSION;

filer->writeItem(AcDb::kDxfInt16, version);

...

}



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