Как стать автором
Обновить
100.68
Нанософт разработка
Инженерная экосистема

Программирование в nanoCAD: как зарегистрировать свою команду в среде nanoCAD?

Время на прочтение 9 мин
Количество просмотров 10K
Год назад я написал статью о том, как использовать скрипты в среде nanoCAD на примере перевода LISP-программы на Visual Basiс Script: достаточно подробно показал как организовать взаимодействие с пользователем, создавать новые объекты, раскладывать их по слоям и как вызвать скрипт на исполнение в среде nanoCAD. Надеюсь, что вы пользовались этой замечательной возможностью простейшей автоматизации.

Этой статьей я хотел бы продолжить цикл публикаций, связанных с программированием под nanoCAD. В частности, пришло время узнать как вашему скрипту назначить команду, включить ее в интерфейс nanoCAD (пункт меню, кнопка на панели инструментов и сочетания клавиш). Добро пожаловать в мир безграничного программирования под nanoCAD.

image

Инициализация


Для того, чтобы практически выполнить то, что тут написано, вам необходимо сделать две вещи:
  • установить систему автоматизированного проектирования nanoCAD;
  • загрузить любой текстовый редактор для написания скриптов (я использую Notepad++, можно использовать обычный Блокнот Windows);
Конечно, все можно прочитать теоретически, но намного интереснее выполнить описанное самостоятельно. Поехали…

Собственно интеграция скриптов в среде nanoCAD состоит из трех шагов: регистрация новых команд, загрузка этих команд в среду nanoCAD и привязка команд к элементам интерфейса. Последний шаг можно не делать – в этом случае свои команды вы можете вызывать с командной строки. Рассмотрим каждый шаг подробнее.

Шаг 1. Регистрация команды в nanoCAD


Регистрация новой команды в nanoCAD осуществляется через специализированный nsf-файл, который по сути является xml-файлом. Его структура хорошо описана в справочном руководстве по ActiveX API – посмотрите раздел «Регистрация скриптов в качестве команд». Если говорить кратко, то команда описывается в файле с рамках тегов: ‹command›‹/command›, у которой есть четыре атрибута: name, weight, cmdtype и caps. Если с «name» и «weight», надеюсь, все понятно («name» — это собственно имя нашей команды, которое мы будем набирать в командной строке, а «weight» – вес команды, параметр опциональный, по умолчанию равен 30), то с двумя другими надо разобраться поближе.

Атрибут «cmdtype» определяет область действия скрипта – может иметь два значения:
0 — скрипт приложения: т.е. из скрипта есть доступ к глобальному имени ThisApplication
1 — скрипт документа: т.е. из скрипта есть доступ только к глобальному имени ThisDrawing

Атрибут «caps» управляет выбором объектов при запуске скрипта:
0 — сохранить селекцию (PickfirstSelectionSet) перед началом команды
1 — сохранить селекцию после исполнения команды

Понятно, что имя команды должно быть уникальным – по неосторожности можно переопределить базовые команды платформы. Например конструкция:
‹command name="save" weight="30" cmdtype="1" caps="0"›
    ...
‹/command›
переопределит команду сохранения документа.

В одном nsf-файле можно определять несколько команд. И все это структурируется следующим образом:
‹?xml version="1.0" encoding="utf-8"?›
‹package›
    ‹command name="cmd1" weight="30" cmdtype="1" caps="0"›
        ...
    ‹/command›
    ‹command name="cmd2" weight="30" cmdtype="1" caps="0"›
        ...
    ‹/command›
    ‹command name="cmd3" weight="30" cmdtype="1" caps="0"›
        ...
    ‹/command›
        ...
‹/package›
Здесь, как в уже наверное поняли, определяется три команды cmd1, cmd2 и cmd3.

В рамках тегов ‹command›‹/command› можно располагать еще два тега: ‹description›‹/description› и ‹script›‹/script›. Опять же с первым, надеюсь, все понятно – это описание команды. Тег ‹script›‹/script› определяет язык, на котором написан скрипт – либо VBScript, либо JScript. Например, вот так:
‹command name="mycommand" weight="30" cmdtype="1" caps="0"›
    ‹description›‹/description›
    ‹script lang="JScript"›‹![CDATA[
        ...здесь расположен код скрипта...
    ]]›‹/script›
‹/command›
Обратите внимание на конструкцию ‹![CDATA[]]› — именно в ней прописывается код скрипта.

