From e358beb08f5be49703009b64f058ecfbcfeefbd9 Mon Sep 17 00:00:00 2001
From: qin <a@163.com>
Date: 星期六, 28 九月 2024 14:27:52 +0800
Subject: [PATCH] 测试standard2.1

---
 HStation.RevitDev/RevitDataExport/Utility/DocumentUtil.cs |  248 ++++++++++++++-----------------------------------
 1 files changed, 71 insertions(+), 177 deletions(-)

diff --git a/HStation.RevitDev/RevitDataExport/Utility/DocumentUtil.cs b/HStation.RevitDev/RevitDataExport/Utility/DocumentUtil.cs
index f0ec4f3..14874db 100644
--- a/HStation.RevitDev/RevitDataExport/Utility/DocumentUtil.cs
+++ b/HStation.RevitDev/RevitDataExport/Utility/DocumentUtil.cs
@@ -1,5 +1,4 @@
-锘縰sing Autodesk.Revit.ApplicationServices;
-using Autodesk.Revit.DB;
+锘縰sing Autodesk.Revit.DB;
 using Autodesk.Revit.DB.Events;
 using Autodesk.Revit.DB.Plumbing;
 using Autodesk.Revit.UI;
@@ -7,13 +6,10 @@
 using DevExpress.Utils.Extensions;
 using HStation.RevitDev.Model.ModelEnum;
 using HStation.RevitDev.RevitDataExport.Common;
-using HStation.RevitDev.RevitDataExport.Entity;
 using HStation.RevitDev.RevitDataExport.Service;
 using System;
 using System.Collections.Generic;
-using System.Collections.ObjectModel;
 using System.Linq;
-using static DevExpress.Data.Mask.Internal.RegExMaskMath.CloudOfInts;
 
 namespace HStation.RevitDev.RevitDataExport.Utility
 {
@@ -30,18 +26,18 @@
 
         private static void App_DocumentChanged(object sender, DocumentChangedEventArgs e)
         {
+            //褰撳垱寤轰竴涓柊鏂囨。鏃讹紝鍏堟墽琛宒ocumentChanged浜嬩欢锛屽湪鎵цdocumentCreated浜嬩欢
             var doc = e.GetDocument();
+            GlobalResource.CurrentDocument = doc;
             try
             {
                 var addedIds = e.GetAddedElementIds();
                 var removeIds = e.GetDeletedElementIds();
-                var modifiedIds = e.GetModifiedElementIds();
 
-                AddElements(doc,  addedIds);
+                AddElements(doc, addedIds);
                 RemoveElements(removeIds);
-                ModifyElements(modifiedIds);
 
-                UpdateLinkerInfo(doc);
+                AddUnhandledElements();
                 GlobalResource.InstancePanel.UpdateForm();
             }
             catch (Exception ex)
@@ -50,65 +46,36 @@
             }
         }
 
-        private static void UpdateLinkerInfo(Document doc)
-        {
-            foreach (var pair in GlobalResource.RevitModels)
-            {
-                foreach (var model in pair.Value) 
-                {
-                    var id = model.Id;
-                    var element = doc.GetElement(new ElementId(int.Parse(id)));
-                    var linkedElems = element.GetConnectElements();
-                    var linkedIds = linkedElems.Select(x => x.Id.IntegerValue.ToString());
-                    model.LinkIds = string.Join(",", linkedIds);
-                }
-            } 
-        }
+        //private static void UpdateLinkerInfo(Document doc)
+        //{
+        //    if (!doc.IsValidObject) { return; }
 
