Отверстия в стенах: обозначение на развертке и в плане, отметка низа в марке и спецификации

Отверстия в стенах — известная проблема Revit. Конечно, есть «Проем в стене», но нам, помимо собственно отверстия в 3D, еще нужно:
— обозначение проема на развертке стены;
— спецификация отверстий и марка с указанием размеров и отметки низа отверстия;
— обозначение отверстия на планах.

Да, можно рисовать обозначение проема «Цветовой областью», и табличку составлять вручную, но это не наш метод.

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

Кстати говоря, я не очень люблю все эти планы с обозначениями отверстий — имхо, это всё артефакты эпохи автокада, но есть задача — есть решение.


Конечно, сразу известны проблемы:
— обозначение в плане не будет отображаться, если отверстие находится выше или ниже секущего диапазона;
— параметр «Смещение по высоте» не выводится в марки и спецификации.
Ну ничего, я тут как раз для того, чтобы найти решения. Воспользуемся особенностями аннотативных семейств и Dynamo.
Про один из способов решения я писал на форуме автодеска, но вариант совсем неудобный, тут уже поинтереснее.

Подготавливаем семейство

Семейство для отверстия будем делать «На основе стены» в категории «Обобщенные модели» (можно использовать «Окна» или «Двери», есть плюсы и минусы, но сейчас рассмотрим простой вариант).

Для начала будут нужны общие параметры «Рзм.Ширина» и «Рзм.Высота». Перейдем на фасад «Сторона размещения», добавим плоскости, размеры назначим на опорные плоскости:

И нарисуем проем, привязав границы к плоскостям:

Выберите созданный проем и включите для него прозрачность:

Теперь нужно сделать обозначение проема. Я обычно делаю его вложенным семейством «Элемента узла». Создадим такое семейство, опорные плоскости и параметры для ширины-высоты — всё стандартно. Создаю «цветовую область», для начала две линии, привязываю их:

Привязываю концы линий:

Теперь дорисовываю две линии обозначения и создаю параметр «Смещение обозначения».

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

if(or(Высота > 1000 мм, Ширина > 1000 мм), if(Высота > Ширина, Ширина / 5, Высота / 5), if(or(Высота > 500 мм, Ширина > 500 мм), if(Высота > Ширина, Ширина / 4, Высота / 4), if(Высота > Ширина, Ширина / 3, Высота / 3)))

Посмотрите, как будет изменяться обозначение при разных размерах отверстия.
Загружаем обозначение в семейство проема, связываем параметры ширины-высоты, привязываем обозначение к опорным плоскостям:

Попробуйте изменить размеры и посмотреть, правильно ли срабатывает обозначение:

Далее нужны еще три общих параметра — «Рзм.ВысотаБазовогоУровня», «Рзм.СмещениеОтУровня», «Рзм.ОтметкаРасположения». Все три параметра добавляем в семейство, ставим их «по экземпляру». Можете взять эти параметра из моего файла общих параметров с Яндекс-диска.
Для «Рзм.ОтметкаРасположения» пишем формулу:

Сохраняем семейство как «231_Отверстие прямоугольное (ОбщМод_Стена)» и загружаем в проект.

Dynamo — передача параметров

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

Сначала выбираю все семейства по индексу 261 — у меня это семейства отверстий в стенах:

SelectFamilyByIndex — простой самодельный python-нод.
Далее использую стандартную связку из нодов «GetParameterValueByName» и «SetParameterValueByName» — значение просто копируется из одного параметра в другой.
Получаю значение из «Смещения» и записываю в «Рзм.СмещениеОтУровня»:

Теперь нужно как-то узнать, на каком уровне расположено семейство, и отметку этого уровня. При помощи «GetParameterValueByName» получим из семейства его «Уровень», а затем узнаем «Elevation»:

После того, как узнали значение высоты уровня — вписываем это число в параметр «Рзм.ВысотаБазовогоУровня».

Далее уже в семействе эти числа складываются в параметре «ОтмОтверстия», и этот параметр можно вывести куда нужно: в марки и спецификации:

Кстати, в марке можно настроить форматирование параметра:

 

Обозначение в плане

Используем следующую особенность: если в 3D-семейство загружено аннотативное семейство (элемент узла или типовая аннотация), то в проекте мы увидим эту вложенную аннотацию, разрезав семейство в любом месте. Делаем: cоздаем семейство «Элемента узла» с нужным обозначением в плане

В семействе обозначения нужны будут параметры «Толщина стены» и «Ширина отверстия»:

Загружаем обозначение в семейство отверстия и устанавливаем на плане. Связываем параметр ширины обозначения с соответствующим параметром отверстия, а для связывания толщины стены используем «Параметр для отчета». Создадим в семействе отверстия параметр «ТолщинаСтеныОтчет», включим опцию «Для отчетов»:

Повесим этот параметр на грани условной стены (выбирайте через tab именно грань стены, а не что-то другое, а то работать не будет), параметр «Толщины стены» у обозначения связываем с этим новым параметром:

Теперь при установке семейства оно автоматически определит толщину стену и нужным образом изменит обозначение.
Далее не забываем привязать обозначение к центру отверстия.

Теперь вспоминаем про задачу. Секущий диапазон плана обычно делают на высоте 1-1.5м, а отверстие может располагаться под потолком на высоте 2м. Но мы увидим обозначение, если разрежем семейство отверстия горизонтально в любом месте, значит, надо как-то сделать так, чтобы часть семейства доходила до секущего диапазона.
Сказано — сделано: нарисуем на «Виде спереди» невидимую линию, а удлинение этой линии сделаем равным параметру «СмещениеОтУровня»:

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

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

Теперь «Смещение по высоте» будет отсчитываться именно от этой плоскости.

Теперь после запуска Dynamo невидимая линия будет удлиняться точно до уровня пола текущего этажа, гарантированно пересекать секущий диапазон и появляться на планах:

Качаем проект с семействами, марками и спецификацией и скрипт Dynamo (выбирайте Макросы/Отметки отверстий).

А в качестве домашнего задания предлагаю решить следующую задачу. Если семейство отверстия поставить прямо на уровень пола, возникнут проблемы:
— невидимая линия не может быть нулевой длины, и семейство сломается;
— отверстие будет находиться ниже секущего диапазона и не будет видно из-за стены.

Надо будет немного поколдовать с семейством, но, думаю, ничего сложного. Удачи!