Теперь вооружившись этими знаниями вы без проблем сможете составить свой первый nsf-файл, обертывающий ваш скрипт в команду и регистрирующий его в среде nanoCAD:
‹?xml version="1.0" encoding="utf-8"?›
‹package›
    ‹command name="hello" weight="30" cmdtype="1" caps="0"›
        ‹description›Классическая программа «Привет, мир!»‹/description›
        ‹script lang="JScript"›‹![CDATA[
            ThisDrawing.Utility.Prompt("Привет, мир!")
        ]]›‹/script›
    ‹/command›
‹/package›

Описанная здесь команда hello выводит в командную строку классическое приветствие. Сохраним этот xml-файл с именем «userdata.nsf» и первый шаг мы сделали.

Шаг 2. Загрузка файла команд при запуске nanoCAD


NSF-файл загружается в среду nanoCAD одноименной командной – nsf. Введите ее в командной строке запущенного nanoCAD, укажите путь до созданного на предыдущем шаге файла «userdata.nsf» и можно запускать описанные в нем команды – например, созданную на предыдущем шаге команду hello:
image
Рис. 1. Простейшая команда hello и наш первый результат.
Конечно проделывать подобные шаги каждый раз, когда нам нужна своя команда – удовольствие ниже среднего. Автоматизируем…

Создание команды загрузки nsf-файла


Внимание! Начиная с nanoCAD 4.5 NSF-файлы можно загружать при помощи команды APPLOAD, для автоматической загрузки достаточно поместить файл в «Чемодан автозагрузки», расположенный на диалоге APPLOAD. В nanoCAD 4.5 и выше создавать команду загрузки NSF-файла и прописывать её в автозагрузку не нужно.

Сначала нам нужно создать свою команду, которая запускает заданными нами nsf-файл (т.е. запускает команду nsf с параметрами). Для этого создаем текстовый файл «userdata.cfg» (этот файл нам понадобится в дальнейшем) и описываем в нем команду «load_userdata_nsf»:
    [\configman\commands\sload_userdata_nsf]
    weight=i30 |cmdtype=i0 | intername=sload_userdata_nsf
    RealCommandName=snsf
    Keyword=suserdata.nsf^MCloseDocument^MNewDocument^M

Этим шагом мы создали свой файл конфигураций, в котором описали новую команду с внутренним именем load_userdata_nsf, которая вызывает команду nsf (RealCommandName=snsf) с опциями, описанными в строке Keyword. Обратите внимание на символ «s», который идет после знака равно («=») – это обязательный символ необходимый интерпритатору nanoCAD для работы с cfg-файлом.

Всевозможные опции команд я не буду описывать, иначе статья превратиться в книгу (интересующиеся могут самостоятельно изучить файл «nCad.cfg» — это файл конфигураций для nanoCAD), но наиболее интересные и частоиспользуемые опции мы изучим ниже.

Например, обратите внимание на конструкцию
    Keyword=suserdata.nsf^MCloseDocument^MNewDocument^M
Она означает, что после вызова команды (в данном случае «nsf») в командную строку подается команда «userdata.nsf» и Enter (т.е. загружается файл «userdata.nsf»), потом команда CloseDocument+Enter (т.е. закрывается текущий документ) и, наконец, команда NewDocument+Enter (т.е. создается новый документ). Думаю, что вы догодались, что символы «^M» означают Enter.

Автоматическая загрузка nsf-файла

Теперь нам надо при запуске nanoCAD автоматически загружать команду load_userdata_nsf. Тут все просто – создаем текстовый файл «userdata.ini» со следующими строчками:
    ; Регистрация файла с командами при запуске nanoCAD
    [\DefProf\Startup\load_userdata_nsf]


Шаг 2 сделан – нам остается положить в папку, в которую установлен nanoCAD три созданных нами файла: userdata.nsf, userdata.ini и userdata.cfg и запустить программу. Теперь, если вы все сделали правильно, то при запуске в среду nanoCAD будет подгружаться файл userdata.nsf, а вслед за этим регистрироваться новая команда hello. Если в nsf-файле при запуске будет прописано больше команд, то все они будут доступны из командной строки.

Шаг 3. Интеграция скрипт-команд с интерфейсом nanoCAD


За интеграцию команд с интерфейсом nanoCAD отвечает уже знакомый нам файл «userdata.cfg». Этот файл имеет определенную структуру описания – фактически все элементы интерфейса nanoCAD прописаны в файлах с таким расширением. Боюсь, что в рамках статьи я не смогу рассказать все многочисленные варианты и опции этого файла, но минимально-необходимый набор следующий (все команды надо прописывать в файле «userdata.cfg»):

