Использование Класса 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.