机电管道二次开发

MEP系统

连接件

连接方法

弯头:Document.NewElbowFitting(Connector connector1, Connector connector2)
三通:Document.NewTeeFitting
四通:Document.NewCrossFitting
过渡件:Document.NewTransitionFitting
连接头:Document.NewUnionFitting

获取连接件的函数

获取构件位于指定点处的连接件

管道连接实例

自动创建风管弯头
本案例中出现冒泡排序相关交点之间的距离

在进行管道开发时还是需要直接套用案例,using引用部分内容比预先设置的模板内容存在添加;

管道相关开发

管线划分

管道Pipe
风管Duct
桥架CableTray
三者统称为MEPCurve

管线创建方法汇总

风管创建:Duct.Create
软风管创建:FlexDuct.Create
风管占位符:Duct.CreatePlaceholder
管道:Pipe.Create
软管:FlexPipe.Create
桥架:CableTray.Create

创建风管实例

自动创建风管弯头
创建风管

综合案例:管线打断

获取定位线
投影获取选择点
新定位线
复制原管
拾取目标管道
获取连接件
获取对应连接件
获取新连接件
周边连接件复原
删除原管

管线打断综合案例
案例待完善点:若管线两端无对应的连接件,运行程序会出现一个报错,即未考虑fittingconnector为null的情况,代码完善方案参考后续的自动管线翻弯综合案例

分步划分综合案例

拾取目标管段
获取目标管段及目标点,获取管段连接件

 UIDocument uidoc = commandData.Application.ActiveUIDocument;
            Document doc = uidoc.Document;
            //选取需要打断的线,点选位置即为端点
            MEPCurveSelectionFilter filter = new MEPCurveSelectionFilter();
            Reference reference = uidoc.Selection.PickObject(ObjectType.Element, filter, "点选管线");
            XYZ pickPoint = reference.GlobalPoint;
            //获取选择的管线对象
            MEPCurve mEPCurve = doc.GetElement(reference) as MEPCurve;
            //获取原来的定位线、端点
            Line line = (mEPCurve.Location as LocationCurve).Curve as Line;
            XYZ p1 = line.GetEndPoint(0);
            XYZ p2 = line.GetEndPoint(1);
            //获取管道起终点的连接件
            ConnectorSet conSet = mEPCurve.ConnectorManager.Connectors;
            Connector connectorStart = ConnectorAtPoint(conSet, p1);
            Connector connectorEnd = ConnectorAtPoint(conSet, p2);

获取对应连接件

 //关键步骤1:获得与指定连接件相连的连接件
Connector fittingConstart = GetConToConctor(connectorStart);
Connector fittingConEnd = GetConToConctor(connectorEnd);

需要参考的方法:获取对应连接件

拾取点到定位线上的投影

 //将拾取点投影到管线定位线上获取投影点
 XYZ newPoint = line.Project(pickPoint).XYZPoint;

根据拾取点插入,创建新的定位线

     //将线以投影点为界分成两段新定位线
            Line line1 = Line.CreateBound(newPoint, p1);
            Line line2 = Line.CreateBound(newPoint, p2);

复制原管道,以新定位线创新管道,删除原管道

  //新建并开启事务
            Transaction transaction = new Transaction(doc, "管线打断");
            transaction.Start();
            //关键步骤2:复制管线,并将其定位线设为新定位线
            MEPCurve mEPCurve1 = CopyMEPToLine(doc, mEPCurve, line1);
            MEPCurve mEPCurve2 = CopyMEPToLine(doc, mEPCurve, line2);
            //删除原来的管线
            doc.Delete(mEPCurve.Id);

获取新管道的连接件,与相应的对应连接件连接

   //关键步骤3:恢复原有连接
            //获取新管线在原两端点处的Connector
            ConnectorSet newConSet1 = mEPCurve1.ConnectorManager.Connectors;
            ConnectorSet newConSet2 = mEPCurve2.ConnectorManager.Connectors;
            Connector newConStart = ConnectorAtPoint(newConSet1, p1);
            Connector newConEnd = ConnectorAtPoint(newConSet2, p2);
            //恢复与原管件的连接
            newConStart.ConnectTo(fittingConstart);
            newConEnd.ConnectTo(fittingConEnd);
            //提交事务
            transaction.Commit();
            return Result.Succeeded;

综合案例:管道翻弯避让(管道与风管碰撞)

自动管线翻弯
上述案例通过风管拾取自动对管线进行翻弯处理

猜你喜欢

转载自blog.csdn.net/waiting233/article/details/116533810