Создание нестандартных элементов базы данных для nanoCAD СПДС на примере стеновых панелей
Проработка алгоритма решения задачи
Стандартный элемент базы данных
Разработка нестандартного элемента
Работа диалогового окна с переменными объекта
В этой статье мы рассмотрим пример адаптации программы nanoCAD СПДС версии 2.0 для организации «Проектная мастерская Староверова» и постараемся наглядно показать, как функционал nanoCAD СПДС можно использовать для решения задач автоматизации проектирования, а не только для простого оформления чертежа.
Постановка задачи
«Проектная мастерская Староверова» — российская компания, занимающаяся проектированием, модернизацией и совершенствованием жилых многоквартирных крупнопанельных и монолитных зданий. По этим зданиям организация выполняет весь цикл проектных работ. Приобретая nanoCAD СПДС, мастерская хотела бы, наряду с автоматизацией процессов оформления строительных чертежей, автоматизировать раскладку и специфицирование стеновых панелей. Это наиболее трудоемкая, ключевая задача строительного отдела, для решения которой отдел получил несколько лицензий nanoCAD СПДС.
Организация имеет огромное количество наработок и использует широчайшую номенклатуру стеновых панелей различных типов. Среди основных — внутренние стеновые панели этажные и технического этажа, панели облицовочные, панели технического подполья, а также типовые и укороченные этажные и технического подполья. Отметим, что подавляющее большинство описаний, чертежей и технических характеристик этих панелей было представлено в бумажном виде.
Перед отделом была поставлена задача обеспечить проектировщикам возможность наглядного выбора панелей из базы данных nanoCAD СПДС, разместить панели на чертеже, выполнить маркировку и получить спецификацию.
Проработка алгоритма решения задачи
Первое, с чем пришлось столкнуться, — это неструктурированность и разрозненность документации по описанию панелей. Сотрудниками мастерской была проведена огромная работа по разделению общей массы элементов на отдельные группы и подгруппы со множеством уровней иерархии. Когда стало понятно, по какому принципу создавать структуру базы, удалось сформулировать и критерии отбора из базы в процессе размещения панелей на чертеже. В свою очередь, эти критерии определили внешний вид окна элемента базы данных с соответствующими полями. По готовой форме спецификации и дополнительным условиям ее создания уточнили необходимые дополнительные свойства, которые следовало назначить каждой стеновой панели, чтобы обеспечить правильное формирование табличной формы. На последнем этапе предстояло осуществить маркировку панелей на чертеже. Более подробно решение всех этих задач мы представим ниже.
Стандартный элемент базы данных
В общем случае созданный элемент базы данных nanoCAD СПДС выглядит следующим образом. Прежде всего создается эскиз в масштабе 1:1, который служит прототипом изображения объекта на чертеже. Он соответствует специальным правилам, а его линиям и другим примитивам задаются определенные свойства. Каждая геометрическая величина эскиза должна быть образмерена. Если не предполагается менять величину, указывается обычный размер с полученным значением. Если размер остается величиной переменной, ему назначается соответствующая переменная. Задаются и другие свойства эскиза. Программа nanoCAD СПДС позволяет для каждого элемента базы данных создать несколько исполнений (вариантов), а для каждого из них — до шести видов по всем проекциям соответственно.
Проекции определяются направлением взгляда на объект: вид в плане, слева, сзади, снизу и т.д. Каждой из шести проекций могут назначаться уточнения вида: например, «скрытый вид» или «вид с разрезом». То есть в пределах одного элемента базы мы можем создать несколько исполнений и для каждого указать необходимые плоские проекции, которые можно будет выбирать и вставлять в чертеж. При вставке объекта из базы указываются все его переменные геометрические величины, дополнительные свойства, которые могут войти в спецификацию, и другие атрибуты. Поясним это на стандартном элементе nanoCAD СПДС — фасадной колонне. Пример окна вставки элемента представлен на рис. 1.
Рис. 1. Окно вставки фасадной колонны
В правом нижнем углу показаны проекции единственного исполнения для данной колонны. Щелкнув мышью на соответствующем виде, мы переключаемся на него, а сам вид появляется в окне предварительного просмотра. Перед вставкой вида в чертеж необходимо уточнить параметры, указанные слева. На вкладке табличных параметров задаются значения, определенные таблицами: в отличие от обычных параметров, мы можем только выбрать предопределенные значения, а не ввести произвольные. В подтверждение того факта, что наши стеновые панели были именно нестандартными элементами, остановимся более подробно на вопросе формирования эскизов для объекта.
Каждому виду назначается определенный эскиз, чтобы однозначно отобразить объект в данной проекции. Откроем элемент базы в Мастере объектов и переключимся на раздел определения исполнений. В данном случае имеется единственное «Исполнение 1». При желании его можно переименовать. Для него определены четыре вида. Каждому из видов назначены определенные эскизы. Предварительный просмотр формируется именно по этим эскизам. Визуализацию просмотра вида можно изменить. Если щелчком правой клавиши мыши вызвать контекстное меню, то, указывая на вид, можно выбрать позиции Назначить картинку с объектов или Импорт картинки из графического файла. В первом случае мы формируем картинку с произвольных объектов чертежа, а во втором — из растрового изображения. На рис. 2 показан пример редактирования в Мастере объектов.
Рис. 2. Окно Мастера объектов для элемента «Фасадная колонна»
Разработка нестандартного элемента
В постановке задачи сказано, что проектировщики размещают на чертеже только вид в плане каждой из стеновых панелей. Сначала предполагалось, что задача существенно упрощается. Разделение общей номенклатуры панелей в рамках строгой
иерархии должно было объединить до четырех вариантов панелей в один элемент базы данных. Например, одна панель могла быть представлена в четырех исполнениях: обычная, укороченная слева, укороченная справа и укороченная с обеих сторон. Оставалось только создать эти исполнения в данном объекте базы. Для каждого исполнения достаточно единственного вида в плане, к которому надо добавить несколько дополнительных параметров и свойств, выводимых в спецификацию… Но всё оказалось гораздо сложнее.
Дело в том, что это не четыре варианта одной марки панели, а разные марки четырех различных панелей. Если не производить такого объединения, число элементов базы равнялось бы числу марок панелей, а это неприемлемо для работы с таким количеством элементов. Идеология nanoCAD СПДС предполагает, что один объект базы данных представляет собой одну марку. При изменении исполнения мы меняем только внешние геометрические характеристики объекта, но не его свойства, такие, например, как название марки и объем, которые в нашем случае уникальны для разных исполнений панели. Получается, что, действуя стандартным образом, нет никакой возможности объединить в одном объекте базы несколько марок панелей, хотя, по сути, они являются лишь вариантами одной марки.
Создание нестандартного элемента диктовалось и еще одним требованием заказчика. При переключении между вариантами исполнений (в нашем случае марок) панелей проектировщик должен одновременно видеть вид сбоку, в плане и в разрезе. Эта задача решилась назначением эскизу растрового рисунка предварительного просмотра. В то же время стандартное окно предварительного просмотра невелико и размещается в очень маленькой области диалога — большой и насыщенный чертеж трех видов панели был бы там просто нечитаемым. Эта и ряд других причин привели к мысли создать пользовательский диалог с помощью Редактора форм. Пример готового окна с элементами управления для панели марок Н101, Н101 ук, Н101 уклев и Н101 укпр приведен на рис. 3. При этом все марки фактически являются вариантами марки Н101.
Рис. 3. Диалоговое окно для элемента стеновых панелей марок Н-101
При переключении между названиями марок панелей автоматически меняется рисунок в диалоговом окне, что позволяет проектировщику наглядно оценить выбранную панель в трех видах чертежа. Панели автоматически присваивается объем. Нужно указать только марку бетона, признак несущей панели и принадлежность секции здания, выбрав нужный номер из выпадающего списка. После этого необходимый вид размещается в плане.
Создание эскиза
Следуя концепции nanoCAD СПДС и нашей постановке задач, не было смысла разрабатывать четыре разных эскиза для каждой марки панели, так как переключение между ними в диалоге не привело бы к отслеживанию свойств выбранной марки. Поэтому для всех вариантов следовало разработать один эскиз и научиться управлять им из диалогового окна. На рис. 4 представлен пример эскиза панели.
Рис. 4. Эскиз для стеновой панели
Как видно из рисунка, почти все размеры представляют собой константы. Общая длина определена как переменная Length_panel и будет назначена в программе по указанным значениям в скрипте. Окружность, перечеркнутая двумя отрезками, представляет собой точку вставки панели на чертеж. Она точно позиционирована согласно требованиям к размещению плит на чертеже. Чтобы управлять эскизом из диалогового окна, графическим элементам необходимо присвоить переменные, через которые это управление будет осуществляться. Для нашего варианта оно сводится не к изменению размеров плиты, а к изменению видимости отдельных графических элементов эскиза. Поясним это на конкретном примере. Рис. 5 представляет все четыре варианта (марки) панелей; различаются они только укорачиванием с разных сторон, остальные размеры остаются неизменными.
Рис. 5. Пример отображения в плане вариантов марок Н-101
Вспомогательные красные линии проведены для визуального определения габаритов панелей. Справа указаны марки панелей (в скобках — марки бетона). При установке признака несущей панели появляется штриховка. Таким образом, вся задача сводится к установке переменных, которые отвечали бы за показ или скрытие в диалоговом окне отдельных фрагментов эскиза в зависимости от выбранной марки. Это позволяет нам обойтись единственным и необходимым эскизом для объекта базы данных, представляющим собой четыре марки панели. Рассмотрим параметр одного крайнего левого отрезка эскиза. Диалоговое окно определения параметров показано на рис. 6.
Рис. 6. Свойства графического примитива для эскиза
В поле Отображать указана переменная left_pl, которая получает значение в диалоге. При значении «1» отрезок отображается в эскизе, а при значении «0» — нет. В зависимости от конкретной ситуации каждому примитиву эскиза назначаются одна или несколько переменных, которые отвечают за отображение этого примитива при определенных условиях. Для более сложных случаев в этом окне могут быть прописаны дополнительные параметры — например, тип линии, параметры штриховок и пр. Для отрезка, определяющего ось симметрии, устанавливается параметр Рабочий объект, который скрывает ось на чертеже. Для разных вариантов панелей были разработаны свои эскизы и алгоритмы их отрисовки, но в любом случае для каждого объекта базы данных создается один эскиз. Теперь посмотрим, как осуществляется в диалоговом окне управление переменными.
Работа диалогового окна с переменными объекта
Работой формы или диалогового окна управляет скрипт, то есть фактически код программы, по которой работает объект базы данных. В простейших случаях он формируется автоматически при помощи Мастера скриптов. С помощью этого инструмента пользователь проходит пошаговую процедуру определения всех необходимых переменных и многих других свойств объекта. Рис. 7 демонстрирует пример диалогового окна Мастера скриптов на шаге определения переменных. В левом окне отображается список переменных. Свойства активной переменной, на которую указывает курсор, показаны в центре, а внизу генерируется текст скрипта.
Рис. 7. Окно Мастера скриптов на шаге свойств переменных
Пройдя все этапы, пользователь получает готовый объект. В окне Мастера объектов видны назначенные переменные, необходимые для построения объекта. На рис. 8 активировано отображение табличных переменных, свойства которых назначаются при перемещении по строкам таблицы. Иными словами, когда в окне диалога мы переходим между наименованиями марок панелей, меняются все соответствующие свойства панели, находящиеся в данной строке таблицы.
Рис. 8. Окно Мастера объектов с табличными переменными
В этом и заключается нестандартность решения, которое обычно не используется в простых объектах. Другие переменные могут быть открытыми и защищенными, они назначаются в тексте скрипта. Если переменная имеет одно и то же значение независимо от марки панели, ей можно назначить постоянное значение. Для панели это может быть, например, способ наружной отделки или принадлежность к альбому чертежей. Эти свойства мы позже увидим в спецификации, но назначаются они также в скрипте, а хранятся в объекте на чертеже. В нашем нестандартном случае Мастер скриптов может помочь формированием переменных, но не диалогового окна. В общем случае можно с самого начала писать скрипт самостоятельно, без мастера, однако гораздо проще сделать заготовку и потом корректировать ее в текстовом режиме.
Для размещения в диалоговом окне расширенного набора элементов управления (например, выпадающих списков, таблиц с переменными, переключателей и т.д.) необходима пользовательская форма. В отличие от стандартной формы, которая генерируется с помощью скрипта без участия пользователя, пользовательская создается при помощи Редактора формы. Пример окна этого редактора показан на рис. 9.
Рис. 9. Окно Редактора формы для стеновой панели
Редактор формы очень похож на многие редакторы из языков объектного программирования. С помощью панелей инструментов, расположенных в верхней части, добавляются элементы управления. Нужную позицию из окна Переменные можно перетаскивать на поле формы, выбирая при этом тип элемента управления, которому эта переменная будет присвоена. Активируя проставленный элемент, можно управлять им через окно свойств элемента. Чтобы заменить стандартную форму при вызове объекта из пользовательской базы, необходимо прописать дополнительную команду в скрипте и закомментировать вызов стандартной формы. Сугубо технические подробности мы опустим, отметив при этом, что решение более сложных задач при создании нетривиальных объектов требует (в плане их поведения и описания) некоторого вмешательства в текст скрипта. Таким образом, мы описали необходимые переменные и определили их в процессе простановки элемента на чертеж. Все значения сохраняются в объекте и могут быть в любой момент изменены при двойном клике через вызов диалогового окна. Это придает работе определенную гибкость, когда требуется без переотрисовки внести изменения в объект базы данных nanoCAD СПДС.
Создание спецификации
Любая табличная форма в nanoCAD СПДС создается при помощи расширенного Редактора таблиц. Пример табличного редактора со спецификацией наружных стеновых панелей продемонстрирован на рис. 10.
Рис. 10. Редактор таблиц
Подробно останавливаться на функционале редактора мы не будем. Графическое форматирование ячеек напоминает работу в приложениях Microsoft Office. Несложными манипуляциями создается форма спецификации с наименованиями столбцов и заголовками. Подробнее следует описать связывание графических данных со спецификацией. Сама спецификация в общем виде состоит из двух составляющих — данных и отчета. Данные представляют собой значения, введенные пользователем в режиме редактирования таблицы. Отчет — это вывод определенных свойств из графических объектов, прикрепленных к табличной форме. Для нашей задачи необходимо прикрепить к спецификации стеновые панели и вывести ряд их свойств в определенные колонки таблицы. Рассмотрим механизм связывания графических данных и табличных форм более подробно. В табличном редакторе создается раздел отчета — область, где будут выведены свойства проставленных на чертеж панелей. Эта область будет располагаться ниже области данных, где мы описываем наименования столбцов и заголовок таблицы. На рис. 10 она описывается шаблоном отчета, а сами данные видны ниже, в области отчета. При создании раздела отчета в таблице сам шаблон отчета остается пустым. При выборе функции связывания объектов и таблицы появляется форма, которая называется Быстрый выбор. Она представлена на рис. 11.
Рис. 11. Окно быстрого выбора для отбора объектов чертежа
Объекты базы данных nanoCAD СПДС представляются как объекты типа «Стандартная деталь». Необходимо среди всего множества выбрать именно эту позицию. Чтобы уточнить, какие именно объекты попадают в спецификацию, существует возможность ограничить область поиска объектов, а также отфильтровать их по свойствам. Напротив нужного свойства можно выбрать логический оператор из выпадающего списка колонки Условие. На рис. 11 эта возможность показана для свойства Имя. После этого в колонке Значение будут предложены варианты, найденные на чертеже. Таким образом, nanoCAD СПДС позволяет очень гибко контролировать область поиска объектов, их тип и свойства для связи со спецификацией. В нашем примере в спецификацию попадут все панели, не содержащие в названии марки обозначение «В», так как это спецификация только для наружных панелей. nanoCAD СПДС позволяет в пределах одной выборки отбирать несколько типов различных объектов. После задания необходимых условий можно выбрать еще один тип объекта в этом же окне, а также сохранить условия фильтрации в шаблонах.
После назначения объектов остается только распределить свойства объектов по столбцам спецификации, где они будут выводиться на чертеж. Для этого достаточно вызвать контекстное меню на нужной ячейке шаблона отчета. На рис. 12 показан фрагмент меню с рядом свойств стеновых панелей, прикрепленных к таблице. Для данной колонки выберем номер по проекту.
Рис. 12. Выбор свойств прикрепленных объектов из контекстного меню
nanoCAD СПДС позволяет не только гибко настроить табличную форму любой сложности, но и вывести произвольные свойства прикрепленных к таблице объектов, осуществив предварительную фильтрацию по свойствам. Дальнейшая обработка данных позволяет объединять и группировать строки спецификации. В постановке задачи указывалось, что идентичные марки панелей должны иметь уникальный номер по проекту. Это возможно только при группировке строк с одинаковыми марками. Все одинаковые марки панелей собираются в одну строку спецификации, после чего им можно назначить единый номер по проекту. Он присваивается проектировщиком после расстановки панелей на планах. В свойствах раздела отчета вызывается функция Группировке и объединение. Пример диалогового окна для нее можно видеть на рис. 13.
Рис. 13. Группирование и объединение данных в таблице
Принцип работы очень прост. Сначала данные сортируются по возрастанию значений в колонке «А». Колонка «А» содержит номера по проекту. Затем мы группируем строки по колонке «В» без сортировки. Это и есть соединение всех идентичных панелей в одну строку, так как колонка «В» содержит в себе полное название панели по альбому. Это название складывается из марки панели и марки бетона: например, «Н200 уклев (20)». Здесь мы видим еще одну возможность nanoCAD СПДС — объединять два свойства объекта в одно значение. Отметим также, что в ячейках таблицы nanoCAD СПДС можно прописывать целые выражения — как математические, так и логические. Например, при подсчете количества панелей, принадлежащих определенной секции здания, в указанных ячейках суммируются только те панели, у которых в свойствах прописан соответствующий номер секции. Этот процесс обеспечивается логическим выражением. В итоговой колонке «Всего» подсчитывается общее количество панелей по всем секциям для данной марки. В остальных колонках выводятся другие свойства панелей. На рис. 14 показан пример спецификации для наружных стеновых панелей по трем секциям здания. В готовом шаблоне заложено максимальное количество секций — 15. При размещении спецификации ненужные колонки можно скрыть. Это позволяет применять единый шаблон таблицы для любого количества секций.
Рис. 14. Пример спецификации наружных стеновых панелей
Маркировка панелей на чертеже
После простановки панелей и создания спецификации остается решить задачу маркировки стеновых панелей и присвоения индивидуального номера по проекту идентичным панелям, у которых совпадают марки и класс бетона. В нашей спецификации такие панели объединены в одну строку по позиции «Название по альбому». В базе данных nanoCAD СПДС есть стандартные маркеры, с помощью которых можно вывести определенные свойства или присвоить порядковые номера каждому объекту, а также выполнить ряд других операций. Для нашего случая опять получился нестандартный вариант, что существенно осложнило разработку маркера. В постановке задачи говорилось, что при отсутствии номера по проекту маркер должен отображать название панели по альбому. Заказчик пожелал предоставить возможность произвольно назначать номера по проекту самому проектировщику, хотя и эту функцию можно было бы автоматизировать. А для визуального определения панели на чертеже проектировщику необходимо видеть название панели по альбому. Напомним, что это соединение наименования марки и класса бетона. При назначении номера маркер должен был отображать этот номер без перестановки самого маркера, то есть менять свое значение динамически. С привлечением логических выражений в свойствах маркера всё это вполне под силу nanoCAD СПДС. На рис. 15 представлено окно с описанием атрибутов маркера.
Рис. 15. Окно свойств маркера
Маркер назначается каждой панели индивидуально. Он берет значения номера по проекту, марки панели и марки бетона. Логическое выражение присваивает маркеру значение названия по альбому (марка и бетон) при отсутствии номера по проекту или сам номер при его назначении данной панели. Верно и обратное: если убрать номер, название по альбому возвращается, что очень удобно при необходимости изменить ошибочно назначенные номера. Присвоение номеров по проекту осуществляется через свойства панелей. Для выбора всех панелей на чертеже по определенным критериям используется фильтр, аналогичный показанному на рис. 11 фильтру для связывания объектов и спецификации. После назначения номеров они динамически отображаются в маркерах и соответствующей строке спецификации.
Резюме
Анализируя итоги проделанной работы, можно с уверенностью сказать, что nanoCAD СПДС способен решать задачи гораздо более широкие, чем простая автоматизация оформления чертежа. Как мы убедились, можно создать объект базы данных, которому при простановке на чертеж задаются произвольные свойства. Проектировщику наглядно представляется вся информация об объекте, и он может однозначно определить необходимую панель из базы. После простановки всегда есть возможность поменять свойства панели без ее переотрисовки. Маркировка способствует визуальному определению объектов на чертеже, так как по схематичному отображению в плане понять марку панели невозможно. Спецификация автоматически подсчитывает количество панелей по секциям и в целом в пределах одной строки. Она может быть динамически связана с данными на чертеже и никогда не потеряет актуальности. На рис. 16 приведен пример фрагмента чертежа с тремя проставленными панелями (обозначены синим) и окном редактирования одной из них.
Рис. 16. Пример фрагмента чертежа с размещением панелей
Решение подобной локальной задачи показывает, что разработка собственной базы данных может существенно повысить уровень автоматизации в строительной компании, исключив при этом необходимость закупки дорогостоящего специализированного софта. В свою очередь это дает существенный выигрыш в производительности и качестве подготовки проектной документации.