Revit MEP中Connector连接器的问题

在Revit二次开发中,相较于土建模块多出了管道系统模块,每个机电管件与管道之间连接由Connector控制,从而将整个管道系统串联起来
如果在LookUp中点开管道可以看到分为ConnectorManagement 与 All Refs两个类,之中都存储了Connector,刚接触的人可能会觉得比较乱

如果从喷淋开始依次查询所有相交管道,我们可以获取每一个Connector的All Refs进入Connector之后获取Owner然后进入相应构件的Management从而获得所有的构件连接器。
简单来说All Refs存储的是外部的连接器也就是与管道相连的管件信息,Management存储的本身的Connector会根据设置数量有不同。

如果是末端关键,点击All Refs将会由两个Connector的情况其中一个指向Piping System需要在筛选中进行排除。

/// <summary>
        /// 将会过滤指定喷淋下的管道及遇到的第一个三通或弯头
        /// <remarks>获取弯头连接的第二道管道的向量值作为旋转轴
        /// 喷淋系统中将会只有管道与Instance类型,instance包括管件与喷头</remarks>
        /// </summary>
        public void GetConnectors(Element fit, MepNode node)
        {
            bool baseIterator = true;
            //1.进入Management获得Set
            ConnectorSet set = new ConnectorSet();
            if (fit is FamilyInstance ins)
            {
                //fitting
                set = ins.MEPModel.ConnectorManager.Connectors;
            }
            else
            {
                var pipe = fit as Pipe;
                set = pipe?.ConnectorManager.Connectors;
                var lc = pipe.Location as LocationCurve;
                var dir = (lc.Curve as Line).Direction;
                if (node.Vector is null) node.Vector = dir;
                if (node.Vector.DotProduct(dir) < 0.002)
                {
                    _pipe = pipe;
                    baseIterator = false;
                }
            }

            if (baseIterator)
            {
                node.Next = new MepNode(fit);
                node.Next.Vector = node.Vector;
                //在此例中除了喷淋都会有两个Connector指向连接的两端
                //如果只有一个入口,另一个则指向管道系统
                foreach (var s in set)
                {
                    var connector = s as Connector;
                    //排除是管道系统的情况
                    //此时查找与喷淋底部Connector连接的Connector
                    var allRefs = connector.AllRefs;
                    foreach (var allRef in allRefs)
                    {
                        var rf = allRef as Connector;
                        var ele = rf.Owner;
                        if (ele.Id != fit.Id && ele.GetType() != typeof(PipingSystem))
                        {
                            node.Next.Connectors.Add(rf);
                            if (node.Instance is null)
                            {
                                GetConnectors(ele, node.Next);
                            }
                            else
                            {
                                if (rf.Owner.Id == node.Instance.Id) continue;
                                GetConnectors(ele, node.Next);
                            }
                        }
                    }

                }
            }


        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值