15/02/2014
Подавление команд AutoCAD
Метод acedRegCmds->removeCmd(), работает только с командами, зарегистрированными из ARX приложения. Этим способом нельзя отменить встроенные команды AutoCAD. Команда AutoCAD _UNDEFINE предназначена именно для подавления встроенных команд. Так как после команд _OPEN и/или _NEW команды переопределяются AutoCAD’ом, необходимо вызывать команду _UNDEFINE каждый раз, когда AutoCAD посылает уведомление kLoadDwgMsgвашей программе.Проблема в том, что вы не можете использовать acedCommand() внутри уведомления kLoadDwgMsg. Альтернативный метод – использование недокументированной функции ads_queueexpr() которой передается команда в форме LISP-выражения:
Код - C++: [Выделить]
- virtual AcRx::AppRetCode On_kLoadDwgMsg(void * pkt)
- {
- AcRx::AppRetCode retCode =AcRxArxApp::On_kLoadDwgMsg (pkt) ;
- // ставим в очередь выражение
- ads_queueexpr(_T("(command \"_.undefine\" \"saveas\")"));
- return (retCode) ;
- }
ads_queueexpr посылает команду в командную строкуAutoCAD, но не обрабатывает её сразу, а только тогда, когда командный процессор становится свободен. Именно поэтому это единственный способ послать команду из состояния, когда в AutoCAD нет ни одного открытого документа.
Источник: http://adndevblog.typepad.com/autocad/2012/07/undefining-autocad-commands.html
Обсуждение: http://adn-cis.org/forum/index.php?topic=532
Опубликовано 15.02.2014