Сообщество программистов Autodesk в СНГ

ADN Club => Revit API => Тема начата: YLSV от 13-11-2020, 22:57:45

Название: Вопрос по ReferenceIntersector
Отправлено: YLSV от 13-11-2020, 22:57:45
 Мне нужно определить потолки в связанном файле. Делаю так:


Код - C# [Выбрать]
  1.             var intersector = new ReferenceIntersector(new ElementCategoryFilter(BuiltInCategory.OST_Ceilings),
  2.                                                       FindReferenceTarget.All, View3D);
  3.  
  4.             intersector.FindReferencesInRevitLinks = true;
  5.  
  6.             ReferenceWithContext referenceWithContextCeilings = intersector.FindNearest(ptCenter, rayDirection);



   View3D - создан самостоятельно и видимость потолков включена. Но работает непонятно. Часть потолков в одном помещении  находит нормально, а часть пропускает, хотя они ничем не отличаются друг от друга. Может быть подскажете, в чем может быть проблема ?

Название: Re: Вопрос по ReferenceIntersector
Отправлено: Александр Игнатович от 13-11-2020, 23:05:24
Фильтры, стадии, рабочие наборы? Может ещё уровень детализации влияет. Ну и, не исключен вариант ошибки в коде, уверен насчёт построенного луча?
Название: Re: Вопрос по ReferenceIntersector
Отправлено: YLSV от 13-11-2020, 23:10:42
Ну насчет луча да, все верно. Делал другим способом до этого. Находил ссылку на документ ссылочного файла и использовал 3Д вид  оттуда. И все работало. Все было бы хорошо, но в некоторых проектах потолки могут скрывать и тогда я их не нахожу. Поэтому я создал свой вид в активном документе и вот так теперь получается. Возможно вид не так создал?

 Вот так делал

Код - C# [Выбрать]
  1.  
  2. ViewFamilyType vft = new FilteredElementCollector(Doc)
  3.                     .OfClass(typeof(ViewFamilyType))
  4.                     .Cast<ViewFamilyType>()
  5.                     .FirstOrDefault(x => ViewFamily.ThreeDimensional == x.ViewFamily);
  6.  
  7.                 using (var trans = new Transaction(Doc))
  8.                 {
  9.                     trans.Start("Create 3D View");
  10.  
  11.                     if (vft != null) RbimView3D = View3D.CreateIsometric(Doc, vft.Id);
  12.  
  13.                     if (RbimView3D != null)
  14.                     {
  15.                         RbimView3D.Name = "R-BIM View";
  16.                         ParameterFilterElement parameterFilterElement =  ParameterFilterElement.Create(Doc, "R-BIM filter", categories);
  17.  
  18.                         RbimView3D.AddFilter(parameterFilterElement.Id);
  19.                         RbimView3D.SetFilterVisibility(parameterFilterElement.Id, true);
  20.                     }
  21.  
  22.                     trans.Commit();
  23.                 }
  24.  
  25.  

 
Название: Re: Вопрос по ReferenceIntersector
Отправлено: Александр Игнатович от 13-11-2020, 23:56:03
Потенциально, этого маловато будет, честно говоря. В ViewFamilyType может быть задан шаблон, плюс опять же видимость рабочих наборов, стадии и прочее. Пробовал посмотреть глазами вид, который создаешь?
Название: Re: Вопрос по ReferenceIntersector
Отправлено: YLSV от 14-11-2020, 00:02:02
Да, конечно. Смотрел. Потолки видны. Причем рядом друг с другом. Но один виден, другой нет. Может уровень детализации добавить?
 Или еще какие то параметры? Можно ли пример привести?
Название: Re: Вопрос по ReferenceIntersector
Отправлено: Александр Ривилис от 14-11-2020, 01:21:34
YLSV,
Напоминаю про правило форматирования кода на форуме (у меня в подписи)!
Название: Re: Вопрос по ReferenceIntersector
Отправлено: YLSV от 14-11-2020, 07:58:08
Прошу прощения,не повторится.
 По сути дела.
 Я так понял, что вопрос сводится к правильной настройке создаваемого 3Д вида. Значит задача такая. Как правильно настроить параметры вида,чтобы ReferenceIntersector находил все потолки(BuiltInCategory.OST_Ceilings) в связанном файле