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;
        }
    }
}

 效果如下图:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值