3 - 2015

Создание дистрибутива nanoCAD с пользовательскими настройками

Сергей Спирин
Технический специалист ЗАО «Нанософт»
Денис Ожигин
Директор по развитию ЗАО «Нанософт»

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

Подготовка дистрибутива

Скачиваем необходимый дистрибутив продукта с сайта www.nanocad.ru/products. В качестве примера мы будем работать с дистрибутивом nanoCAD Plus 6 NC60Px32_2434.exe.

С помощью 7­zip распаковываем скачанный exe­файл в произвольную папку (в нашем случае — nanoInstall). После распаковки получаем набор файлов, приведенный на рис. 1.

Рис. 1

Рис. 1

Рис. 2

Рис. 2

Дело в том, что nanoCAD хранит настройки в нескольких файлах, а они расположены в разных директориях. Для правильного развертывания дистрибутива нам необходимо создать в nanoInstall папку LocalEx, где следует создать подкаталоги, приведенные на рис. 2.

После создания дерева папок в nanoinstall необходимо найти и подготовить файлы конфигурации (Settings.xml; AppOptions.xm; CAD.cfg; nCAD.ini и др). Мы можем найти их в архиве nanoCAD.cab
в папке с распакованным дистрибутивом либо в директориях, которые создал nanoCAD, если вы его уже установили.

Мы рекомендуем пойти по второму пути, так как, изменяя файлы конфигурации, мы можем следить за своими результатами, сбрасывая настройки интерфейса nanoCAD.

Подробнее о файлах конфигураций

Существует несколько файлов конфигураций: одни отвечают за интерфейс программы, другие — за элементы оформления, третьи — за общие настройки платформы. Ниже будут представлены все файлы в отдельности. Для лучшего понимания введем обозначения для местоположения файлов:

  • на ПК — место хранения файла предустановленного nanoCAD на вашем компьютере;
  • на инсталляционном диске — путь, куда следует поместить измененные файлы конфигураций по завершении настроек.

Settings.xml 

  • на ПК — C:\ProgramData\Nanosoft\nanoCAD Plus 6.0\DataRO\ru­RU;
  • на инсталляционном диске — nanoInstall \LocalEx\CommonAppData\DataRO\ru­RU.

В этом файле находятся настройки конфигурации программы (добавление/ограничение списка масштабов, предопределенных полей основной надписи формата). На рис. 3 изображен список масштабов оформления, который можно настроить в этом файле.

Чтобы добавить в nanoCAD значение нового масштаба и выбрать масштаб, который будем использовать по умолчанию, нам необходимо найти в Settings.xml и отредактировать уже существующий список масштабов. В xml­файле указаны комментарии, подсказывающие нам назначение параметров.

Добавление своего масштаба в список:

<Scale name=»200:1» val=»200» />

Присваиваем значение по умолчанию масштабу 1:20:

<Scale name=»20:1» val=»20» default=»­1» />

Далее по тексту сопоставлен код списка масштабов (листинг 1) и соответствующий список масштабов в окне nanoCAD (см. рис. 3).

Листинг 1

<dscales unit=»mm» unit_loc=»мм» multiplier = «1»>

<Scale name=”200:1” val=”200” />

<Scale name=”100:1” val=”100” />

<Scale name=”50:1” val=”50” />

<Scale name=”40:1” val=”40” />

<Scale name=”20:1” val=”20” default=”­1” />

<Scale name=”10:1” val=”10” />

<Scale name=”5:1” val=”5” />

<Scale name=”4:1” val=”4” />

<Scale name=”2.5:1” val=”2.5” />

<Scale name=”2:1” val=”2” />

<Scale name=”1:1” val=”1” />

<Scale name=”1:2” val=”0.5” />

<Scale name=”1:2.5” val=”0.4” />

<Scale name=”1:4” val=”0.25” />

<Scale name=”1:5” val=”0.2” />

<Scale name=”1:10” val=”0.1” />

<Scale name=”1:15” />

<Scale name=”1:20” val=”0.05” />

<Scale name=”1:25” val=”0.04” />

<Scale name=”1:40” val=”0.025” />

<Scale name=”1:50” val=”0.02” />

<Scale name=”1:75” />

<Scale name=”1:100” val=”0.01” />

<Scale name=”1:200” val=”0.005” />

