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