1. 获取翻弯后产生的所有管道节点坐标

  2. 创建所有节点构成的管道定位线

  3. 创建管道

  4. 获取所有管道上的连接器

  5. 遍历所有连接器,得到相同位置处,不同宿主的连接器

  6. 创建连接器

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using Autodesk.Revit.ApplicationServices;
    using Autodesk.Revit.Attributes;
    using Autodesk.Revit.DB;
    using Autodesk.Revit.UI;
    using Autodesk.Revit.UI.Selection;
    using Autodesk.Revit.DB.Plumbing;namespace test
    {[Transaction(TransactionMode.Manual)][Regeneration(RegenerationOption.Manual)]public class TestCommand: IExternalCommand{public Result Execute(ExternalCommandData commandData, ref string messages, ElementSet elements){UIDocument uiDoc = commandData.Application.ActiveUIDocument;Document doc = uiDoc.Document;//交互选择第一个点Reference reference = uiDoc.Selection.PickObject(ObjectType.PointOnElement,new Pipefilter());XYZ point1 = reference.GlobalPoint;//交互选择第二个点Reference reference2 = uiDoc.Selection.PickObject(ObjectType.PointOnElement,new Pipefilter());XYZ point2 = reference2.GlobalPoint;//获取管道Pipe pipe = doc.GetElement(reference) as Pipe;//获取管道定位线LocationCurve locationcurve = pipe.Location as LocationCurve;//获取管道定位起点终点XYZ start = locationcurve.Curve.GetEndPoint(0);XYZ end = locationcurve.Curve.GetEndPoint(1);//上面的点是管道表面的点,需要投影到管道中心定位线上XYZ propoint1 = locationcurve.Curve.Project(point1).XYZPoint;XYZ propoint2 = locationcurve.Curve.Project(point2).XYZPoint;//创建一个列表来存储所有的线List<Line> lines = creatlines(start, end, propoint1, propoint2, 40);//创建一个管道列表来存储生成的所有管道List<Pipe> pipes = new List<Pipe>();using (Transaction transaction = new Transaction(doc)){transaction.Start("创建管道");//通过遍历生成的所有定位线来创建管道foreach (Line line in lines){Pipe newpipe = doc.GetElement(ElementTransformUtils.CopyElement(doc, pipe.Id, new XYZ(0, 0, 0)).ElementAt(0)) as Pipe;LocationCurve newpipelocationcurve = newpipe.Location as LocationCurve;newpipelocationcurve.Curve = line;pipes.Add(newpipe);}doc.Delete(pipe.Id);transaction.Commit();}//获取所有管道上所有的连接器List<Connector> connectors = new List<Connector>();foreach (Pipe pipe1 in pipes){ConnectorSet connects = pipe1.ConnectorManager.Connectors;foreach (Connector connector in connects){connectors.Add(connector);}}//遍历连接器列表,找到同一位置处不同管道上的连接器,进而创建弯头for (int i = connectors.Count - 1; i > 0; i--){Connector con = connectors[i];Connector co = nearconnector(con, connectors);if (co != null){using (Transaction transaction2 = new Transaction(doc)){transaction2.Start("创建弯头");doc.Create.NewElbowFitting(con, co);transaction2.Commit();}}}return Result.Succeeded;}/// <summary>/// 该方法传入翻弯时产生的所有管道节点,返回翻弯生成的所有管道定位线/// </summary>/// <param name="管道起点start"></param>/// <param name="管道终点end"></param>/// <param name="交互选择的第一点propoint1"></param>/// <param name="交互选择的第二点propoint2"></param>/// <param name="偏移值(翻弯高度)offsetvalue"></param>/// <returns></returns>private List<Line> creatlines(XYZ start, XYZ end, XYZ propoint1, XYZ propoint2, double offsetvalue){List<Line> lines = new List<Line>();Line thispipecurve = Line.CreateBound(propoint1, near(start, end, propoint1));lines.Add(thispipecurve);Line newpipecurve = Line.CreateBound(propoint2, near(start, end, propoint2));lines.Add(newpipecurve);XYZ propoint1offset = propoint1 + new XYZ(0, 0, offsetvalue);XYZ propoint2offset = propoint2 + new XYZ(0, 0, offsetvalue);Line offsetline = Line.CreateBound(propoint1offset,propoint2offset);lines.Add(offsetline);Line line1 = Line.CreateBound(propoint1, propoint1offset);lines.Add(line1);Line line2 = Line.CreateBound(propoint2, propoint2offset);lines.Add(line2);return lines;}//判断两个交互选择得到的点离管道的两端分别那个最近public XYZ near(XYZ startpoint,XYZ endpoint,XYZ pickedpoint){if (startpoint.DistanceTo(pickedpoint) <endpoint.DistanceTo(pickedpoint)){return startpoint;}return endpoint;}//创建一个过滤器,使选点的时候只在管道上选择public class Pipefilter : ISelectionFilter{public bool AllowElement(Element elem){if (elem is Pipe){return true;}return false;}public bool AllowReference(Reference reference, XYZ position){return true;}}//遍历弯头,得到相同位置处另一个管道的连接器public Connector nearconnector(Connector con,List<Connector> connectors){foreach (Connector connector in connectors){if (con.Origin.IsAlmostEqualTo(connector.Origin)&&con.Owner.Id!=connector.Owner.Id){return connector;}}return null;}}
    }

Revit二次开发 ----> 管道翻弯相关推荐

  1. revit二次开发--异形柱翻模

    最近写了一个revit二次开发的异形柱翻模的功能,柱子翻模网上有很多插件可以用,我用的比较多的是红瓦,其中异形柱的翻模对于图纸的要求较高,有很多不准确的地方.很多异形柱,整体翻模出来是错误的,翻出来之 ...

  2. Revit二次开发 管道弯头、三通、四通的生成代码

    原文链接:https://blog.csdn.net/qq_39412924/article/details/83110866 当进行管道生成的时候,发现二次开发基本教程中仅有弯头的示例,于是我补充上 ...

  3. Revit二次开发之管道避让

    管道翻弯避避让 本项目实现了管道碰撞的时候跳跃或者翻弯的方式实现避让的功能.废话不多说,直接上代码 这个Command类是项目的主要类. using System; using System.Coll ...

  4. revit橄榄山插件出图有管道“翻弯标记”吗?

    revit橄榄山插件出图有管道翻弯标记吗?时常有朋友私信问:有没有管道翻弯标记的插件?或者能不能搞一个这样的功能,橄榄山和建模大师有没有?或者给介绍一个有翻弯标记的revit插件?[笑哭]表情...我 ...

  5. Revit二次开发---关于CAD翻模第一步

    2019年6月6日,南京,暴雨. 笔者改善以前关于翻模的一些想法,以减少对翻模图纸的初步处理. 以前使用使用直接链接CAD的方法生成各种三维模型.链接进来的CAD图纸需要处理,且文字读取较为困难,故使 ...

  6. 二次开发 英文_Revit二次开发——异形柱翻模插件的开发思路

    BIM管线综合项目中,结构模型柱梁板搭建,属于最没有营养的 而结构模型的精确是后续开展的前提 结构主体自动化建模--人工校核梁尺寸标高.板厚等,是效率较高的工作流程 看市面上翻模插件的数量就知道需求有 ...

  7. Revit二次开发 ---->创建revit选项卡

    1.创建一个选项卡,添加选项卡名称 2.在选项卡下方创建一块区域(Panel) para1:选项卡名称,para2:是该区域名称 3.创建一个按钮数据PushButtonData para1:可以随便 ...

  8. Revit二次开发笔记

    Revit二次开发笔记: 配置:以revit 2021为例 Visual studio中的配置 以下是如果要翻成EnergyPlus模型需要的配置 如何安装Addin Manger和lookup插件 ...

  9. Revit二次开发——自动生成构件图(总结)

    之前测试导出构件图的功能实现,拆分了各模块分布进行测试: Revit二次开发--一键导出构件图(1) Revit二次开发--叠合板自动配筋(2) Revit二次开发--自动标注钢筋思路(3) 本篇为这 ...

  10. 十年盘点,Revit二次开发这条路不易

    年底盘点Revit插件研发企业的不同发展形态,有停止更新的,有放弃的,有继续在大力研发的.相比AutoCAD当年的格局,看起来Revit插件公司失败概率更高.记得黄亚斌先生说过99%的插件公司会死掉, ...

最新文章

  1. 一些实用的 Javascript 代码
  2. python3编译caffe错误:cannot find -lboost_python3
  3. Mongodb在Linux下的安装和启动和配置
  4. STL源码剖析 set
  5. admin后台菜单栏的实现
  6. intellij Find Usage 查找符号使用快捷键alt + f7在ubuntu下无法使用的解决方法
  7. python 任务计划程序_10.Selenium+Python+任务计划程序实现定时发送邮件
  8. js对象写入键值对_41 利用字面量创建对象
  9. Java垃圾回收机制分析
  10. 利用卷积进行序列到序列学习
  11. Django项目目录及项目文件介绍
  12. 未来智慧园区白皮书(2022年) 附下载
  13. 软件架构设计入门学习
  14. 关于计算机的英语作文初中,computer初中英语作文范文
  15. QuickCHM V2.6
  16. vue实现PC端和移动端的界面切换
  17. 什么是失血模型和充血模型?(DDD)
  18. 【学习档案】word文档转为XML格式
  19. 第149篇 笔记-web3
  20. USB转多路串口 USB hub USB扩展

热门文章

  1. 论文阅读-Detecting and Recovering Sequential DeepFake Manipulation(SeqFakeFormer)
  2. 台式计算机怎么查是32位还是64位,Win7系统怎么看电脑是32位还是64位?
  3. postfix邮箱服务器安装和配置
  4. 无root权限怎么完全卸载系统自带软件(捆绑软件)
  5. k8s中Ingress安装
  6. 第三章作业题3--队列
  7. 计算历史区间的收益率,用前复权还是后复权?
  8. 【动手学习深度学习】01 安装运行环境——Windows
  9. 初中数学知识点总结_初中数学知识点汇总大全【超详细】,初中数学知识点归纳公式大全...
  10. 【OpenGL ES】EGL简介