Рано или поздно у опытного пользователя появляется необходимость расширить штатный функционал САПР своими скриптами и командами, автоматизирующими каждодневную рутину. Мы регулярно получаем запросы на тему «Как создать свое меню?», «Как зарегистрировать свою команду?», «Как прописать скрипт в среде nanoCAD?». В этой статье мы решили объединить типовые вопросы и подробно продемонстрировать на несложном примере, как пользователь может настроить платформу nanoCAD под себя и сделать ее чуть более функциональной.
В качестве примера возьмем задачку по организации библиотеки *.dwg-файлов — у каждого пользователя за время работы накапливается достаточно материалов, которые в дальнейшем используются как типовые решения: элементы из старых чертежей, базы блоков
Эта статья ориентирована в первую очередь на продвинутых пользователей, системных администраторов и специалистов, не боящихся программирования, — тех, кто уже сейчас хочет автоматизировать и упростить свою работу.
Поскольку в нашем примере мы работаем с отдельными *.dwg-файлами, давайте чуть-чуть проговорим о том, как эти блоки лучше подготовить и где хранить. Понятно, что вы можете использовать собственный набор блоков, а мы в качестве примера будем использовать два *.dwg-файла: BlueCar.dwg и GreenCar.dwg.
Графику блока мы вычертили в нулевых координатах, так как именно нулевая точка будет базовой (точкой вставки) будущего блока. Поэтому ваш блок лучше начинать вычерчивать с координат x=0, у=0. Если блок уже вычерчен, просто размещаем его так, чтобы в координатах 0,0 располагалась удобная с вашей точки зрения точка вставки. См. на рис. 1: слева — расположение автомобиля в файле BlueCar.dwg, справа — блок после вставки с базовой точкой.
Также мы используем правило: один блок — один *.dwg-файл. Это позволит создать на каждый блок отдельную команду вставки.
Далее собираем все блоки в папке MyBlocks, которую либо сохраняем локально на своем диске (мы, например, будем использовать путь C:\MyBlocks\), либо размещаем в локальной сети. В последнем случае библиотекой смогут воспользоваться и ваши коллеги (то есть путь будет примерно таким: \\MYSERVER\MyBlocks\).
Ок, теперь мы готовы оборачивать все это кодом…
Простейший скрипт для вставки блока, написанный на Visual Basic, представлен ниже — нам кажется, что его текст не требует подробных разъяснений. Он просто размещает блок BlueCar.dwg в текущий чертеж — в бездиалоговом режиме по координатам, указанным пользователем:
Dim ms
Dim ut
Dim ptInsert
Set ms = ThisDrawing.ModelSpace REM доступ к пространству Модели текущего документа
Set ut = ThisDrawing.Utility REM доступ к командной строке текущего документа
ptInsert = ut.GetPoint("0,0,0", "Укажите точку вставки") REM запрос к пользователю координат точки вставки блока
ms.InsertBlock ptInsert," C:\MyBlocks\GreenCar.dwg",1,1,1,0 REM вставляем блок в пространство модели
Откуда мы это знаем? Все это описано в стандартном SDK (Software Developer Kit) к nanoCAD; приведенные в скрипте команды — это стандартные API-функции САПР, основанных на *.dwg (рис. 2). Скачать последнюю версию SDK можно на developer.nanocad.ru. Там же можно получить примеры скриптов, выполняющих другие интересные задачи в nanoCAD.
Теперь скрипту по вставке блока надо присвоить имя-команду (чтобы вызывать этот скрипт из командной строки nanoCAD). И сделать это надо для каждого блока: один блок — одна команда. Для этого упакуем наш скрипт в специальный xml, — он зарегистрирует в nanoCAD две новые команды, BlueCar и GreenCar, которые соответственно вставляют BlueCar.dwg и GreenCar.dwg. Возможно, это не самое рациональное решение с точки зрения «правильности» оформления кода, но мы же сейчас не оптимизацией занимаемся, правда? В итоге получаем следующее:
<?xml version="1.0" encoding="utf-8"?>
<package>
<command name="BlueCar" weight="30" cmdtype="1">
<script lang="VBS"><![CDATA[
Dim ms
Dim ut
Dim ptInsert
Set ms = ThisDrawing.ModelSpace
Set ut = ThisDrawing.Utility
ptInsert = ut.GetPoint("0,0,0", "Укажите точку вставки")
ms.InsertBlock ptInsert,"C:\MyBlocks\BlueCar.dwg",1,1,1,0
]]></script>
</command>
<command name="GreenCar" weight="30" cmdtype="1">
<script lang="VBS"><![CDATA[
Dim ms
Dim ut
Dim ptInsert
Set ms = ThisDrawing.ModelSpace
Set ut = ThisDrawing.Utility
ptInsert = ut.GetPoint("0,0,0", "Укажите точку вставки")
ms.InsertBlock ptInsert,"C:\MyBlocks\GreenCar.dwg",1,1,1,0
]]></script>
</command>
</package>
Вроде данный скрипт также не требует пояснений — xml определяет имя команды, а исполняемый код мы помещаем в теги <script>. Сейчас мы не будем подробно расписывать другие параметры *.xml-файла — если вас интересуют подробности, то опять же обратитесь в SDK к платформе nanoCAD (см. Руководство разработчика nanoCAD ActiveX API, раздел «Регистрация скриптов в качестве команд»). Сохраняем xml под именем MyBlocks.nsf и будем использовать его при загрузке nanoCAD. Обращаем ваше внимание, что кодировка сохраненного файла должна совпадать с описанием заголовка *.xml-файла. В нашем случае это UTF-8 — не забудьте выставить эту кодировку при сохранении (рис. 3).
В простейшем случае для использования новых команд через командную строку файл MyBlocks.nsf нужно подгрузить в среду nanoCAD через диалог Загрузка/Выгрузка приложений из меню Сервис/Приложения/Загрузка приложений (рис. 4). И понятно, что файл со скриптами так же, как и блоки, может лежать в локальной сети в общей папке (например, в той же папке с блоками \\MYSERVER\MyBlocks\).
Также рекомендуем положить файл MyBlocks.nsf в автозагрузку — скрипт будет автоматически загружаться при каждом старте программы. При этом если вы хотите прописать файл MyBlocks.nsf в автозагрузку на каждом рабочем месте пользователя автоматически, то вам нужно с помощью доменных политик инициировать реестр nanoCAD по пути HKEY_CURRENT_USER\Software\Nanosoft\nanoCAD Plus\6.0\Profile\Appload\Startup.
А теперь давайте научимся создавать свои пункты меню, горячие клавиши, панели инструментов под наши команды вставки блоков и более тесно интегрируем библиотеку с интерфейсом nanoCAD. Эта интеграция сейчас описывается с помощью *.cfg-файла — обычного текстового файла, имеющего несколько специализированных разделов. Рассмотрим их…
Для того чтобы наши команды «красиво» описывались в командной строке, строке состояния и всплывающих подсказках, добавим к ним более подробную информацию для nanoCAD:
[\configman\commands\BlueCar]
weight=i30 |cmdtype=i0
intername=sBlueCar
DispName=sВставка блока BlueCar
StatusText=sПример вставки блока BlueCar, основанной на VBS
[\configman\commands\GreenCar]
weight=i30 |cmdtype=i0
intername=sGreenCar
DispName=sВставка блока GreenCar
StatusText=sПример вставки блока GreenCar, основанной на VBS
где DispName — описание команды, отображаемое в командной строке, а StatusText — всплывающий текст-подсказка при наведении курсора на иконку на панели инструментов (рис. 5).
Далее создадим выпадающее меню Мои команды, в котором зарегистрируем наши новые команды. Добавим в него подменю с именем Вставка блоков и наши команды BlueCar и GreenCar. Присвоим подпунктам имена — Вставка BlueCar и Вставка GreenCar соответственно:
[\menu\mycommands] |name=sМои команды
[\menu\mycommands\InsertBlock] |name=sВставка блоков
[\menu\mycommands\InsertBlock\BlueCar] |name=sВставка BlueCar |InterName=sBlueCar
[\menu\mycommands\InsertBlock\GreenCar] |name=sВставка GreenCar |intername=sGreenCar
Результат — на рис. 6.
Отлично, мы добавили выпадающее меню с собственными командами! Давайте по аналогии с меню добавим еще и панель инструментов:
[\toolbars\mycommands] |InitialVisible=f1 |name=sМои команды
[\toolbars\mycommands\BlueCar] |intername=sBlueCar
[\toolbars\mycommands\GreenCar] |intername=sGreenCar
[\toolbarspos\mycommands] |DockPosition=sTop |row=i1 |pos=i2
Здесь мы описали свою панель инструментов Мои команды с двумя кнопками, включили ее по умолчанию, а также указали, где по умолчанию эта панель будет отображаться в интерфейсе nanoCAD — вверху во втором ряду третьей.
Теперь добавим панель Мои команды в список панелей инструментов nanoCAD — в штатное место меню Вид/Панели и в контекстное меню:
[\menu\View\toolbars\My_toolbars] |Name=sМои панели
[\menu\View\toolbars\My_toolbars\ShowToolbar_mycommands] |Name=sМои команды |InterName=sShowToolbar_mycommands
[\ToolbarPopupMenu\My_toolbars] |Name=sМои панели
[\ToolbarPopupMenu\My_toolbars\ShowToolbar_mycommands] |Name=sМои команды |InterName=sShowToolbar_mycommands
Плюс нужная функция, которая включает/отключает новую панель инструментов — иначе скроем панель и открыть ее сможем только из диалога Интерфейс:
[\configman\commands\sShowToolbar_MyCommands]
weight=i10 |cmdtype=i0
intername=sShowToolbar_MyCommands
StatusText=sПоказать/скрыть панель Мои команды
ToolTipText=sПоказать/скрыть панель Мои команды
DispName=sПоказать/скрыть панель Мои команды
Теперь наша панель полностью прописалась в интерфейсе nanoCAD — для того чтобы увидеть весь список панелей инструментов, нужно зайти в Настройки интерфейса. А для быстрого включения/отключения нашей новой панели можно зайти в контекстное меню (клик ПКМ на поле панелей инструментов) (рис. 7).
И на финал — для удобства и быстроты использования наших новых команд добавим горячие клавиши. Для синего автомобиля — Ctrl+B, для зеленого — Ctrl+G:
[\Accelerators]
BlueCar=sCtrl+B
GreenCar=sCtrl+G
Результат — на рис. 8.
Завершаем работы с нашим *.cfg-файлом и сохраняем его под именем userdata.сfg. Внимание: при сохранении файла нужно выбрать кодировку ANSI (рис. 9).
Осталось совсем немного — переместить файл userdata.cfg в папку с установленным nanoCAD. Причем очень важно, чтобы файл с настройками интерфейса назывался именно userdata.cfg: дело в том, что все настройки стандартного интерфейса nanoCAD хранятся в файле nCad.cfg и в конце это файла происходит автоматическая подгрузка пользовательского файла настроек userdata.cfg — поэтому в простейшем случае для того чтобы подгрузить настройки пользователя, достаточно положить соответствующий файл в папку к nanoCAD. Если же вы хотите использовать свои файлы, то не забудьте прописать их по аналогии в nCad.cfg (рис. 10).
Кстати, для саморазвития рекомендуем изучить файл nCad.cfg — там полностью описан интерфейс программы nanoCAD и можно найти все приемы описания под свое приложение.
Напоследок нам надо один раз сбросить настройки интерфейса — nanoCAD заново подгрузит описание интерфейса из нашего файла и пропишет его в реестре Windows под текущего пользователя. Поэтому запускаем nanoCAD, заходим в Сервис/Настройка интерфейса/Интерфейс и нажимаем кнопку Сбросить все (рис. 11) — при следующем запуске в среде nanoCAD появятся наши пункты меню, панель инструментов и другие настройки.
Поздравляем! Теперь вы можете наслаждаться новыми возможностями nanoCAD, избавив себя от рутинной работы (рис. 12). Понятно, что сложность скриптов можно увеличивать, поручая им более серьезные задачи, и таким образом существенно расширять возможности платформы nanoCAD, «затачивая» САПР под свои цели.
Напоследок хотелось бы еще раз подчеркнуть, что это лишь один из способов пользовательской организации интерфейса nanoCAD, ориентированный на тех, кто желает заглянуть вглубь. В ближайшее время мы планируем включить в nanoCAD визуальный редактор, позволяющий работать с интерфейсом более дружелюбным по отношению к пользователю способом и совместимый как с *.cfg-, так и *.cuix-файлами. Да и для организации библиотек будет более удобный инструмент, аналогичный инструментальным палитрам AutoCAD. Но вариант, приведенный в нашей статье, удобен тем, что позволяет не просто понять «как все устроено», но и выйти за границы штатных возможностей продукта. Плюс к тому можно попробовать автоматизировать распространение настроек nanoCAD с вашими скриптами по рабочим местам пользователей с помощью (например) доменных политик — мы включили в статью несколько намеков на это.
В общем, мы призываем почитать, проанализировать, а затем самостоятельно поэкспериментировать с полученными знаниями. Попытайтесь создать файлы MyBlocks.nsf и userdata.cfg по инструкциям из нашей статьи или скачайте уже готовые файлы примеров по ссылке https://corp.nanocad.ru/.../NC60DemoScripts.rar, вложите их в папку с установленным nanoCAD, а затем подумайте, как вы можете применить эти знания к своим задачам.
Дополнительно обращаем ваше внимание, что по аналогии вы можете добавить свои настройки в любое вертикальное приложение, построенное на базе nanoCAD. То есть если в диалог Загрузка/Выгрузка приложений добавить файл MyBlocks.nsf, а файл userdata.cfg положить в папку с установленным nanoCAD СПДС или nanoCAD Механика и один раз сбросить интерфейс, то ваши команды появятся и в приложениях!
Удачной автоматизации!