Revit二次開發,如何選點,如何在Revit界面中選點

對於新手第一次做Revit二開來講,有時候搞不清楚怎麼選點。別人是不是這樣我不知道,至少我當時是這樣的。

Revit二次開發,如何選點,如何在Revit界面中選點

如上圖所示,這是Revit的選擇器Api,位於Autodesk.Revit.UI.Selection.Selection中,從上面可以看到,不僅是選點,還可以選物選框選盒子。

另外中國程序員通常不太注意的一件事:該選擇器是非託管資源,也就是你不釋放的話,是會使得內存不斷提升的。即所謂的內存洩露。使用Selection選擇器後,要及時釋放。

本文僅以選點來舉例說明,選點是最常用的,相對而言也較簡單。

<code>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
{
    /// 
    /// 創建3d視圖
    /// 
    /// marc
    [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
    {
        /// 
        /// 執行指令
        /// 
        /// 
        /// 
        /// 
        /// 
        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;
        }
    }
}
/<code>

上述代碼運行結果如下:

Revit二次開發,如何選點,如何在Revit界面中選點

源碼下載地址:https://download.csdn.net/download/mazhiyuan1981/12881361


分享到:


相關文章: