«Элемент не может быть повернут в эту позицию»

…а также немного информации о рабочих плоскостях и способах поворота элементов в семействах.

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

Можно даже найти в свойствах семейства опцию «Всегда вертикально», но сообщение всё равно будет вылезать.

Когда первый раз столкнулся с проблемой много лет назад — тоже подумал: «Что за глупое ограничение!».
Но сейчас (и уже не первый раз) понимаю, что ограничения появились неспроста, и они отражают саму суть логики программы. Итак, в чем же особенность?Дело в том, что Ревит — параметрическая САПР, основанная на рабочих плоскостях.
«Параметрический» — значит, что в элементы могут передаваться какие-то значения (параметры) и эти элементы автоматически изменяются (удлиняются, поворачиваются, изменяют конфигурацию) в зависимости от этих параметров, по определенным зависимостям.

«Основанный на рабочих плоскостях» — означает, что геометрические параметры в основном работают с плоскостями, а не с точками или прямыми, и параметризация осуществляется за счет перемещения плоскостей.
Например, в Ревите вообще нет 3D-элементов, которые бы «висели в воздухе»: у элемента всегда есть «Основа» или «Рабочая плоскость».

Фактически, единственные элементы, которые действительно «висят в воздухе» — это оси, уровни и опорные плоскости.
Благодаря этому можно, например, изменить высоту первого этажа (переместить выше уровень второго этажа) и быть уверенным, что все элементы на этих этажах также передвинутся на нужную высоту.

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

Этот функционал добавлен искусственно, и доступен только для «Колонн». Возможно, когда-нибудь подобное появится и для других категорий, но теперь понятно, откуда у проблему ноги растут.
А сейчас любое семейство устанавливается на плоскость и все действия с семейство производятся только на этой плоскости. Хороший пример — инструмент «Повернуть».
В каком-нибудь 3DMax можно вращать объект по каждой из трех осей:
В Revit вращение происходит только в плоскости, на которую установлено семейство:
Неудивительно, ведь Max и Revit — программы совсем разного назначения, 3DMax — не параметрический редактор.
Но что же делать, если действительно нужно сделать наклонный фундаментный болт? Есть разные варианты:
 — создать наклонную именованную опорную плоскость и установить элемент на неё;
 — создать возможность поворота внутри самого фундаментного болта;
 — сделать семейство болта не «вертикальным», а «горизонтальным», установить его на вертикальную плоскость в проекте, и вращать обычным инструментом «Повернуть».

Вариант 1: установить на наклонную опорную плоскость

Включим в свойствах семейства опцию «На основе рабочей плоскости» и отключим «Всегда вертикально»:
После этого, при установке семейства в проекте, мы получим возможность установки семейства «По грани» и «По рабочей плоскости».
Если у вас уже есть, например, наклонный фундамент — можно просто выбрать «По грани» и установить болт на грань этого фундамента.
На разрезе создадим «Опорную плоскость» под нужным углом и зададим для неё «Имя»:
Опорная плоскость — один из особых типов объектов (вместе с осями и уровнями), которые сами являются «основой» и могут располагаться без привязки к чему-либо.
После этого при размещении болта выберем «На рабочей плоскости» и в выпадающем списке выберем созданную нами плоскость:
Вот так получилось:

Вариант 2: создать поворот внутри семейства болта:

Можно использовать тот же принцип (с именованной опорной плоскостью), но проблема в том, что при повороте на угол опорные плоскости нестабильно работают, лучше пользоваться «Вспомогательной линией».
Перейдем в семействе на фасад и создадим вспомогательную линию:

Привяжем начальную точку вспомогательной линии к пересечению опорных плоскостей:

Нажимайте Tab, чтобы выбрать не всю линию, а её конечную точку.

Создадим параметр угла поворота:

«Вспомогательная линия» — интересный объект. Она имеет 4 плоскости, которые можно использовать в качестве рабочих плоскостей для размещения элементов.

Укажу нижнюю плоскость вспомогательной линии в качестве рабочей плоскости:

Создаю элемент выдавливания:

Обратите внимание, эскиз выдавливания теперь создается в плоскости вспомогательной линии.
Загружаю семейство в проект и проверяю работу:

 

Вариант 3: установка на вертикальную плоскость

Идея простая. Если мы можем вращать элементы только в плоскости, на которую установили элемент, а повернуть нам надо в вертикальной плоскости — установим болт на вертикальную плоскость.
Для этого семейство болта сделаем «Лежащим на боку» :)

Включим «На основе рабочей плоскости» и отключим «Всегда вертикально».
В проекте нам понадобится вертикальная рабочая плоскость. Можно использовать вертикальную боковую грань фундамента, создать в плане именованную опорную плоскость, или использовать в качестве рабочей плоскости одну из осей.
Я установлю на грань фундамента:

Теперь этот болт можно вращать инструментом «Повернуть» так, как нам нужно:

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