<Scale name=”1:400” val=”0.0025” />

<Scale name=”1:500” val=”0.002” />

<Scale name=”1:800” val=”0.00125” />

<Scale name=”1:1000” val=”0.001” />

</dscales>  

Рис. 3. Код нового списка масштабов и настроенный список масштабов

Листинг 2

<section sid=”6002” name=”Универсальная выноска” icon=”102” slide=”5”>

<param id=”6050” name=”Слой” ctrl=”combobox_layer” doc=”1” value=”СИМВОЛЫ”/>

<param id=”6259” name=”Цвет” ctrl=”combobox_color” doc=”1” value=”RGB(100,149,237)”/>

<param id=”6260” name=”Толщина линии” ctrl=”combobox_lineweight” doc=”1” value=”0.3”/>

<param id=”6256” name=”Текстовый стиль” ctrl=”combobox_textstyle” doc=”1” value=”ГОСТ 2.304”/>

<param id=”6051” name=”Цвет текста” ctrl=”combobox_color” doc=”1” value=”RGB(255,255,255)”/>

<param id=”6056” name=”Высота текста” ctrl=”combobox_edit_textheight” symbol=”в” slide=”48” doc=”1” value=”2.5”/>

<param id=”6243” name=”Высота текста обозначения” ctrl=”combobox_edit_textheight” symbol=”в” slide=”48” doc=”1” value=”7.0”/>

<param id=”6057” name=”Отступ текста по горизонтали от края линии” ctrl=”edit_double” symbol=”г” slide=”48” doc=”1” value=”1.5”/>

<param id=”6058” name=”Отступ текста по вертикали от линии” ctrl=”edit_double” symbol=”д” slide=”48” doc=”1” value=”1.0”/>

<param id=”6052” name=”Размер стрелки” ctrl=”edit_double” symbol=”а” slide=”47” doc=”1” value=”3.0”/>

<param id=”6053” name=”Размер открытой стрелки” ctrl=”edit_double” symbol=”а” slide=”47” doc=”1” value=”3.0”/>

<param id=”6054” name=”Размер полустрелки” ctrl=”edit_double” symbol=”а” slide=”47” doc=”1” value=”3.0”/>

<param id=”6055” name=”Размер точки” ctrl=”edit_double” symbol=”б” slide=”47” doc=”1” value=”1.5”/>

<param id=”6257” name=”Размер засечки” ctrl=”edit_double” doc=”1” value=”3.0”/>

<param id=”6258” name=”Толщина засечки” ctrl=”edit_double” doc=”1” value=”0.3”/>

<param id=”6297” name=”Вес текста” ctrl=”combobox_lineweight” doc=”1” hidden=”0” value=”ByObject”/>

</section>

AppOptions.xml 

  • на ПК — C:\Users\User\AppData\Roaming\Nanosoft\nanoCAD Plus 6.0\ru­RU;
  • на инсталляционном диске — nanoInstall\LocalEx\AppData\UserTemplates\ru­RU.

В этом файле хранятся настройки оформления (меню Сервис -> Настройка оформления). Здесь можно настроить типы линий, размеры, выноски, формы и т.д. В качестве примера установим настройки универсальной выноски в профиле СПДС, аналогичные представленным на рис. 4. Здесь мы изменили цвет и толщину линии.

Для изменения выноски через файл AppOptions.xml найдем в нем нужную нам строку Универсальная выноска.

Изменим параметры цвета и толщину линии аналогично рис. 4. По окончании редактирования видим следующее (листинг 2).

Теперь универсальная выноска по умолчанию будет такой, как показано на рис. 5.

Если для вас затруднительно искать нужные параметры в файле, можно просмотреть их последовательность и имена в nanoCAD в окне Настройки оформления.

Рис. 4. Окно настройки универсальной выноски

Рис. 4. Окно настройки универсальной выноски

Рис. 5. Настроенная универсальная выноска

Рис. 5. Настроенная универсальная выноска

myblocks.nsf

  • на ПК — C:\Program Files (x86)\Nanosoft\nanoCAD Plus 6.0;
  • на инсталляционном диске — nanoInstall \LocalEx\Program.

