Универсальный маркер – инструмент модуля «СПДС» Платформы nanoCAD, с которым каждый инженер может почувствовать себя программистом и создать объект для автоматизации процесса проектирования.
Самая любимая часть моей работы – общение с инженерами, которые уже работают в Платформе nanoCAD. Как правило, таким пользователям недостаточно работы с примитивами и блоками, и они ищут возможности для автоматизации своей работы и повышения скорости и качества выпускаемых чертежей. Они часто задают вопросы типа: «А есть ли функционал для …?», «А можно ли в nanoCAD сделать так, чтобы…?» и важнейший вопрос: «Как можно автоматизировать свою работу?».
Мой ответ на последний вопрос в отношении Платформы nanoCAD состоит из двух частей. Первая часть – о классических инструментах автоматизации САПР-среды: загрузка приложений, технология полей и т.д. Вторая часть – о средствах автоматизации, которые есть только в nanoCAD: автоматическое извлечение свойств объектов в таблицу nanoCAD (создание отчета), создание взаимосвязи между выноской nanoCAD и данными с объекта.
Если у пользователя nanoCAD активирован модуль «СПДС», то мой ответ, касающийся средств автоматизации, дополняется описанием Мастера объектов и Универсального маркера. Мастер объектов – замысловатый инструмент для создания объектов с «интеллектуальностью». Чтобы его освоить, потребуются навыки программирования. Более доступным и достаточно эффективным для этих целей является инструмент Универсальный маркер.
Чтобы создать свой маркер, навыки программирования не требуются, а конечный результат очень похож на запрограммированный объект, который автоматизирует работу. Освоить Универсальный маркер может каждый пользователь. Основные возможности этого инструмента рассмотрим в этой статье на примере создания маркера помещений для обозначения категории пожаробезопасности.
Наш маркер будет уметь «брать» и «преобразовывать (вычислять)» свойства с другого объекта (СПДС_ПОМЕЩЕНИЕ), у него будет несколько графических представлений (исполнений) и собственное диалоговое окно (пользовательская форма). Мы добавим в него управление с помощью Мастера объектов. Дополнительно создадим таблицу-отчет nanoCAD, в которую автоматически будут попадать данные из нашего маркера. Таким образом, мы всесторонне рассмотрим автоматизацию в среде nanoCAD c модулем «СПСД».
https://www.youtube.com/watch?v=eFga5FJK9kc
Наша работа будет состоять из следующих этапов:
1.Подготовка к созданию маркера.
2. Создание маркера.
3. Добавление исполнений маркера.
4. Заимствование свойства с объекта.
5. Вычисляемые поля в атрибутах.
6.Создание диалогового окна маркера (Пользовательской формы).
7. Использование Мастера объектов для управления "Универсальным маркером".
Проверяем работу "Универсального маркера".
8. Маркер и таблица nanoCAD.
1. Подготовка к созданию маркера
1.1. Для того чтобы комфортно работать в диалоговом окне создания Универсального маркера, необходимо отключить опцию Автоматически переключать раскладку клавиатуры в локальный язык в настройках объектов.
Кода эта опция включена, в диалоговых окнах «СПДС» ввод текста автоматически происходит на языке, который установлен в ОС и не зависит от значений на языковой панели.
1.2. Будущий маркер будет брать свойства из объекта «СПДС_ПОМЕЩЕНИЕ», поэтому нам необходимо заранее разметить этот объект на чертеже.
2. Создание маркера
Отрисуем в чертеже три графических исполнения маркеров, состоящих из примитивов nanoCAD: отрезков, текстов.
Текст, который начинается с символа «$», при распознавании геометрии Универсального маркера автоматически будет распознан как Атрибут Универсального маркера, доступный для редактирования в диалоговых окнах Создание маркера и Редактор форм.
2.1 Вызовем команду SPCREATEUMARKER или нажмем на кнопку Создать маркер.
2.2 Выберем объекты (тексты и примитивы) на чертеже и укажем точку вставки на середине диагональной линии.
2.3 Откроется диалог Создание маркера.
2.4 В строке MarkerType зададим осмысленное имя, которое потом будет отображаться в Базе элементов и на панели Свойства, и описание для всех распознанных атрибутов (текстов с символом $).
2.5 Сохраним маркер в Базу элементов.
Теперь Универсальный маркер доступен для коллективной работы.
3. Добавление исполнений маркера
В диалоговом окне по созданию Универсального маркера нажмем на пиктограмму Добавить исполнение.
3.1. Зададим имя исполнения.
3.2. Выберем графику и назначим точку вставки второго исполнения Универсального маркера.
3.3. Аналогичным способом добавим Исп. 3. Теперь наш маркер имеет три исполнения, содержащих разный набор примитивов и атрибутов на чертеже.
3.4. С помощью мыши разместим атрибуты маркера в нужном порядке.
3.5. Удалить атрибут можно с помощью клавиши Delete на клавиатуре.
3.6. Для добавления атрибутов необходимо установить курсор в строку и нажать на клавиатуре клавишу Insert.
4. Заимствование свойства объекта
Наш маркер будет связан с объектом СПДС_ПОМЕЩЕНИЕ. Для заимствования свойств этого объекта создадим дополнительные поля в маркере: rNumber (Номер помещения), rArea (Площадь помещения с учетом отделки), sVPO (Взрывопожарная и пожарная опасность, ВПО). Новым атрибутам назначим тип – Добавить свойство с объекта.
Связь между атрибутом маркера и свойством объекта может быть четырёх видов:
Приступаем к заимствованию свойств.
4.1. Добавим строку с новым атрибутом и присвоим имя атрибуту rNumber (Номер помещения), далее нажмем на пиктограмму "..." и выберем Добавить свойство с объекта.
4.2. Укажем на объект СПДС_ПОМЕЩЕНИЕ и выберем из списка свойство Номер, по умолчанию связь – односторонняя.
4.3. Добавим атрибут rArea (Площадь помещения с учётом отделки, м2) и укажем свойство Округленная площадь с учетом отделки, м2
объекта СПДС_ПОМЕЩЕНИЕ, связь оставляем односторонней.
4.4. Для атрибута sVPO (ВПО) назначим свойство Категория
объекта СПДС_ПОМЕЩЕНИЕ, связь изменим на двустороннюю.
4.5. Сохраним Универсальный маркер в базу.
Важно! Для пользователей, не имеющих достаточного опыта в создании и редактировании Универсальных маркеров, полезно сохранять промежуточные результаты работы на диск путём экспорта из БД в формате *mcdi. «Откатить» изменения после сохранения в БД – нельзя.
5. Вычисляемые поля в атрибутах
Для того чтобы работать с вычисляемыми полями в Универсальном маркере, необходимы знания несложного синтаксиса конкатенации. Основные символы в вычисляемых полях маркера следующие:
{} – начало и конец вычисления;
+ –прибавление параметра, атрибута;
«» – в кавычки заключается текстовый (строковый) параметр;
Function() (функция / аргумент) – в Универсальном маркере используются те же функции, что и в построителе выражений таблиц nanoCAD; аргументами функций могут быть атрибуты, определённые в маркере.
На примере атрибутов sTr (Температурный режим) и sVr (Влажностный режим) рассмотрим простейшее применение вычисляемых атрибутов.
Для ускорения и оптимизации процесса создадим промежуточные атрибуты sTrField (Температурный режим поля) и sVrField (Влажностный режим поля), которые впоследствии будут заполняться в диалоговом окне маркера и передавать свои данные в поля sTr и sVr, отображаемые в исполнении маркера.
5.1. Атрибутам sTr (Температурный режим) и sVr (Влажностный режим) назначим тип Установить в вычисляемое поле.
5.2. В столбце Значение для атрибута sTr введем {string(sTrField)+"° С"}, для атрибута sVr –{string(sVrField)+"%"}.
5.3. Теперь при вводе в дополнительные поля sTrField, sVrField простых числовых данных в полях, отображаемых на чертеже, мы получим 18° С и 60%.
Важно! Если в столбце Значение вычисляемого атрибута мы введем число, то оно будет числом до тех пор, пока мы не преобразуем его в строку (функция – string).
5.4. Добавим еще один вычисляемый атрибут rAreaInt (Окр. площадь помещения с учётом отделки, м2). Этот атрибут нам необходим в последующем для формирования таблицы-отчета nanoCAD. Выполним округление замеренной площади, полученной из объекта СПДС_ПОМЕЩЕНИЕ в атрибуте маркера rAria: в столбце Значение вводим {int(rArea*100)/100}{", м2"}, где int – это функция, которая обрезает число до целых; *100/100 – арифметические операции, которые позволяют «вернуть» два числа после запятой.
Есть два способа красиво отобразить размерность площади м2:
· копировать (ctrl+C) специальный символ из спецсимволов и вставить (ctrl+V) в поле;
{int(rArea*100)/100}{", м"} и получить в результате
· использовать функцию форматирования текста и управление индексом символов. Этот вариант подходит не только для вставки символов (например, метр квадратный или сантиметр кубический), но и для управления индексом строк целиком. В этом случае достаточно записать выражение вида {FmtText("м",FmtSuper("2"))}, после чего мы получим результат, аналогичный первому варианту.
5.5. Для завершения работы с атрибутами Универсального маркера клавишей Insert добавим атрибут mcDefLayer, который определяет слой, на который будет устанавливаться наш маркер. В диспетчере слоев создадим слой Категория пожароопасности и назначим этому слою атрибут mcDefLayer. Так как свойства Цвет и Тип линии у нас заданы по слою, то при установке Универсального маркера из базы они будут брать свойства с этого слоя. Если такого слоя в файле нет, то после вставки маркера нужно определить эти значения с нужными свойствами или иметь слой из атрибута mcDefLayer в шаблоне файла.
6. Создание диалогового окна маркера (пользовательская форма)
Инструмент Универсальный маркер позволяет создать диалоговое окно, которое в мире программистов называется «Пользовательская форма». В редакторе форм атрибутам маркера можно присвоить различные формы ввода значений и классы элементов управления:
· таблицы, встроенные в редактор маркера;
· таблицы из других универсальных маркеров и параметрических объектов;
· флажок (checkBox);
· переключатель (radioButton);
· поля ввода (editBox);
· Списки и Списки из базы (listBox);
· Поля со списком и Поля со списком из базы (comboBox).
Пользовательская форма – это опциональный инструмент, в большинстве случаев можно обойтись без него, особенно тогда, когда Универсальный маркер берет всю информацию с объекта, проводит нужные вычисления внутри себя, а в чертеж уже попадает нужное графическое обозначение. Однако, как показывает практика, управлять атрибутами Универсального маркера удобней через диалоговое окно или пользовательскую форму.
Редактор форм – простой и удобный инструмент, доступный проектировщику, не обладающему навыками программирования.
6.1. Создадим пользовательскую форму. Для этого перейдем в режим редактирования Универсального маркера и нажмем на кнопку Показать редактор форм.
6.2. В пункте меню Вид проверим, что нам доступны панели Свойства и Переменные.
6.3. В первую очередь разместим в Пользовательской форме элементы управления для атрибутов, которые отображаются на чертежах sVPO (ВПО), sTr (Температурный режим), sVr (Влажностный режим), sClass (Класс пожароопасности).
6.3.1. Из панели Переменные перетащим нужные атрибуты на поле формы.
6.3.2. Обратите внимание на подсказку:
6.3.3. На панели Переменные выделим ВПО (sVPO) и, удерживая клавишу Сtrl, перенесем на поле формы.
6.3.4. Редактируем подпись поля: панель Свойства – Вид – Текст.
6.3.5. Далее на панели Свойства – Основные – Данные нажмем на пиктограмму с тремя точками
и введем список значений в выпадающий список. По окончании ввода нажмем Ctrl+Enter.
6.3.6. Подобным образом создадим элемент управления для переменной sClass.
6.3.7. Добавим нужные поля ввода для переменных sTrField, sVrField и объединим их в Группу
6.4. Не забываем сохранять Универсальный маркер и проверять работу маркера в чертеже.
6.5. Управление исполнениями Универсального маркера в пользовательской форме. Для изменения переменной mcImplementation (Исполнение) на чертеже мы будем использовать элемент управления Переключатель (radioButton).
6.5.1. Нажмем на Переключатель и разместим его в нужном месте поля формы.
6.5.2. Присвоим ему переменную mcImplementation (панель Свойства – Основное – Переменная), зададим нужную подпись Категории (панель Свойства – Вид – Текст) и присвоим Переключателю значение Исп.3 (панель Свойства – Основные – Значение), соответствующее данному типу исполнения маркера, созданному в п.3.3.
6.5.3. Далее можно просто скопировать Переключатель из. п.6.5.2 и, оставив значение переменной mcImplementation, задать нужные значение для подписи (Текст) и исполнения (Значение).
6.5.4. Сохраняем. Проверяем работу маркера. При изменении Переключателя должны меняться исполнения, а при изменении значений в текстовых полях формы – значения на чертеже.
6.6. Использование Рисунков в пользовательской форме.
Рисунки в диалоге могут быть как статичными (простой иллюстрацией с изображением графики и размеров), так и меняющимися в зависимости от выбора того или иного параметра.
6.6.1. Для размещения рисунка в диалоговом окне маркера нужно заранее заготовить картинку в растровом формате – JPG, GIF (формат PNG не поддерживается).
6.6.2. Нажмем на пиктограмму Рисунок и разместим его эскиз на поле формы. Укажем на пиктограмму с тремя точками
(панель Свойства – Вид – Данные) и найдем рисунок на диске компьютера.
(панель Свойства – Вид – Данные) и найдем рисунок на диске компьютера.
6.6.3. Так как у нас три исполнения маркера категории пожаробезопасности, то нам нужны три рисунка. Разместим их на поле формы и, выбрав одновременно все три, снимем флажок с параметра Растягивать.
6.6.4. Дополнительно разместим поля ввода для атрибутов, заимствованных с объекта СПДС_ПОМЕЩЕНИЕ – rNomer (Номер помещения) и rAreaInt (Окр. площадь помещения с учётом отделки, м2). Они носят справочный характер, поэтому запретим их редактирование, сняв флажок с параметра Разрешён (панель Свойства – Вид – Разрешен).
Теперь нам нужно навести порядок, выровняв элементы управления (кроме рисунков) в пользовательской форме. Далее мы перейдем к управлению видимостью рисунков и управлением возможностью редактирования (enabled) полей ввода – Класс пожароопасности, Влажностный режим, Температурный режим.
7. Использование Мастера объектов для управления Универсальным маркером
В данном разделе мы, конечно же, не будем полностью разбираться с работой скрипта и учить язык программирования. Воспользуемся проверенным методом: возьмём готовое решение из другого объекта. Нам нужно использовать часть готового кода и применить его к нашему маркеру категории пожаробезопасности. Ниже пошагово описаны основные действия, которые необходимо повторить.
7.1. Найдем наш маркер в дереве Базы элементов и из контекстного меню выберем опцию Открыть в Мастере объектов.
7.2. В меню дерева найдем раздел Методы, подраздел Пользовательские функции, в контекстном меню выберем опцию Добавить пользовательскую функцию.
7.3. Назовём её onImpl. Внутри фигурных скобок разместим нашу функцию.
7.4. Воспользуемся готовым кодом из другого объекта (Ctr+C и Ctrl+V).
Код для копирования:
function onImpl () { if mcImplementation == "Main" { Form.editbox1.Enabled= TRUE;// Разрешён Form.editbox.Enabled= TRUE; // Разрешён Form.combobox1.Enabled= TRUE; // Разрешён Form.image.Visible= TRUE; // Видим Form.image1.Visible= FALSE; // Скрыт Form.image2.Visible= FALSE; // Скрыт } if mcImplementation == "Исп. 2" { Form.editbox1.Enabled= TRUE; // Разрешён Form.editbox.Enabled= TRUE; // Разрешён Form.combobox1.Enabled= FALSE; Form.image.Visible= FALSE; // Скрыт Form.image1.Visible= TRUE; // Видим Form.image2.Visible= FALSE; // Скрыт } if mcImplementation == "Исп. 3" { Form.editbox1.Enabled= FALSE; // Запрещён Form.editbox.Enabled= FALSE; // Запрещён Form.combobox1.Enabled= FALSE; // Запрещён Form.image.Visible= FALSE; // Скрыт Form.image1.Visible= FALSE; // Скрыт Form.image2.Visible= TRUE; // Видим } }
|
Приведённый код позволит диалоговому окну Универсального маркера Категории пожаробезопасности помещений выполнять следующие условия:
· для исполнения Main – отображается рисунок image, доступны для редактирования (enabled) все поля формы;
· для исполнения Исп. 2 – отображается рисунок image1, запрещено для редактирования поле со списком Класс пожаробезопасности (ComboBox1);
· для исполнения Исп. 3 – отображается рисунок image2, поля ввода Класс пожаробезопасности (ComboBox1), Влажностный режим (editBox) и Температурный режим (editBox1) запрещены для редактирования.
7.5. Далее в Мастере объектов выполним редактирование пользовательской формы.
Выберем три Переключателя (radioButton), управляющих исполнениями Универсального маркера и переменной mcImplementation, назначим им нашу функцию onImpl на событие нажатия (панель Свойства – События).
Диалог Форма1 -на событие открытия (панель Свойства – События).
7.6. Выровняем рисунки в диалоговом окне.
Выберем рисунок image2 и запомним значения для левой верхней точки.
Теперь выберем все три рисунка и введем для левой границы общее значение 300, для верхней границы – 32. Остается только мышкой задать ширину и высоту рисунков и размер диалогового окна (пользовательской формы).
Проверяем работу Универсального маркера
Если вы внимательно следовали инструкции, то все должно работать.
8. Маркер и таблица nanoCAD
Все атрибуты, которые мы ввели в Универсальный маркер, можно вывести в таблицу-отчет nanoCAD. Такая таблица будет автоматически собирать все проставленные маркеры Категории пожаробезопасности помещений с чертежа и позволит управлять атрибутами маркера из ячейки. Приступим к формированию автоматически формируемой таблицы.
8.1. Замаркируем несколько помещений (необходим объект СПДС_ПОМЕЩЕНИЕ) нашим маркером.
8.2. Создадим таблицу nanoCAD нестандартного размера, назовем ее Ведомость помещений по категории пожаробезопасности.
8.3. Вставим в таблицу раздел отчета (Редактор таблиц – Разделы – Вставить раздел отчета) и в фильтре объектов выберем универсальный маркер с именем Категории пожаробезопасности помещений.
8.4. В строке Шаблон отчета выделим ячейку и нажмем правую кнопку мыши, в выпадающем списке отобразятся свойства маркера и его атрибуты. Выберем только те атрибуты, которые необходимы для таблицы.
8.5. Сформируем нехитрое правило группировки и объединения данных в таблице – Объединить строки по А и сортировать по возрастанию.
Таблица-отчет nanoCAD Ведомость помещений по категории пожаробезопасности сформирована.
Примечания
· Редактировать атрибуты Универсального маркера можно как в диалоге маркера, так и на панели Свойства.
· Каждый Универсальный маркер хранит свою геометрию и свойства. Для обновления всех одинаковых маркеров на чертеже нужно зайти в режим редактирования и нажать Применить изменения для всех вставленных маркеров данного типа.
РS: Созданный маркер является учебным примером и, скорее всего, не отвечает нормам и стандартам проектирования.
Советуем прочитать статью про автоматизацию в выносках nanoCAD.
Заключение
Надеюсь, в этой статье получилось продемонстрировать, что Универсальный маркер – это инструмент автоматизации процесса проектирования в среде nanoCAD с модулем «СПДС», доступный каждому пользователю. Зная несложный синтаксис конкатенации в вычисляемых полях, инженер-проектировщик сможет самостоятельно создать и запрограммировать свой умный объект. В комплексе с таблицей nanoCAD Универсальный маркер позволит ускорить процесс составления различных ведомостей и спецификаций.
Татьяна Васькина,
технический специалист
по Платформе nanoCAD
ООО «Нанософт разработка»