revit二次开发 创建管道三通,管道四通。两根管、三根管、四根管
创建单跟水管
/// <summary>/// 创建水管Pipe/// </summary>/// <returns></returns>public Pipe CreatePipe(){FilteredElementCollector elements = new FilteredElementCollector(document);//得到管道系统List<PipingSystemType> pipingSystemTypes = elements.OfClass(typeof(PipingSystemType)).Cast<PipingSystemType>().ToList();PipingSystemType pipingSystemType = null;//管道类型foreach (PipingSystemType item in pipingSystemTypes){if (item.Name.Equals("家用冷水")){pipingSystemType = item;break;}}FilteredElementCollector elements2 = new FilteredElementCollector(document);//得到管道类型List<PipeType> pipeTypes = elements2.OfClass(typeof(PipeType)).Cast<PipeType>().ToList();PipeType pipeType = null;//管道类型foreach (PipeType item in pipeTypes){if (item.Name.Equals("标准")){pipeType = item;break;}}Level level = document.ActiveView.GenLevel;XYZ point1 = uIDocument.Selection.PickPoint();XYZ point2 = uIDocument.Selection.PickPoint();//创建管道Pipe pipe = Pipe.Create(document, pipingSystemType.Id, pipeType.Id, level.Id, point1, point2);//设置参数Parameter parameter = pipe.get_Parameter(BuiltInParameter.RBS_OFFSET_PARAM);parameter.Set(2750.0.Tofoot());Parameter parameter2 = pipe.get_Parameter(BuiltInParameter.RBS_PIPE_DIAMETER_PARAM);parameter2.Set(150.0.Tofoot());PipingSystemType pipingSystemType1 = null;foreach (PipingSystemType item in pipingSystemTypes){if (item.Name.Equals("家用热水")){pipingSystemType1 = item;break;}}Parameter parameter3 = pipe.get_Parameter(BuiltInParameter.RBS_PIPING_SYSTEM_TYPE_PARAM);parameter3.Set(pipingSystemType1.Id);return pipe;}
创建三通 三根管
/// <summary>/// 创建三通 三根管/// </summary>/// <param name="mEPCurve1">管</param>/// <param name="mEPCurve2">管</param>/// <param name="mEPCurve3">管</param>public FamilyInstance CreateTee(MEPCurve mEPCurve1, MEPCurve mEPCurve2, MEPCurve mEPCurve3){//找出平行的两根管和找出不平行的一根管Line line1 = (mEPCurve1.Location as LocationCurve).Curve as Line;Line line2 = (mEPCurve2.Location as LocationCurve).Curve as Line;Line line3 = (mEPCurve3.Location as LocationCurve).Curve as Line;line1.GetEndPoint(1).Subtract(line1.GetEndPoint(0)).Normalize();//横管1MEPCurve parallelMEP1 = null;//横管2MEPCurve parallelMEP2 = null;//竖管MEPCurve verticalMEP = null;if (line1.Direction.IsAlmostEqualTo(line2.Direction) || line1.Direction.IsAlmostEqualTo(line2.Direction.Negate())){parallelMEP1 = mEPCurve1;parallelMEP2 = mEPCurve2;if (!line3.Direction.IsAlmostEqualTo(line1.Direction) && !line3.Direction.IsAlmostEqualTo(line1.Direction.Negate())){verticalMEP = mEPCurve3;}}else if (line1.Direction.IsAlmostEqualTo(line3.Direction) || line1.Direction.IsAlmostEqualTo(line3.Direction.Negate())){parallelMEP1 = mEPCurve1;parallelMEP2 = mEPCurve3;if (!line2.Direction.IsAlmostEqualTo(line1.Direction) && !line2.Direction.IsAlmostEqualTo(line1.Direction.Negate())){verticalMEP = mEPCurve2;}}else{parallelMEP1 = mEPCurve2;parallelMEP2 = mEPCurve3;if (!line1.Direction.IsAlmostEqualTo(line2.Direction) && !line1.Direction.IsAlmostEqualTo(line2.Direction.Negate())){verticalMEP = mEPCurve1;}}if (parallelMEP1 != null && parallelMEP2 != null && verticalMEP != null){double minVal = double.MaxValue;Connector parallelMEP1Con = null;Connector parallelMEP2Con = null;Connector parallelMEP3Con = null;foreach (Connector con1 in parallelMEP1.ConnectorManager.Connectors){foreach (Connector con2 in parallelMEP2.ConnectorManager.Connectors){double distance = con1.Origin.DistanceTo(con2.Origin);if (distance < minVal){minVal = distance;parallelMEP1Con = con1;parallelMEP2Con = con2;}}}if (parallelMEP1Con != null && parallelMEP1Con != null){minVal = double.MaxValue;foreach (Connector con in verticalMEP.ConnectorManager.Connectors){//连接器的点之间的距离double distance = con.Origin.DistanceTo(parallelMEP1Con.Origin);if (distance < minVal){minVal = distance;parallelMEP3Con = con;}}if (parallelMEP3Con != null){//创建三通return document.Create.NewTeeFitting(parallelMEP1Con, parallelMEP2Con, parallelMEP3Con);}}}return null;}
创建三通 两根管
/// <summary>/// 创建三通 两根管/// </summary>/// <param name="mEPCurve1">被垂直的管</param>/// <param name="mEPCurve2">垂直的管</param>/// <returns></returns>public FamilyInstance CreateTeeByToMEPCurve(MEPCurve mEPCurve1, MEPCurve mEPCurve2){Line mEPCurve1Line = (mEPCurve1.Location as LocationCurve).Curve as Line;Line mEPCurve2Line = (mEPCurve2.Location as LocationCurve).Curve as Line;//线到点的距离double distance1 = mEPCurve1Line.Distance(mEPCurve2Line.GetEndPoint(0));double distance2 = mEPCurve1Line.Distance(mEPCurve2Line.GetEndPoint(1));XYZ point = mEPCurve2Line.GetEndPoint(0);if (distance1 > distance2)point = mEPCurve2Line.GetEndPoint(1);//在mEPCurve1Line线上映射point点XYZ projectPoint = mEPCurve1Line.Project(point).XYZPoint;MEPCurve mEPCurve3 = BreakMEPCurve(mEPCurve1, projectPoint);//创建三通return CreateTee(mEPCurve1, mEPCurve3, mEPCurve2);}
创建四通 四根管
/// <summary>/// 创建四通 四根管/// </summary>/// <param name="mEPCurve1"></param>/// <param name="mEPCurve2"></param>/// <param name="mEPCurve3"></param>/// <param name="mEPCurve4"></param>/// <returns></returns>public FamilyInstance CreateCross(MEPCurve mEPCurve1, MEPCurve mEPCurve2, MEPCurve mEPCurve3, MEPCurve mEPCurve4){List<MEPCurve> mEPCurves = new List<MEPCurve>() { mEPCurve1, mEPCurve2, mEPCurve3, mEPCurve4 };Dictionary<int, Connector> keyValuePairs = new Dictionary<int, Connector>();for (int i = 0; i < mEPCurves.Count - 1; i++){//拿到两根管MEPCurve mEP1 = mEPCurves[i];MEPCurve mEP2 = mEPCurves[i + 1];//找两根管最近的连接器double minDistance = double.MaxValue;Connector connector1 = null;Connector connector2 = null;foreach (Connector con1 in mEP1.ConnectorManager.Connectors){foreach (Connector con2 in mEP2.ConnectorManager.Connectors){double distance = con1.Origin.DistanceTo(con2.Origin);if (distance < minDistance){minDistance = distance;connector1 = con1;connector2 = con2;}}}if (!keyValuePairs.ContainsKey(i)){keyValuePairs.Add(i, connector1);}if (!keyValuePairs.ContainsKey(i + 1)){keyValuePairs.Add(i + 1, connector2);}}List<Connector> connectors = new List<Connector>();for (int i = 0; i < keyValuePairs.Count; i++){Connector con1 = keyValuePairs[i];if (connectors.Contains(con1))continue;//con1的方向XYZ con1FX = con1.CoordinateSystem.BasisZ;for (int ai = i + 1; ai < keyValuePairs.Count; ai++){Connector con2 = keyValuePairs[ai];//con2的方向XYZ con2FX = con2.CoordinateSystem.BasisZ;if (con1FX.IsAlmostEqualTo(con2FX) || con1FX.IsAlmostEqualTo(con2FX.Negate())){connectors.Add(con1);connectors.Add(con2);}}}//创建四通FamilyInstance familyInstance = document.Create.NewCrossFitting(connectors[0], connectors[1], connectors[2], connectors[3]);//0与1平行 2与3平行return familyInstance;}
revit二次开发 创建管道三通,管道四通。两根管、三根管、四根管相关推荐
- Revit二次开发-创建IURibbon中使用相对地址
目录 前言 一.创建DLL文件 二.按钮类编写(UIRibbon) 1.程序集的引用 2.代码编写 3.完整代码 三.dll文件和addin文件的使用 四.最终效果 前言 我们在进行二次开发的时候 ...
- [Revit二次开发] 创建一个柱的族
完整项目代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...
- revit二次开发之找到与管道连接的连接器名称【比目鱼原创】
=========[更多高级应用请关注公众号]======== =================================== 很多时候我们都需要知道管道连接了哪些连接件,以下的代码就能帮助解 ...
- #Revit二次开发# 创建剖面视图
设置box的min和max只是设置box的范围大小.其中min和max的xyz方向的大小实际指的基于剖面视图坐标系.Box的原点和min,max可以确定位置关系:box的原点决定创建的剖面视图的原点. ...
- revit二次开发-创建族
通过文件路径载入族 并点击任意一点创建实例 代码如下: using Autodesk.Revit.Attributes; using Autodesk.Revit.DB; using Autodesk ...
- [Revit二次开发] 创建剖面并将视图切换至剖面
前言 在Revit建模过程及后期出图的时候都有需要用到剖面,然而每次我们都通过手动去创建剖面再去对剖面视图进行调整就会显得很麻烦,工作量也是相当的大. 如果我们通过使用RevitAPI只需要简单的代码 ...
- Revit二次开发“创建组遍历组Group”
group 就是吧一些有关系的对象放在一个组里面 [Transaction(TransactionMode.Manual)] [Regeneration(RegenerationOption.Manu ...
- revit二次开发 创建图纸图框,视图放到图框中心点位置
创建图纸 /// <summary>/// 创建图纸/// </summary>private void CreateViewSheet2(){FilteredElementC ...
- revit二次开发创建桥架、线管
创建桥架.线管 创建桥架 通过过滤器获取桥架类型 选择点 得到活跃视图标高 创建桥架 修改宽.高 完整代码 创建线管 获取线管类型 获取标高 获取点 创建 修改直径 完整代码 创建桥架 /// < ...
最新文章
- Quartz.net 定时任务矿建Demo
- 5位Mixin Network SDK作者分别获赠价值4千美金的50个XIN token
- PyTorch的损失函数和优化器
- 《SpringCloud超级入门》Eureka注册中心开启密码认证《十二》
- 坑爹的公交卡充值的流程
- Spark自定义分区(Partitioner)
- python字典和集合对象可以进行索引操作_建议收藏丨纯知识点:Python基础—字典、集合操作大全...
- 图像形态学运算之腐蚀-膨胀篇
- 简易学生管理系统(C语言)
- 计算机基础cpu知识,CPU基础知识大全详解
- pe系统如何读取手机_pe系统没有连接手机的驱动怎么办
- 易辅客栈第一套从零学辅助系列教程
- wps页眉怎么设置不同页码_Word:单双页页眉页码不同怎么设置?不同章节重新编码怎么设置?...
- 使用阿里云centos7.6进行steam挂卡(使用ASF,更新日期为2021.2.12)解决ASF服务器中文运行的问题
- FTP服务器是什么意思?FTP服务器怎么搭建?
- Java 第十一届 蓝桥杯 省模拟赛 元音字母辅音字母的数量
- 常用文件密码破解工具
- 网络爬虫js逆向解决网站登录RSA加密问题,不使用selenium如何实现登录,session维持登录状态请求爬取
- 正态总体参数的假设检验
- SharePoint Online:软件边界和限制