miki969696

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)    收藏  举报

导航