-        private static void ModifyElements(ICollection<ElementId> modifiedIds)
-        {
-            foreach (var id in modifiedIds)
-            {
-                if (GlobalResource.ElementIds.Contains(id.IntegerValue.ToString()))
-                {
+        //    foreach (var pair in GlobalResource.RevitModels)
+        //    {
+        //        foreach (var id in pair.Value)
+        //        {
+        //            if (id == null) { continue; }
 
-                }
-            }
-        }
+        //            var element = doc.GetElement(new ElementId(int.Parse(id)));
+        //            var linkedElems = element.GetConnectElements();
+        //            var linkedIds = linkedElems.Select(x => x.Id.IntegerValue.ToString());
+        //            model.LinkIds = string.Join(",", linkedIds);
+        //        }
+        //    }
+        //}
 
         private static void RemoveElements(ICollection<ElementId> removeIds)
         {
             foreach (var id in removeIds)
             {
-                var strId = id.IntegerValue.ToString();
-                if (GlobalResource.ElementIds.Contains(strId))
-                {
-                    GlobalResource.ElementIds.Remove(id.IntegerValue.ToString());
-                    foreach (var pair in GlobalResource.RevitModels)
-                    {
-                        var values = pair.Value;
-                        var model = values.Where(x => x.Id == strId)?.ToList();
-                        if (model == null || model.Count() == 0)
-                        {
-                            continue;
-                        }
-                        else
-                        {
-                            values.Remove(model[0]);
-                        }
-                    }
-                }
+                GlobalResource.RevitModels.Remove(id.IntegerValue.ToString());
             }
-
             return;
         }
 
         private static void AddElements(Document doc, ICollection<ElementId> addedIds)
         {
-            bool instancePlacing = GlobalResource.InstancePlacing;
-            bool pipePlacing = GlobalResource.PipePlacing;
-
-            if (pipePlacing)
+            if (GlobalResource.PlacingType == RevitType.RFT_Pipe)
             {
                 foreach (var id in addedIds)
                 {
@@ -119,20 +86,18 @@
                     }
                     if (elem is Pipe)
                     {
-                        GlobalResource.ElementIds.Add(id.IntegerValue.ToString());
-                        AddManualCreated(elem);
+                        GlobalResource.RevitModels.Add(elem, RevitType.RFT_Pipe);
                     }
                 }
             }
-            else if (instancePlacing)
+            else if (GlobalResource.PlacingType != RevitType.RFT_Unknown)
             {
                 foreach (var id in addedIds)
                 {
                     var elem = doc.GetElement(id);
                     if (elem is FamilyInstance)
                     {
-                        GlobalResource.ElementIds.Add(id.IntegerValue.ToString());
-                        AddManualCreated(elem);
+                        GlobalResource.RevitModels.Add(elem, GlobalResource.PlacingType);
                     }
                 }
             }
