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

в 10:29, , рубрики: api, CAD/CAM, nanoCAD, Блог компании Нанософт, сапр

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

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

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

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

Расширение функционала меню в nanoCAD 8.5: макросы и LISP выражения - 2
Рис. 1. Результат выполнения сложного макроса меню

Для реализации такого меню в файле MyTest.cfg обязательно должны быть заполнены разделы menu и commands:

[]
[menu]
[menuMyTest]
Name=sMyTest

[menuMyTestMenuItem500]
Name=sОтверстие_R500
Intername=sMHole500

[configman]
[configmancommands]

[configmancommandsMHole500]
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).

Расширение функционала меню в nanoCAD 8.5: макросы и LISP выражения - 3
Рис. 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):

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

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

Расширение функционала меню в nanoCAD 8.5: макросы и LISP выражения - 5
Рис. 4. Построенная окружность

Написанный нами макрос является сложным (состоит из трех частей). Но реализует очень простой вариант. Усложним задачу: дадим возможность пользователю самому указывать точку центра.

Пауза в меню

В версии 8.5 появилась обработка паузы в макросах. Для иллюстрации этого скопируем файл MyTest.cfg в MyTest1.cfg, команду MHole500 переименуем в M1Hole500, а в параметре Keyword изменим текст макроса:

[configmancommandsM1Hole500]
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 с помощью Файл > Открыть.

Расширение функционала меню в nanoCAD 8.5: макросы и LISP выражения - 6
Рис. 5. Отображение макроса с символом паузы в редакторе интерфейса

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

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

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

Расширение функционала меню в nanoCAD 8.5: макросы и LISP выражения - 7
Рис. 6. Работа макроса, содержащего символ паузы

LISP-выражения в меню

Обработка LISP-выражений в командной строке – это еще один шаг вперед в nanoCAD 8.5. Одновременно стало возможным включать LISP-выражения в состав макросов меню.
Для примера напишем еще один вариант меню MyTest2.cfg, но уже из трех пунктов, реализующих создание в чертеже круглых отверстий с помощью команды CIRCLE. Команды должны вызываться через LISP-выражение. Пункты меню будут отличаться только значениями радиуса (100, 200 и 300). При этом точка центра отверстия будет запрашиваться с помощью паузы (LISP-символа pause). Попутно несколько усложним пункты меню, добавив в них стандартную иконку команды CIRCLE. Системные иконки находятся в файле newbtns.dll, который входит в состав программного обеспечения nanoCAD. Имя иконки совпадает с именем команды.
[]
[menu]
[menuMyTest2]
Name=sMyTest2
[menuMyTest2MenuItem100]
Name=sОтверстие_R100
Intername=sTHole100

[menuMyTest2MenuItem200]
Name=sОтверстие_R200
Intername=sTHole200

[menuMyTest2MenuItem300]
Name=sОтверстие_R300
Intername=sTHole300

[configman]
[configmancommands]

[configmancommandsTHole100]
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

[configmancommandsTHole200]
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

[configmancommandsTHole300]
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):

Расширение функционала меню в nanoCAD 8.5: макросы и LISP выражения - 8
Рис.7. MyTest2 с тремя пунктами меню

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

Расширение функционала меню в nanoCAD 8.5: макросы и LISP выражения - 9
Рис. 8. Результат работы трех пунктов меню

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

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

Расширение функционала меню в nanoCAD 8.5: макросы и LISP выражения - 10
Рис. 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):

Расширение функционала меню в nanoCAD 8.5: макросы и LISP выражения - 11
Рис. 10. Окно командной строки Windows с результатом работы конвертера

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

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

Автор: nanoCAD_API

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js