2016-07-07 8 views
1

Я работаю над приложением, которое требует знания о том, какая граница комнаты, какая другая. В этой ситуации важно знать, является ли граница комнаты стенкой или разделителем комнаты.Как получить разделители номеров в revit 2017

public FindsRoomSeperators(){ 
     SpatialElementBoundaryOptions options = new SpatialElementBoundaryOptions(); 
     options.SpatialElementBoundaryLocation = SpatialElementBoundaryLocation.Finish; 

     foreach (IList<Autodesk.Revit.DB.BoundarySegment> boundSegList in room.GetBoundarySegments(options)) 
       { 
        foreach (Autodesk.Revit.DB.BoundarySegment boundSeg in boundSegList) 
          if ((BuiltInCategory)el.Category.Id.IntegerValue == BuiltInCategory.OST_RoomSeparationLines) 
           //proccess el 
       } 
    } 

Однако, как в Revit 2017 года этот код в настоящее время бросает метод не нашел: 'Autodesk.Revit.DB.Element Autodesk.Revit.DB.BoundarySegment.get_Element()'. исключение, указывающее, что этот метод удален.

 var geometry = (Solid)room.get_Geometry(new Options()).First(); 
     var faces = geometry.Faces; 

И в то время как это позволяет мне судить такие вещи, как все, или не пол стоит под углом он не говорит мне, какие края приходят от стен и которые из номеров sepeartors.

В идеале я мог бы взять лица, которые у нас есть, и проверить, нет ли каких-либо краев лица в комнате. У меня уже есть список всех стен, если это помогает.

Итак, как это сделать в revit 2017? Предпочтительно, не нарушая совместимость с 2015.

+0

в GetBoundarySegments() не была удалена из API на 2017 год, он все еще там (даже не помечается как 'устаревший'). Вам не хватает ссылки? –

+0

Код генерирует исключение в цикле foreach при вызове в 2017 году, но отлично работает в 2016 году. Вышеуказанный метод генерирует исключение: метод не найден: 'Autodesk.Revit.DB.Element Autodesk.Revit.DB.BoundarySegment.get_Element()'. – Thijser

ответ

2

это ожидается и документально на Revit Platform API изменений и дополнений файла (see SDK), этот метод был помеченных как осуждается в 2016 году и был снят на 2017.

Вместо этого вы следует использовать ElementId или LinkElementId (см. документацию).

foreach (Autodesk.Revit.DB.BoundarySegment boundSeg in boundSegList) 
{ 
    Element el = doc.GetElement(boundSeg.ElementId); // or doc.GetElement(boundSeg.LinkElementId); 
    if ((BuiltInCategory)el.Category.Id.IntegerValue == BuiltInCategory.OST_RoomSeparationLines) 
    { 

    } 
} 
+0

Может быть, boundSeg.ElementId не существует в revite 2015? Это дает мне ошибку: сегмент Boundry не содержит определения для «ElementID». – Thijser

+0

Да, свойство BoundarySegment.ElementId было введено в 2016 году (согласно документации) –

+0

Вы случайно знаете, как мне разрешить использовать оба? Мне нужно быть конкурентоспособным с 2015 и 2017 годами. – Thijser

2

Revit Platform API Изменения и дополнения документации, Аугусто выше также доступна на сайте:

http://thebuildingcoder.typepad.com/blog/2016/04/whats-new-in-the-revit-2017-api.html

Просто поиск BoundarySegment. get_Element метод, который вам не хватает на самом деле является оболочкой для Element собственности, который был удален в Revit 2017.

Образец демонстрирует использование библиотеки .NET Reflection для поддержки различных функциональных возможностей в различных версиях Revit является обеспечивается The Building Coder в

http://thebuildingcoder.typepad.com/blog/2012/07/multi-version-add-in.html