mengxiangge 5 лет назад
Родитель
Сommit
c10ed4d67e

+ 5 - 0
Executer/DataCheck/Common/MBIConst.cs

@@ -25,5 +25,10 @@ namespace ServiceRevitLib.Common
         /// 设备本地名称
         /// </summary>
         public readonly static string EquipLocalName = "设备本地名称";
+
+        /// <summary>
+        /// 立管开始标志[start]
+        /// </summary>
+        public static string StartFlag { get; private set; } = "start";
     }
 }

+ 130 - 0
Executer/DataCheck/DataCheck.Mode/PipeCheck.cs

@@ -0,0 +1,130 @@
+/* ==============================================================================
+ * 功能描述:管网检查
+ * 创 建 者:Garrett
+ * 创建日期:2019/6/11 16:09:09
+ * ==============================================================================*/
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text.RegularExpressions;
+using Autodesk.Revit.DB;
+using Autodesk.Revit.DB.Plumbing;
+using SAGA.DotNetUtils.Extend;
+using ServiceRevitLib.Common;
+using SAGA.RevitUtils.Extends;
+using SAGA.RevitUtils.MEP;
+using ServiceRevitLib.Extend;
+
+namespace ServiceRevitLib.Mode
+{
+    /// <summary>
+    /// SagaCheck
+    /// </summary>
+    class PipeCheck : CheckBase
+    {
+        public override void Check()
+        {
+            base.Check();
+
+            #region
+
+            var document = m_Doc;
+
+            var elements = document.FilterElements<MEPCurve>().ToList();
+            foreach (var element in elements)
+            {
+                if (element.IsStart())
+                {
+                    //标记立管,所有连接点都未记录则删除                 
+                    //if (!connectors.Any(c => c.IsConnected))
+                    //{
+                    //    item.ErrorCode = "001";
+                    //    reportItem.ResultItems.Add(item);                      
+                    //}
+                    continue;
+                }
+                var item = new PipeCheckResult();
+                item.SystemName = element.GetSystemTypeName();
+                var code = GetErrorCode(element, item.SystemName);
+                if (IsNeedExport(code))
+                {
+                    item.Result = ResultState.Failure;
+                    item.ResultMsg = GetErrorDescription(code);
+                    Content.Add(item);
+                }
+            }
+            #endregion
+
+        }
+        /// <summary>
+        /// 获取错误码
+        /// </summary>
+        /// <param name="element"></param>
+        /// <param name="systemName"></param>
+        /// <returns></returns>
+        private PipeCheckErrorCode GetErrorCode(Element element,string systemName)
+        {
+            PipeCheckErrorCode errorCode = PipeCheckErrorCode.Code_000;
+            Domain[] domains = new Domain[] { Domain.DomainPiping, Domain.DomainElectrical };
+            do
+            {
+                foreach (Domain domain in domains)
+                {
+                    var connectors = element.GetConnectors(domain);
+                    if (connectors.Any(c => !c.IsConnected))
+                    {
+                        errorCode = PipeCheckErrorCode.Code_001;
+                        break;
+                    }
+                }
+                var endElements = element.GetFirstElements(null, e => e is MEPCurve || e.IsEquipment());
+                List<MEPCurve> curves = endElements.OfType<MEPCurve>().ToList();
+                foreach (var mepCurve in curves)
+                {
+                    if (systemName != mepCurve.GetSystemTypeName())
+                    {
+                        errorCode = PipeCheckErrorCode.Code_002;
+                        break;
+                    }
+                }
+
+            } while (false);
+
+            return errorCode;
+        }
+        /// <summary>
+        /// 获取错误描述
+        /// </summary>
+        /// <param name="errorCode"></param>
+        /// <returns></returns>
+        private string GetErrorDescription(PipeCheckErrorCode errorCode)
+        {
+            string description = errorCode.GetDescription()+",请检查";
+            return description;
+        }
+        /// <summary>
+        /// 是否需要导出
+        /// </summary>
+        /// <param name="errorCode"></param>
+        /// <returns></returns>
+        private bool IsNeedExport(PipeCheckErrorCode errorCode)
+        {
+            return errorCode == PipeCheckErrorCode.Code_001 || errorCode == PipeCheckErrorCode.Code_002;
+        }
+
+        enum PipeCheckErrorCode
+        {
+            [Description("管段连接正确")]
+            Code_000,
+            [Description("末端未连接任何设备")]
+            Code_001,
+            [Description("管道两端连接了不同类型的管道")]
+            Code_002,
+            Code_003,
+            [Description("误报")]
+            Code_004
+        }
+    }
+}

+ 24 - 0
Executer/DataCheck/DataCheck.Mode/PipeCheckResult.cs

