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

    Год назад я написал статью о том, как использовать скрипты в среде 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: включение\отключение рамки вокруг растра, построение касательных к двум окружностям и т.д. Там же вы можете выложить свои наработки. Приходите-обсуждайте-делитесь и давайте получать удовольствие от проектирования!
    Нанософт
    109,00
    Компания
    Поделиться публикацией

    Похожие публикации

    Комментарии 1

    • НЛО прилетело и опубликовало эту надпись здесь

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

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