2014-07-18 28 views
1

我正在嘗試創建一個類似於Revit「過濾器」的「智能過濾器」,但以其他方式(例如家庭類型,工作集或級別,甚至「標記」)對元素進行分組。創建隔離這些參數的集合很簡單,但我似乎無法退出我的程序,並將document.selection修改爲只包含我已經「檢查」的元素。如何將元素集合轉換爲Revit中的「當前選擇」?

我的程序能夠處理剩餘的「已檢查」元素,例如「隱藏在視圖中」或「半色調」或「刪除」 - 但是對所得選擇可能執行的操作列表也是如此只要將它們全部包含在我的Dialog窗體中 - 我想要一個選項來簡單地選擇一個單選按鈕,它將顯示「設置選擇」,並讓程序退出時選擇這些元素。

我曾嘗試:

doc.Selection.Elements.Add(Element *****); 
doc.Selection.Elements.Remove(Element *****); 

這些返回錯誤「未在對象的實例」。

當您完成Revit的「過濾器」時,結果是修改後的選擇。有沒有辦法在C#插件中做同樣的事情?

+0

哪個版本的Revit? – Matt

回答

0

我認爲這可能是Revit在引用元素時沒有直接看對象 - 是否嘗試過使用elementID?或者element.UniqueID?

1

您必須在UI文檔中執行此操作。

SelElementSet selElements = uidoc.Selection.Elements; 
selElements.Add(element); 

此代碼適用於我。

+0

謝謝....真正的關鍵是SelElementSet .....我試圖將元素移植到Selection中,但是有更多的變量類型比我意識到的要多。我原來的問題中的doc.Selection.Elements實際上與你的例子中的一樣。使用SelElementSet(並確保清楚)後,我能夠遍歷最終選擇和添加(元素)中所需的所有元素。 – KeachyPeen

+0

這是這裏的正確答案。 UIDocument支持設置選擇。您如何獲取要素以供選擇,完全取決於您。要按參數值進行過濾,請查看「FilteredElementCollectors」和它們支持的所有過濾器。另外,如果您喜歡,請接受答案。 – konrad

相關問題