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

Регистрация состояния


Чтобы делать запись только части государства{*состояния*} объекта, определите 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;

}

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



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