Revit二开——翻转喷头

Revit绘制喷淋时,有时需要翻转喷头调整喷头的方向,有的插件已经有此功能,不过是收费的,今天分享一下这个功能的实现思路及源代码。

  • 实现过程:
    1.通过喷头递归找到喷头连接件方向的三通弯头 或者 一端开放的管道。
    2.将递归查找过的元素打包。
    3.通过递归查找到的末端元素的相关信息,建立 旋转轴。
    4.在revit事务中将打包的元素,绕着第3部的旋转轴,旋转180°。
    5.代码中封装的方法请参照唐僧解瓦项目。
  • 代码如下
/// <summary>/// 上下喷转换/// </summary>[Transaction(TransactionMode.Manual)][Regeneration(RegenerationOption.Manual)][Journaling(JournalingMode.UsingCommandData)]public class Cmd_ModifySprinkler : IExternalCommand{public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements){UIApplication uiapp = commandData.Application;UIDocument uidoc = commandData.Application.ActiveUIDocument;Document doc = uidoc.Document;Selection sel = uidoc.Selection;View acview = uidoc.ActiveView;//UIView acuivew = uidoc.Activeuiview();var collector = new FilteredElementCollector(doc);var elementGroup = new List<Element>();//1 select sprinklervar sprinkler = sel.PickObject(ObjectType.Element, doc.GetSelectionFilter(m => m is FamilyInstance && m.Category.Id.IntegerValue == (int)BuiltInCategory.OST_Sprinklers)).GetElement(doc) as FamilyInstance;var mepmodel = sprinkler.MEPModel;var sprinklerCon = mepmodel.ConnectorManager.Connectors.Cast<Connector>().First(m => m.ConnectorType == ConnectorType.End);var backendEle = GetBackEndElement(sprinklerCon, ref elementGroup);var rotationAnxis = default(Line);if(backendEle is FamilyInstance ins){var location = (backendEle.Location as LocationPoint).Point;var temmodel = ins.MEPModel;var dir = temmodel.ConnectorManager.Connectors.Cast<Connector>().Where(m=>m.CoordinateSystem.BasisZ.IsPerpendicular(sprinklerCon.CoordinateSystem.BasisZ)).First().CoordinateSystem.BasisZ;  rotationAnxis = Line.CreateUnbound(location, dir);}else if(backendEle is Pipe p){var opencon = p.ConnectorManager.Connectors.Cast<Connector>().First(m => !m.IsConnected);var location = opencon.Origin;var originalDir = opencon.CoordinateSystem.BasisZ;var anxisDir = opencon.CoordinateSystem.BasisX;rotationAnxis = Line.CreateUnbound(location, anxisDir);}Transaction ts = new Transaction(doc, "翻转喷头");ts.Start();ElementTransformUtils.RotateElements(doc, elementGroup.Select(m=>m.Id).ToList(), rotationAnxis, Math.PI );ts.Commit();//sel.SetElementIds(new List<ElementId>() { (backendEle.Id) });return Result.Succeeded;}public Element  GetBackEndElement(Connector con ,ref List<Element> elegroup){Element result = default(Element);elegroup.Add(con.Owner);var connectedCon = con.GetConnectedCon(); //ele1if (connectedCon is null || connectedCon.ConnectorType == ConnectorType.Logical){result = con.Owner;return  result;}var backCon = connectedCon.GetBackConInStraight();//ele1if (backCon == null) { result = connectedCon.Owner; elegroup.Add(result); }else{result = GetBackEndElement(backCon, ref elegroup);}return result;}}
更多Revit二开知识尽在唐僧课堂!

