Настройка среды nanoCAD для опытных пользователей

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



    В качестве примера возьмем задачку по организации библиотеки .dwg-файлов — у каждого пользователя за время работы накапливается достаточно материалов, которые в последующей работе используются как типовые решения: элементы из старых чертежей, базы блоков и т.д. Мы рассмотрим один из возможных вариантов организации своей библиотеки блоков в среде nanoCAD, и параллельно покажем как зарегистрировать произвольную скрипт-функцию в меню и командной строке. По аналогии вы сможете написать более сложные скрипты и автоматизировать работу по другим направлениям (например, по расчетам, по графическим построениям, по связи с базой данных и т.п.)...

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

    Вступление: подготовка .dwg-файлов

    Т.к. в нашем примере мы работаем с отдельными .dwg-файлами, давайте чуть-чуть проговорим как эти блоки лучше подготовить и где хранить. Понятно, что вы можете использовать свой набор блоков, а мы в качестве примера будем использовать два .dwg-файла: BlueCar.dwg и GreenCar.dwg (можно взять из наших файлов, которые мы приводим в конце статьи).

    Графику блока мы вычертили в нулевых координатах, т.к. именно нулевая точка будет базовой (точкой вставки) будущего блока. Поэтому ваш блок лучше начинать вычерчивать с координат x = 0, у = 0. Если блок уже вычерчен, то просто размещаем его так, чтобы в координатах 0, 0 располагалась удобная с вашей точки зрения точка вставки. Смотрите на примере ниже (рис. 1): слева – расположение автомобиля в файле BlueCar.dwg, справа – блок после вставки с базовой точкой:


    Рис. 1. Вставляемые блоки – в идеале их вычертить в нулевых координатах, чтобы была понятна точка вставки блока.

    Также мы используем правило: один блок – один .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.

    Рис. 2. Документация разработчика nanoCAD подробно описывает все необходимые функции для работы со средой nanoCAD посредством языков C++, .NET, Visual Basic Script, Java Script и LISP.

    Теперь скрипту по вставке блока надо присвоить имя-команду (чтобы вызывать этот скрипт из командной строки 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 определяет имя команды, а исполняемый код мы помещаем в теги
    . Сейчас мы не будем подробно расписывать другие параметры xml-файла – если вас интересуют подробности, то опять же обратитесь в SDK к платформе nanoCAD (см. Руководство разработчика nanoCAD ActiveX API, раздел «Регистрация скриптов в качестве команд»).

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

    Рис.3. При сохранении «MyBlocks.nsf» будьте внимательны с кодировками файла – это важно!

    Добавление и регистрация команд в командной строке nanoCAD

    В простейшем случае, для использования новых команд через командную строку, файл «MyBlocks.nsf» нужно подгрузить в среду nanoCAD через диалог «Загрузка\выгрузка приложений» из меню Сервис\Приложения\Загрузка приложений (рис.4). И понятно, что файл со скриптами также как и блоки может лежать в локальной сети в общей папке (например, в той же папке с блоками \\MYSERVER\MyBlocks\):

    Рис.4. Загрузка своих команд в среду nanoCAD 

    Также рекомендуем файл «MyBlocks.nsf» положить в автозагрузку – скрипт будет автоматически загружаться при каждом старте программы. При этом если вы хотите прописать файл «MyBlocks.nsf» в автозагрузку на каждом рабочем месте пользователя автоматически, то вам нужно с помощью доменных политик инициировать реестр nanoCAD по пути: HKEY_CURRENT_USER\Software\Nanosoft\nanoCAD Plus\6.0\Profile\Appload\Startup.

    А теперь давайте научимся создавать свои пункты меню, горячие клавиши, панели инструментов под наши команды вставки блоков и интегрируем библиотеку с интерфейсом nanoCAD более тесно. Эта интеграция сейчас описывается с помощью CFG-файла – обычного текстового файла, имеющего несколько специализированных разделов. Рассмотрим их…

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

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

    Рис. 5. Все команды, зарегистрированные в nanoCAD, можно «обернуть» дополнительной информацией.

    Регистрация команд в меню Мои команды
    Далее создадим выпадающее меню Мои команды, в котором зарегистрируем наши новые команды. Добавим в него подменю с именем Вставка блоков и наши команды 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:

    Рис. 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).

    Рис. 7.  Управление панелью инструментов.

    Добавление горячих клавиш
    И на финал – для удобства и быстроты использования наших новых команд, добавим горячие клавиши. Для синего автомобиля - Ctrl+B, для зеленого - Ctrl+G:
    [\Accelerators]
    BlueCar=sCtrl+B
    GreenCar=sCtrl+G

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

    Рис. 8. …и назначаем горячие клавиши.

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

    Рис. 9. Сохранение «userdata.сfg» с кодировкой ANSI

    Сброс настроек пользовательского интерфейса nanoCAD

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

    
    Рис. 10. nanoCAD позволяет подгружать любое количество файлов настроек интерфейса – каждый под свою задачу.
    

    Кстати, для саморазвития рекомендуем изучить файл «nCad.cfg» - в нем полностью описан интерфейс программы nanoCAD и там можно найти все приемы описания под свое приложение.

    Напоследок нам надо один раз сбросить настройки интерфейса - nanoCAD заново подгрузить описание интерфейса из нашего файла и пропишет его в реестре Windows под текущего пользователя. Поэтому запускаем nanoCAD, заходим в Сервис > Настройка интерфейса > Интерфейс и нажимаем кнопку Сбросить всё (рис. 11) – при следующем запуске в среде nanoCAD появятся ваши пункты меню, панель инструментов и другие настройки.

    Рис. 11. Для изменения интерфейса надо один раз сбросить настройки nanoCAD через диалог Настройка интерфейса.

    Заключение

    Поздравляем! Теперь вы можете наслаждаться новым возможностями в nanoCAD, избавляя себя от рутинной работы (рис. 12). Понятно, что сложность скриптов можно увеличивать, поручая им более серьезные задачи и таким образом существенно расширять возможности платформы nanoCAD, затачивая САПР под свои цели.

    Рис. 12. Пример работающего приложения в среде nanoCAD со своими командами в меню, на панелях инструментов и командной строке.

    Напоследок хотелось бы еще раз подчеркнуть, что это лишь один из способов пользовательской организации интерфейса nanoCAD, ориентированный на тех, кто желает заглянуть вглубь. В ближайшее время мы планируем включить в nanoCAD визуальный редактор, позволяющий работать с интерфейсом более дружелюбным по отношению к пользователю способом, совместимый как с .cfg-файлами, так и .cuix-файлами. Да и для организации библиотек будет более удобный инструмент аналогичный инструментальным палитрам AutoCAD. Но вариант приведенный в статье удобен тем, что позволяет не просто понять «как все устроено», но и выйди за границы штатных возможностей продукта. Плюс вы можете попробовать автоматизировать распространение настроек nanoCAD с вашими скриптами по рабочим местам пользователей с помощью (например) доменных политик – в статью мы включили несколько намеков на это.

    В общем мы призываем почитать, проанализировать и самостоятельно поэкспериментировать с этими знаниями. Попытайтесь создать файлы «MyBlocks.nsf» и «userdata.cfg» по инструкциям из этой статьи либо скачайте уже готовые файлы примеров по этой ссылке, вложите их в папку с установленным nanoCAD, а затем подумайте как эти знания вы можете применить к своим задачам.

    Дополнительно обращаем ваше внимание, что по аналогии вы можете добавить свои настройки в любое вертикальное приложение, построенное на базе nanoCAD. Т.е. если в диалог Загрузка\Выгрузка приложений добавить файл «MyBlocks.nsf», файл «userdata.cfg» положить в папку с установленным nanoCAD СПДС или Механика и один раз сбросить интерфейс, то ваши команды появятся и в приложениях!

    Удачной автоматизации!

    Сергей Спирин, mahbak
    Денис Ожигин, dows
    ЗАО Нанософт
    • +6
    • 13,3k
    • 3
    Нанософт
    85,00
    Компания
    Поделиться публикацией

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

      +1
      Отлично! Хороший пример и инструмент для адаптации пользовательского интерфейса под свои нужды. Ждем интересных и полезных нововведений.
      • НЛО прилетело и опубликовало эту надпись здесь
          0
          Немного обновил рисунок в шапке, надеюсь внутреннему механику стало легче)

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

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