Вам нравится заголовок? Мне тоже, красота ведь?)... В 2016 году, когда BIM Академия была ещё молодой, а трава во дворе зеленее, казалось, что мы можем всё, и где-то у нас получилось даже больше, чем тогда казалось, но вот одну штуку мы не то, что не реализовали, а даже и не подступились к этой задаче - наш собственный прекрасный BIM с блэкджеком и... и тот, что убьёт Revit. Тогда уже было понятно, что на Renga надежды нет, новые идеи в этой программе появлялись только технические и на уровне инструментов, но их было не много. В целом, Renga выглядела, работала, ощущалось, как вполне стандартный BIM с сырым функционалом и без чего-то революционного, такой продукт совершенно точно был обречён на существование в секторе случайных покупок (ну то есть, когда покупатели просто не разобрались в предложениях на рынке и взяли то, что подвернулось), как в своё время были обречены клоны Autocad. И, видимо, под впечатлением от этой ситуации мы задумались о том, что может стоит сделать что-то своё, задумались совсем не надолго и идею эту не развивали, но я успел тогда набросать мысли на бумагу, а тут мне подвернулся файлик с этими мыслями при разборе архива, и там, как оказалось, есть много прикольного. Ну то есть оно всё супер наивно, и это ни разу не ТЗ на продукт и не нормальное его описание, а именно что набор хаотично записанных идей, противоречащих друг другу и законам физики, но всё равно перечитать мне было интересно. В общем, я решил и с вами поделиться, всё равно никто никогда это не реализует, тем более без моей головы, в которой хоть как-то этот хаос склеен в логическую взаимосвязанную последовательность. Итак, шёл 2016 год (дальнейший текст без правок скопирован из найденных архивов)...
Project (рабочее название проекта)
1. Базовые принципы работы программы (База данных, Архив проекта, Модели)
Проект представляет собой базу данных, сформированную в 3D пространстве в момент начала проектирования. Эта база содержит всю информацию об элементах проекта и их положении относительно общей системы координат. При создании базы данных в 3D пространстве размечаются именованные укрупненные зоны между уровнями и осями проекта (эти зоны могут соответствовать зданиям, блокам или пожарным отсекам внутри проекта), далее программа автоматически делит укрупненные зоны на более мелкие части. Внутри базы данных необходимо также предварительно создать сами объекты осей и уровней (оси и уровни являются «общими объектами» см. далее). Укрупненные зоны могут создаваться графически, через формирование 3D фигур.
Из базы данных генерируются модели, это можно сделать на любом этапе проекта. Файл модели генерируется посредством запроса к базе данных от пользователя. В запросе указывается сектор генерации (промежуток между осями и уровнями, можно указать его графически с помощью 3D фигуры) и категории объектов, которые должны быть размещены в модели из тех, что уже присутствуют в базе данных (например, были сгенерированы в других моделях и находятся при этом в запрашиваемом секторе), также в файл модели автоматически переносятся общие объекты (таковыми по умолчанию считаются оси и уровни, другим объектам можно присвоить значение «общий» вручную) . Файл модели может быть постоянным или временным. К постоянной модели прикрепляется запрос на её создание, который впоследствии можно редактировать, тем самым изменяя модель. Если в базе данных в какой-то момент времени появляется элемент, удовлетворяющий запросу постоянной модели, то он автоматически переносится в эту модель. Важно заметить, что может существовать несколько аналогичных моделей, созданных разными пользователями, такие модели-аналоги можно легко генерировать через шаблоны запросов. Файл модели привязан к пользователю, это означает, что в одном файле работает единственный пользователь и только он ответственен за элементы, внесенные в базу через этот файл. Файлы модели содержат исключительно 3D модель и ее проекции (не содержат листов и других графических материалов). В файле модели ведется работа по наполнению проекта новыми элементами и редактированию старых. Любой элемент создается и редактируется в режиме эскиза (режим эскиза - это состояние, в котором находится элемент, программа автоматически определяет принадлежность элемента к данному состоянию), то есть при создании или редактировании элемента программа автоматически проверяет сектор в базе данных, куда вносятся изменения, и в случае, если элемент размещается корректно, записывает изменения в базу данных, если же элемент размещен некорректно (например пересекается с другим элементом или попадает в зону влияния другого элемента), программа графически подсветит его, тем самым дав понять пользователю, что элемент так и остался в режиме эскиза и не переведен в базу данных. Тем не менее пользователь не обязан мгновенно реагировать на подобную ситуацию, элементы в режиме эскиза никуда не исчезнут и останутся в модели, до тех пор, пока не будет устранено противоречие с базой данных. Пользователь в любой момент может просмотреть список элементов, находящихся в режиме эскиза в модели, и узнать (из предоставленного описания) в чём заключается противоречие с базой (если противоречие устранено, элемент записывается в базу). У администратора базы данных есть возможность устанавливать дополнительные правила, согласно которым элементы модели могут быть оставлены в режиме эскиза, например, правила по именованию элементов, по наполнению их параметрами, правила дополнительной проверки (когда элементы той или иной категории или из определенной модели должны быть проверены определенными пользователями, чтобы попасть в базу данных) и т. д.
Объект или элемент модели - базовая единица добавляемая в модель пользователем, например конкретное окно или стена здания
Общие объекты – объекты, автоматически появляющиеся в файле модели при ее генерации без упоминания в запросе, однако, общие объекты при этом должны находиться в запрашиваемом секторе. Такие объекты, как оси и уровни по умолчанию являются общими. Также рекомендуется задать это свойство для помещений.
Категория объектов\элементов модели – базовый класс, определяющий поведение и свойства элементов модели. в Project существуют стандартные категории для таких объектов, как оси, уровни, помещения, стены, трубы, перекрытия и многих других, но также существует конструктор категорий, через который пользователь может определять собственные категории.
Листы и спецификации – листы и спецификации не хранятся в базе данных, они находятся в отдельном хранилище, называемом архивом проекта. Чтобы создать лист необходимо запросить существующую проекцию (или несколько проекций) из любой постоянной модели. Также можно создать пустой лист. На листах автоматически отслеживаются и подсвечиваются расхождения с базой данных. Лист может быть обновлен по информации из базы или модели, при этом старая версия листа не исчезает, а также остается в архиве. Для создания спецификации необходимо обратиться к базе данных с запросом (запрос аналогичен тому, который формируется при создании модели). Спецификация может быть добавлена на лист. Модуль формирования листов и спецификаций может быть установлен отдельно, без других частей программы. В этом случае он будет служить средством просмотра архива, редактирования оформления, а также для создания замечаний.
Архив проекта – см. выше.
Замечания – особый объект, создающийся на листах, который автоматически переносится в проекционные и 3D виды моделей и генерирует извещения для пользователей. Создатель замечания может назначить ответственного исполнителя и установить срок устранения.
Шаблоны запросов – для запросов на формирование моделей или спецификаций можно формировать шаблоны.
Элементы-призраки – при работе в модели, пользователь может добавить в свою модель элементы из базы, которые хочет видеть, но не хочет или не может редактировать. Появление призраков в модели может быть также настроено динамическим образом, например, они могут появляться при выделении помещения (в качестве призраков появляются сопоставленные с помещением объекты) или при возникновении пересечения (в качестве призрака появляется объект, с который пересекается только что созданный или только что отредактированный объект). Пользователь может выделить элемент-призрак и добавить его в свою модель, если имеет на это соответствующие права. Также пользователь может убирать элементы из своей модели. Некоторые категории объектов, могут взаимодействовать с призраками, изменяя их, например, окно может быть вставлено в призрак стены, а труба может соединиться с призраком другой трубы.
Разграничение прав – администратор базы может раздавать права доступа к ней для разных пользователей. Например, нет никакого смысла давать права на редактирование конструкторских категорий объектов архитекторам и наоборот. Для категорий также можно настраивать раздельное использование, когда часть пользователей имеет права на изменение свойств элемента внутри категории, а другая часть обладает правами на изменение других его свойств. Если пользователь не обладает правами на редактирование элемента, он, тем не менее, может добавить этот элемент в свою модель в качестве призрака. Если один и тот же элемент добавлен в несколько моделей, то внутри базы записывается специальный параметр, сообщающий программе об этом, и при изменении элемента в одной из моделей, база посылает эти изменения в другие модели. Пользователь может настроить для себя уведомления о таких изменениях, уведомления можно фильтровать, например, по категориям элементов или по определенным зонам модели.
Партисипация объектов – свойство трехмерных элементов модели, означающие, что любой элемент может быть представлен не целиком, а только частично. Например, стена может быть сопоставлена с двумя помещениями, и, на самом деле, программа сопоставляет с помещениями не стену целиком, а только определенные ее части, что может быть важно, например, при создании ведомости отделки.
Работа в облаке – необходимо предусмотреть возможность размещения Базы и Архива в приватном облаке, для организации работы нескольких компаний внутри одного проекта.
Общие Параметры – настраиваются администратором и хранятся в базе данных. Могут иметь значения по умолчанию. Такие параметры могут соотноситься с определенными категориями. Элементы базы данных автоматически наделяются общими параметрами. Общие параметры графически выделены среди остальных параметров, присвоенных элементу.
Экспорт\Импорт настроек базы данных – настройки базы данных (общие параметры, категории, общие объекты…) могут быть экспортированы в другую базу данных. Это может быть удобно в начале нового проекта.
Горизонтальные зависимости – в Project осуществлена концепция установления зависимостей между элементами разных категорий. Проще всего это объяснить на следующем примере: если дверь размещается в помещение, которое является сан.узлом, то эта дверь автоматически принимает определенные заранее размеры и свойства. Все горизонтальные зависимости прописываются внутри базы и влияют на все модели проекта. Тем не менее в программе присутствует возможность исключить элемент из горизонтальной зависимости – это делается вручную и только определенными администратором пользователями или категориями пользователей.
2. Интерфейс
Адаптивный интерфейс – большинство инструментов для моделирования и редактирования должны появляется на экране только в тот момент, когда они необходимы. Ссылка на пример:
https://www.facebook.com/vectary3d/videos/1608367956052338/
Естественный интерфейс – многие инструменты вообще не должны быть заключены в кнопки или команды. Сейчас это реализовано в Sketchup, где, например, чтобы выдавить грань, достаточно просто выделить её и потянуть, не используя какие-либо специальные команды и не нажимая кнопки.
Внутренний чат – в программе должен быть встроенный внутренний чат, с иерархией пользователей и с возможностью выдавать задания со сроками и назначением исполнителей. Такие задания и задания, пришедшие из замечаний, хранятся в сводной таблице архива, через которую можно просмотреть их состояние и историю. В чате также должна быть возможность ссылаться на элементы базы данных и листы/спецификации архива.
3. Моделирование
(лирическое отступление: одна из основных проблем современных BIM программ в том, что разработчикам необходимо продумать инструменты моделирования для тысяч разнородных объектов таких, как стены, окна, арматура, 2D аннотации… - все эти объекты моделируются по-разному и оказывают воздействия на соседние элементы модели по-разному (или наоборот воспринимают воздействие от соседних элементов), но самая большая проблема в том, что разработчики должны описать новый объект перед тем, как добавить его в программу, то есть если в BIM программе нет инструмента “нарисовать кабельный лоток”, то пользователь и не сможет его нарисовать, пока разработчики не добавят такую функцию, при этом очевидно, что все возможные компоненты здания описать таким образом нельзя. В отличие от BIM программ, тот же Autocad оперирует простыми объектами (линиями), из которых можно построить всё, что угодно, поэтому пользователи фактически всегда остаются удовлетворенными функционалом таких простых CAD программ. Вывод: BIM программы должны также оперировать на низшем уровне простыми объектами)
Project - программа, разработанная для компьютеров и других устройств с сенсорным экраном (на первом этапе, потом могут быть добавлены дополнительные интерфейсы моделирования, например VR интерфейс). Пользователь размещает объекты, рисуя линии на экране, после отрисовки линии её размеры могут быть уточнены, также временные размеры и привязки видны в процессе рисования. Само рисование происходит следующим образом:
Этап 1:
Выбирается категория, в зависимости от которой будущему объекту назначаются базовые параметры, наиболее часто используемые категории вынесены на кнопки на панели инструментов (можно редактировать эту панель), и нажатие такой кнопки запускает процесс моделирования (категории также могут быть созданы самим пользователем (см. конструктор категорий), и он волен изменять базовые наборы параметров для стандартных категорий (если обладает соответствующими правами), вместе с категорией объекту автоматически назначается базовый профиль (не всегда, это зависит от настроек категории) или несколько профилей, которые пользователь может заменить перед началом рисования на любые другие, или нарисовать нестандартный профиль. Также внутри категории заранее определен метод рисования (пользователь может изменить и его перед началом рисования).
Профиль рисования - базовый элемент рисования, масштабируемый по любой из осей с помощью параметров или графически (в том числе после применения и, в том числе, различным образом на одном и том же объекте, но в разных его местах, что позволит создавать сложные формы и структуры). помимо масштабирования профиль может иметь и другие характеристики и параметры. профилем может служить замкнутая полилиния, не замкнутая полилиния, кривая, планарная поверхность с отверстием посередине… профилем также может выступать готовый не примитивный объект (или даже несколько объектов), например, целое окно или другой компонент здания, в таком случае создаваемый элемент будет состоять из других ранее созданных элементов.
Существуют следующие методы рисования (список может быть расширен):
- рисование пути или системы путей (наборы соединенных, в том числе разветвляющихся линий), к которым автоматически применяется профиль (подходит для таких объектов, как карнизы, лестницы, арматурные стержни, балки, колонны, дороги...), если путь представляет собой прямую линию, то её размер может быть зафиксирован для быстрого размещения объектов,
- рисование одной/двух/трёх линий, линии длины, толщины и высоты (подходит для простых стен и других объектов в форме прямоугольного параллелепипеда), при этом размер и одной, и второй, и третьей линии может быть зафиксирован для быстрого создания нескольких объектов, если зафиксированы все три размера, то достаточно кликнуть в точку для размещения объекта,
- рисование проекций (подходит для перекрытий...),
- рисование проекции и линии высоты (подходит для шахт, сложных стен, линия высоты может быть наклонной или изогнутой),
- рисование одной линией (подходит для аннотаций),
- переход формы по траектории (подходит для объектов сложной формы),
- вращение (подходит для некоторых видов балясин и колонн),
- указание точки для автозаполнения (подходит для помещений, зон, штриховок, регулярных каркасов и витражных систем)
- сложное рисование (см. ниже)...
Этап 2:
Производится редактирование объекта инструментами редактирования, если это необходимо. Инструменты редактирования должны быть разработаны таким образом, чтобы у пользователя была возможность гибко изменять любую часть готового объекта. Например при методе "рисование путей", готовый объект может быть отредактирован так: изменены профили в отдельных местах или везде, добавлены радиусы сопряжения в местах излома и пересечения путей, добавлены узловые объекты в местах излома и/или пересечения путей...
Этап 3:
На объект назначается материал, однослойный или многослойный (данный параметр может быть определен внутри категории).
Этап 4:
Положение готового объекта или нескольких нарисованных объектов фиксируется в модели (не обязательно фиксировать, элемент можно перевести в запас). Фиксацию можно проводить в любой момент и после создания сразу многих элементов разных категорий. Фактически эта процедура равнозначна сохранению, также после фиксации программа сверяет элементы с базой данных.
Запас - хранилище созданных элементов, которое может быть структурировано по категориям и параметрам. Запас может быть общим (прикреплен к базе данных) и пользовательским (прикреплен к постоянной модели) и может переносится между моделями и базами данных.
Сложное рисование готовыми профилями, для быстрого размещения однотипных объектов по заданным законам. Законы определяются пользователем через специальный интерфейс, например, можно будет создать закон, по которому в прямоугольнике, габариты которого заданы пользователем, на фасаде здания, с равным расстоянием друг от друга по высоте и с возрастающим на 500 мм, с каждым новым размещенным объектом, по длине, будут расставлены окна. В законе также можно прописать возможность размещение разнородных объектов (например разных окон), хаотично или с заданным чередованием, и аттракторов (специальных объектов, влияющих на свойства, соседних объектов с силой, зависящей от расстояния до объекта). Законы могут быть полезны для размещения арматуры, систем балок, импостов витража… Рисование нового объекта и закон распространения могут быть наложены друг на друга, например при создание элемента он сразу же может распространяться в массив, причем это отображается (или может отображаться в зависимости от пользовательских настроек) непосредственно в процессе создания, когда каждая нарисованная линия распространяется мгновенно (то есть визуально это выглядит, как будто человек рисует сразу несколько линий в разных местах экрана), что может быть полезно при создании, например, панельных систем или конструктивных ферм.
Интерфейс создания законов - окно, в котором пользователь набирает последовательность команд из готовых блоков (переместить, отразить, повернуть...). Фактически это нодовый интерфейс.
Конструктор категорий
При создании категории необходимо определить следующие основные атрибуты:
- название категории
- набор параметров
- свойства влияния. Свойства влияния могут быть например такими: забирать значения определенных параметров у объектов определенных категорий в радиусе n метров от данного объекта, забирать значения параметров при касание с объектом определенных категорий, передавать значение параметров в вышеописанных случаях, вырезать полость соответствующую проекции/профилю/профилю + зазору из объектов определенных категорий при касании, соединяться с объектами определенных категорий в единую систему или в единый объект, подстраивать линию длины объекта под линию длины другого объекта при касании с ним …
- наборы профилей моделирование
- метод рисования
- наборы материалов
- зоны влияния элементов модели – пользователь имеет возможность задавать наличие зоны влияния для категории – это такие зоны, где не могут находиться другие или некоторые из элементов модели. Пример зоны влияния – радиус открывания двери. Для зон влияния можно создать правила, по которым в них могут находиться какие-либо категории элементов, а другие не могут, а также параметры (габариты, в том числе динамически, зависящие от разных факторов).
- зоны сопоставления элементов – для категорий элементов, можно задавать зоны сопоставления. Некоторые базовые категории, также наделены свойствами сопоставления. Например, зона сопоставления помещения равна его объему. Это означает, что если элемент или его часть находятся в помещении, то он или его часть сопоставляются с этим помещением, что может быть отражено в спецификации или при конструировании новой модели, например, если модель конструируется следующим образом: создать модель со всеми помещениями 1 этажа 3 блока и со всеми сопоставленными с помещениями объектами, исключая объекты категории мебель.
- поведенческие особенности элементов, такие как автоматические привязки к другим элементам разных категорий, слияние с ними в единую систему или элемент, ориентацию в пространстве и так далее.