Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Revit二次开发之三通翻弯

Revit二次开发之三通翻弯

作者头像
一席青衣卧龙城
发布于 2022-04-21 04:50:06
发布于 2022-04-21 04:50:06
90800
代码可运行
举报
文章被收录于专栏:Revit二次开发Revit二次开发
运行总次数:0
代码可运行

年关将至,小编在这里提前祝福所有粉丝新春快乐。

疫情依旧,做好防护。

期待春风拂去一切阴霾,还我山河澄澈,岁月静好。

这是2021年的第一篇文章,又懒了很久,没有更新,今天来更新一下。

最近小编做管综的时候面对三通翻弯很麻烦,所以就想着写个插件来解决吧。这些思路想法给大家一些启发,有用就看看,没用大家还是一起去吃瓜吧。

看一下效果:

实现这一功能的思路和代码:

获得管道

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 Reference eleref = sel.PickObject(ObjectType.Element, pipeFilter, "选择要抬高的管道");
            Pipe pp = doc.GetElement(eleref) as Pipe;//获得管道
            

获取翻弯点

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Reference refPoint = sel.PickObject(ObjectType.PointOnElement, "选择翻弯点,按ESC则整根管道抬高");
                pointXYZ = refPoint.GlobalPoint;//翻弯点

获得管道的连接件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ConnectorSetIterator connectorSet1 = pp.ConnectorManager.Connectors.ForwardIterator();

