Регистрация состояния
Чтобы делать запись только части государства{*состояния*} объекта, определите kFalse для параметра автоотмены, и затем используйте undoFiler:: writeItem () функция (или другой writexxx () функция) чтобы сохранить{*экономить*} уместную информацию в файле отмены.
SetNumSides () функция AsdkPoly - типичный пример функции модификации. Поскольку assertWriteEnabled () определяет kFalse для автоотмены, класс принимает ответственность регистрации уместных частей государства{*состояния*} объекта. Сначала, функция модификации должна делать запись объекта описателя класса так, чтобы полученные классы могли проверять{*отмечать*} и позволять этому классу обрабатывать его частичные данные отмены в случае необходимости.
undoFiler()->writeItem((long)AsdkPoly::desc());
Тогда функция модификации должна указать тип действия, сопровождаемого данными. В этом примере, тип операции - kSetNumSides, и данные - mNumSides.
Acad::ErrorStatus
AsdkPoly::setNumSides(int numSides)
{
assertWriteEnabled(Adesk::kFalse, Adesk::kTrue);
if (numSides<3)
return Acad::eInvalidInput;
if (mNumSides == numSides)
return Acad::eOk;
// There are situations under which AutoCAD doesn’t
// want to do undo recording, so it won’t create an
// undo filer. Check for the existence of the filer
// before starting to write into it.
//
AcDbDwgFiler *pFiler = NULL;
if ((pFiler = undoFiler()) != NULL) {
undoFiler()->writeItem((long)AsdkPoly::desc());
undoFiler()->writeItem((Adesk::Int16)kSetNumSides);
undoFiler()->writeItem((Adesk::Int32)mNumSides);
}
mNumSides = numSides;
return Acad::eOk;
}
Как только объект выполнил авто операцию отмены, которая делает запись ее полных состояний, дополнительных просьб о авто отмене, игнорируются.