Работа с dbmod

Известно, что внесение любых изменений в файл dwg моментально меняет системную переменную DBMOD. Именно это обеспечивает отмену зуммирования / панорамирования, запросы при сохранении измененных файлов и т.п. Но иногда такая тщательность становится лишней....

Вопрос - что же, собственно, можно сделать? DBMOD является системной переменной "ReadOnly", блокировать ее изменение, кажется, можно только из ObjectARX.

Разве? Ага, щщас! На theswamp.org (точнее - в теме What do they mean? How do I use them? приводятся две очень интересные lisp-функции.

Поскольку на theswamp требуется регистрация, приведу здесь полный текст (ну и вольный перевод, конечно ;))

acad-push-dbmod

The DBMOD system variable keeps track of changes to a drawing that would prompt you to save, when you close. In other words, anything that you do after issuing acad-push-dbmod will not be seen as having changed the drawing.

EDIT: In retrospect, I shouldn't say that it puts the variable on hold... what it does is store the value of the DBMOD variable. If you don't issue the acad-pop-dbmod command you'll still be prompted to save.

acad-pop-dbmod

This restores the DBMOD variable to it's state when you issued the acad-push-dbmod command.

Try it out. Open a blank drawing and type (acad-push-dbmod) and the command line, then press ENTER. It should return T. Now draw some things, zoom around, erase some things, etc. Now type (acad-pop-dbmod), press ENTER, and close AutoCAD.

No prompt for saving the drawing.

Very helpful when you're running a routine that you don't want to force the user to have to reply to a save query, such as in a script or at startup.

acad-push-dbmod
Сохраняет текущее значение DBMOD и блокирует ее от изменения.

acad-pop-dbmod
Восстанавливает стандартную обработку DBMOD.

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

Кроме того, можно попробовать (сам я пока не пытался, так что осталось на уровне "идеи") закинуть пользовательские реакторы на команды панорамирования, зуммирования, 3dorbit и т.п. Может, тогда и удастся наконец избавиться от надоедающих отмен перемещения изображения на чертеже ;)

Размещено в Код LISP, Функции LISP · Метки: , ,



Поделитесь своим мнением


Я не робот.