Revit二次开发,获取柱子、梁等的两端坐标

Revit获取柱、梁等图元的坐标时,可以使用下面的代码:

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

namespace GetPoints
{
    /// <summary>
    /// Revit二次开发,获取柱子、梁等的两端坐标
    /// </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;
            var document = activeDocument.Document;

            Result result = Result.Succeeded;

            Transaction tran = new Transaction(document, Guid.NewGuid().ToString());
            try
            {
                tran.Start();

                Reference @object = activeDocument.Selection.PickObject(ObjectType.Element);
                var element = document.GetElement(@object.ElementId);
                var locationCurve = element.Location as LocationCurve;

                var first = locationCurve.Curve.GetEndPoint(0);
                var sencond = locationCurve.Curve.GetEndPoint(1);

                TaskDialog.Show("坐标",
                    $"第一个点:" + first.ToString() +
                    $"\\n" +
                    $"第二个点" + sencond.ToString());

                tran.Commit();
            }
            catch (System.Exception exp)
            {
                tran.RollBack();
                result = Result.Failed;

                Debug.WriteLine(exp.Message);
            }
            finally
            {
                tran.Dispose();
            }

            return result;
        }
    }
}

 效果如下图: