ここではサンプルのソースコードを紹介しますね
なお、Selectionクラスについてはこちらをご確認ください。

準備
部材選択のマクロなので、まずはRevit内に適当に部材を配置してください。
選択に絞り込みをかけるので、異なるカテゴリ、ファミリ、タイプ、様々な部材を配置すると実感しやすいです。
サンプルの実行
アイテムの追加
SelectionFilter.csとでも.cs名を名付けて新しいクラスを作成します。
クラスの作成についてはこちらを確認ください。

SelectionFilter.csのデフォルトのソースコードを下記のように書き換えます。
using以降
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;
}
}
}
特定タイプ名の部材のみ選択できるようにしていますので、上記“選択したいタイプ名をここに入力”のダブルクォーテーション内を選択したいタイプ名に書き換えます。
サンプルマクロ
ThisApplication.csに戻って、Sampleをコーディングします。
Sample
{
UIApplication uiapp = this.ActiveUIDocument.Application;
UIDocument uidoc = uiapp.ActiveUIDocument;
Autodesk.Revit.ApplicationServices.Application app =
uiapp.Application as Autodesk.Revit.ApplicationServices.Application;
Autodesk.Revit.DB.Document doc = uidoc.Document;
ISelectionFilter selectionFilter = new SelectionFilter();
IList<Element> elementList = uidoc.Selection.PickElementsByRectangle(selectionFilter);
string elementIds = “”;
foreach(Element element in elementList)
{
elementIds += element.Id.ToString() + “\n”;
}
TaskDialog.Show(“Message”, elementIds);
}
マクロの実行
マクロを実行すると、SelectionFilter.csで指定したタイプ名の部材のみしか選択できなくなっています。
注意
ThisApplication.csとSelectionFilter.csの「namespace TestMacro」の 部分は一致していなければエラーとなります。
色々な絞り込み
サンプルではタイプ名で絞りましたが、ほかの条件でもフィルタリングできます。
カテゴリ名やファミリ名のサンプルを示します。
SelectionFilter.cs
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;
}
}
}
箇所を以下のように書き換えます。
カテゴリ名 | (element as FamilyInstance).Symbol.FamilyName == “選択したいファミリ名をここに入力” |
ファミリ名 | element.Category.Name == “選択したいカテゴリ名をここに入力” |
まとめ
ISelectionFilterを使って様々な条件での部材選択ができるようになりました。
原則的にはここで記したSelectionFilter.csの 箇所を書き換えるだけなので、いろいろお試しください。
以上です。
↓↓C#初心者の僕が独学でお世話になった本↓↓
↓↓プログラミング初心者の僕がコーディング学習でお世話になった本↓↓