ADN Open CIS
Сообщество программистов Autodesk в СНГ

15/02/2014

Подавление команд AutoCAD

Метод acedRegCmds->removeCmd(), работает только с командами, зарегистрированными из ARX приложения. Этим способом нельзя отменить встроенные команды AutoCAD. Команда AutoCAD _UNDEFINE предназначена именно для подавления встроенных команд. Так как после команд _OPEN и/или _NEW команды переопределяются AutoCAD’ом, необходимо вызывать команду _UNDEFINE каждый раз, когда AutoCAD посылает уведомление kLoadDwgMsgвашей программе.

Проблема в том, что вы не можете использовать acedCommand() внутри уведомления kLoadDwgMsg. Альтернативный метод – использование недокументированной функции ads_queueexpr() которой передается команда в форме LISP-выражения:

Код - C++: [Выделить]
  1. virtual AcRx::AppRetCode On_kLoadDwgMsg(void * pkt)
  2. {
  3.   AcRx::AppRetCode retCode =AcRxArxApp::On_kLoadDwgMsg (pkt) ;
  4.  
  5.   // ставим в очередь выражение
  6.   ads_queueexpr(_T("(command \"_.undefine\" \"saveas\")"));
  7.  
  8.   return (retCode) ;
  9. }

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