/* ============================================================================== * 功能描述:SagaCheck * 创 建 者:Garrett * 创建日期:2019/6/11 16:09:09 * ==============================================================================*/ using System; using System.Collections.Generic; using System.Linq; using Autodesk.Revit.DB; using SAGA.DotNetUtils.Extend; using SAGA.RevitUtils.MEP; using ServiceRevitLib.Extend; using ServiceRevitLib.Mode; using ServiceRevitLib.Utils; namespace ServiceRevitLib.DataCheck.Mode { /// /// SagaCheck /// class ConnectorCheck : CheckBase { public ConnectorCheck() { ReferenceSheet = "参考-连接件对照表"; } public override void Check() { try { base.Check(); #region bool unitResult = true; m_ProDefineConnectors = GetPreDefineConnectors(); var elements = m_Doc.GetEqEcElements(); foreach (var element in elements) { //检查设备或者部件 var result = GetCheckResult(element); if (result == null) continue; Content.Add(result); } #endregion } catch (Exception e) { Result = ResultState.Failure; ResultMsg = $"{e.Message}\r\n{e.StackTrace}"; } } private string m_HaveConnectorSing = "√"; private List m_ProDefineConnectors; public List GetPreDefineConnectors() { var list = new List(); var alllist = DataCheckRule.GetPreDefineConnectors(); foreach (DCR_Connector connector in alllist) { var pipeType = connector.PipeConnector; var hvacType = connector.HvacConnector; if (pipeType == m_HaveConnectorSing || hvacType == m_HaveConnectorSing) { list.Add(connector); if (connector.PName.IsNotNullEmpty() && connector.PCode.IsNotNullEmpty()) { //部件单独提出来当做一项 var pconnector = new DCR_Connector() { Code = connector.PCode, Name = connector.Name, PipeConnector = connector.PipeConnector, HvacConnector = connector.HvacConnector }; list.Add(pconnector); } } } return list; } /// /// 获取检测结果 /// /// /// private ConnectorCheckResult GetCheckResult(Element element) { if (element == null) return null; var result = new ConnectorCheckResult(); var code = element.GetFamilyCode(); var defineConType = GetDefineConType(code); if (defineConType == null) return null; var type= code.Length == 4 ? ElementRangeCheck.DCElementType.Equipment : ElementRangeCheck.DCElementType.EuipmentPart; result.Type = type.GetDescription(); result.FamilyName = element.GetFamilyName(); result.Id = element.Id.ToString(); result.Result = ResultState.Success; CheckConType(result, element, defineConType.Item1); CheckConType(result, element, defineConType.Item2); return result; } /// /// 获取定义的风和水连接件类型 /// /// /// private Tuple GetDefineConType(string code) { var item = m_ProDefineConnectors.FirstOrDefault(t => t.Code == code); if (item == null) return null; var pipeType = item.PipeConnector; var hvacType = item.HvacConnector; var pipeConType = pipeType == m_HaveConnectorSing ? Domain.DomainPiping : Domain.DomainUndefined; var hvacConType = hvacType == m_HaveConnectorSing ? Domain.DomainHvac : Domain.DomainUndefined; return new Tuple(pipeConType, hvacConType); } /// /// 检查连接件类型是否存在 /// /// /// private void CheckConType(ConnectorCheckResult result, Element fi, Domain domain) { if (domain != Domain.DomainUndefined) { var connectors = fi.GetConnectors(domain); var domainStr = DomainToString(domain); if (connectors.Any()) { if (connectors.All(t => t.IsConnected)) return; result.Result = ResultState.Failure; result.ResultMsg += $"发现 {domainStr}连接件未连接;"; } else { result.Result = ResultState.Failure; result.ResultMsg += $"缺少 {domainStr} 连接件;"; } } } private string DomainToString(Domain domain) { string str = ""; switch (domain) { case Domain.DomainPiping: str = "水管"; break; case Domain.DomainHvac: str = "风管"; break; default: str = "未知"; break; } return str; } } }