Год назад в статье, посвященной использованию скриптов в среде nanoCAD на примере перевода
Данная статья продолжает цикл публикаций, связанных с программированием в среде nanoCAD. В частности, пришло время узнать, как вашему скрипту назначить команду и включить ее в интерфейс nanoCAD (пункт меню, кнопка на панели инструментов и сочетания клавиш). Добро пожаловать в мир безграничного программирования под nanoCAD!
Инициализация
Чтобы практически выполнить поставленные задачи, необходимо предварительно предпринять следующие действия:
- установить систему автоматизированного проектирования nanoCAD;
- загрузить любой текстовый редактор для написания скриптов (я использую Notepad++, но вполне можно ограничиться и обычным Блокнотом Windows).
Конечно, вы вправе задать резонный вопрос: «Зачем? Ведь можно все изучить и теоретически!» Однако согласитесь: осваивать новые знания на практике не только продуктивнее, но и гораздо интереснее! Поэтому — поехали…
Собственно интеграция скриптов в среде nanoCAD состоит из трех шагов: регистрация новых команд, загрузка их в среду nanoCAD и привязка к элементам интерфейса. Последний шаг необязателен: вы можете вызывать свои команды непосредственно с командной строки. Рассмотрим каждый шаг подробнее.
Шаг 1. Регистрация команды в nanoCAD
Регистрация новой команды в nanoCAD осуществляется посредством специали зированного
Атрибут «cmdtype» определяет область действия скрипта и может иметь два значения:
0 — скрипт приложения: из скрипта есть доступ к глобальному имени ThisApplication;
1 — скрипт документа: из скрипта есть доступ только к глобальному имени ThisDrawing.
Атрибут «capsdisable» управляет выбором объектов при запуске скрипта:
0 — сохранить селекцию (PickfirstSelectionSet) перед началом команды;
1 — сохранить селекцию после исполнения команды.
Понятно, что имя команды должно быть уникальным — по неосторожности можно переопределить базовые команды платформы. Например, конструкция
<command name="save" weight="30" cmd-type="1" capsdisable="0">
...
</command>
переопределит команду сохранения документа.
В одном
<?xml version="1.0" encoding="utf-8"?>
<package>
<command name="cmd1" weight="30" cmdtype="1" capsdisable="0">
...
</command>
<command name="cmd2" weight="30" cmdtype="1" capsdisable="0">
...
</command>
<command name="cmd3" weight="30" cmdtype="1" capsdisable="0">
...
</command>
...
</package>
Здесь, как вы уже, наверное, поняли, определяются три команды: cmd1, cmd2 и cmd3.
В рамках тегов <command></command> можно располагать еще два тега: <description></description> и <script></script>. Опять же с первым, надеюсь, все понятно: это описание команды. Тег <script></script> определяет язык, на котором написан скрипт: либо VBScript, либо JScript. Например, вот так:
<command name="mycommand"
weight="30" cmdtype="1" capsdisable="0">
<description></description>
<script lang="JScript"><![CDATA[
...здесь расположен код скрипта...
]]></script>
</command>
Обратите внимание на конструкцию <![CDATA[]]>: именно в ней прописывается код скрипта.
Теперь, вооружившись этими знаниями, вы без проблем сможете составить свой первый
<?xml version="1.0" encoding="utf-8"?>
<package>
<command name="hello" weight="30"
cmdtype="1" capsdisable="0">
<description>Классическая программа "Привет, мир!"</description>
<script lang="JScript"><![CDATA[ThisDrawing.Utility.Prompt("Привет, мир!")]]></script>
</command>
</package>
Описанная здесь команда hello выводит в командную строку классическое приветствие. Сохраним этот
Шаг 2. Загрузка файла команд при запуске nanoCAD
Создание команды загрузки 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 для работы
Например, обратите внимание на следующую конструкцию: 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. Если
Шаг 3. Интеграция скрипт-команд с интерфейсом nanoCAD
За интеграцию команд с интерфейсом nanoCAD отвечает уже знакомый нам файл userdata.cfg. Этот файл имеет определенную структуру описания: фактически все элементы интерфейса nanoCAD прописаны в файлах с таким расширением. Боюсь, что в рамках журнальной публикации я не смогу раскрыть все многочисленные варианты и опции этого файла, но минимально необходимый набор
Регистрация меню в nanoCAD
Регистрация меню в nanoCAD осуществляется следующим способом:
[\menu\mycommans] |name=sМои команды
[\menu\mycommans\hello] |name=sНовая команда HELLO |intername=shello
После этого появится новая панель инструментов Мои команды с одной новой командой — hello. Опция InitialVisible отвечает за видимость панели при запуске (f1 — видима, f0 — невидима).
Присвоение команде специализированной иконки
Чтобы у команды появилась своя иконка, вам надо еще раз переопределить команду, указав dll с ресурсами изображения. В частности, вы можете использовать файл newbtns.dll, устанавливаемый вместе с nanoCAD (просмотрите зарегистрированные в dll файлы изображений с помощью любого ресурс-менеджера):
[\configman\commands\hello]
weight=i30 |cmdtype=i0 |CapsDisable = W0xFF
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. При этом новые команды добавляются
Команды, которые вы можете использовать в nanoCAD, описаны в справочном руководстве по ActiveX API, установленном в папку с программой по следующему пути: %product_dir%\help\api\ncX_devguide.chm.
Нельзя не отметить, что ActiveX API предоставляет пользователю огромные возможности: небольшие инструменты автоматизации позволяют обходиться без платных приложений, избавляют от рутинных операций и ускоряют работу. На мой взгляд, это must have для студентов и настоятельно рекомендуется для опытных
На нашем форуме вы можете скачать демонстрационные файлы userdata.nsf, userdata.cfg и userdata.ini2, что избавит вас от необходимости создавать их самостоятельно.
Кстати, на форуме уже начали появляться полезные команды, которые расширяют функционал nanoCAD: включение/отключение рамки вокруг растра, построение касательных к двум окружностям