Selectionクラスを使って、モデル上の要素をクリック選択、範囲選択することができます。
できます。
Selectionクラスでは、ISelectionFilterというインターフェースを使って選択要素にフィルタをかけることができます。
ここではその手法を紹介します。
Selectionクラスの使い方は下の記事をご覧ください。
ISelectionFilterの要素選択|モデルの準備
部材選択のプログラムなので、まずはRevit内で適当に要素を配置してしたモデルを準備します^^
フィルタのかかった選択をするので、
- 異なるカテゴリ
- 異なるファミリ
- 異なるタイプ
など、いろんな要素が配置されていれば分かりやすいかと思います。
選択要素のフィルタリング
ISelectionFilterのサンプルプログラム
ISelectionFilterのプログラムはcsファイルを別で作っておいたほうが分かりやすいです。
まずは新規csファイルをクラスで作成します。
次に、作成したcsファイルに下のコードをコピペします。
using System; using Autodesk.Revit.UI; using Autodesk.Revit.DB; using Autodesk.Revit.UI.Selection; using System.Collections.Generic; using System.Linq; namespace TestMacro { /// <summary> /// Description of SelectionFilter. /// </summary> public class SelectionFilter : ISelectionFilter { public bool AllowElement(Element element) { if (element.Name == "選択したいタイプ名をここに入力") { return true; } return false; } public bool AllowReference(Reference refer, XYZ point) { return false; } } }
ここで、8行目の「namespace」は「ThisApplication.cs」と同じものに書き換えます。
namespace TestMacro
上記のコードでは、特定タイプ名の要素をフィルタリングできるようにしています。
18行目の、
if (element.Name == "選択したいタイプ名をここに入力")
の""内に、配置した要素から適当なタイプ名を選んで書換えてみてください^^
要素選択メインのプログラム
ThisApplicarion.csには以下のコードをコピペします。
public void Sample() { UIDocument uidoc = this.ActiveUIDocument; ISelectionFilter selectionFilter = new SelectionFilter(); List<ElementId> elementIdList = uidoc.Selection.PickElementsByRectangle(selectionFilter).Select(x => x.Id).ToList(); uidoc.Selection.SetElementIds(elementIdList); }
これは選択部材をハイライト表示するプログラムです。
5行目の、
ISelectionFilter selectionFilter = new SelectionFilter();
で、前節で作成した選択フィルタを呼び出しています。
これを実行すれば、先ほど作ったタイプ名で要素を絞った選択ができますよ^^
その他選択フィルタのサンプル
最初に作ったISelectionFilterのコードを書き換えることで、異なるフィルタリングができます。
using System; using Autodesk.Revit.UI; using Autodesk.Revit.DB; using Autodesk.Revit.UI.Selection; using System.Collections.Generic; using System.Linq; namespace TestMacro { /// <summary> /// Description of SelectionFilter. /// </summary> public class SelectionFilter : ISelectionFilter { public bool AllowElement(Element element) { if (element.Name == "選択したいタイプ名をここに入力") { return true; } return false; } public bool AllowReference(Reference refer, XYZ point) { return false; } } }
18行目をフィルタリングしたい項目によって、下表のように書き換えます。
カテゴリ | element.Category.Name == "選択したいカテゴリ名をここに入力" |
---|---|
ファミリ | (element as FamilyInstance).Symbol.FamilyName == "選択したいファミリ名" |
ISelectionFilterで選択要素をフィルタ|まとめ
以上、ISelectionFilterインターフェースを使ったフィルタリングのサンプル紹介でした。
選択部材を絞り込めることで、プログラムでできることの幅が広がりそうですね。
RevitAPI独学用教材
最後に教材等を紹介します。
RevitAPIを理解してプログラムを作れるようになるには、C#の知識が必要です。
下記、オススメの参考書です。
プログラムが初心者にオススメのC#教材
プログラムの基礎知識がある人にオススメのC#教材
美しいコードを書きたい人はこちら
Revitアドイン作ります
のんびり学習してる余裕などない!という方にご案内です。
スキル、資格等の詳細はプロフィールをご覧ください。
ご質問などもお気軽にメッセージしていただければと思います。
詳しくは下の記事にまとめています。
最後まで読んでいただき、ありがとうございました^^
以上です。