Данные Класса или 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);
...
}