В предыдущей статье (http://goo.gl/qAIPko) мы создали свои команды, которые позволяли вставлять два готовых блока. Теперь мы можем добавить эти команды в наш дистрибутив. Для этого нужно поместить nfs­файл в нужную директорию инсталлятора.

nCAD.cfg и userdata.cfg

  • на ПК — C:\Program Files (x86)\Nanosoft\nanoCAD Plus 6.0;
  • на инсталляционном диске — nanoInstall \LocalEx\Program;

В данном файле хранятся настройки интерфейса платформы. После создания nsf­файла его необходимо подгружать в программу. Ранее для этого мы применяли пункт Загрузка приложений (Сервис -> Приложения -> Загрузка приложениия -> Автозагрузка). Теперь же воспользуемся cfg­файлом: добавим в него следующие строки, которые и будут осуществлять загрузку файла с нашими командами вставки блоков:

Рис. 6. Стандартное правокнопочное меню

Рис. 6. Стандартное правокнопочное меню

Рис. 7. Новое правокнопочное меню

Рис. 7. Новое правокнопочное меню

[\configman\commands\sload_myblocks_nsf]

weight=i30|cmdtype=i0| intername=sload_myblocks_nsf

RealCommandName=snsf

Keyword=smyblocks.nsf^MCloseDocument^MNewDocument^M

В качестве еще одного примера адаптации интерфейса рассмотрим изменение стандартного контекстного меню мыши (рис. 6). Для начала найдем в nCAD Cfg­строки, содержащие в префиксе \ViewPopupMenu\. Выглядят они следующим образом:

\ViewPopupMenu] |Intername=sViewPopupMenu

[\ViewPopupMenu\LastCommand] |intername=sLastCommand1

[\ViewPopupMenu\LastCommandPopup] |name=s&Last commands

[\ViewPopupMenu\LastCommandPopup\LC0] |intername=sLastCommand1

….

[\ViewPopupMenu\Inspector] |name=sP&roperties |intername=sProperties

[\ViewPopupMenu\DrawingExplorer] |name=sDrawing &Explorer |intername=sDrawingExplorer

Стандартное меню нам показалось слишком большим, и мы внесли
в него некоторые изменения, а именно: убрали некоторые команды, другие сгруппировали в выпадающие пункты и добавили несколько новых команд. В итоге у нас получилось следующее (листинг 3).

Настройки нового контекстного меню можно оставить в ncad.cfg, просто сохранив изменения. В примере мы перенесли их в userdata.cfg для простоты поиска и редактирования. Хотим напомнить, что сохранять cfg­файлы следует с кодировкой ANSI. На рис. 7 вы можете видеть результат изменений.

Листинг 2

[\ViewPopupMenu]                               |Intername=sViewPopupMenu

[\ViewPopupMenu\LastCommand]                    |intername=sLastCommand1

[\ViewPopupMenu\LastCommandPopup]                        |name=s&Last commands

[\ViewPopupMenu\LastCommandPopup\LC0]                                |intername=sLastCommand1

[\ViewPopupMenu\LastCommandPopup\LC1]                                |intername=sLastCommand2

[\ViewPopupMenu\LastCommandPopup\LC2]                                |intername=sLastCommand3

[\ViewPopupMenu\LastCommandPopup\LC3]                                |intername=sLastCommand4

[\ViewPopupMenu\LastCommandPopup\LC4]                                |intername=sLastCommand5

[\ViewPopupMenu\LastCommandPopup\LC5]                                |intername=sLastCommand6

[\ViewPopupMenu\LastCommandPopup\LC6]                                |intername=sLastCommand7

[\ViewPopupMenu\LastCommandPopup\LC7]                                |intername=sLastCommand8

[\ViewPopupMenu\LastCommandPopup\LC8]                                |intername=sLastCommand9

[\ViewPopupMenu\sep2]

[\ViewPopupMenu\Undo]                    |name=s&Undo                     |intername=sEditUndo

[\ViewPopupMenu\Redo]                    |name=s&Redo                     |intername=sEditRedo

[\ViewPopupMenu\sep3]

[\ViewPopupMenu\Move]                    |name=sMove object

[\ViewPopupMenu\Move\erase]                          |name=sErase                        |intername=sDelete

[\ViewPopupMenu\Move\MoveCopy]                 |Name=sCop&y                     |InterName=sMoveCopy

[\ViewPopupMenu\Move\Mirror]                         |Name=sMirror                       |InterName=sMirror