Revit二开——翻转喷头相关推荐

  1. revit二开之过滤族(Family)

    一.背景 小伙伴们在做revit二开时,可能会有过滤族(Family)的需求,如何实现呢? 二.方法 通过以下代码,就可以过滤出指定FamilyName的族了. var famType = new F ...

  2. Revit二开--批量修改视图范围(revit宏)

    Revit二开–批量修改视图范围 团队协作建模过程中,中心文件的样板视图范围不满足你的需求怎么改, 方法一创建一个样板,把所有的目标视图应用样板即可. 方法二使用revit宏命令 遍历文档中的视图 然 ...

  3. Revit二开--复制视图裁剪

    Revit二开–复制视图裁剪 在Revit使用过程中, 当我们想要把视图的裁剪范围调整为相同的大小和位置的时候,手动操作很难达到我们想要的结果,只能调整的尽可能的相似.还有人说可以事先调整好裁剪范围然 ...

  4. Revit二开——Revit族“连接件说明“参数的获取

    Revit二开--Revit族"连接件说明"参数的获取 Revit族"连接件说明"参数在项目文档中获取的方法: 1.连接件说明参数 如下图所示(参数值为 aaa ...

  5. Revit二开-设备连接(以消火栓为例)

    #Revit二开-设备连接(以消火栓为例) 在Revit建模过程中,系统自带的设备连接功能往往让我们对其又爱又恨,爱其自动连接,省掉了好几步操作,恨其傻缺无比,不解风情,不懂我们的想法和需要.例如消火 ...

  6. revit二开之关联族参数的实现

    一.背景 小伙伴们在revit二次开发时,可能需要将子族的参数关联到其所在的嵌套族,那么如何实现呢? 二.思路 先明白三件事: 1.子族在嵌套族中是以FamilyInstance的状态存在的 2.关联 ...

  7. revit二开之获取嵌套族中的子族(过滤族)

    欢迎加入BIM行业开发交流1群 群号:711844216(满),二群群号:1016453207 一.背景 小伙伴们在进行revit开发时,可能有过滤族的需求.这里的族(Family)不是族类型(Fam ...

  8. Revit二开 批量链接模型

    往往有时候提交项目需要整合各专业的模型,需要链接模型,模型太多不想一个个点,可以批量插入链接模型或重新载入模型,下面直接上代码: MagicTools批量链接功能: 载入模型用到 OpenFileDi ...

  9. Revit二开 VS附加Revit时闪退程序

    使用vs2015开发,设置启动Revit程序后会闪退,并给出如下错误提示: 程序"[8396] Revit.exe"已退出,返回值为 -529697949 (0xe06d7363) ...

最新文章

  1. php输出带的字符串吗,php输出含有“#”字符串的方法
  2. Java 日志框架适配/冲突解决方案(值得收藏)
  3. [BZOJ 1112] [POI2008] 砖块Klo 【区间K大】
  4. 计算机组成原理作业1王诚,计算机组成原理 王诚 董长洪 宋佳兴
  5. DbVisualizer Personal 7.0 数据库连接工具免安装版本获取,直接解压即可使用!
  6. Android动态赋权限,安卓6.0以上动态添加权限超简单模板
  7. pandas分析各国家交易情况
  8. c语言百文百鸡问题答案,python_百文买百鸡问题
  9. pymongo 的使用实例(超细)
  10. 95-10-035-启动-Metrics
  11. Win10下python不同版本同时安装并解决pip共存问题
  12. 最新行政区划代码省市区数据库-行政区域查询API
  13. WPS Office 2020 for Mac(wps2020)3.8.0(6081)中文
  14. 社会软件力量:六度分隔理论
  15. linux下查java版本_linux如何检查Java版本
  16. 严蔚敏《数据结构》——导航
  17. multi-head GAT
  18. 【渝粤题库】陕西师范大学202501 法语(二)作业
  19. 各种软件如何双开,三开,N开,包括微信,qq等。
  20. 呵,偶居然也能“说教”了

热门文章

  1. 什么是php数据库永久连接_PHP数据库永久连接
  2. 计算机视觉 OpenCV【灰度原理和公式】
  3. 光标切换键Insert
  4. 茅侃侃的情义江湖:不只有商业
  5. 2021.12.15-12.17模拟交易(两次交易)
  6. 论文写作的六大步骤(含通关方法)
  7. 神舟战神笔记本电脑-加装内存条教程
  8. 2023计算机毕业设计-校园书法绘画比赛评分系统(springboot+mysql)-JAVA.JSP(论文+开题报告+运行)
  9. 2022年代码写春联,附带源码。。
  10. 【华为机试真题 Python】火星文计算