@@ -141,6 +106,8 @@
                 bool isPumpSystemElement = false;
                 foreach (var id in addedIds)
                 {
+                    //鎵嬪姩甯冪疆鐨勬瀯浠跺娑堢伀鏍撱�佺儹鎹㈠櫒绛夊熀鏈笉鑳借嚜鍔ㄥ姞鍏ュ埌绯荤粺涓紝鑳借嚜鍔ㄥ竷缃苟杩炴帴
+                    //绯荤粺鐨勫熀鏈兘鏄笁閫氥�佸洓閫氥�佸集澶淬�佽繃娓′欢銆佺甯借繖浜�
                     if (IsConnectedWithPumpSystem(doc, id))
                     {
                         isPumpSystemElement = true;
@@ -166,9 +133,6 @@
             {
                 if (pipe.ConnectWithPumpSystem())
                 {
-                    //GlobalResource.ElementIds.Add(id.IntegerValue.ToString());
-                    //TaskDialog.Show("鎻愮ず", "澧炲姞绠¢亾锛�" + id.IntegerValue.ToString());
-                    //AddManualCreated(elem);
                     return true;
                 }
             }
@@ -176,9 +140,6 @@
             {
                 if (fi.ConnectWithPumpSystem()) //鐩存帴鐐瑰嚮绠¢亾杩炴帴鐐瑰垱寤虹閬撴椂锛孯evit浼氳嚜鍔ㄥ垱寤哄集澶达紝閮介渶瑕佸姞鍏ュ埌缂撳瓨
                 {
-                    //GlobalResource.ElementIds.Add(id.IntegerValue.ToString());
-                    //TaskDialog.Show("鎻愮ず", "澧炲姞鏃忓疄渚嬶細" + id.IntegerValue.ToString());
-                    //AddManualCreated(elem);
                     return true;
                 }
             }
@@ -190,12 +151,10 @@
             var elem = doc.GetElement(id);
             if (elem is Pipe)
             {
-                GlobalResource.ElementIds.Add(id.IntegerValue.ToString());
-                AddToMap(elem, RevitType.RFT_Pipe);
+                GlobalResource.RevitModels.Add(elem, RevitType.RFT_Pipe);
             }
             else if (elem is FamilyInstance fi)
             {
-                GlobalResource.ElementIds.Add(id.IntegerValue.ToString());
                 AddAutoCreated(fi);
             }
             return;
@@ -203,102 +162,30 @@
 
         private static void AddAutoCreated(FamilyInstance fi)
         {
-            var id = fi.Id;
-            GlobalResource.ElementIds.Add(id.IntegerValue.ToString());
-            if (fi.IsWanTou())
+            if (fi.IsPipeHat())
             {
-                AddToMap(fi, RevitType.RFT_Elbow);
+                GlobalResource.RevitModels.Add(fi, RevitType.RFT_Blocker);
+            }
+            else if (fi.IsWanTou())
+            {
+                GlobalResource.RevitModels.Add(fi, RevitType.RFT_Elbow);
             }
             else if (fi.IsConverter())
             {
-                AddToMap(fi, RevitType.RFT_Converter);
+                GlobalResource.RevitModels.Add(fi, RevitType.RFT_Converter);
             }
             else if (fi.IsSanTong())
             {
-                AddToMap(fi, RevitType.RFT_ThreeJoint);
+                GlobalResource.RevitModels.Add(fi, RevitType.RFT_ThreeJoint);
             }
             else if (fi.IsSiTong())
             {
-                AddToMap(fi, RevitType.RFT_FourJoint);
+                GlobalResource.RevitModels.Add(fi, RevitType.RFT_FourJoint);
             }
             else
             {
                 TaskDialog.Show("璀﹀憡", $"鏈煡绫诲瀷琚坊鍔狅紒id:{fi.Id.IntegerValue}");
                 //鎶ラ敊
-            }
-        }
-
-        private static void AddManualCreated(Element elem)
-        {
-            var id = elem.Id.IntegerValue.ToString();
-
-            //鏇存柊宸插姞鍏ュ埌缂撳瓨涓殑鏋勪欢鏁版嵁
-            List<string> linkedIds = elem.GetConnectElements().Select(x => x.Id.IntegerValue.ToString()).ToList();
-            //foreach (var linkId in linkedIds)
-            //{
-            //    var model = GlobalResource.GetElementModel(linkId);
-            //    if (!model.LinkIds.Contains(id))
-            //    {
-            //        model.LinkIds += "," + id;
-            //    }
-            //}
-
-            //鎶婃柊澧炴瀯浠跺姞鍏ュ埌缂撳瓨涓�
-            if (!GlobalResource.RevitModels.ContainsKey(GlobalResource.RevitFamilyType))
-            {
-                GlobalResource.RevitModels.Add(GlobalResource.RevitFamilyType, new ObservableCollection<ElementModel>());
-                GlobalResource.RevitModels[GlobalResource.RevitFamilyType].Add(new ElementModel
-                {
-                    Name = elem.Name,
-                    Id = id,
-                    LinkIds = /*string.Join(",", linkedIds)*/string.Empty
-                });
-
-            }
-            else if(!GlobalResource.RevitModels[GlobalResource.RevitFamilyType].Any(x=>x.Id == id))
-            {
-                GlobalResource.RevitModels[GlobalResource.RevitFamilyType].Add(new ElementModel
-                {
-                    Name = elem.Name,
-                    Id = id,
-                    LinkIds = /* string.Join(",", linkedIds)*/string.Empty
-                });
-            }
-        }
-
-        private static void AddToMap(Element elem, RevitType revitType)
-        {
-            var id = elem.Id.IntegerValue.ToString();
-
-            //鏇存柊宸插姞鍏ュ埌缂撳瓨涓殑鏋勪欢鏁版嵁
-            //List<string> linkedIds = elem.GetConnectElements().Select(x => x.Id.IntegerValue.ToString()).ToList();
-            //foreach (var linkId in linkedIds)
-            //{
-            //    var model = GlobalResource.GetElementModel(linkId);
-            //    if (!model.LinkIds.Contains(id))
-            //    {
-            //        model.LinkIds += "," + id;
-            //    }
-            //}
-
-            if (!GlobalResource.RevitModels.ContainsKey(revitType))
-            {
-                GlobalResource.RevitModels.Add(revitType, new ObservableCollection<ElementModel>());
-                GlobalResource.RevitModels[revitType].Add(new ElementModel
-                {
-                    Name = elem.Name,
-                    Id = id,
-                    LinkIds = /*string.Join(",", linkedIds)*/string.Empty
-                });
-            }
-            else if (!GlobalResource.RevitModels[revitType].Any(x => x.Id == id))
-            {
-                GlobalResource.RevitModels[revitType].Add(new ElementModel
-                {
-                    Name = elem.Name,
-                    Id = id,
-                    LinkIds = /*string.Join(",", linkedIds)*/string.Empty
-                });
             }
         }
 
@@ -310,31 +197,22 @@
 
         private static void Application_ViewActivated(object sender, ViewActivatedEventArgs e)
         {
-            GlobalResource.CurrentDocument = e.CurrentActiveView.Document;
+            //鍒囨崲鏂囨。鏃�
+            if (GlobalResource.CurrentDocument == null ||
+                GlobalResource.CurrentDocument.GetHashCode() != e.CurrentActiveView.Document.GetHashCode())
+            {
+                GlobalResource.CurrentDocument = e.CurrentActiveView.Document;
+                GlobalResource.InstancePanel.UpdateForm();
+            }
         }
 
-        public static List<Element> GetModelElements(this Document doc) 
+        public static List<Element> GetModelElements(this Document doc)
         {
-            //FilteredElementCollector collector = null;
-            //foreach (Category cate in doc.Settings.Categories)
-            //{
-            //    if (cate.CategoryType != CategoryType.Model)
-            //    {
-            //        continue;
-            //    }
-            //    var subCollector = new FilteredElementCollector(doc);
-            //    subCollector.OfCategory((BuiltInCategory)(cate.Id.IntegerValue));
-            //    subCollector.WhereElementIsNotElementType();
-            //    if (collector == null)
-            //    {
-            //        collector = subCollector;
-            //    }
-            //    else
-            //    {
-            //        collector.UnionWith(subCollector);
-            //    }
-            //}
-            //
+            if (!doc.IsValidObject)
+            {
+                return new List<Element>();
+            }
+
             var collector1 = new FilteredElementCollector(doc).
                 OfCategory(BuiltInCategory.OST_PipeCurves).
                 WhereElementIsNotElementType();
@@ -342,6 +220,8 @@
             var collector2 = new FilteredElementCollector(doc).
                 OfClass(typeof(FamilyInstance)).
                 WhereElementIsNotElementType();
+
+           
 
             var elements1 = collector1.ToElements()?.ToList();
             var elements2 = collector2.ToElements()?.ToList();
@@ -353,19 +233,33 @@
             return elements1;
         }
 
-        public static void AddUnhandledElementsToCache()
+        public static void AddUnhandledElements()
         {
             var elements = GlobalResource.CurrentDocument.GetModelElements();
-            foreach (var element in elements) 
+            foreach (var element in elements)
             {
                 var id = element.Id.IntegerValue.ToString();
-                if (GlobalResource.ElementIds.Contains(id))
+                if (GlobalResource.RevitModels.Contains(id))
                 {
                     continue;
                 }
-                RevitMepCategoryService.MatchElement(element);
+                RevitMepCategoryService.AddToCache(element);
             }
-            UpdateLinkerInfo(GlobalResource.CurrentDocument);
+            //UpdateLinkerInfo(GlobalResource.CurrentDocument);
+        }
+
+        public static void UpdataDocumentCache(this Document doc)
+        {
+            if (!doc.IsValidObject)
+            {
+                return;
+            }
+            if (!GlobalResource.CurrentDocument.IsValidObject || doc.GetHashCode() != GlobalResource.CurrentDocument.GetHashCode())
+            {
+                GlobalResource.CurrentDocument = doc;
+                //GlobalResource.RevitModels = new List<Tuple<string, Dictionary<RevitType, List<string>>>>();
+            }
+            AddUnhandledElements();
         }
     }
 }

--
Gitblit v1.9.3