List <Element> GetConnectElements(Element ele)
        {
            List <Element> list = new List <Element>();

            try {
                ConnectorSet connectorSet = MtCommon.GetAllConnectors(ele);

                if (connectorSet != null && connectorSet.Size != 0)
                {
                    foreach (Connector item in connectorSet)
                    {
                        if (item.Domain != Domain.DomainElectrical)
                        {
                            Connector connector = MtCommon.GetConnectedConnector(item);

                            if (connector != null)
                            {
                                Element element = connector.Owner;
                                list.Add(element);
                            }
                        }
                    }
                }
                else
                {
                    //模型自身没有连接点
                    AddListViewErrorData(ele, "模型自身没有连接点");
                }
            } catch (Exception e) {
                throw new Exception(e.Message);
            }
            return(list);
        }
        private void AppendChildren(TreeNode elementNode, bool isSameSystemName = true, string multiSystem = null)
        {
            List <TreeNode> nodes = elementNode.ChildNodes;

            Element      element    = m_document.GetElement(elementNode.Id);
            ConnectorSet connectors = MtCommon.GetAllConnectors(element);

            List <string> systemNames = multiSystem.Split(';').ToList();

            foreach (Connector connector in connectors)
            {
                MEPSystem mepSystem = connector.MEPSystem;

                if (isSameSystemName)
                {
                    Element ele = m_document.GetElement(m_startingElementNode.Id);
                    if (ele.Category.Name.Equals("风道末端") || ele.Category.Name.Equals("风管管件") ||
                        ele.Category.Name.Equals("风管") || ele.Category.Name.Equals("风管附件"))   //风管中可以存在设备两端系统名称中数字不一致的情况
                    {
                        if (mepSystem == null || !MtCommon.RemoveNumInString(mepSystem.Name).Equals(MtCommon.RemoveNumInString(m_system.Name)))
                        {
                            continue;
                        }
                    }
                    else    //管道的判断,需根据id判断,避免造成供回水,冷凝水全部检测到
                    {
                        if (mepSystem == null || !mepSystem.Id.IntegerValue.Equals(m_system.Id.IntegerValue))
                        {
                            continue;
                        }
                    }
                }
                else     //此种情况是风管中不同系统用相同管道,排风排烟,新风送风,使用相同管道,但是流向是连续的。

                {
                    if (multiSystem != null && multiSystem.Length != 0)
                    {
                        if (mepSystem == null || !systemNames.Contains(MtCommon.RemoveNumInString(mepSystem.Name)))
                        {
                            continue;
                        }
                    }

                    //if (mepSystem == null || (mepSystem is MechanicalSystem) && (m_system is PipingSystem) || (mepSystem is PipingSystem) && (m_system is MechanicalSystem))
                    //    continue;
                }

                if (elementNode.Parent == null)
                {
                    if (connector.IsConnected)
                    {
                        elementNode.Direction = connector.Direction;
                    }
                }
                else
                {
                    if (connector.IsConnectedTo(elementNode.InputConnector))
                    {
                        elementNode.Direction = connector.Direction;
                        continue;
                    }
                }

                Connector connectedConnector = MtCommon.GetConnectedConnector(connector);
                if (connectedConnector != null)
                {
                    TreeNode node = new TreeNode(connectedConnector.Owner.Id);
                    node.FamilyName     = MtCommon.GetElementFamilyName(m_document, connectedConnector.Owner);
                    node.TypeName       = MtCommon.GetElementType(m_document, connectedConnector.Owner);
                    node.InputConnector = connector;
                    node.Parent         = elementNode;
                    node.Info           = GetElementInfo(m_document.GetElement(node.Id));
                    node.IsValve        = IsValve(m_document.GetElement(node.Id)) ? 1 : 0;
                    nodes.Add(node);
                }
            }

            nodes.Sort(delegate(TreeNode t1, TreeNode t2) {
                return(t1.Id.IntegerValue > t2.Id.IntegerValue ? 1 : (t1.Id.IntegerValue < t2.Id.IntegerValue ? -1 : 0));
            }
                       );
        }
        private List <Element> NoRecursionTravalPipe(TreeNode eleNode, bool isSameSystemName = true, string multiSystem = null, bool isIsolateElemnt = true, Action <List <Element> > totalElements = null)
        {
            List <Element>   errorListElemnts = new List <Element>();
            Queue <TreeNode> queue            = new Queue <TreeNode>();

            queue.Enqueue(eleNode);
            Dictionary <string, TreeNode> m_dicTree = new Dictionary <string, TreeNode>();
            Element m_errorEle = null;

            List <string> systemNames = multiSystem.Split(';').ToList();

            while (queue.Count != 0)
            {
                TreeNode        treeNode   = queue.Dequeue();
                List <TreeNode> childNodes = treeNode.ChildNodes;
                Element         selele     = m_document.GetElement(treeNode.Id);
                m_dicTree.Add(selele.Id.ToString(), treeNode);
                ConnectorSet connectorSet = MtCommon.GetAllConnectors(selele);
                foreach (Connector connector in connectorSet)
                {
                    MEPSystem mepSystem = connector.MEPSystem;
                    if (isSameSystemName)
                    {
                        Element ele = m_document.GetElement(m_startingElementNode.Id);
                        if (ele.Category.Name.Equals("风道末端") || ele.Category.Name.Equals("风管管件") ||
                            ele.Category.Name.Equals("风管") || ele.Category.Name.Equals("风管附件"))   //风管中可以存在设备两端系统名称中数字不一致的情况
                        {
                            if (mepSystem == null || !MtCommon.RemoveNumInString(mepSystem.Name).Equals(MtCommon.RemoveNumInString(m_system.Name)))
                            {
                                continue;
                            }
                        }
                        else    //管道的判断,需根据id判断,避免造成供回水,冷凝水全部检测到
                        {
                            if (mepSystem == null || !mepSystem.Id.IntegerValue.Equals(m_system.Id.IntegerValue))
                            {
                                continue;
                            }
                        }
                    }
                    else     //此种情况是风管中不同系统用相同管道,排风排烟,新风送风,使用相同管道,但是流向是连续的。
                    {
                        if (multiSystem != null && multiSystem.Length != 0)
                        {
                            if (mepSystem == null || !systemNames.Contains(MtCommon.RemoveNumInString(mepSystem.Name)))
                            {
                                continue;
                            }
                        }
                        //if (mepSystem == null || (mepSystem is MechanicalSystem) && (m_system is PipingSystem) || (mepSystem is PipingSystem) && (m_system is MechanicalSystem))
                        //    continue;
                    }
                    if (treeNode.Parent == null)
                    {
                        if (connector.IsConnected)
                        {
                            treeNode.Direction = connector.Direction;
                        }
                    }
                    else
                    {
                        if (connector.IsConnectedTo(treeNode.InputConnector))
                        {
                            treeNode.Direction = connector.Direction;
                            continue;
                        }
                    }
                    Connector connectedConnector = MtCommon.GetConnectedConnector(connector);
                    if (connectedConnector != null)
                    {
                        TreeNode node = new TreeNode(connectedConnector.Owner.Id);
                        node.InputConnector = connector;
                        node.Parent         = treeNode;
                        node.Info           = GetElementInfo(m_document.GetElement(node.Id));
                        node.IsValve        = IsValve(m_document.GetElement(node.Id)) ? 1 : 0;
                        childNodes.Add(node);
                    }
                }

                childNodes.Sort(delegate(TreeNode t1, TreeNode t2) {
                    return(t1.Id.IntegerValue > t2.Id.IntegerValue ? 1 : (t1.Id.IntegerValue < t2.Id.IntegerValue ? -1 : 0));
                });

                foreach (TreeNode item in childNodes)
                {
                    if (!m_dicTree.ContainsKey(item.Id.ToString()))    //队列中包含该节点 ,则说明重复了
                    {
                        if (!isSameNumber(queue, item))
                        {
                            queue.Enqueue(item);
                        }
                    }
                    else
                    {
                        m_errorEle = m_document.GetElement(item.Id);
                        if (!errorListElemnts.Contains(m_errorEle))
                        {
                            errorListElemnts.Add(m_errorEle);
                        }
                    }
                }
            }
            m_isHide = true;

            List <Element> isolatedElemets = new List <Element>();

            foreach (TreeNode item in m_dicTree.Values)
            {
                isolatedElemets.Add(m_document.GetElement(item.Id));
            }

            totalElements?.Invoke(isolatedElemets);

            return(errorListElemnts);
        }