2017-05-11 12 views
-1

数年前、私は要素のリストを現在の選択に変換する方法を模索していました(「レベルへのコピー」または「現在のビューへのコピー」に使用する)。ユーザーは、Revitののフィルタに組み込まれてのように、複数の家族の名前/種類だけではなく、「構造フレーム(桁)」を選択することができる「スマートフィルタ」から-program先の解決策がもう役に立たない

ソリューションがされていた:。

SelElementSet SelSet = uiDoc.Selection.Elements; 
SelSet.Add(Element1); 
SelSet.Remove(Element2); 

問題は、これはもはやRevit 2016(+)では動作していないようです。これらの行でコードを実行すると、プログラム終了エラーが発生します:

"RevitでSystem.MissingMethodExceptionが発生しました:Autodesk.Revit.UI.Selection.SelElementSet Autodesk.Revit.UI.Selection.Selection.get_Elements();" ( "SelElementSet SelSet = uiDoc.Selection.Elements 「

私は

Selection All_Guys = uiDoc.Selection; 

を使用して現在の選択を取得する()私のプログラムの開始時にできていますし、このことから、私が使用してに基づいて、などのIListまたはリストにすべてを変換することができます).get_Elementsを呼び出し特定のカテゴリ/ファミリ名/ファミリタイプを削除するためのツリーノード。しかし、私はこれをすべて現在の選択に戻すことができるようにする必要があります(うまくいけば、SelSet.Remove(Element2)を使用してフィルタリングと一致しない要素を探します)、SelElementSetを使用するたびに、 。

2014年9月に私は同様の質問をしました。このサイトには、既に答えられているように質問を表示するのが嫌なパワフルな仲裁人がいることはわかっています。これは「以前の回答はもう機能しません」というカテゴリの下にあります。質問をもっと慎重に読んでください、あなたが力を持っているからといってそれを投げ捨てないでください。

答えて

1

これは、SelElementSetがRevit 2015以降で削除され、次の(タイプの)構造体に置き換えられたためです。私の例では、私が選択をクリアし、指定された要素を追加し、私も持っている可能性が.... elementids.Remove(One_Element)の要素の別のコレクションから:

if (SmartCopyLoad.ResetSelection) 
{ 
    ICollection<ElementId> elementIds = uiDoc.Selection.GetElementIds(); 
    elementIds.Clear(); 
    foreach (Element One_Element in SmartCopy.MatchingElements) { elementIds.Add(One_Element.Id); } 
    uiDoc.Selection.SetElementIds(elementIds); 

    return Autodesk.Revit.UI.Result.Succeeded; 
} 

この結果が指定されている要素として、コレクション(SelElementSetを使用して許可する)。

問題の大部分は古い参照を使用していたことにも注意してください。私の年齢のコードはまだ2014年からRevitAPIを参照していましたが、これはSelElementSetを許可しましたが、Revit2016では動作しませんでした。他の人に警告する言葉:古いソフトウェアで実行されているプログラムに必要な場合にのみ古い参照を使用する。私たちは2015年以降しか使用していないので、私は新しい参照を使用することができます。

関連する問題