@@ -0,0 +1,24 @@
+/* ==============================================================================
+ * 功能描述:管网检查结果
+ * 创 建 者:Garrett
+ * 创建日期:2019/5/31 16:20:46
+ * ==============================================================================*/
+
+namespace ServiceRevitLib.Mode
+{
+    /// <summary>
+    /// SagaCheckResult
+    /// </summary>
+    class PipeCheckResult : ResultBase
+    {
+        /// <summary>
+        /// id
+        /// </summary>
+        public string Id { get; set; }
+        /// <summary>
+        /// 系统名称
+        /// </summary>
+        public string SystemName { get; set; }
+        
+    }
+}

+ 9 - 0
Executer/DataCheck/Extend/ElementExtend.cs

@@ -22,6 +22,15 @@ namespace ServiceRevitLib.Extend
     public static class ElementExtend
     {
         /// <summary>
+        /// 判断元素是否是开始元素
+        /// </summary>
+        /// <param name="element"></param>
+        /// <returns></returns>
+        public static bool IsStart(this Element element)
+        {
+            return (element.GetParameterString(BuiltInParameter.ALL_MODEL_INSTANCE_COMMENTS) ?? string.Empty).StartsWith(MBIConst.StartFlag);
+        }
+        /// <summary>
         /// 判断是否为设备 设备族为4位
         /// ATVR - 多联机 - 室内机 - 双向气流 - 天花板嵌入式
         /// </summary>

+ 48 - 0
Executer/DataCheck/Extend/MepExtension.cs

@@ -0,0 +1,48 @@
+/* ==============================================================================
+ * 功能描述:MepExtension  
+ * 创 建 者:Garrett
+ * 创建日期:2019/9/20 16:20:45
+ * ==============================================================================*/
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Autodesk.Revit.DB;
+using Autodesk.Revit.DB.Mechanical;
+using Autodesk.Revit.DB.Plumbing;
+using SAGA.RevitUtils.Extends;
+
+namespace ServiceRevitLib.Extend
+{
+    /// <summary>
+    /// MepExtension
+    /// </summary>
+    public static class MepExtension
+    {
+        /// <summary>
+        /// 获取系统名称
+        /// </summary>
+        /// <param name="mepCurve"></param>
+        /// <returns></returns>
+        public static string GetSystemTypeName(this MEPCurve mepCurve)
+        {
+            Parameter parameter = null;
+            do
+            {
+                if (mepCurve is Pipe pipe)
+                {
+                    parameter = pipe.GetParameter(BuiltInParameter.RBS_PIPING_SYSTEM_TYPE_PARAM);
+                    break;
+                }
+                if (mepCurve is Duct duct)
+                {
+                    parameter = duct.GetParameter(BuiltInParameter.RBS_DUCT_SYSTEM_TYPE_PARAM);
+                }
+            } while (false);
+
+            return parameter?.AsValueString() ?? string.Empty;
+        }
+        
+    }
+}

+ 3 - 0
Executer/DataCheck/ServiceDataCheck.csproj

@@ -79,6 +79,8 @@
     <Compile Include="CheckFactory.cs" />
     <Compile Include="Common\MBIConst.cs" />
     <Compile Include="Common\RegexConstPattern.cs" />
+    <Compile Include="DataCheck.Mode\PipeCheck.cs" />
+    <Compile Include="DataCheck.Mode\PipeCheckResult.cs" />
     <Compile Include="Extend\DocExtend.cs" />
     <Compile Include="Extend\ElementExtend.cs" />
     <Compile Include="DataCheck.Mode\CheckBase.cs" />
@@ -104,6 +106,7 @@
     <Compile Include="DataCheck.Mode\SagaCheck.cs" />
     <Compile Include="DataCheck.Mode\UnitCheckResult.cs" />
     <Compile Include="DataCheck.Mode\SagaCheckResult.cs" />
+    <Compile Include="Extend\MepExtension.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
     <Compile Include="TestCommand.cs" />
     <Compile Include="Utils\DataCheckRule.cs" />

+ 1 - 1
Executer/DataCheck/TestCommand.cs

@@ -26,7 +26,7 @@ namespace ServiceRevitLib
             try
             {
                 var factory = new CheckFactory();
-                factory.SetCheckItems("SagaCheck,UnitCheck,FamilyNameCheck,EquipPartLocationCheck,ColumnCheck,ElementRangeCheck,ConnectorCheck,SystemNameCheck,EquipInSpaceCheck,SystemReferEquipCheck,ParameterIntegrityCheck");
+                factory.SetCheckItems("SagaCheck,UnitCheck,FamilyNameCheck,EquipPartLocationCheck,ColumnCheck,ElementRangeCheck,ConnectorCheck,SystemNameCheck,EquipInSpaceCheck,SystemReferEquipCheck,ParameterIntegrityCheck,PipeCheck");
                 factory.Check(doc);
                 result = Serialze(factory);
             }