Хабрахабр

Расширение функционала меню в 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 (это важно!), напишем следующее:

<?xml version="1.0" encoding="utf-8" ?>
<ApplicationPackage xmlns="hostModulePackage/v01" Name="Tests"
> <Components> <ConfigEntry FileName="MyTest.cfg" FileType="CFG" /> </Components>
</ApplicationPackage>

Здесь в теге 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-системами (рис. 9):


Рис. 9. Прозрачная команда '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 (рис. 10):


Рис. 10. Окно командной строки Windows с результатом работы конвертера

В результате успешной работы получите сообщение Done: MyMenu.cuix.cfg.

Николай Полещук

Теги
Показать больше

Похожие статьи

Кнопка «Наверх»
Закрыть