From a18b907beff8b21fb4c9d6fb72678ac5e9f7b80d Mon Sep 17 00:00:00 2001
From: zhangyuekai <zhangyuekai@126.com>
Date: 星期六, 10 八月 2024 21:05:33 +0800
Subject: [PATCH] fix-bug nullreference

---
 HStation.RevitDev/RevitDataExport/Plugin/Application.cs |  343 +++++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 235 insertions(+), 108 deletions(-)

diff --git a/HStation.RevitDev/RevitDataExport/Plugin/Application.cs b/HStation.RevitDev/RevitDataExport/Plugin/Application.cs
index 2e63bba..07cb212 100644
--- a/HStation.RevitDev/RevitDataExport/Plugin/Application.cs
+++ b/HStation.RevitDev/RevitDataExport/Plugin/Application.cs
@@ -1,108 +1,235 @@
-锘縰sing Autodesk.Revit.Attributes;
-using Autodesk.Revit.UI;
-using HStation.RevitDev.RevitDataExport.Common;
-using HStation.RevitDev.RevitDataExport.Utility;
-using System;
-using System.IO;
-using System.Reflection;
-using System.Windows.Media.Imaging;
-
-namespace HStation.RevitDev.RevitDataExport.Plugin
-{
-    [Transaction(TransactionMode.Manual)]
-    public class Application : IExternalApplication
-    {
-        UIControlledApplication m_application;
-
-        public Result OnShutdown(UIControlledApplication application)
-        {
-            return Result.Succeeded;
-        }
-
-        public Result OnStartup(UIControlledApplication application)
-        {
-            m_application = application;
-            Ribbon ribbon = new Ribbon(application);
-            RibbonPanel ribbonPanel = ribbon.CreateRibbon();
-            ribbonPanel.AddSeparator();
-            GlobalResource.CurrentRevitVersion = application.ControlledApplication.VersionNumber;
-
-            //鍒涘缓button
-            CreateBottons(ribbon, ribbonPanel);
-
-            ribbonPanel.AddSeparator();
-            RegistEvent();
-            return Result.Succeeded;
-        }
-
-        private static void CreateBottons(Ribbon ribbon, RibbonPanel ribbonPanel)
-        {
-            string className1 = "HStation.RevitDev.RevitDataExport.PumpSystem";
-            ribbon.CreateButton_SystemAnalysis(ribbonPanel, Enum.YWFamilyType.YWFT_Pump, className1);
-
-            string className2 = "HStation.RevitDev.RevitDataExport.ValveSystem";
-            ribbon.CreateButton_SystemAnalysis(ribbonPanel, Enum.YWFamilyType.YWFT_Valve, className2);
-
-            string className3 = "HStation.RevitDev.RevitDataExport.PipeSystem";
-            ribbon.CreateButton_PipeSystem(ribbonPanel, Enum.YWFamilyType.YWFT_Pipe, className3);
-
-            string className4 = "HStation.RevitDev.RevitDataExport.HeatExchangerSystem";
-            ribbon.CreateButton_SystemAnalysis(ribbonPanel, Enum.YWFamilyType.YWFT_Heat_Exchanger, className4);
-
-            string className5 = "HStation.RevitDev.RevitDataExport.BlockerSystem";
-            ribbon.CreateButton_SystemAnalysis(ribbonPanel, Enum.YWFamilyType.YWFT_Blocker, className5);
-
-            string className6 = "HStation.RevitDev.RevitDataExport.ShowerSystem";
-            ribbon.CreateButton_SystemAnalysis(ribbonPanel, Enum.YWFamilyType.YWFT_Shower, className6);
-
-            string className7 = "HStation.RevitDev.RevitDataExport.ThreeJointSystem";
-            ribbon.CreateButton_SystemAnalysis(ribbonPanel, Enum.YWFamilyType.YWFT_Three_Joint, className7);
-
-            string className8 = "HStation.RevitDev.RevitDataExport.FourJointSystem";
-            ribbon.CreateButton_SystemAnalysis(ribbonPanel, Enum.YWFamilyType.YWFT_Four_Joint, className8);
-
-            string className9 = "HStation.RevitDev.RevitDataExport.WaterMeterSystem";
-            ribbon.CreateButton_SystemAnalysis(ribbonPanel, Enum.YWFamilyType.YWFT_Water_Meter, className9);
-
-            string className10 = "HStation.RevitDev.RevitDataExport.WaterPoolSystem";
-            ribbon.CreateButton_SystemAnalysis(ribbonPanel, Enum.YWFamilyType.YWFT_Water_Pool, className10);
-
-            string className11 = "HStation.RevitDev.RevitDataExport.WaterBoxSystem";
-            ribbon.CreateButton_SystemAnalysis(ribbonPanel, Enum.YWFamilyType.YWFT_Water_Box, className11);
-
-            string className12 = "HStation.RevitDev.RevitDataExport.ElbowSystem";
-            ribbon.CreateButton_SystemAnalysis(ribbonPanel, Enum.YWFamilyType.YWFT_Elbow, className12);
-
-            string className13 = "HStation.RevitDev.RevitDataExport.FireHydrantSystem";
-            ribbon.CreateButton_SystemAnalysis(ribbonPanel, Enum.YWFamilyType.YWFT_Fire_Hydrant, className13);
-        }
-
-        private void RegistEvent()
-        {
-            m_application.ControlledApplication.DocumentOpened += ControlledApplication_DocumentOpened;
-            m_application.ControlledApplication.DocumentOpening += ControlledApplication_DocumentOpening;
-            m_application.ControlledApplication.DocumentCreated += ControlledApplication_DocumentCreated;
-            m_application.ControlledApplication.DocumentCreating += ControlledApplication_DocumentCreating;
-        }
-
-        private void ControlledApplication_DocumentOpening(object sender, Autodesk.Revit.DB.Events.DocumentOpeningEventArgs e)
-        {
-            DockPaneUtil.HideAllDockablePane(m_application);
-        }
-
-        private void ControlledApplication_DocumentCreated(object sender, Autodesk.Revit.DB.Events.DocumentCreatedEventArgs e)
-        {
-            DockPaneUtil.HideAllDockablePane(m_application);
-        }
-
-        private void ControlledApplication_DocumentOpened(object sender, Autodesk.Revit.DB.Events.DocumentOpenedEventArgs e)
-        {
-            DockPaneUtil.HideAllDockablePane(m_application);
-        }
-
-        private void ControlledApplication_DocumentCreating(object sender, Autodesk.Revit.DB.Events.DocumentCreatingEventArgs e)
-        {
-            DockPaneUtil.HideAllDockablePane(m_application);
-        }
-    }
-}
+锘縰sing Autodesk.Revit.Attributes;
+using Autodesk.Revit.DB;
+using Autodesk.Revit.UI;
+using HStation.RevitDev.Model.ModelEnum;
+using HStation.RevitDev.RevitDataExport.Common;
+using HStation.RevitDev.RevitDataExport.Entity;
+using HStation.RevitDev.RevitDataExport.Utility;
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.IO;
+using System.Reflection;
+using System.Windows.Media.Imaging;
+
+namespace HStation.RevitDev.RevitDataExport.Plugin
+{
+    [Transaction(TransactionMode.Manual)]
+    public class Application : IExternalApplication
+    {
+        UIControlledApplication m_application;
+
+        public Result OnShutdown(UIControlledApplication application)
+        {
+            return Result.Succeeded;
+        }
+
+        public Result OnStartup(UIControlledApplication application)
+        {
+            m_application = application;
+            Ribbon ribbon = new Ribbon(application);
+            RibbonPanel ribbonPanel = ribbon.CreateRibbon();
+            ribbonPanel.AddSeparator();
+            GlobalResource.CurrentRevitVersion = application.ControlledApplication.VersionNumber;
+
+            CreateFamilyBottons(ribbon, ribbonPanel);
+            ribbonPanel.AddSeparator();
+
+            CreateExportBottons(ribbon, ribbonPanel);
+            ribbonPanel.AddSeparator();
+
+            CreateVisibleBotton(ribbon, ribbonPanel);
+            ribbonPanel.AddSeparator();
+
+            CreateCheckBotton(ribbon, ribbonPanel);
+            ribbonPanel.AddSeparator();
+
+            //AutoClassified SystemSelect
+            CreateAutoClassifiedBotton(ribbon, ribbonPanel);
+            DockPaneUtil.RegistInstanceDockablePanel(application);
+            ribbonPanel.AddSeparator();
+
+            CreateSystemSelectBotton(ribbon, ribbonPanel);
+            ribbonPanel.AddSeparator();
+
+            CreateFamilyManagerBotton(ribbon, ribbonPanel);
+            ribbonPanel.AddSeparator();
+
+            RegistEvent();
+            return Result.Succeeded;
+        }
+
+        private void CreateFamilyManagerBotton(Ribbon ribbon, RibbonPanel ribbonPanel)
+        {
+            //SystemSelect
+            string className = "HStation.RevitDev.RevitDataExport.FamilyManager";
+            string path = Assembly.GetExecutingAssembly().Location;
+
+            PushButtonData pdata = new PushButtonData("FamilyManager", "鏃忓簱绠$悊", path, className);
+            PushButton pBtn = ribbonPanel.AddItem(pdata) as PushButton;
+
+            string imagePath = Path.Combine(GlobalResource.ImageDirectory, $"鏃忓簱绠$悊.png");
+            pBtn.LargeImage = new BitmapImage(new Uri(imagePath));//32 * 32
+            pBtn.ToolTip = "鏃忓簱绠$悊";
+        }
+
+        private void CreateSystemSelectBotton(Ribbon ribbon, RibbonPanel ribbonPanel)
+        {
+            //SystemSelect
+            string className = "HStation.RevitDev.RevitDataExport.SystemSelect";
+            string path = Assembly.GetExecutingAssembly().Location;
+
+            PushButtonData pdata = new PushButtonData("SystemSelect", "绯荤粺鍒嗙被", path, className);
+            PushButton pBtn = ribbonPanel.AddItem(pdata) as PushButton;
+
+            string imagePath = Path.Combine(GlobalResource.ImageDirectory, $"绯荤粺鍒嗙被.png");
+            pBtn.LargeImage = new BitmapImage(new Uri(imagePath));//32 * 32
+            pBtn.ToolTip = "绯荤粺鍒嗙被";
+        }
+
+        private void CreateAutoClassifiedBotton(Ribbon ribbon, RibbonPanel ribbonPanel)
+        {
+            //Classified Elements
+            string className = "HStation.RevitDev.RevitDataExport.AutoClassified";
+            string path = Assembly.GetExecutingAssembly().Location;
+
+            PushButtonData pdata = new PushButtonData("AutoClassified", "鏋勪欢鍒嗙被", path, className);
+            PushButton pBtn = ribbonPanel.AddItem(pdata) as PushButton;
+
+            string imagePath = Path.Combine(GlobalResource.ImageDirectory, $"鏋勪欢鍒嗙被.png");
+            pBtn.LargeImage = new BitmapImage(new Uri(imagePath));//32 * 32
+            pBtn.ToolTip = "鏋勪欢鍒嗙被";
+        }
+
+        private void CreateCheckBotton(Ribbon ribbon, RibbonPanel ribbonPanel)
+        {
+            //Check Links
+            string className = "HStation.RevitDev.RevitDataExport.SystemCheck";
+            string path = Assembly.GetExecutingAssembly().Location;
+
+            PushButtonData pdata = new PushButtonData("Check", "绯荤粺妫�鏌�", path, className);
+            PushButton pBtn = ribbonPanel.AddItem(pdata) as PushButton;
+
+            string imagePath = Path.Combine(GlobalResource.ImageDirectory, $"绯荤粺妫�鏌�.png");
+            pBtn.LargeImage = new BitmapImage(new Uri(imagePath));//32 * 32
+            pBtn.ToolTip = "绯荤粺妫�鏌�  ";
+        }
+
+        private void CreateVisibleBotton(Ribbon ribbon, RibbonPanel ribbonPanel)
+        {
+            //Hide Or Display Models
+            string className = "HStation.RevitDev.RevitDataExport.HideModels";
+            string path = Assembly.GetExecutingAssembly().Location;
+
+            PushButtonData pdata = new PushButtonData("Hide", "涓�閿樉闅�", path, className);
+            PushButton pBtn = ribbonPanel.AddItem(pdata) as PushButton;
+
+            string imagePath = Path.Combine(GlobalResource.ImageDirectory, $"涓�閿樉闅�.png");
+            pBtn.LargeImage = new BitmapImage(new Uri(imagePath));//32 * 32
+            pBtn.ToolTip = "涓�閿樉闅�";
+        }
+
+        private void CreateExportBottons(Ribbon ribbon, RibbonPanel ribbonPanel)
+        {
+            string className = "HStation.RevitDev.RevitDataExport.ExportModels";
+            string path = Assembly.GetExecutingAssembly().Location;
+
+            PushButtonData pdata = new PushButtonData("Export", "瀵煎嚭", path, className);
+            PushButton pBtn = ribbonPanel.AddItem(pdata) as PushButton;
+
+            string imagePath = Path.Combine(GlobalResource.ImageDirectory, $"瀵煎嚭.png");
+            pBtn.LargeImage = new BitmapImage(new Uri(imagePath));//32 * 32
+            pBtn.ToolTip = "瀵煎嚭妯″瀷鏁版嵁";
+        }
+
+        private static void CreateFamilyBottons(Ribbon ribbon, RibbonPanel ribbonPanel)
+        {
+            string className1 = "HStation.RevitDev.RevitDataExport.PumpSystem";
+            ribbon.CreateButton_SystemAnalysis(ribbonPanel, RevitType.RFT_Pump, className1);
+
+            string className2 = "HStation.RevitDev.RevitDataExport.ValveSystem";
+            ribbon.CreateButton_SystemAnalysis(ribbonPanel, RevitType.RFT_Valve, className2);
+
+            string className3 = "HStation.RevitDev.RevitDataExport.PipeSystem";
+            ribbon.CreateButton_PipeSystem(ribbonPanel, RevitType.RFT_Pipe, className3);
+
+            string className4 = "HStation.RevitDev.RevitDataExport.HeatExchangerSystem";
+            ribbon.CreateButton_SystemAnalysis(ribbonPanel, RevitType.RFT_HeatExchanger, className4);
+
+            string className5 = "HStation.RevitDev.RevitDataExport.BlockerSystem";
+            ribbon.CreateButton_SystemAnalysis(ribbonPanel, RevitType.RFT_Blocker, className5);
+
+            string className6 = "HStation.RevitDev.RevitDataExport.ShowerSystem";
+            ribbon.CreateButton_SystemAnalysis(ribbonPanel, RevitType.RFT_Shower, className6);
+
+            string className7 = "HStation.RevitDev.RevitDataExport.ThreeJointSystem";
+            ribbon.CreateButton_SystemAnalysis(ribbonPanel, RevitType.RFT_ThreeJoint, className7);
+
+            string className8 = "HStation.RevitDev.RevitDataExport.FourJointSystem";
+            ribbon.CreateButton_SystemAnalysis(ribbonPanel, RevitType.RFT_FourJoint, className8);
+
+            string className9 = "HStation.RevitDev.RevitDataExport.WaterMeterSystem";
+            ribbon.CreateButton_SystemAnalysis(ribbonPanel, RevitType.RFT_WaterMeter, className9);
+
+            string className10 = "HStation.RevitDev.RevitDataExport.WaterPoolSystem";
+            ribbon.CreateButton_SystemAnalysis(ribbonPanel, RevitType.RFT_WaterPool, className10);
+
+            string className11 = "HStation.RevitDev.RevitDataExport.WaterBoxSystem";
+            ribbon.CreateButton_SystemAnalysis(ribbonPanel, RevitType.RFT_WaterBox, className11);
+
+            string className12 = "HStation.RevitDev.RevitDataExport.ElbowSystem";
+            ribbon.CreateButton_SystemAnalysis(ribbonPanel, RevitType.RFT_Elbow, className12);
+
+            string className13 = "HStation.RevitDev.RevitDataExport.FireHydrantSystem";
+            ribbon.CreateButton_SystemAnalysis(ribbonPanel, RevitType.RFT_FireHydrant, className13);
+
+            string className14 = "HStation.RevitDev.RevitDataExport.ReducingSystem";
+            ribbon.CreateButton_SystemAnalysis(ribbonPanel, RevitType.RFT_Converter, className14);
+        }
+
+        private void RegistEvent()
+        {
+            m_application.ControlledApplication.DocumentOpened += ControlledApplication_DocumentOpened;
+            m_application.ControlledApplication.DocumentOpening += ControlledApplication_DocumentOpening;
+            m_application.ControlledApplication.DocumentCreated += ControlledApplication_DocumentCreated;
+            m_application.ControlledApplication.DocumentCreating += ControlledApplication_DocumentCreating;
+
+            m_application.ControlledApplication.DocumentSaved += ControlledApplication_DocumentSaved;
+            m_application.ControlledApplication.DocumentSavedAs += ControlledApplication_DocumentSavedAs;
+        }
+
+        private void ControlledApplication_DocumentSavedAs(object sender, Autodesk.Revit.DB.Events.DocumentSavedAsEventArgs e)
+        {
+            CacheUtil.SaveCache(e.Document);
+        }
+
+        private void ControlledApplication_DocumentSaved(object sender, Autodesk.Revit.DB.Events.DocumentSavedEventArgs e)
+        {
+            CacheUtil.SaveCache(e.Document);
+        }
+
+        private void ControlledApplication_DocumentOpening(object sender, Autodesk.Revit.DB.Events.DocumentOpeningEventArgs e)
+        {
+            DockPaneUtil.HideAllDockablePane(m_application);
+        }
+
+        private void ControlledApplication_DocumentCreated(object sender, Autodesk.Revit.DB.Events.DocumentCreatedEventArgs e)
+        {
+            DockPaneUtil.HideAllDockablePane(m_application);
+            GlobalResource.RevitModels = new Dictionary<RevitType, ObservableCollection<ElementModel>>();
+            GlobalResource.CurrentDocument = e.Document;
+        }
+
+        private void ControlledApplication_DocumentOpened(object sender, Autodesk.Revit.DB.Events.DocumentOpenedEventArgs e)
+        {
+            DockPaneUtil.HideAllDockablePane(m_application);
+            GlobalResource.CurrentDocument = e.Document;
+            CacheUtil.InitCache(e.Document);
+        }
+
+        private void ControlledApplication_DocumentCreating(object sender, Autodesk.Revit.DB.Events.DocumentCreatingEventArgs e)
+        {
+            DockPaneUtil.HideAllDockablePane(m_application);
+        }
+    }
+}

--
Gitblit v1.9.3