找到所有连接器连接的连接器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 while (connectorSet1.MoveNext())
            {
                Connector conn = connectorSet1.Current as Connector;//管道的连接件
                if (conn.IsConnected == true)//是否有连接
                {
                    ConnectorSet connectorSet = conn.AllRefs;//找到所有连接器连接的连接器
                    ConnectorSetIterator csiChild = connectorSet.ForwardIterator();
                }    


‍ 5.将连接断开

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 connected.DisconnectFrom(conn);

6.旋转管件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/// <summary>
        /// 旋转管件
        /// </summary>
        /// <param name="doc"></param>
        /// <param name="connected"></param>
        /// <param name="jd"></param>

        public void ConnRotateElements(Document doc, Connector connected, double jd)
        {

            XYZ coxyz = ((connected.Owner) as FamilyInstance).HandOrientation;
            var location = (((connected.Owner) as FamilyInstance).Location as LocationPoint).Point;//管件坐标点
            var anxisline = Line.CreateUnbound(location, coxyz);//管件坐标点和管线方向画轴线
            ElementTransformUtils.RotateElement(doc, connected.Owner.Id, anxisline, Math.PI / jd);
            doc.Regenerate();//更新revit文档

        }

7.创建竖直管道

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/// <summary>
        /// 创建竖直管道
        /// </summary>
        /// <param name="doc"></param>
        /// <param name="pp"></param>
        /// <param name="conn"></param>
        /// <param name="value"></param>
        /// <returns></returns>

        public Pipe CreateVerticalPipe(Document doc, Pipe pp, Connector conn, double value, bool connTrue)
        {
            //pp.GetParameters("偏移量")[0].Set(pp.GetParameters("偏移量")[0].AsDouble() + value);
            XYZ xYznewpp = null;
            Curve newcurve = null;
            //获取原管线的坐标
            Curve curvepp = ((pp.Location) as LocationCurve).Curve;
            XYZ xYZpp0 = curvepp.GetEndPoint(0);
            XYZ xYZpp1 = curvepp.GetEndPoint(1);


            Pipe pi = doc.GetElement(ElementTransformUtils.CopyElement(doc, pp.Id, xYZpp0).ElementAt(0)) as Pipe;//复制管道



            ConnectorManager connp = pi.ConnectorManager;
            ConnectorSetIterator connpse = connp.Connectors.ForwardIterator();
            XYZ xYZ0 = conn.Origin;//连接件原点

            while (connpse.MoveNext())
            {
                Connector connpipe = connpse.Current as Connector;
                XYZ xYZp = connpipe.Origin;

                //XYZ connxyz = ((conn.Owner.Location) as LocationPoint).Point;
                XYZ xyznew = new XYZ(xYZ0.X, xYZ0.Y, xYZ0.Z);


                xYznewpp = new XYZ(xYZ0.X, xYZ0.Y, xYZ0.Z + value);
                newcurve = Line.CreateBound(xYznewpp, xyznew);
                ((pi.Location) as LocationCurve).Curve = newcurve;//管道替代


                if (connTrue)//是否要穿连接
                {


                    if ((xYZp.DistanceTo(xYZ0) * 304.8) == 0)
                    {

                        conn.ConnectTo(connpipe);

                    }

                }

            }
            return pi;
        }

8.原来的管道复制缩短替换

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 Pipe ppNew2 = doc.GetElement(ElementTransformUtils.CopyElement(doc, pp.Id, xYZpp0).ElementAt(0)) as Pipe;//复制管道
                Line newcurve2 = Line.CreateBound(new XYZ(xYZLg2.X, xYZLg2.Y, xYZpp0.Z), lineXYZ);
                ((ppNew2.Location) as LocationCurve).Curve = newcurve2;//管道替代
                ppNew2.GetParameters("偏移量")[0].Set(pp.GetParameters("偏移量")[0].AsDouble() + value);

9.创建弯头

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/// <summary>
        /// 创建两个管道的弯头
        /// </summary>
        /// <param name="doc"></param>
        /// <param name="pipe1"></param>
        /// <param name="pipe2"></param>
        public void CreatElbowFittingPipe(Document doc, Pipe pipe1, Pipe pipe2)
        {
            ConnectorManager connm1 = pipe1.ConnectorManager;//管道1的连接件
            ConnectorSetIterator connse = connm1.Connectors.ForwardIterator();
            List<Connector> connlist = new List<Connector>();

            while (connse.MoveNext())
            {
                Connector conn1 = connse.Current as Connector;
                connlist.Add(conn1);


            }
            try
            {


                ConnectorManager manager = pipe2.ConnectorManager;//管道2的连接件
                ConnectorSetIterator setIterator = manager.Connectors.ForwardIterator();

                while (setIterator.MoveNext())
                {
                    Connector conn2 = setIterator.Current as Connector;
                    connlist.Add(conn2);
                }
                for (int i = 0; i < connlist.Count; i++)
                {
                    for (int j = 0; j < connlist.Count; j++)
                    {
                        try
                        {
                            // MessageBox.Show((connlist[i].Origin.DistanceTo(connlist[j].Origin)*304.8).ToString());
                            if (connlist[i].Origin.DistanceTo(connlist[j].Origin) < 100 / 304.8 && connlist[i].IsConnected == false)
                            {
                                doc.Create.NewElbowFitting(connlist[i], connlist[j]);


                            }
                        }
                        catch
                        {
                        }

                    }
                }
            }
            catch
            {

            }





        }


基本上就是这么一个过程。有问题可以留言,小编看见会解答。平时没有放出留言的习惯,所以留言就小编可见,哈哈哈哈哈哈哈。。。。。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 精讲Revit二次开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Revit二次开发小案例之喷头与管道自动连接
最近小编在使用某榄山翻喷淋的模型的时候,发现有很多的喷淋喷头和管道都没办法自动连接,而且喷淋的量比较大,因此写了一个自动喷头与管道连接的插件让其自动连接,分享一下方法和代码。
一席青衣卧龙城
2022/04/21
9730
Revit二次开发小案例之喷头与管道自动连接
这是一期Revit二次开发小案例(自动布置支吊架)
之前几期讲过很多创建实例的文章,我们这次来应用一下,平时是不是做支吊架要手工来点很麻烦呢?现在我们做一个小程序让他自动把支吊架布上吧!
一席青衣卧龙城
2022/04/21
1.3K0
这是一期Revit二次开发小案例(自动布置支吊架)
Revit二次开发——多管道线性标注(第十八期)
2020年还真的是见证历史的一年,疫情爆发,美元熔断,原油暴跌,所以是玛雅预言的2012推迟了?
一席青衣卧龙城
2022/04/21
7670
Revit二次开发——多管道线性标注(第十八期)
Revit二次开发案例之拆分梁(按照梁跨进行拆分梁打断梁)
作为2020的首篇文章,要给大家分享一篇小案例,关于梁如何拆分及自动遇柱拆分的方法。
一席青衣卧龙城
2022/04/21
2.1K0
Revit二次开发案例之拆分梁(按照梁跨进行拆分梁打断梁)
Revit二次开发之管线自动留洞(链接文件的管线自动留套管)
最近要进行管线留洞,核对施工图的留洞正确性,虽然很多插件都有这个功能,原理也很简单,无非就是创建一个洞口族或者套管族,毕竟插件要掏钱,那就自己码码代码生成一下吧。
一席青衣卧龙城
2022/04/21
6250
Revit二次开发之管线自动留洞(链接文件的管线自动留套管)
Revit二次开发案例之常规模型任意斜面创建钢筋
最近几天在研究如何创建钢筋,本来想的是在板上创建钢筋,奈何没有难度。后来在网上看见一个基坑喷锚网筋的模型,确实这个要是使用手动建模是非常费劲的,由于平时接触基坑的项目也不多,正好借此研究一下如何在倾斜的构件里创建钢筋,以备不时之需。当然以下这套方法同样适用于板钢筋的创建。
一席青衣卧龙城
2022/04/21
1.3K0
Revit二次开发案例之常规模型任意斜面创建钢筋
Revit二次开发——接触式过滤(第十七期)
这期讲一个接触式过滤选择,什么是接触式过滤选择呢?又有什么作用呢?请继续往下看……
一席青衣卧龙城
2022/04/21
5300
Revit二次开发——接触式过滤(第十七期)
Revit二次开发之创建宿主元素(门窗等)(第十四期)
Document.NewFamilyInstance Method (XYZ, FamilySymbol, Element, Level, StructuralType)
一席青衣卧龙城
2022/04/21
7710
Revit二次开发之创建宿主元素(门窗等)(第十四期)
Revit二次开发——创建楼板(第十二期)
不知道你们有多少人和小编一样天天加班4-5小时还走不了的加班狗。。。。。。最主要是。。。。。。。
一席青衣卧龙城
2022/04/21
1.3K1
Revit二次开发——创建楼板(第十二期)
Visio二次开发(二)----Shape的添加和连接
先说一说为什么我要用到Visio的二次开发,现在做的项目设计到了一些电子地图,下面的这张图片是美工画的一张地铁里面门禁布局图,而这些图在做项目的时候是需要用Visio画的,有提前画好的直接加载到项目中就可以使用,但是有些是需要通过代码也就是二次开发来实现的!
令仔很忙
2018/09/14
9840
Visio二次开发(二)----Shape的添加和连接
Revit二次开发——创建和切换标记(第十六期)
开头先讲一个问题,平时做施工图标记的时候一根梁的标记是非常多的,所以我们会通过切换标记的形式来切换标记(如下图所示),那这在代码中是如何实现的呢?
一席青衣卧龙城
2022/04/21
9510
Revit二次开发——创建和切换标记(第十六期)
Revit二次开发模板(第三期)
本期我们就正式上手开撸Revit二次开发的代码了,小伙伴们有没有很激动啊~~~反正小编是没有啦!因为这是一个无尽的深渊,至于原因,小伙伴们自己慢慢体会吧!一起痛并快乐着。
一席青衣卧龙城
2022/04/21
7040
[工作随笔]JumpServer排坑安装及二次开发
koko是用来连接Linux服务器的跳板机,原来用python写的,现在用go重写的
DriverZeng
2022/10/31
1.3K0
VB.NET CAD二次开发环境搭建及简单示例
首先,先来了解一下objectarx或者.net DLL 与AutoCAD版本兼容问题!
办公魔盒
2019/09/24
5.4K1
VB.NET CAD二次开发环境搭建及简单示例
ZanDB基于Celery定时任务的二次开发
ZanDB早期的任务需求中,大部分都是针对servant(跑在主机上的agent)做任务调度。也就是说,一期的任务系统,满足的是在特定时刻调用特定主机执行特定的脚本,包括一天的某个时间点,一周的某个时间点,每隔多少时间执行一次调用。
用户1278550
2018/08/09
8430
网页CAD二次开发(在线CAD SDK)用到的数学库
在CAD二次开发中, 正确的使用数学库是十分重要的, 我们不需要会很多数学知识, 只要会普通的四则运算和调用mxcad提供的api即可,通过[快速入门]了解了打开图纸后,如果要对图形进行处理,就需要各种计算, mxcad提供了一些类来参与计算或者表示一些数据结构,相关的API查询如下:
梦想云图网页CAD
2024/06/20
1000
网页CAD二次开发(在线CAD SDK)用到的数学库
微服务架构中,二次浅封装实践
分布式系统中存在很多拆分的服务,在不断迭代升级的过程中,会出现如下常见的棘手情况:
知了一笑
2021/11/30
5280
微服务架构中,二次浅封装实践
React与Koa一起打造一个仿稀土掘金全栈个人博客(技术篇)
那么我们需要精简一下。注意原来的App.js我改成App.jsx。因为 React 使用 JSX 来替代常规的 JavaScript,所以用JSX比较好。
Vam的金豆之路
2021/11/30
1.5K0
React与Koa一起打造一个仿稀土掘金全栈个人博客(技术篇)
Nginx脆弱性一览表
注意:本文分享给安全从业人员、网站开发人员以及运维人员在日常工作防范恶意攻击,请勿恶意使用下面介绍技术进行非法攻击操作。。
全栈工程师修炼指南
2022/09/29
1.1K0
Nginx脆弱性一览表
爬虫框架scrapy
Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中。 其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的, 也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。
菲宇
2019/06/12
1.8K0
爬虫框架scrapy
推荐阅读
相关推荐
Revit二次开发小案例之喷头与管道自动连接
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验