Wall или BuiltInCategory.OST_Walls

Автор Тема: Wall или BuiltInCategory.OST_Walls  (Прочитано 2715 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн RevitTormentorАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 162
  • Карма: 6
Wall или BuiltInCategory.OST_Walls
« : 08-03-2018, 07:14:13 »
Чем отличаются два кода?

Код - C# [Выбрать]
  1. ElementType elementType
  2.         = new FilteredElementCollector( doc )
  3.           .OfCategory( BuiltInCategory.OST_Walls ) // .OST_Columns
  4.           .OfClass( typeof( ElementType ) )
  5.           .FirstElement() as ElementType;
  6.  

Код - C# [Выбрать]
  1.             ICollection<Element> collections = collector.OfClass(typeof(Wall)).ToElements();
  2.             List<Wall> lstCol = new List<Wall>();
  3.             foreach (Wall item in collections)
  4.             {
  5.                 lstCol.Add(item);
  6.             }
  7.  
  8.  

Что такое категория, в данном случае стен BuiltInCategory.OST_Walls ?

И ещё Почему по второму коду я не могу выбрать также например колонны или балки.
Стена тоже может быть несущей или не несущей. Плита тоже, а колонны с балками где-то в "сторонке".

Как получить список колонн и балок например? Там же двери

Отмечено как Решение RevitTormentor 08-03-2018, 14:00:11

Оффлайн Виктор Чекалин

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Re: Wall или BuiltInCategory.OST_Walls
« Ответ #1 : 08-03-2018, 12:19:09 »
RevitTormentor,
Во первом случае вы получите только типоразмеры стен. Во втором - и типоразмеры и экземпляры стен.
Если говорить в целом, то один и тот же результат, можно получить разными фильтрами. Как делать выборку - по категории или по названию класса - зависит от ситуации. В случае со стенами, вроде не принципиально. В случае, например, с арматурой, там категория не равно одному классу.


Каждый объект в Revit имеет категорию. BuiltInCategory.OST_Walls - это лишь идентификатор этой категории.

Что качается остальных вопросов, то они немного странные.
FilteredElementCollector позволяет выбрать объекты по каким либо признакам. Во-втором коде ищите объекты, у которых категория - Стена. Нужны двери - ищите по категории Двери (OST_Doors). Нужны колонны - OST_Columns и т.п.

Оффлайн RevitTormentorАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 162
  • Карма: 6
Re: Wall или BuiltInCategory.OST_Walls
« Ответ #2 : 08-03-2018, 13:02:41 »
Виктор спасибо за ответ,
А как получить список колонн по подобию кода
Код - C# [Выбрать]
  1.  ICollection<Element> collections = collector.OfClass(typeof(Wall)).ToElements();
  2.             List<Wall> lstCol = new List<Wall>();
  3.             foreach (Wall item in collections)
  4.             {
  5.                 lstCol.Add(item);
  6.             }

Если вместо Wall вставлю Columns Column или что-то подобное то ничего не получится.
Как выбрать колонны в проекте? Потом уже я постараюсь дожать дальнейшую фильтрацию и группировку.
Спасибо

Оффлайн Виктор Чекалин

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Re: Wall или BuiltInCategory.OST_Walls
« Ответ #3 : 08-03-2018, 13:26:49 »
RevitTormentor,
Колонны заданы семейством, соответственно это экземпляр класса FamilyInstance. Но если просто вместо Wall вы подставите FamilyInstance, то почти все объекты модели будут в результате. Так что колонны только по категории искать.
Код - Text [Выбрать]
  1. FilteredElementCollector collector = new FilteredElementCollector(doc);
  2. var columns = collector
  3. .OfCategory(BuiltInCategory.OST_Columns)
  4. .WhereElementIsNotElementType();

Оффлайн RevitTormentorАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 162
  • Карма: 6
Re: Wall или BuiltInCategory.OST_Walls
« Ответ #4 : 08-03-2018, 13:56:19 »
Виктор, а разве в Ревите не всё создано семействами? Стены Перекрытия Размеры Уровни, это ведь тоже семейства? Почему колонны как то выделены особняком?

Запутался немного. Стены же тоже семейства, почему к ним другой доступ имеется, а к колоннам нет?

Просто это отразится потом на всём остальном коде, хочется разобраться во внутренней структуре.

Спасибо.

Оффлайн Виктор Чекалин

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Re: Wall или BuiltInCategory.OST_Walls
« Ответ #5 : 08-03-2018, 14:03:22 »
RevitTormentor,
Есть встроенные семейства (Стены, Пол, трубы и т.п.), а есть пользовательские. Встроенные семейства в API имеют свои классы. Пользовательские же семейства являются классами FamilyInstance.

Оффлайн RevitTormentorАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 162
  • Карма: 6
Re: Wall или BuiltInCategory.OST_Walls
« Ответ #6 : 08-03-2018, 14:06:17 »
Ок. Однако странное дело. Колонны не являются встроенным семейством.
А если я загружу своё какое-нибудь семейство стен, то видимо и доступ к ним тоже будет через famalyInstance. Всё теперь понял. Придётся переделать пару методов.

Спасибо Виктор.