Расширение функционала меню в 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.

    Николай Полещук
    Нанософт 45,54
    Компания
    Поделиться публикацией
    Комментарии 0

    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

    Самое читаемое