Revit二次开发-如何调用Revit API实现管道打断?

如何调用Revit API实现管道打断?

之前写过关于管线打断的功能(详见我第上一编文章),可实现管线打断,使用的过程中发现风管如果存在有风道末端的时候,管线打断后移动或者偏移分管时会提示 风道末端需附着到风管。如何解决这个问题,我查看了资料,可以调用Revit API实现管道打断。直接上代码:

 public class BreakPipe: IExternalCommand
    {
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {

            try
            {
               
                    UIApplication uiapp = commandData.Application;
                    UIDocument uidoc = uiapp.ActiveUIDocument;
                    Document doc = uidoc.Document;
                    Selection sel = uidoc.Selection;
                    Reference reference = sel.PickObject(ObjectType.PointOnElement);

                    //选择Pipe上的第一个点(GlobalPoint获取点击的点)
                    var reffirstpoint = reference.GlobalPoint;

                    //选择Pipe上的第二个点
                    reference = sel.PickObject(ObjectType.PointOnElement);
                    var refsecondpoint = reference.GlobalPoint;

                    var elem = doc.GetElement(reference) as MEPCurve;
                    var pickpoint1 = (elem.Location as LocationCurve).Curve.Project(reffirstpoint).XYZPoint;
                    var pickpoint2 = (elem.Location as LocationCurve).Curve.Project(refsecondpoint).XYZPoint;

                    Transaction tr = new Transaction(doc);
                    tr.Start("打断管线");

                    var newid = MechanicalUtils.BreakCurve(doc, elem.Id, pickpoint1); //MechanicalUtils.BreakCurve  打断管线
                    var newelem = doc.GetElement(newid) as MEPCurve;
                    var newlocationCurve = newelem.Location as LocationCurve;
                    var startpoint = newlocationCurve.Curve.GetEndPoint(0);

                    //打断后保留的原MEPcurve
                    var locationCurve = elem.Location as LocationCurve;
                    var endpoint = locationCurve.Curve.GetEndPoint(1);

                    var psfir = Tools.Nearpoint(startpoint, pickpoint1, pickpoint2);
                    var psend = Tools.Nearpoint(endpoint, pickpoint1, pickpoint2);

                    //打断后管道位置
                    var newline1 = Line.CreateBound(psend, endpoint);//打断后保留的原MEPcurve
                    var newline2 = Line.CreateBound(startpoint, psfir); //newcurve line 

                    //Trans管道位置
                    locationCurve.Curve = newline1;
                    newlocationCurve.Curve = newline2;

                    tr.Commit();  
                }
            
            catch (Exception)
            {

            }
            return Result.Succeeded;
        }
    }

方法:

 public static class Tools
    {
       public static XYZ Nearpoint(XYZ pickpoint, XYZ firpiont, XYZ secpoint)
        {

            if (firpiont.DistanceTo(pickpoint) > secpoint.DistanceTo(pickpoint))
            {
                return secpoint;
            }
            else
            {
                return firpiont;
            }

        }
        
     }

分享一个自制Revit插件,本人是个BIM工程师,该插件是根据自己做工程一些经验和对插件功能的频繁度,自己整合开发功能,初衷是提高效率。
目前MagicTools的功能包括通用功能、土建、机电、审图、出图功能。还有好多功能都想做,如果有好的需求也可以提,后续有新增继续增加上去,努力弄个实用的插件,希望能帮到真正有需要的BIMer。
如有需要的可以加企鹅群:630552940

插件下载地址,免费试用
链接:https://pan.baidu.com/s/1GDnHeWwZ5r_HrnT3Mo7twA?pwd=jhlt
提取码:jhlt

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值