Revit二次开发,如何选点,如何在Revit界面中选点

对于新手第一次做Revit二开来讲,有时候搞不清楚怎么选点。别人是不是这样我不知道,至少我当时是这样的。

如上图所示,这是Revit的选择器Api,位于Autodesk.Revit.UI.Selection.Selection中,从上面可以看到,不仅是选点,还可以选物选框选盒子。

另外中国程序员通常不太注意的一件事:该选择器是非托管资源,也就是你不释放的话,是会使得内存不断提升的。即所谓的内存泄露。使用Selection选择器后,要及时释放。

本文仅以选点来举例说明,选点是最常用的,相对而言也较简单。

using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Architecture;
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Selection;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;

namespace Create3DView
{
    /// <summary>
    /// 创建3d视图
    /// </summary>
    /// <creator>marc</creator>
    [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
    [Autodesk.Revit.Attributes.Regeneration(Autodesk.Revit.Attributes.RegenerationOption.Manual)]
    [Autodesk.Revit.Attributes.Journaling(Autodesk.Revit.Attributes.JournalingMode.NoCommandData)]
    public class DefaultCommand : IExternalCommand
    {
        /// <summary>
        /// 执行指令
        /// </summary>
        /// <param name="commandData"></param>
        /// <param name="message"></param>
        /// <param name="elements"></param>
        /// <returns></returns>
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            var activeDocument = commandData.Application.ActiveUIDocument;

            XYZ[] points = new XYZ[2];
            using (var selection = activeDocument.Selection)
            {
                ObjectSnapTypes snapTypes = ObjectSnapTypes.Endpoints | ObjectSnapTypes.Intersections;
                for (var i = 0; i < 2; i++)
                {
                    points[i] = selection.PickPoint(snapTypes, "请选择一个端点或者交点");
                }
            }

            string text = $"您选择的第1个点是 {points[0]},\r\n第2个点是 {points[1]}";
            TaskDialog.Show("提示", text);

            return Result.Succeeded;
        }
    }
}

上述代码运行结果如下:

源码下载地址:https://download.csdn.net/download/mazhiyuan1981/12881361