[\ViewPopupMenu\Move\Offset]                        |name=sOffset                      |intername=svcOffsetCmd

[\ViewPopupMenu\Move\Array]                          |Name=sArray                        |InterName=sArray

[\ViewPopupMenu\Move\sep4]

[\ViewPopupMenu\Move\MoveObject]                              |Name=sMov&e |InterName=sMove

[\ViewPopupMenu\Move\RotateObject]                            |Name=s&Rotate |InterName=sRotate

[\ViewPopupMenu\Move\sep10]

[\ViewPopupMenu\Move\scale]                          |Name=s&Scale |InterName=sScale

[\ViewPopupMenu\Move\stretch]                       |name=sStretch |intername=sstretch

[\ViewPopupMenu\Move\sep5]

[\ViewPopupMenu\Move\Trim]                           |name=s&Trim Vectors                        |intername=svcTrimByEdgeCmd

[\ViewPopupMenu\Move\smarttrim]                  |name=sSmart &Trim                           |intername=ssmarttrim

[\ViewPopupMenu\Move\Extend]                       |name=s&Extend Vectors                    |intername=svcExpandByEdgeCmd

[\ViewPopupMenu\Move\Break]                         |name=s&Break Vectors                      |intername=svcBreakCmd

[\ViewPopupMenu\Move\Join]                            |name=s&Join objects                         |intername=sJoin

[\ViewPopupMenu\Move\Extend]                       |name=s&Extend Vectors                    |intername=svcExpandByEdgeCmd

[\ViewPopupMenu\Move\Break]                         |name=s&Break Vectors                      |intername=svcBreakCmd

[\ViewPopupMenu\Move\Join]                            |name=s&Join objects                         |intername=sJoin

[\ViewPopupMenu\Clipboard]                            |name=sБуфер обмена

[\ViewPopupMenu\Clipboard\Cut]                     |Name=s&Cut                        |InterName=sCut

[\ViewPopupMenu\Clipboard\Copy]                  |Name=s&Copy                     |InterName=sCopy

[\ViewPopupMenu\Clipboard\CopyWithBasePoint]                        |Name=s&Copy With Base Point                        |InterName=sCopyWithBasePoint

[\ViewPopupMenu\Clipboard\Paste]                  |Name=s&Paste                     |InterName=sPaste

[\ViewPopupMenu\Clipboard\PasteBlock]                        |Name=s&Paste as Block                     |InterName=sPasteBlock

[\ViewPopupMenu\Clipboard\PasteOriginal]    |Name=sPaste to Original Coor&dinates                          |InterName=sPasteOrigin

[\ViewPopupMenu\Isolate] |name=sIsolate

[\ViewPopupMenu\Isolate\IsolateObjects]                        |name=sIsolate &Objects                    |InterName=sIsolateObjects

[\ViewPopupMenu\Isolate\HideObjects]                           |name=sHide Objects                           |InterName=sHideObjects

[\ViewPopupMenu\Isolate\UnisolateObjects]                   |name=sUnisolate Objects                  |InterName=sUnisolateObjects

[\ViewPopupMenu\DisplayOrder]                       |name=sDispla&y Order

[\ViewPopupMenu\DisplayOrder\BringToFront]                              |name=s&Bring to Front                      |InterName=sdraworder1

[\ViewPopupMenu\DisplayOrder\SendToBack]                               |name=s&Send to Back                       |InterName=sdraworder2

[\ViewPopupMenu\DisplayOrder\BringForward]                             |name=sBring &Forward                     |InterName=sdraworder3

[\ViewPopupMenu\DisplayOrder\SendBackward]                           |name=sSend Back&ward                   |InterName=sdraworder4

[\ViewPopupMenu\Select]                   |name=sSelect

[\ViewPopupMenu\Select\selectsimilar]            |name=sSelect similar objects                            |intername=sselectsimilar

[\ViewPopupMenu\Select\SelectAll]                   |name=sSelect Al&l                              |intername=sSelectAll

[\ViewPopupMenu\Select\QuickSelect]                             |name=s&Quick Select                         |intername=sqs

[\ViewPopupMenu\Select\UnSelectAll]                              |name=sUnSelect All                            |intername=sUnSelectAll

[\ViewPopupMenu\sep1]

[\ViewPopupMenu\AddSelected]                       |Name=sAdd Selected                          |InterName=sAddSelected