Регистрация меню в nanoCAD

Осуществляется следующим способом:
    [\menu\mycommans] |name=sМои команды
    [\menu\mycommans\hello] |name=sНовая команда HELLO |intername=shello

После этого в nanoCAD появится новый пункт меню Мои команды с одним пунктом меню Новая команда HELLO, которая вызывает команду hello. Добавляя новые строчки, вы будете расширять свой пункт меню командами.

Регистрация панели инструментов в nanoCAD

Осуществляется следующим способом:
    [\toolbars\mycommans] |InitialVisible=f1 |name=sМои команды
    [\toolbars\mycommans\hello] |intername=shello

После этого появится новая панель инструментов Мои команды и на ней одна новая команда hello. Опция InitialVisible отвечает за видимость панели при запуске (f1 – видима, f0 — невидима).

Присвоение команде специализированной иконки

Для того, чтобы у команды появилась своя иконка, вам надо еще раз переопределить команду, указав dll с ресурсами изображения. В частности, вы можете использовать файл newbtns.dll, который устанавливается вместе с nanoCAD (посмотрите с помощью программы ресурс-менеджера зарегистрированные в dll файлы изображений):
    [\configman\commands\hello]
    weight=i30 |cmdtype=i0
    intername=shello
    BitmapDll=snewbtns.dll | icon=sPENCIL


Горячие клавиши

Команду можно вызывать и с помощью горячих клавиш. Для этого необходимо зарегистрировать их на новую команду следующим образом:
    [\Accelerators]
    hello=sCtrl+Shift+1

Теперь нашу простую команду hello можно вызвать через сочетание клавиш Ctrl+Shift+1.

Финальные шаги: особенности регистрации интерфейса


На данный момент любые изменения интерфейса в nanoCAD применяюся только после однократного сброса настроек программы и очистки реестра. Поэтому нам необходимо добавить в userdata.ini следующие строчки:
    [\Configuration]
    ClearRegistry=f1

Теперь, запустив программу через ncad.exe (важно!), мы получим в среде новую команду HELLO, новый пункт меню, новую панель инструментов и горячие клавиши. После обнократного запуска останавливаем сброс настроек, закомментировав строку «ClearRegistry=f1» в файле userdata.ini:
    [\Configuration]
    ;ClearRegistry=f1

Почему важно запускать программу напрямую через ncad.exe? Дело в том, что штатный ярлык программы при запуске проверяет целостность установки программы, и, если мы внесли свои изменения в интерфейс, то ярлык будет стараться восстановить файлы и реестр nanoCAD, запуская установщик Windows. Это не очень удобно, когда вы тренируетесь со скриптами.

Но если ваше приложение оттестировано и зарегистрировано в системе, то в дальнейшем программу можно по-прежнему запускать через ярлык – программа, один раз проверив целостность ключевых файлов, будет запускаться корректно.

Заключение


Итак, мы получили то, что хотели: через три настроечных файла (userdata.nsf, userdata.cfg и userdata.ini) мы получили возможность расширять функционал бесплатной платформы nanoCAD. При этом новые команды добавляются в nsf-файл, а настройки интерфейса – в cfg-файл. Все вместе это увязывает ini-файл.
image
Рис. 2. Интерфейс nanoCAD, настроенный на новые команды.
Команды, которые вы можете использовать в nanoCAD, описаны в справке по ActiveX API – она устанавливается в папку с программой по пути: %product_dir%\help\api\ncX_devguide.chm.

В принципе, ActiveX API предоставляет пользователю огромные возможности – небольшие инструменты автоматизации позволяют обходится без платных приложений, избавляют от рутины и ускоряют работу. На мой взгляд, must have для студентов и настоятельно рекомендуется для опытных САПР-пользователей.

На нашем форуме вы можете скачать демонстрационные файлы userdata.nsf, userdata.cfg и userdata.ini. В этом случае вам не надо создавать эти файлы: можете использовать и редактировать наши.

Кстати, на форуме уже начали появляться полезные команды, которые расширяют функционал nanoCAD: включение\отключение рамки вокруг растра, построение касательных к двум окружностям и т.д. Там же вы можете выложить свои наработки. Приходите-обсуждайте-делитесь и давайте получать удовольствие от проектирования!
Теги:
Хабы:
+11
Комментарии 1
Комментарии Комментарии 1

Публикации

Информация

Сайт
www.nanocad.ru
Дата регистрации
Дата основания
Численность
Неизвестно
Местоположение
Россия