Смена файла основного меню
Столкнулся я тут с проблемой замены основного файла меню в AutoCAD. Дело в том, что профилей AutoCAD у меня безумное количество, в каждый грузятся свои частичные меню. Учитывая ситуацию, описанную в статье Продолжаю войну с меню…, хочется избежать кавардака.
Казалось бы, все просто:
- Определяем полный путь к новому файлу меню (пускай хранится в переменной new_main_menu; фактически является копией "стандартного" основного файла меню.)
- Выполняем нечто типа
1(vla-load (vla-get-menugroups (vlax-get-acad-object)) new_main_menu :vlax-true)
Но подобное решение, к сожалению, сопряжено с несколькими трудностями:
- Необходимо предварительно запомнить, какие частичные меню были загружены перед заменой файла меню
- После замены основного файла меню частичные надо снова загрузить
Но это не самое страшное. Самое страшное то, что в 64-разрядных AutoCAD версий 2009, 2013, 2014 (в остальных просто не пробовал) выполнение подобной конструкции (vla-load ... :vlax-true) приводит к ошибке ядра! Отловить подобное лиспом невозможно.
Поэтому пришлось вспомнить старые командные методы и выполнять обычную команду
1 | (command "_.menu" new_main_menu) |
При этом частичные меню уже загружены и контролировать их уже не требуется. Мне кажется, это достаточно адекватная плата за применение "немодных" командных методов.
P.S. Как подобное реализовывается в VBA или .NET - не представляю. Возможно, в тех средах такая ошибка и не возникает.