[\ViewPopupMenu\sep5]

[\ViewPopupMenu\Find]                      |name=sSearch and Replace...                            |intername=sfind

[\ViewPopupMenu\sep4]

[\ViewPopupMenu\Inspector]                             |name=sP&roperties                             |intername=sProperties

[\ViewPopupMenu\preferences]                         |name=sPreferences                             |intername=sPreferencesCmd

nCAD.ini и userdata.ini

на ПК — C:\Program Files (x86)\Nanosoft\nanoCAD Plus 6.0;

на инсталляционном диске — nanoInstall \LocalEx\Program.

В данном файле содержится весь функционал директории платформы Сервис -> Настройки.

Для дальнейшей корректной работы наших новых команд, расположенных в nsf­файле, нам необходимо добавить в userdata.ini строки для загрузки файла при запуске программы.

[\DefProf\Startup\edit_userdata_ini]

[\DefProf\Startup\load_myblocks_nsf]

В качестве другого примера использования этого файла мы добавим в платформу nanoCAD новые стандартные папки и шаблон, который будет использоваться по умолчанию — test.dwt. Шаблон по умолчанию будет находиться на сервере \\Server\Templates\test.dwt.

Создаем текстовый файл с именем userdata.ini и копируем код, представленный ниже (эти параметры вы можете найти и отредактировать непосредственно в nCAD.ini):

[\DefProf\StdDirs]

TemplatesDir=s%AppData%\Templates;\\ServerTemplates

Shx=ss%CommonAppData%\shx;\\Server\shx

PlotConfigsDir=s%AppData%\PlotConfigs;\\Server\PlotConfigs

PlotStylesDir=s%AppData%\PlotStyles;\\Server\PlotStyles

Pat=s%CommonAppData%\shx;\\Server\shx

 

[\DefProf\TemplateDoc]

UseTemplateFile=i1

TemplateName=sTest.dwt

 

[\DefProf\TemplateImport]

UseTemplateFile=i1

TemplateName=sTest.dwt

[\DefProf\StdDirs] — в этом разделе указаны параметры стандартных папок. [\DefProf\TemplateDoc] и [\DefProf\TemplateImport ] — это параметры использования шаблонов для новых и импортированных документов соответственно. На рис. 8 вы можете увидеть результаты произведенных изменений.

Рис. 8. Стандартные папки и использование шаблонов

Рис. 8. Стандартные папки и использование шаблонов

Перенос файлов настроек

По окончании редактирования все вышеперечисленные файлы необходимо поместить в соответствующие директории инсталлятора (nanoinstall). Если вы используете дополнительные файлы (скрипты, lisp и т.д.), их можно поместить в папку Program (nanoInstall\LocalEx\Program\), и они установятся в Program Files в папку продукта.

Выбор сервера лицензий

Перейдем к файлу setup.ini. Он расположен в папке и распаковывается инсталлятором (nanoinstall). В нем можно указать дополнительные параметры установки. Если у вас установлен сервер лицензий, то его адрес вы можете предварительно указать в setup.ini:

[InstallProperties]

FLEXLM_VENDOR_NAME=NANOSOFT

FLEXLM_LICENSE_FILE=@Адрес сервера лицензии

Тихая установка

Чтобы не заполнять множество полей при установке программы, что отнимает много времени и сил, можно воспользоваться следующим приемом. С помощью блокнота необходимо создать новый текстовый файл с расширением .*bat в папке nanoInstall (рис. 9) и указать один из двух параметров установки:

для установки в пассивном режиме (отображение диалога хода установки без участия пользователя) нужно запускать setup.exe i /passive;

для установки в скрытом режиме (для пользователя не будет отображаться даже диалог установки) следует запускать setup.exe /i /quiet.

Настроенный дистрибутив вы можете скачать по ссылке: http://goo.gl/1SWXId. Напомним: чтобы заработали команды вставки блоков, положите папку myblocks в директорию, которую указали в myblocks.nsf.

Рис. 9. Создание bat-файла для запуска инсталлятора

Рис. 9. Создание bat-файла для запуска инсталлятора

Заключение

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

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

Остается отметить, что эта статья будет не только полезна для установки платформы nanoCAD, но и применима к остальным вертикальным решениям на базе nanoCAD. Удачного проектирования!

САПР и графика 3`2015