From 9162a61818966f17e3aa2952c39d5484af1147d7 Mon Sep 17 00:00:00 2001
From: qin <a@163.com>
Date: 星期四, 22 八月 2024 16:02:27 +0800
Subject: [PATCH] 优化导出逻辑

---
 HStation.RevitDev/RevitDataExport/Utility/SystemCheckUtils.cs |   56 +++++++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 45 insertions(+), 11 deletions(-)

diff --git a/HStation.RevitDev/RevitDataExport/Utility/SystemCheckUtils.cs b/HStation.RevitDev/RevitDataExport/Utility/SystemCheckUtils.cs
index 8420dd2..e107acf 100644
--- a/HStation.RevitDev/RevitDataExport/Utility/SystemCheckUtils.cs
+++ b/HStation.RevitDev/RevitDataExport/Utility/SystemCheckUtils.cs
@@ -1,56 +1,88 @@
 锘縰sing Autodesk.Revit.DB;
 using Autodesk.Revit.DB.Plumbing;
 using Autodesk.Revit.UI;
+using DevExpress.Internal.WinApi.Windows.UI.Notifications;
 using HStation.RevitDev.RevitDataExport.Common;
+using HStation.RevitDev.RevitDataExport.Entity;
+using HStation.RevitDev.RevitDataExport.Forms;
+using System;
 using System.Collections.Generic;
+using System.Diagnostics;
 using System.Linq;
+using System.Windows.Forms;
 
 namespace HStation.RevitDev.RevitDataExport.Utility
 {
     public class SystemCheckUtils
     {
-        public static void SystemCheck(ExternalCommandData data)
+        public static Dictionary<CheckResultType, List<ElementId>> SystemCheck(ExternalCommandData data)
         {
             UIDocument uidoc = data.Application.ActiveUIDocument;
             Document doc = uidoc.Document;
-            List<ElementId> ids = new List<ElementId>();
-            foreach (var id in GlobalResource.ElementIds)
+            
+            Dictionary<CheckResultType, List<ElementId>> retDict = new Dictionary<CheckResultType, List<ElementId>>();
+            var ids = new List<ElementId>();
+            
+            foreach (var id in GlobalResource.RevitModels.GetIds())
             {
-                var element = doc.GetElement(new ElementId(int.Parse(id)));
+                var elemId = new ElementId(int.Parse(id));
+                var element = doc.GetElement(elemId);
                 if (element == null) { continue; }
 
-                bool checkResult = CheckElement(element);
+                bool checkResult = CheckElement(element, out CheckResultType errorType);
 
                 if (!checkResult)
                 {
                     ids.Add(new ElementId(int.Parse(id)));
+                    if (!retDict.ContainsKey(errorType))
+                    {
+                        retDict.Add(errorType, new List<ElementId>());
+                    }
+                    retDict[errorType].Add(elemId);
                 }
             }
-            uidoc.Selection.SetElementIds(ids);
+            //uidoc.Selection.SetElementIds(ids);
+
+            return retDict;
         }
 
-        private static bool CheckElement(Element element)
+        internal static void ShowCheckResult(UIApplication m_uiapp, Dictionary<CheckResultType, List<ElementId>> checkResult)
         {
+            var revitHandle = Process.GetCurrentProcess().MainWindowHandle;
+            Form_SystemCheckResult result = new Form_SystemCheckResult(m_uiapp, checkResult);
+            result.Show(new WindowHandle(revitHandle));
+        }
+
+        private static bool CheckElement(Element element, out CheckResultType errorType)
+        {
+            errorType = CheckResultType.CRT_Unknown;
+
             //绠¢亾涓ょ閮藉繀椤绘湁鑺傜偣鏋勪欢杩炴帴
             if (element is Pipe pipe)
             {
                 var connectors = pipe.ConnectorManager.Connectors;
-                foreach (Connector connector in connectors)
+                foreach (Autodesk.Revit.DB.Connector connector in connectors)
                 {
                     var connectElems = connector.GetConnectorElements();
                     if (connectElems.Count < 1)
                     {
+                        errorType = CheckResultType.CRT_PipeConnectorOpen;
                         return false;
                     }
 
                     var fi = connectElems[0] as FamilyInstance;
-                    if (fi == null) { return false; }
+                    if (fi == null) 
+                    {
+                        errorType = CheckResultType.CRT_Unknown;
+                        return false; 
+                    }
 
                     foreach (var elem in connectElems)
                     {
                         var id = elem.Id.IntegerValue.ToString();
-                        if (!GlobalResource.ElementIds.Contains(id))
+                        if (!GlobalResource.RevitModels.Contains(id))
                         {
+                            errorType = CheckResultType.CRT_PipeConnectorOpen;
                             return false;
                         }
                     }
@@ -67,13 +99,14 @@
                 ConnectorSet connectors = mepModel.ConnectorManager?.Connectors;
                 if (connectors == null) { return true; }
 
-                foreach(Connector connector in connectors)
+                foreach(Autodesk.Revit.DB.Connector connector in connectors)
                 {
                     var connectElems = connector.GetConnectorElements();
                     foreach (var connectElem in connectElems)
                     {
                         if (connectElem is FamilyInstance)
                         {
+                            errorType = CheckResultType.CRT_NodeConnectNode;
                             return false;
                         }
                     }
@@ -82,6 +115,7 @@
             }
             else
             {
+                errorType = CheckResultType.CRT_Unknown;
                 return false;
             }
         }

--
Gitblit v1.9.3