Расширение функционала меню в nanoCAD 8.5: макросы и LISP выражения
Файлы меню nanoCAD имеют расширение .cfg и структуру, отличающуюся от структуры меню (*.mnu, *.cui, *.cuix) других САПР. В версии 8.5 появилась поддержка макросов, которые могут содержать несколько команд и параметров, а также LISP-выражения.
Сложный макрос в меню
Для примера напишем в текстовом редакторе Блокнот выпадающее меню MyTest.cfg из одного пункта, реализующего создание в чертеже с помощью команды CIRCLE круглого отверстия фиксированного радиуса 500 в фиксированной точке центра 700,600. Диалог в командной строке работы такого макроса показан на рис. 1. Пользователь должен щелкнуть по пункту меню только один раз и никаких данных больше вводить не придется.
Рис. 1. Результат выполнения сложного макроса меню
Для реализации такого меню в файле MyTest.cfg обязательно должны быть заполнены разделы menu и commands:
[\]
[\menu]
[\menu\MyTest]
Name=sMyTest
[\menu\MyTest\MenuItem500]
Name=sОтверстие_R500
Intername=sMHole500
[\configman]
[\configman\commands]
[\configman\commands\MHole500]
Weight=i30
CmdType=i1
Intername=sMHole500
LocalName=sОтверстие_R500
DispName=sВставка_отверстия_R500
StatusText=sДобавление отверстия R500
ToolTipText=sОтверстие R500
Keyword=s_.CIRCLE;700,600;500;
IsUserCommand=f1
Данный файл содержит описание новой команды MHole500 с таким макросом (символ s перед ним является служебным):
_.CIRCLE;700,600;500;
В этом макросе указана команда CIRCLE и два параметра: 700,600 (координаты точки центра) и 500 (величина радиуса), которые разделены точкой с запятой (аналог нажатия Enter при работе в командной строке).
Чтобы упростить загрузку такого меню, применим файл-пакет testcfg.package, имя которого укажем в портфеле автозагрузки. Для этого необходимо обратиться к пункту меню Сервис > Приложения > Загрузка приложения, а в окне Загрузка/Выгрузка Приложений нажать кнопку Приложения портфеля автозагрузки (рис. 2).
Рис. 2. Автозагрузка testcfg.package с помощью портфеля
Во вложенном окне Автозагрузка с помощью кнопки Добавить добавим в список автозагружаемых файл testcfg.package, который разместим в папке D:\MyLoad вместе с MyTest.cfg. В файле testcfg.package, который является XML-файлом в кодировке UTF-8 (это важно!), напишем следующее:
Name=«Tests»
>
FileType=«CFG»
/>
Здесь в теге ConfigEntry следует располагать сведения о CFG-файле, который необходимо подгрузить сразу после загрузки основного ядра nanoCAD (тегов должно быть несколько, если вы хотите загрузить несколько CFG-файлов). Подробнее о .package файлах см. в статье «Настройка пользовательского интерфейса при установке приложений на nanoCAD Plus 8.5».
После выхода из окон Автозагрузка и Загрузка/Выгрузка Приложений и перезагрузки nanoCAD в строке меню появится наше меню MyTest (рис. 3):
Рис. 3. MyTest в строке меню
В выпадающем меню один пункт, он создает окружность фиксированного радиуса и фиксированного центра (рис. 4):
Рис. 4. Построенная окружность
Написанный нами макрос является сложным (состоит из трех частей). Но реализует очень простой вариант. Усложним задачу: дадим возможность пользователю самому указывать точку центра.
Пауза в меню
В версии 8.5 появилась обработка паузы в макросах. Для иллюстрации этого скопируем файл MyTest.cfg в MyTest1.cfg, команду MHole500 переименуем в M1Hole500, а в параметре Keyword изменим текст макроса:
[\configman\commands\M1Hole500]
weight=i30
CmdType=i1
Intername=sM1Hole500
LocalName=sОтверстие_R500
DispName=sВставка_отверстия_R500
ToolTipText=sОтверстие R500
Keyword=s_.CIRCLE;\500;
IsUserCommand=f1
Макрос имеет вид:
_.CIRCLE;\500;
По сравнению с макросом в предыдущем примере здесь нет координат центра, но есть обратная наклонная черта (\). Это сигнал к паузе для пользовательского ввода (в данном месте команда CIRCLE запрашивает точку центра).
На рисунке 5 показано, как выглядит наш макрос, если загрузить редактор интерфейса с помощью команды INTERFACE (или с помощью пункта меню Сервис > Интерфейс > Настройка интерфейса), а в окне выбрать файл MyTest1.cfg с помощью Файл > Открыть.
Рис. 5. Отображение макроса с символом паузы в редакторе интерфейса
В панели Свойства текст макроса показан в параметре Ключевое слово.
Важное примечание. При сохранении файлов меню в редакторе интерфейса, они заменяют главное меню платформы nanoCAD. Вернуть предыдущее главное меню можно при помощи команды SETCONFIG или отредактировать вручную файл «c:\Users\\AppData\Roaming\Nanosoft\nanoCAD [x64] Plus 8.5\Config\cfg.ini».
Скорректируем файл testcfg.package (можно добавить в него меню MyTest1.cfg). Примерный результат выполнения макроса (рис. 6):
Рис. 6. Работа макроса, содержащего символ паузы
LISP-выражения в меню
Обработка LISP-выражений в командной строке — это еще один шаг вперед в nanoCAD 8.5. Одновременно стало возможным включать LISP-выражения в состав макросов меню.
Для примера напишем еще один вариант меню MyTest2.cfg, но уже из трех пунктов, реализующих создание в чертеже круглых отверстий с помощью команды CIRCLE. Команды должны вызываться через LISP-выражение. Пункты меню будут отличаться только значениями радиуса (100, 200 и 300). При этом точка центра отверстия будет запрашиваться с помощью паузы (LISP-символа pause). Попутно несколько усложним пункты меню, добавив в них стандартную иконку команды CIRCLE. Системные иконки находятся в файле newbtns.dll, который входит в состав программного обеспечения nanoCAD. Имя иконки совпадает с именем команды.
[\]
[\menu]
[\menu\MyTest2]
Name=sMyTest2
[\menu\MyTest2\MenuItem100]
Name=sОтверстие_R100
Intername=sTHole100
[\menu\MyTest2\MenuItem200]
Name=sОтверстие_R200
Intername=sTHole200
[\menu\MyTest2\MenuItem300]
Name=sОтверстие_R300
Intername=sTHole300
[\configman]
[\configman\commands]
[\configman\commands\THole100]
Weight=i30
CmdType=i1
Intername=sTHole100
LocalName=sОтверстие_R100
DispName=sВставка_отверстия_R100
StatusText=sДобавление отверстия R100
ToolTipText=sОтверстие R100
BitmapDll=snewbtns.dll
Icon=sCIRCLE
Keyword=s (command »_.CIRCLE» pause 100);
IsUserCommand=f1
[\configman\commands\THole200]
Weight=i30
CmdType=i1
Intername=sTHole200
LocalName=sОтверстие_R200
DispName=sВставка_отверстия_R200
StatusText=sДобавление отверстия R200
ToolTipText=sОтверстие R200
BitmapDll=snewbtns.dll
Icon=sCIRCLE
Keyword=s (command »_.CIRCLE» pause 200);
IsUserCommand=f1
[\configman\commands\THole300]
Weight=i30
CmdType=i1
Intername=sTHole300
LocalName=sОтверстие_R300
DispName=sВставка_отверстия_R300
StatusText=sДобавление отверстия R300
ToolTipText=sОтверстие R300
BitmapDll=snewbtns.dll
Icon=sCIRCLE
Keyword=s (command »_.CIRCLE» pause 300);
IsUserCommand=f1
Данный файл содержит описание трех команд (THole100, THole200, THole300), которые работают путем вызова LISP-выражений с функцией command. Посмотрите, как выглядит макрос с LISP-выражением в редакторе интерфейса (на рисунке в заголовке статьи показано меню MyTest2.cfg).
После выполнения описанных выше действий с портфелем автозагрузки и перезагрузки nanoCAD в строке меню увидим наше меню MyTest2 (рис. 7):
Рис. 7. MyTest2 с тремя пунктами меню
В выпадающем меню три пункта, они создают окружности трех радиусов (рис. 8):
Рис. 8. Результат работы трех пунктов меню
Прозрачные команды
В системе nanoCAD некоторые команды (например, ZOOM или PAN) можно выполнять в прозрачном режиме и они не помешают исполнению других ранее запущенных команд. В версии 8.5 реализован вызов команд в прозрачном режиме через командную строку с предварением их имен апострофом, по аналогии с другими CAD-системами (рис. 10):
Рис. 10. Прозрачная команда 'ZOOM, введенная в командной строке
В приведенном примере во время команды LINE вызывалась в прозрачном режиме команда 'ZOOM с параметром E (Показать Границы), после чего управление было успешно возвращено в команду LINE.
Возможно включение прозрачных команд в состав макроса в меню, например:
Keyword=s_.CIRCLE;'_.ZOOM;_E;\400;
Конвертер *.cuix в *.cfg
При переносе из AutoCAD в nanoCAD пользовательских меню очень полезна утилита CuixConverter.exe, ftp.nanocad.ru/habr/CUIX85/CuixConverter85.zip.
Она читает CUIX-файл и формирует соответствующий ему CFG-файл. Синтаксис использования конвертера (на примере my.cuix):
CuixConverter.exe [<путь>\]my.cuix
<путь> может быть абсолютным или относительным (по правилам Windows). Если путь не задан, то файл должен лежать в текущем каталоге. В результате работы утилиты в той же папке <путь> появится файл my.cuix.cfg с результатом конвертации. Это избавит вас от кропотливой работы по написанию CFG-файлов вручную или с помощью команды Сервис > Интерфейс > Настройка интерфейса.
Для запуска конвертера требуется окно командной строки Windows. Его можно открыть, набрав в строке запуска cmd. Пример работы с файлом MyMenu.cuix, который размещен в той же папке, что и файлы конвертера *.exe, *.dll (рис. 9):
Рис. 9. Окно командной строки Windows с результатом работы конвертера
В результате успешной работы получите сообщение Done: MyMenu.cuix.cfg.
Николай Полещук