Расширение функционала меню в nanoCAD 8.5: макросы и LISP выражения

4bekczhncwbt2d7bj1dr-0_3ace.png

Файлы меню nanoCAD имеют расширение .cfg и структуру, отличающуюся от структуры меню (*.mnu, *.cui, *.cuix) других САПР. В версии 8.5 появилась поддержка макросов, которые могут содержать несколько команд и параметров, а также LISP-выражения.

Сложный макрос в меню


Для примера напишем в текстовом редакторе Блокнот выпадающее меню MyTest.cfg из одного пункта, реализующего создание в чертеже с помощью команды CIRCLE круглого отверстия фиксированного радиуса 500 в фиксированной точке центра 700,600. Диалог в командной строке работы такого макроса показан на рис. 1. Пользователь должен щелкнуть по пункту меню только один раз и никаких данных больше вводить не придется.

d6olie21q4afhz3vuy7ri_7aevo.png
Рис. 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).

vvg2g4urgrybxtjevwt3s4wmr8c.png
Рис. 2. Автозагрузка testcfg.package с помощью портфеля

Во вложенном окне Автозагрузка с помощью кнопки Добавить добавим в список автозагружаемых файл testcfg.package, который разместим в папке D:\MyLoad вместе с MyTest.cfg. В файле testcfg.package, который является XML-файлом в кодировке UTF-8 (это важно!), напишем следующее:


  xmlns=«hostModulePackage/v01»
  Name=«Tests»
>
  
           FileName=«MyTest.cfg»
      FileType=«CFG»
    />
  

Здесь в теге ConfigEntry следует располагать сведения о CFG-файле, который необходимо подгрузить сразу после загрузки основного ядра nanoCAD (тегов должно быть несколько, если вы хотите загрузить несколько CFG-файлов). Подробнее о .package файлах см. в статье «Настройка пользовательского интерфейса при установке приложений на nanoCAD Plus 8.5».

После выхода из окон Автозагрузка и Загрузка/Выгрузка Приложений и перезагрузки nanoCAD в строке меню появится наше меню MyTest (рис. 3):

swxzp8vzz02iunrrow5srg7gf7y.png
Рис. 3. MyTest в строке меню

В выпадающем меню один пункт, он создает окружность фиксированного радиуса и фиксированного центра (рис. 4):

7o3lebsuya-bsnbbbmagusnx_gg.png
Рис. 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 с помощью Файл > Открыть.

dyzicme2qq0e8owjuofwfwtnvnm.png
Рис. 5. Отображение макроса с символом паузы в редакторе интерфейса

В панели Свойства текст макроса показан в параметре Ключевое слово.

Важное примечание. При сохранении файлов меню в редакторе интерфейса, они заменяют главное меню платформы nanoCAD. Вернуть предыдущее главное меню можно при помощи команды SETCONFIG или отредактировать вручную файл «c:\Users\\AppData\Roaming\Nanosoft\nanoCAD [x64] Plus 8.5\Config\cfg.ini».

Скорректируем файл testcfg.package (можно добавить в него меню MyTest1.cfg). Примерный результат выполнения макроса (рис. 6):

b4gyen-wsf8uwwmy3ccsf38iayy.png
Рис. 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):

ow13kmjk4ejbwqoqhfpayekzxve.png
Рис. 7. MyTest2 с тремя пунктами меню

В выпадающем меню три пункта, они создают окружности трех радиусов (рис. 8):

rq_bf4tkacqnx1zndslndwp3wnm.png
Рис. 8. Результат работы трех пунктов меню

Прозрачные команды


В системе nanoCAD некоторые команды (например, ZOOM или PAN) можно выполнять в прозрачном режиме и они не помешают исполнению других ранее запущенных команд. В версии 8.5 реализован вызов команд в прозрачном режиме через командную строку с предварением их имен апострофом, по аналогии с другими CAD-системами (рис. 10):

3k2ryxotrhtxvks2h_dhfh3kqec.png
Рис. 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):

svwnotfh-i_bh050l6nyniunmx8.png
Рис. 9. Окно командной строки Windows с результатом работы конвертера

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

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

© Habrahabr.ru