フィルタされたユーザ選択

フィルタされたユーザの選択

PickObject()、PickObjects()、PickElementsByRectangle()にはすべて、ISelectionFilter をパラメータとするオーバーロードがあります。ISelectionFilter は、選択操作中にオブジェクトをフィルタするために実装することができるインタフェースです。優先設定可能なメソッドが 2 つあります。1 つは AllowElement()で、要素が選択可能かどうかを指定するために使用し、もう 1 つは AllowReference()で、ジオメトリの一部への参照を選択できるかどうかを指定するために使用します。

次の例は、ISelectionFilter インタフェースを使用してユーザの選択をマス カテゴリの要素に制限する方法を表しています。ここでは、ジオメトリへの参照は選択できません。

コード領域 7-4: ISelectionFilter を使用して要素の選択を制限

public static IList<Element> GetManyRefByRectangle(UIDocument doc)
{
        ReferenceArray ra = new ReferenceArray();
        ISelectionFilter selFilter = new MassSelectionFilter();
        IList<Element> eList = doc.Selection.PickElementsByRectangle(selFilter, 
                "Select multiple faces") as IList<Element>;
        return eList;
}

public class MassSelectionFilter : ISelectionFilter
{
        public bool AllowElement(Element element)
        {
        if (element.Category.Name == "Mass")
        {
                return true;
        }
        return false;
        }

        public bool AllowReference(Reference refer, XYZ point)
        {
                return false;
        }
}

次の例は、平面のみの選択を許可する ISelectionFilter の使用例を表しています。

コード領域 7-5: ISelectionFilter を使用してジオメトリの選択を制限

public void SelectPlanarFaces(Autodesk.Revit.DB.Document document)
{
        UIDocument uidoc = new UIDocument(document);
        ISelectionFilter selFilter = new PlanarFacesSelectionFilter(document);
        IList<Reference> faces = uidoc.Selection.PickObjects(ObjectType.Face, 
                selFilter, "Select multiple planar faces");
}

public class PlanarFacesSelectionFilter : ISelectionFilter
{
        Document doc = null;
        public PlanarFacesSelectionFilter(Document document)
        {
                doc = document;
        }
        
        public bool AllowElement(Element element)
        {
                return true;
        }
        
        public bool AllowReference(Reference refer, XYZ point)
        {   
                if (doc.GetElement(refer).GetGeometryObjectFromReference(refer) is PlanarFace)
                {
                        // Only return true for planar faces. Non-planar faces will not be selectable 
                        return true; 
                }
                return false;
        }
}

選択した要素から要素を取得する方法については、「ウォークスルー: 選択した要素を取得する」(「スタートアップ ガイド」セクション)を参照してください。