2013-05-28 2 views
0

Я относительно новичок в программировании в Revit. В настоящее время я получаю список элементов на чертеже, которые имеют тип двери или окна. Я хочу сделать это как открытие, но я получаю сообщение об ошибке, когда пытаюсь использовать их как Autodesk.Revit.DB.Opening.
код ниже:Как создать Revit Element как Revit.DB.Открытие

  // filter for current design option 
     var designOptionFilter = S2E.Revit.Tools.Library.Cache.DesignOptionFilter; 

     List<Element> elements = collector.WherePasses(designOptionFilter).ToElements().ToList();   

     var list = new List<Autodesk.Revit.DB.Opening>(); 

     foreach (var element in elements) { 

      var opening = (Opening)element; 
      if (opening.Host.Id == wallId) { 
       list.Add(opening); 
      } 
     } 

     return list; 

Как вы можете видеть, я тестирую, если идентификатор хоста соответствует стене я WOKING на. По крайней мере, это то, что я хотел бы сделать. Все, что я ищу, - это как отличить элемент как открытие.

Спасибо, Рич

ответ

1

Учитывая, что дверь является семейной неделей, а открытие не является, я не уверен, как бы вы отделили дверь FamilyInstance к типу открытия.

Но, поскольку у параметра FamilyInstance есть параметр Host, просто проверьте его на идентификаторе стены, и он должен работать, не требуется литье.

0

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

Также у вас есть одно место (открытие), используемое в качестве вашего приведения, но при создании списка вы используете полное имя типа «Autodesk.Revit.DB.Opening». Если вам действительно нужно сделать это, возможно, открытие не является «открытием», как вы думали.

Вы также можете использовать element.Cast() для выполнения приведения.

Аналогично, если вы знаете, что все элементы, возвращаемые фильтром, только когда будет открытие типов, то вы можете использовать

collector.WherePasses(designOptionFilter).Cast<Opening>() 

, чтобы достичь того же.

+0

спасибо за ответ, я подтвердил, что «открытие» на самом деле является открытием, которое я ищу. И я попытался сделать это как открытие, как пример, который вы предоставили, но получил ту же ошибку. Кроме того, ошибка, которую я получаю, заключается в том, что я не могу передать семейный экземпляр объекту типа «Открытие». –

Смежные вопросы