Рано или поздно у опытного пользователя появляется необходимость расширить штатный функционал САПР своими скриптами и командами, автоматизирующими каждодневную рутину – мы регулярно получаем запросы на тему «как создать свое меню?», «как зарегистрировать свою команду?», «как прописать скрипт в среде nanoCAD?». В этой статье мы решили объединить типовые вопросы и подробно продемонстрировать на несложном примере как пользователь может настроить платформу nanoCAD под себя и сделать ее чуть более функциональной.
В качестве примера возьмем задачку по организации библиотеки .dwg-файлов — у каждого пользователя за время работы накапливается достаточно материалов, которые в последующей работе используются как типовые решения: элементы из старых чертежей, базы блоков и т.д. Мы рассмотрим один из возможных вариантов организации своей библиотеки блоков в среде 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» в текущий чертеж в бездиалоговом режиме по координатам, указанным пользователем:

Откуда мы это знаем? Это все описано в стандартном SDK (Software Developer Kit) к nanoCAD; приведенные в скрипте команды – это стандартные API-функции САПР, основанных на .dwg (см. рис.2). Там же можно получить примеры скриптов, выполняющие другие интересные задачи в nanoCAD.

Теперь скрипту по вставке блока надо присвоить имя-команду (чтобы вызывать этот скрипт из командной строки nanoCAD). И сделать это надо для каждого блока: один блок – одна команда. Для этого упакуем наш скрипт в специальный xml, который зарегистрирует в nanoCAD две новые команды – «BlueCar» и «GreenCar», которые вставляют «BlueCar.dwg» и «GreenCar.dwg», соответственно. Возможно, это не самое рациональное решение с точки зрения «правильности» оформления кода, но мы же сейчас не оптимизацией занимаемся, правда? В итоге получаем следующее:

Вроде данный скрипт также не требует пояснений – xml определяет имя команды, а исполняемый код мы помещаем в теги <script>
. Сейчас мы не будем подробно расписывать другие параметры xml-файла – если вас интересуют подробности, то опять же обратитесь в SDK к платформе nanoCAD (см. Руководство разработчика nanoCAD ActiveX API, раздел «Регистрация скриптов в качестве команд»).
Сохраняем xml под именем «MyBlocks.nsf» и будем использовать его при загрузке nanoCAD. Обращаем ваше внимание, что кодировка сохраненного файла должна совпадать с описанием заголовка xml-файла. В нашем случае это «UTF-8» — не забудьте выставить эту кодировку при сохранении (см. рис.3):

Добавление и регистрация команд в командной строке nanoCAD
В простейшем случае, для использования новых команд через командную строку, файл «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-файла – обычного текстового файла, имеющего несколько специализированных разделов. Рассмотрим их.
Добавляем описания команды запуска скриптов BlueCar и GreenCar
Для того, чтобы наши команды «красиво» описывались в командной строке, строке состояния и всплывающих подсказках, добавим к ним более подробную информацию для nanoCAD:

где DispNamе – описание команды отображаемое в командной строке, а StatusText — всплывающий текст-подсказка при наведении курсора на иконку на панели инструментов (рис.5).

Регистрация команд в меню Мои команды
Далее создадим выпадающее меню Мои команды, в котором зарегистрируем наши новые команды. Добавим в него подменю с именем Вставка блоков и наши команды BlueCar и GreenCar. Присвоим подпунктам имена — Вставка BlueCar и Вставка GreenCar соответственно:

Результат на рисунке 6:

Отображение пользовательской панели инструментов
Отлично, мы добавили выпадающее меню с собственными командами! Давайте по аналогии с меню добавим ещё и панель инструментов:

Здесь мы описали свою панель инструментов «Мои команды» с двумя кнопками, включили ее по умолчанию плюс указали, где по умолчанию эта панель будет отображаться в интерфейсе nanoCAD — вверху во втором ряду третьей.
Теперь добавим панель «Мои команды» в список панелей инструментов nanoCAD: в штатное место меню Вид\Панели и в контекстное меню:

Плюс нужная функция, которая включает\выключает новую панель инструментов — иначе скроем панель и открыть ее сможем только из диалога Интерфейс:

Теперь наша панель полностью прописалась в интерфейсе nanoCAD — для того что бы увидеть весь список Панелей инструментов нужно зайти в Настройки интерфейса. А для быстрого включения/отключения нашей новой панели можно зайди в контекстное меню — клик ПКМ на поле панелей инструментов (рис. 7).

Добавление горячих клавиш
И на финал – для удобства и быстроты использования наших новых команд, добавим горячие клавиши. Для синего автомобиля — Ctrl+B, для зеленого — Ctrl+G:

Результат на рисунке 8:

Завершаем работы с нашим CFG-файлом и сохраняем его под именем «userdata.сfg». Внимание: при сохранение файла нужно выбрать кодировку ANSI (рис.9)

Сброс настроек пользовательского интерфейса nanoCAD
Осталось совсем немного – переместить файл «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» по инструкциям из этой статьи либо скачайте уже готовые файлы примеров по этой ссылке, вложите их в папку с установленным nanoCAD, а затем подумайте как эти знания вы можете применить к своим задачам.
Дополнительно обращаем ваше внимание, что по аналогии вы можете добавить свои настройки в любое вертикальное приложение, построенное на базе nanoCAD. Т.е. если в диалог Загрузка\Выгрузка приложений добавить файл «MyBlocks.nsf», файл «userdata.cfg» положить в папку с установленным nanoCAD СПДС или Механика и один раз сбросить интерфейс, то ваши команды появятся и в приложениях!
Удачной автоматизации!
Сергей Спирин,
Денис Ожигин