revit api机电二次开发 获取水管Pipe的curve
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Plumbing;
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Selection;
using System;
using System.Diagnostics;
using System.IO.Pipelines;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Interop;
// 外部命令入口类
[Transaction(TransactionMode.Manual)]
public class WallAndFloorCommand : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
UIApplication uiapp = commandData.Application;
UIDocument uid = uiapp.ActiveUIDocument;
Document doc = uid.Document;
using (Transaction tr1 = new Transaction(doc, "选择管道"))
{
tr1.Start();
Reference re1 = uid.Selection.PickObject(ObjectType.Element, "选择一个管道");
Element ele1 = doc.GetElement(re1);
// 正确的方式:检查元素类别或使用 as 操作符
if (ele1 is Autodesk.Revit.DB.Plumbing.Pipe pipe )
{
Autodesk.Revit.DB.Plumbing.Pipe p1 = ele1 as Autodesk.Revit.DB.Plumbing.Pipe;
if (p1 != null)
{
Location cu1 = p1.Location;
if(cu1 is LocationCurve loc1)
{
Curve c1 = loc1.Curve;
double d1 = c1.Length * 304.8; // 英尺转毫米
TaskDialog.Show("管道信息", $"管道长度{d1}");
}
else if(cu1 is LocationPoint loc2)
{
XYZ p = loc2.Point;
TaskDialog.Show("管道信息", $"管道位置点:{p}");
}
}
}
else
{
TaskDialog.Show("错误", "请选择一个管道元素!");
}
tr1.Commit();
}
return Result.Succeeded;
}
}
posted on 2025-09-08 21:29 sswsswssw1996 阅读(34) 评论(0) 收藏 举报
浙公网安备 33010602011771号