2013-05-28 15 views
0

我在Revit編程中相對較新。我目前正在獲取我的圖形中門或窗類型的元素列表。我想要做的就是將這些作爲開頭,但是當我嘗試將它們作爲Autodesk.Revit.DB.Opening進行投射時出現錯誤。
下面的代碼:如何將Revit元素作爲Revit.DB.Opening投入使用

  // 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; 

正如你可以看到,如果主機的ID我沃金在牆上比賽我測試。至少這是我想要做的。我正在尋找的是如何將元素作爲開幕。

謝謝,豐富

回答

1

考慮到一扇門是一個家庭實體,而一個開放不是,我不確定你會如何將這個家庭實例轉換成開放類型。

但是,由於FamilyInstance有一個主機參數,只需檢查牆上的ID,它應該工作,不需要投射。

0

這取決於你的過濾器是在你有投是否將工作選擇。由於你沒有提供你正在得到的確切錯誤的細節,所以很難做到更精確。

此外,您還可以在一個位置(打開)用作演員,但在創建列表時使用完整類型名稱「Autodesk.Revit.DB.Opening」。如果你真的需要這樣做,也許開幕並不是你認爲的「開場」。

您也可以使用element.Cast()來執行轉換。

同樣,如果你知道,通過過濾器返回的所有元素都只有永遠將被打開類型,那麼你可以使用

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

來實現同樣的事情。

+0

感謝您的回覆,我已確認「開放」實際上是我期待的開幕式。我確實試圖把它當作你提供的例子打開,但得到了同樣的錯誤。此外,我得到的錯誤是我「不能將一個家庭實例轉換爲打開類型的對象」。 –

相關問題