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

       

Использование Класса Versioning


В примере выше, объект AcDbDictionaryWithDefault должен быть зарегистрирован из с версией AutoCAD 2000 его данных, так как это становится полномочным во всех предыдущих версиях, и никто не будет читать ее данные (если бы не данные, зарегистрированные из на уровне AcDbObject).

Чтобы устанавливать это, механизм было представлено, где объект может отменять версию регистратора и диктовать то, с какой версией требуется быть зарегистрированным из или в.

Следующие правила применяются:

1, если версия регистратора старшая чем версия AutoCAD что объект сначала появился в (версия “рождения”), использование версия рождения объекта.

2, если версия регистратора тот же самый или более новая чем версия рождения объекта, использование версия регистратора.

Соответствующее правило{*правление*} должно использоваться листовым классом, также как всеми его базовыми классами, к данным файла в и из. В примере, данном выше, правило 2{*правление*} применяется{*обращается*} (регистратор - от AutoCAD 2000, в то время как объект - от Выпуска 14), так что мы регистрируем из использования версии AutoCAD 2000. Если имелся новый класс, представленный в Выпуске 14, чей данные также изменяются в AutoCAD 2000, и операция должна сохранить{*экономить*} как Выпуск 13, правило 1{*правление*} применяется{*обращается*}, и мы регистрируем из использования Выпуска 14 версии (рождения).

Два новых виртуальных метода AcDbObject были представлены классу орудия versioning, один для DWG и один для DXF файлов:

virtual Acad::ErrorStatus

getObjectSaveVersion(

const AcDbDwgFiler* pFiler,

AcDb::AcDbDwgVersion& ver,

AcDb::MaintenanceReleaseVersion& maintVer);

virtual Acad::ErrorStatus



getObjectSaveVersion(

const AcDbDxfFiler* pFiler,

AcDb::AcDbDwgVersion& ver,

AcDb::MaintenanceReleaseVersion& maintVer);

В методах регистратора, вместо звонящего filer- >dwgVersion (), звонят self()- >getObjectSaveVersion (filer, ...) чтобы позволить объекту указывать которую версию использовать, чтобы разгрузить данные. Точно так же вызовите{*назовите*} тот метод в dwgInFields () и dxfInFields () чтобы выяснить, в которой версии данные возвращаются.

С тех пор не все объекты имеют потребность отменить версию filer те, которые должны делать, так определите их намерение,  устанавливая немного на объекте. Это обычно сделалось бы в конструкторе класса. Бит используется как быстрая проверка, чтобы определить, необходимо ли отменить версию регистратора. Методы, связанные с этим были добавлены к AcDbObject:

bool

hasSaveVersionOverride();

void

setHasSaveVersionOverride(

bool bSetIt);

Имеется также новый AcDbObject метод получить версию рождения объекта:

Acad::ErrorStatus

getObjectBirthVersion(

AcDb::AcDbDwgVersion& ver,

AcDb::MaintenanceReleaseVersion& maintVer);

Этот метод возвращает два номера версии, сохраненные AcRxClass этого объекта, которые определены при регистрации класса, используя макрокоманду ACRX_DXF_DEFINE_MEMBERS.



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