Откатка и восстановление команд (макро)

Материал из GEOS_WIKI
Перейти к: навигация, поиск

Эта статья — об откатке и восстановлении команд в макропрограммировании. Об откатке и восстановлении команд в интерфейсе К3-Мебель читайте здесь

Откатка команды

Команда откатки undo имеет несколько режимов, представленных ниже.


undo <N>

Команда откатывает <N> последних выполненных команд


undo off|on


Команда включает (on) или выключает (off) режим откатки.


undo bufsize <N>

Команда устанавливает величину буфера откатки равным <N> командам.


undo clear

Команда очищает буфер откатки.



Примечание. Следует иметь ввиду, что откатка распространяется на элементарные команды, а не на макрокоманды, состоящие из нескольких (десятки, сотни и более) элементарных команд



Восстановление команды

redo [<N>]

Команда redo отменяет откатку, выполненную командой undo. Параметр <N> задает число команд откатки. По умолчанию восстанавливается одна последняя команда.

Изменение режима трассировки макропрограмм

MacroMode keys

Команда MacroMode включает/отключает/меняет состояние режима трассировки макропрограмм в зависимости от установленных ключей Keys.

Возможные состояния ключей keys:


MacroMode Trace {on|off}

Ключ включает (on) или выключает (off) состояние трассировки макропрограмм.


Режимы отладки макропрограмм

MacroMode ShowError {on|off}

Ключ включает (on) или выключает (off) состояние режима показа места (строки) ошибок в макропрограмме.

Также существует возможность управлять выводом в командное окно выполненных строк макропрограммы. Этот режим значительно замедляет работу макропрограмм, но позволяет отследить ее исполнение. Дополнительно к этому существует возможность управлять выводом диагностических сообщений в командное окно.

MacroMode Debug {on|off}

Ключ включает (on) или выключает (off) состояние режима разработчика макропрограмме. Если режим разработчика включен, то при каждом новом запуске макропрограммы, она читается с диска. Если выключен, то единожды запущенная макропрограмма остается во внутреннем кэше и читается оттуда. Таким образом, если разработчик в процессе работы вносит изменения в макропрограмму, то изменения не будут выполнены (запускается предыдущий вариант макропрограммы из кэша). Но при запуске макропрограммы из кэша не тратится время на чтение с диска и скорость работы выше.




Примечание. Узнать текущую установку вывода диагностических сообщений и трассировки макропрограмм можно с помошью системной функции sysvar(78)




MacroMode Undo { Off [Clear] | On }

Ключ включает (On) или выключает (Off) режим откатки.

Выключение режима откатки возможно с очисткой буфера откаток (необязательный ключ Clear).


MacroMode Undo On <Name> <ObjectCreate> [<ObjectDelete>]

Включенный режим откатки позволяет ввести имя откатки (параметр <Name>), а также зарегистрировать создание объекта <ObjectCreate> и удаление объекта <ObjectDelete>. Объекты <ObjectCreate> и <ObjectDelete> обязательно должны быть объектами верхнего уровня. Этот вариант применим только в том случае, если макропрограмма создает один новый объект или заменяет один объект на другой.

<Name> = "ObjectsTree"

Имя <Name> задает строку, которая выводится в командное окно при выполнении откатки (см. рисунок)


MacroMode Undo On <Name> All

Если используется ключ All, то в откатке регистрируются все объекты. Этот вариант применим в случае, если макро создает все объекты сцены


MacroMode Undo Start

Начать накопление счетчика откаток во время выполнения макропрограммы.


MacroMode Undo Stop <Name>

Закончить накопление счетчика откаток во время выполнения макропрограммы. Имя <Name> задает строку, которая выводится в командное окно при выполнении откатки.

Последние две команды используются в макропрограммах, когда при старте макропрограммы нужно начать накопление откаток, а по окончании — завершить. В этом случае при выполнении откатки все команды между началом и завершением накопления счетчика откаток будут отменены за одну операцию.




Примечание. Не рекомендуется использовать команды включения и выключения откатки неопытными пользователям. Неверное использование этих команд может привести к потере всех несохраненных данных и фатальной ошибке в работе программы.




MacroMode Level [<Level>]

ключ устанавливает уровень выдачи сообщений <Level>. Если значение <Level> не задано, то возвращается текущий уровень выдачи сообщений

Пример 1:

// Выключить откатку без стирания буфера откаток
#UndoOnBefore MacroMode Undo Off;
// Включить откатку с регистрацией создания и удаления объектов верхнего уровня
MacroMode Undo On "Otkatka" hCreate;

Пример 2:

macromode undo off;
macro ProtoPath+"MakePan.mac" basep[1] basep[2] basep[3] xgab, ygab 12;
objident last 1 polka;
if (isvardef("polka")==16)
{
 macromode undo on "Ug_Polka.mac" polka ;
}
else
{
  macromode undo on;
}


MacroMode LockHelp <Topic>

Команда принудительно устанавливает тему справки для макропрограммы, где команда вызвана.

<Topic> - идентификатор устанавливаемой темы – целое неотрицательное число.

Если значение <Topic> = 0, то происходит снятие блокировки смены тем справки, иначе (<Topic> > 0) то устанавливается блокировка темы на все время выполнения макрокоманды. После любого выхода из макро в интерактив (нормального или аварийного), блокировка темы справки снимается.

Суть команды в том, что внутри макропрограммы каждая выполняющаяся команда имеет свой указатель (тему) справки, которая зачастую не показывает сути всей макропрограммы. Так вот команда позволит не использовать указатели (темы) каждой из команд макропрограммы, а установить одну тему на всю макропрограмму.