Подкатегории. Обозначение оси болта в семействе

Задали мне недавно такой вопрос:
Есть семейство болта, и нужно сделать в нем обозначение оси болта — штрихпунктирной линией. Можно нарисовать «Линию модели» — но как сделать её штрихпунктирной? По-умолчанию линия отображается также, как и сам болт:

Итак, как решить эту задачу?

Вступление

По-умолчанию линия отображается с теми же настройками, что и категория, в которой создан элемент.

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

Например, в данном случае мы будем использовать так называемые «Подкатегории«.
Подкатегории — это набор «слоев» внутри категории, графикой которых мы можем управлять независимо. Увидеть стандартные подкатегории можно, если в окне «Переопределения графики» нажать на «+» рядом с именем категории:

Например, в большинстве категорий есть подкатегория «Невидимые линии».
Графика подкатегории настраивается независимо от основной категории. Если я сделаю для «Перекрытий» линии проекции красного цвета — невидимые линии останутся черными:

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

Использовать подкатегории можно и внутри семейств.

Стандартные подкатегории

Создадим новое семейство обычной типовой модели (в категории «Обобщенные модели»). Нарисуем в нем «Линию модели» (она же «линия построения») и посмотрим в свойствах параметр «Подкатегория». По-умолчанию стоит «Обобщенные модели [проекция]». Это значит, что в проекте линия будет использовать настройки основной категории, из столбца «Проекция/Поверхность».

Скопирую линию несколько раз, поменяю подкатегорию на «Обобщенные модели [разрез]». «Разрез» — значит будет использоваться настройка из столбца «Разрез». Не путайте «Проекцию» и «Разрез»!
Еще одну линию сделаю в категории «Невидимые линии [проекция]».
Загрузим семейство в проект и посмотрим, что теперь отображением этих линий можно управлять независимо:

В категории <Невидимые линии> можно создать линии, которые не будут отображаться, но к которым будет работать привязка.
Стандартных подкатегорий часто не хватает, но мы можем создавтаь свои.

Пользовательские подкатегории

Создадим новую подкатегорию. В семействе перейдем Управление — Стили объектов, выберем «Обобщенные модели» — «Создать», укажем имя:

Там же можно указать нужный цвет, вес и тип линии для подкатегории:

Теперь для линии мы можем указать эту подкатегорию. Выберем «Ось болта [проекция]».

Линия станет такой, как мы указали в «Стилях объектов». Загрузим семейство в проект. Зайдем в «Переопределения графики» — увидим, что в категории «Соединения несущих конструкций» появилась новая строчка — мы можем управлять графикой подкатегории независимо от основной подкатегории.

Например, в можно для видов в разных масштабах задать линию с разной длиной штриха, или отключить оси болтов на 3d-видах — на что фантазии хватит.

Стили объектов и совместное использование подкатегорий

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

Перезагружаем семейство (даже используя «Замену со значениями параметров») — но линия осталась старой. Почему так?

Дело в том, что при загрузке семейства в проект Ревит проверяет подкатегории, которые есть в семействе, и пытается искать такие же подкатегории в проекте. Поиск выполняется по имени подкатегории.
Когда мы первый раз загрузили семейство — подкатегории «Ось болта» не было в проекте, и она была создана, используя настройки, которые мы указали в семействе.
Но когда загружали семейство второй раз — такая подкатегория уже присутствовала, и Ревит использовал настройки стилей проекта, как более глобальные.
Таким образом, если мы хотим глобально поменять настройки подкатегории в проекте — нужно использовать «Стили объектов» проекта:

Что это означает на практике? Мы можем использовать одну подкатегорию (с одним и тем же именем) для разных семейств, и потом управлять ими централизованно.
Создадим новое семейство и подкатегорию в нём с тем же именем «Ось болта», но менять тип линии не будем. Нарисуем линию и зададим эту подкатегорию.

Загрузим семейство в проект — и линия сразу станет пунктирной, такой, как мы задали в «Стилях объектов», и такой же, как в другом семействе:

Через «Стили объектов» в проекте мы сможем управлять этим типом линии централизованно для всех семейств, то же и в «Переопределении графики».
Главное только не сделать опечатку в имени подкатегории при её создании…

И напоследок

А ведь хорошо всё-таки, что в Ревите фиксированный список категорий! Нет того мрака с тысячами слоев в Автокаде типа «Несущие колонны» — «Несущие коллоны» — «Несущие колонны1».
Но подкатегории позволяют исправить это фатальную недоработку: необдуманно создавая подкатегории, вы легко создадите такой же хаос.
Даже меня это не обошло — два раза создал подкатегорию для объемного обозначения балок на низком уровне детализации:

Теперь надо вспомнить, какая из них «правильная», какая — нет, и вычислять, в каких семействах какая используется…

P.S. Про «Объем на низкой детализации», а также про другие идеи использования подкатегорий — расскажу в следующей статье.