Jelajahi Sumber

mxg:添加检查项xyz重叠检查

mengxiangge 5 tahun lalu
induk
melakukan
ee7f821f8c

+ 70 - 0
Executer/DataCheck/DataCheck.Mode/InstanceLocationOverlapCheck.cs

@@ -0,0 +1,70 @@
+/* ==============================================================================
+ * 功能描述:xyz坐标重叠检查
+ * 创 建 者:Garrett
+ * 创建日期:2018/10/23 15:08:55
+ * ==============================================================================*/
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using Autodesk.Revit.DB;
+using NPOI.SS.UserModel;
+using SAGA.DotNetUtils.Others;
+using SAGA.RevitUtils;
+using SAGA.RevitUtils.Extends;
+using ServiceRevitLib.Extend;
+using ServiceRevitLib.Mode;
+
+namespace Saga.PlugIn.ModelCheck
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    class InstanceLocationOverlapCheck : CheckBase
+    {
+        public InstanceLocationOverlapCheck()
+        {
+        }
+        
+        public override void Check()
+        {
+            var doc = m_Doc;
+            var instances = doc.GetFamilyInstances();
+            var groups = instances.GroupBy(t => t.GetLocationPoint(), new XyzEqualComparer(0.01d));
+            foreach (var group in groups)
+            {
+                var key = group.Key;
+                if (key == null) continue;
+                var list = group.ToList();
+                if (list.Count == 1) continue;
+                var fi = list.FirstOrDefault();
+                var result = GetCheckResult(fi);
+                list.Remove(fi);
+                if (result == null) continue;
+
+                result.ResultMsg = $"与{string.Join(",", list.Select(t => t.Id.ToString()))}的坐标发生重叠,请检查";
+                Content.Add(result);
+            }
+        }
+        /// <summary>
+        /// 获取检测结果
+        /// </summary>
+        /// <param name="fi"></param>
+        /// <returns></returns>
+        private InstanceLocationOverlapCheckResult GetCheckResult(Element fi)
+        {
+            var result = new InstanceLocationOverlapCheckResult(){ Result = ResultState.Failure };
+            result.Id = fi.Id.ToString();
+            result.FamilyName = fi.GetFamilyName();
+            return result;
+        }
+        
+    }
+
+    class InstanceLocationOverlapCheckResult : ResultBase
+    {
+        public string FamilyName { get; set; }
+
+        public string Id { get; set; }
+    }
+}

+ 1 - 0
Executer/DataCheck/ServiceDataCheck.csproj

@@ -79,6 +79,7 @@
     <Compile Include="CheckFactory.cs" />
     <Compile Include="Common\MBIConst.cs" />
     <Compile Include="Common\RegexConstPattern.cs" />
+    <Compile Include="DataCheck.Mode\InstanceLocationOverlapCheck.cs" />
     <Compile Include="DataCheck.Mode\PipeCheck.cs" />
     <Compile Include="DataCheck.Mode\PipeCheckResult.cs" />
     <Compile Include="Extend\DocExtend.cs" />