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); }
bool EleConnectorIsComplete(Element ele) { ConnectorSet connectors = MtCommon.GetAllConnectors(ele); if (connectors != null) { foreach (Connector item in connectors) { if (item.Domain == Domain.DomainElectrical) //去除ElectricalConnector { continue; } if (!item.IsConnected) { return(false); } } } return(true); }
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); }