Смена файла основного меню

Столкнулся я тут с проблемой замены основного файла меню в AutoCAD. Дело в том, что профилей AutoCAD у меня безумное количество, в каждый грузятся свои частичные меню. Учитывая ситуацию, описанную в статье Продолжаю войну с меню…, хочется избежать кавардака.

Казалось бы, все просто:

  1. Определяем полный путь к новому файлу меню (пускай хранится в переменной new_main_menu; фактически является копией "стандартного" основного файла меню.)
  2. Выполняем нечто типа
    1
    (vla-load (vla-get-menugroups (vlax-get-acad-object)) new_main_menu :vlax-true)

Но подобное решение, к сожалению, сопряжено с несколькими трудностями:

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

Но это не самое страшное. Самое страшное то, что в 64-разрядных AutoCAD версий 2009, 2013, 2014 (в остальных просто не пробовал) выполнение подобной конструкции (vla-load ... :vlax-true) приводит к ошибке ядра! Отловить подобное лиспом невозможно.

Поэтому пришлось вспомнить старые командные методы и выполнять обычную команду

1
(command "_.menu" new_main_menu)

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

P.S. Как подобное реализовывается в VBA или .NET - не представляю. Возможно, в тех средах такая ошибка и не возникает.



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


Я не робот.