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;
}
}
}
效果如下图: