From 7d3aa07f6f94c70ca0a631a45db6565a5a58d9cf Mon Sep 17 00:00:00 2001
From: qin <a@163.com>
Date: 星期四, 29 八月 2024 13:33:15 +0800
Subject: [PATCH] 优化自动增加属性方法

---
 HStation.RevitDev/RevitDataExport/Plugin/Command.cs |  607 +++++++++++++++++++++++++++++++++---------------------
 1 files changed, 371 insertions(+), 236 deletions(-)

diff --git a/HStation.RevitDev/RevitDataExport/Plugin/Command.cs b/HStation.RevitDev/RevitDataExport/Plugin/Command.cs
index 965efda..46dec88 100644
--- a/HStation.RevitDev/RevitDataExport/Plugin/Command.cs
+++ b/HStation.RevitDev/RevitDataExport/Plugin/Command.cs
@@ -1,236 +1,371 @@
-锘縰sing Autodesk.Revit.Attributes;
-using Autodesk.Revit.DB;
-using Autodesk.Revit.UI;
-using HStation.RevitDev.Model.Enum;
-using HStation.RevitDev.RevitDataExport.Forms;
-using HStation.RevitDev.RevitDataExport.Utility;
-using System;
-using System.Diagnostics;
-using System.Windows.Forms;
-
-namespace HStation.RevitDev.RevitDataExport
-{
-    [Transaction(TransactionMode.Manual)]
-    public class Export : IExternalCommand
-    {
-        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
-        {
-            var form = new Form_SystemSelect(commandData);
-            //var revitHandle = Autodesk.Windows.ComponentManager.ApplicationWindow;
-
-            //瀹炰緥WPF绐椾綋
-            var revitHandle = Process.GetCurrentProcess().MainWindowHandle;
-            form.Show(new WindowHandle(revitHandle));
-            return Result.Succeeded;
-        }
-    }
-
-    /// <summary>
-    /// 姘存车
-    /// </summary>
-    [Transaction(TransactionMode.Manual)]
-    public class PumpSystem : IExternalCommand
-    {
-        RevitFamilyType m_type = RevitFamilyType.RFT_Pump;
-        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
-        {
-            DocumentUtil.RegistDocumentEvent(commandData.Application.Application);
-            DockablePaneUtils.ShowDockablePanel(commandData, m_type);
-            return Result.Succeeded;
-        }
-    }
-
-    /// <summary>
-    /// 绠¢亾
-    /// </summary>
-    [Transaction(TransactionMode.Manual)]
-    public class PipeSystem : IExternalCommand
-    {
-        RevitFamilyType m_type = RevitFamilyType.RFT_Pipe;
-        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
-        {
-            Common.GlobalResource.CurrentAddinId = commandData.Application.ActiveAddInId;
-            DocumentUtil.RegistDocumentEvent(commandData.Application.Application);
-            DockablePaneUtils.ShowDockablePanel(commandData, m_type);
-            return Result.Succeeded;
-        }
-    }
-
-    /// <summary>
-    /// 闃�闂�
-    /// </summary>
-    [Transaction(TransactionMode.Manual)]
-    public class ValveSystem : IExternalCommand
-    {
-        RevitFamilyType m_type = RevitFamilyType.RFT_Valve;
-        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
-        {
-            DocumentUtil.RegistDocumentEvent(commandData.Application.Application);
-            DockablePaneUtils.ShowDockablePanel(commandData, m_type);
-            return Result.Succeeded;
-        }
-    }
-
-    /// <summary>
-    /// 鎹㈢儹姘�
-    /// </summary>
-    [Transaction(TransactionMode.Manual)]
-    public class HeatExchangerSystem : IExternalCommand
-    {
-        RevitFamilyType m_type = RevitFamilyType.RFT_HeatExchanger;
-        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
-        {
-            DocumentUtil.RegistDocumentEvent(commandData.Application.Application);
-            DockablePaneUtils.ShowDockablePanel(commandData, m_type);
-            return Result.Succeeded;
-        }
-    }
-
-    /// <summary>
-    /// 闂峰ご
-    /// </summary>
-    [Transaction(TransactionMode.Manual)]
-    public class BlockerSystem : IExternalCommand
-    {
-        RevitFamilyType m_type = RevitFamilyType.RFT_Blocker;
-        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
-        {
-            DocumentUtil.RegistDocumentEvent(commandData.Application.Application);
-            DockablePaneUtils.ShowDockablePanel(commandData, m_type);
-            return Result.Succeeded;
-        }
-    }
-
-    /// <summary>
-    /// 鍠锋穻澶�
-    /// </summary>
-    [Transaction(TransactionMode.Manual)]
-    public class ShowerSystem : IExternalCommand
-    {
-        RevitFamilyType m_type = RevitFamilyType.RFT_Shower;
-        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
-        {
-            DocumentUtil.RegistDocumentEvent(commandData.Application.Application);
-            DockablePaneUtils.ShowDockablePanel(commandData, m_type);
-            return Result.Succeeded;
-        }
-    }
-
-    /// <summary>
-    /// 涓夐��
-    /// </summary>
-    [Transaction(TransactionMode.Manual)]
-    public class ThreeJointSystem : IExternalCommand
-    {
-        RevitFamilyType m_type = RevitFamilyType.RFT_ThreeJoint;
-        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
-        {
-            DocumentUtil.RegistDocumentEvent(commandData.Application.Application);
-            DockablePaneUtils.ShowDockablePanel(commandData, m_type);
-            return Result.Succeeded;
-        }
-    }
-
-    /// <summary>
-    /// 鍥涢��
-    /// </summary>
-    [Transaction(TransactionMode.Manual)]
-    public class FourJointSystem : IExternalCommand
-    {
-        RevitFamilyType m_type = RevitFamilyType.RFT_FourJoint;
-        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
-        {
-            DocumentUtil.RegistDocumentEvent(commandData.Application.Application);
-            DockablePaneUtils.ShowDockablePanel(commandData, m_type);
-            return Result.Succeeded;
-        }
-    }
-
-    /// <summary>
-    /// 姘磋〃
-    /// </summary>
-    [Transaction(TransactionMode.Manual)]
-    public class WaterMeterSystem : IExternalCommand
-    {
-        RevitFamilyType m_type = RevitFamilyType.RFT_WaterMeter;
-        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
-        {
-            DocumentUtil.RegistDocumentEvent(commandData.Application.Application);
-            DockablePaneUtils.ShowDockablePanel(commandData, m_type);
-            return Result.Succeeded;
-        }
-    }
-
-    /// <summary>
-    /// 姘村簱
-    /// </summary>
-    [Transaction(TransactionMode.Manual)]
-    public class WaterPoolSystem : IExternalCommand
-    {
-        RevitFamilyType m_type = RevitFamilyType.RFT_WaterPool;
-        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
-        {
-            DocumentUtil.RegistDocumentEvent(commandData.Application.Application);
-            DockablePaneUtils.ShowDockablePanel(commandData, m_type);
-            return Result.Succeeded;
-        }
-    }
-
-    /// <summary>
-    /// 姘寸
-    /// </summary>
-    [Transaction(TransactionMode.Manual)]
-    public class WaterBoxSystem : IExternalCommand
-    {
-        RevitFamilyType m_type = RevitFamilyType.RFT_WaterBox;
-        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
-        {
-            DocumentUtil.RegistDocumentEvent(commandData.Application.Application);
-            DockablePaneUtils.ShowDockablePanel(commandData, m_type);
-            return Result.Succeeded;
-        }
-    }
-
-    /// <summary>
-    /// 寮ご
-    /// </summary>
-    [Transaction(TransactionMode.Manual)]
-    public class ElbowSystem : IExternalCommand
-    {
-        RevitFamilyType m_type = RevitFamilyType.RFT_Elbow;
-        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
-        {
-            DocumentUtil.RegistDocumentEvent(commandData.Application.Application);
-            DockablePaneUtils.ShowDockablePanel(commandData, m_type);
-            return Result.Succeeded;
-        }
-    }
-
-    /// <summary>
-    /// 寮ご
-    /// </summary>
-    [Transaction(TransactionMode.Manual)]
-    public class FireHydrantSystem : IExternalCommand
-    {
-        RevitFamilyType m_type = RevitFamilyType.RFT_FireHydrant;
-        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
-        {
-            DocumentUtil.RegistDocumentEvent(commandData.Application.Application);
-            DockablePaneUtils.ShowDockablePanel(commandData, m_type);
-            return Result.Succeeded;
-        }
-    }
-
-    public class WindowHandle : IWin32Window
-    {
-        private IntPtr _handle;
-
-        public WindowHandle(IntPtr h)
-        {
-            Debug.Assert(IntPtr.Zero != h, "expected non-null window handle");
-
-            _handle = h;
-        }
-        public IntPtr Handle => _handle;
-    }
-}
+锘縰sing Autodesk.Revit.Attributes;
+using Autodesk.Revit.DB;
+using Autodesk.Revit.UI;
+using DevExpress.Internal.WinApi.Windows.UI.Notifications;
+using DevExpress.XtraPrinting.Native;
+using HStation.RevitDev.Model.ModelEnum;
+using HStation.RevitDev.RevitDataExport.Common;
+using HStation.RevitDev.RevitDataExport.Forms;
+using HStation.RevitDev.RevitDataExport.Utility;
+using System;
+using System.Diagnostics;
+using System.Windows.Forms;
+
+namespace HStation.RevitDev.RevitDataExport
+{
+    /// <summary>
+    /// 瀵煎叆
+    /// </summary>
+    [Transaction(TransactionMode.Manual)]
+    public class SystemSelect : IExternalCommand
+    {
+        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
+        {
+            var form = new Form_SystemSelect(commandData);
+            var revitHandle = Process.GetCurrentProcess().MainWindowHandle;
+            form.Show(new WindowHandle(revitHandle));
+            return Result.Succeeded;
+        }
+    }
+
+    /// <summary>
+    /// 鏃忓簱绠$悊
+    /// </summary>
+    [Transaction(TransactionMode.Manual)]
+    public class FamilyManager : IExternalCommand
+    {
+        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
+        {
+            var form = new Form_FamilyManager(commandData);
+            var revitHandle = Process.GetCurrentProcess().MainWindowHandle;
+            form.ShowDialog(new WindowHandle(revitHandle)); 
+            return Result.Succeeded;
+        }
+    }
+
+    /// <summary>
+    /// 鏋勪欢鍒嗙被
+    /// </summary>
+    [Transaction(TransactionMode.Manual)]
+    public class AutoClassified : IExternalCommand
+    {
+        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
+        {
+            DocumentUtil.RegistViewEvent(commandData);
+            DocumentUtil.RegistDocumentEvent(commandData);
+            commandData.Application.ActiveUIDocument.Document.UpdataDocumentCache();
+            GlobalResource.InstancePanel.UpdateForm();
+            DockablePaneUtils.ShowInstancePanel(commandData);
+            return Result.Succeeded;
+        }
+    }
+
+    /// <summary>
+    /// 涓�閿樉闅�
+    /// </summary>
+    [Transaction(TransactionMode.Manual)]
+    public class HideModels : IExternalCommand
+    {
+        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
+        {
+            var doc = commandData.Application.ActiveUIDocument.Document;
+            commandData.Application.ActiveUIDocument.Document.UpdataDocumentCache();
+            CacheUtil.HideOrShowModels(commandData.Application.ActiveUIDocument.Document);
+            return Result.Succeeded;
+        }
+    }
+
+    /// <summary>
+    /// 绯荤粺妫�鏌�
+    /// </summary>
+    [Transaction(TransactionMode.Manual)]
+    public class SystemCheck : IExternalCommand
+    {
+        bool m_isFirstTrigger = true;
+        UIApplication m_uiapp = null;
+        ExternalCommandData m_data = null;
+        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
+        {
+            var uiapp = commandData.Application;
+            var doc = commandData.Application.ActiveUIDocument.Document;
+            m_uiapp = uiapp;
+            m_data = commandData;
+
+            doc.UpdataDocumentCache();
+            var results = SystemCheckUtils.SystemCheck(m_data);
+            SystemCheckUtils.ShowCheckResult(m_uiapp, results);
+            //m_uiapp.Idling += App_Idling;
+            //RevitCommandId id = RevitCommandId.LookupPostableCommandId(PostableCommand.ShowDisconnects);
+            //if (uiapp.CanPostCommand(id))
+            //{
+            //    uiapp.PostCommand(id);
+            //}
+
+            return Result.Succeeded;
+        }
+
+        //private void App_Idling(object sender, Autodesk.Revit.UI.Events.IdlingEventArgs e)
+        //{
+        //    if (m_isFirstTrigger)
+        //    {
+        //        m_isFirstTrigger = false;
+        //    }
+        //    else
+        //    {
+        //        var results = SystemCheckUtils.SystemCheck(m_data);
+        //        SystemCheckUtils.ShowCheckResult(m_uiapp, results);
+        //        m_uiapp.Idling -= App_Idling;
+        //        m_isFirstTrigger = true;
+        //    }
+        //}
+    }
+
+    /// <summary>
+    /// 瀵煎嚭妯″瀷
+    /// </summary>
+    [Transaction(TransactionMode.Manual)]
+    public class ExportModels : IExternalCommand
+    {
+        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
+        {
+            var doc = commandData.Application.ActiveUIDocument.Document;
+            if (string.IsNullOrEmpty(doc.PathName))
+            {
+                TaskDialog.Show("鎻愮ず", "璇峰厛淇濆瓨妯″瀷鍚庡啀杩涜瀵煎嚭鎿嶄綔!");
+                return Result.Failed;
+            }
+            doc.UpdataDocumentCache();
+
+            CacheUtil.SaveCache(commandData.Application.ActiveUIDocument.Document);
+            var result = CacheUtil.ExportZipFile(doc, out string err);
+            if (result)
+                TaskDialog.Show("鎻愮ず", "鏂囦欢瀵煎嚭瀹屾垚锛�");
+            else TaskDialog.Show("鎻愮ず", "瀵煎嚭澶辫触锛�" + err);
+            return Result.Succeeded;
+        }
+    }
+
+    /// <summary>
+    /// 姘存车
+    /// </summary>
+    [Transaction(TransactionMode.Manual)]
+    public class PumpSystem : IExternalCommand
+    {
+        RevitType m_type = RevitType.RFT_Pump;
+        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
+        {
+            DocumentUtil.RegistDocumentEvent(commandData);
+            DockablePaneUtils.ShowDockablePanel(commandData, m_type);
+            return Result.Succeeded;
+        }
+    }
+
+    /// <summary>
+    /// 绠¢亾
+    /// </summary>
+    [Transaction(TransactionMode.Manual)]
+    public class PipeSystem : IExternalCommand
+    {
+        RevitType m_type = RevitType.RFT_Pipe;
+        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
+        {
+            GlobalResource.CurrentAddinId = commandData.Application.ActiveAddInId;
+            DocumentUtil.RegistDocumentEvent(commandData);
+            DockablePaneUtils.ShowDockablePanel(commandData, m_type);
+            return Result.Succeeded;
+        }
+    }
+
+    /// <summary>
+    /// 闃�闂�
+    /// </summary>
+    [Transaction(TransactionMode.Manual)]
+    public class ValveSystem : IExternalCommand
+    {
+        RevitType m_type = RevitType.RFT_Valve;
+        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
+        {
+            DocumentUtil.RegistDocumentEvent(commandData);
+            DockablePaneUtils.ShowDockablePanel(commandData, m_type);
+            return Result.Succeeded;
+        }
+    }
+
+    /// <summary>
+    /// 鎹㈢儹姘�
+    /// </summary>
+    [Transaction(TransactionMode.Manual)]
+    public class HeatExchangerSystem : IExternalCommand
+    {
+        RevitType m_type = RevitType.RFT_HeatExchanger;
+        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
+        {
+            DocumentUtil.RegistDocumentEvent(commandData);
+            DockablePaneUtils.ShowDockablePanel(commandData, m_type);
+            return Result.Succeeded;
+        }
+    }
+
+    /// <summary>
+    /// 闂峰ご
+    /// </summary>
+    [Transaction(TransactionMode.Manual)]
+    public class BlockerSystem : IExternalCommand
+    {
+        RevitType m_type = RevitType.RFT_Blocker;
+        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
+        {
+            DocumentUtil.RegistDocumentEvent(commandData);
+            DockablePaneUtils.ShowDockablePanel(commandData, m_type);
+            return Result.Succeeded;
+        }
+    }
+
+    /// <summary>
+    /// 鍠锋穻澶�
+    /// </summary>
+    [Transaction(TransactionMode.Manual)]
+    public class ShowerSystem : IExternalCommand
+    {
+        RevitType m_type = RevitType.RFT_Shower;
+        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
+        {
+            DocumentUtil.RegistDocumentEvent(commandData);
+            DockablePaneUtils.ShowDockablePanel(commandData, m_type);
+            return Result.Succeeded;
+        }
+    }
+
+    /// <summary>
+    /// 涓夐��
+    /// </summary>
+    [Transaction(TransactionMode.Manual)]
+    public class ThreeJointSystem : IExternalCommand
+    {
+        RevitType m_type = RevitType.RFT_ThreeJoint;
+        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
+        {
+            DocumentUtil.RegistDocumentEvent(commandData);
+            DockablePaneUtils.ShowDockablePanel(commandData, m_type);
+            return Result.Succeeded;
+        }
+    }
+
+    /// <summary>
+    /// 鍥涢��
+    /// </summary>
+    [Transaction(TransactionMode.Manual)]
+    public class FourJointSystem : IExternalCommand
+    {
+        RevitType m_type = RevitType.RFT_FourJoint;
+        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
+        {
+            DocumentUtil.RegistDocumentEvent(commandData);
+            DockablePaneUtils.ShowDockablePanel(commandData, m_type);
+            return Result.Succeeded;
+        }
+    }
+
+    /// <summary>
+    /// 姘磋〃
+    /// </summary>
+    [Transaction(TransactionMode.Manual)]
+    public class WaterMeterSystem : IExternalCommand
+    {
+        RevitType m_type = RevitType.RFT_WaterMeter;
+        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
+        {
+            DocumentUtil.RegistDocumentEvent(commandData);
+            DockablePaneUtils.ShowDockablePanel(commandData, m_type);
+            return Result.Succeeded;
+        }
+    }
+
+    /// <summary>
+    /// 姘村簱
+    /// </summary>
+    [Transaction(TransactionMode.Manual)]
+    public class WaterPoolSystem : IExternalCommand
+    {
+        RevitType m_type = RevitType.RFT_WaterPool;
+        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
+        {
+            DocumentUtil.RegistDocumentEvent(commandData);
+            DockablePaneUtils.ShowDockablePanel(commandData, m_type);
+            return Result.Succeeded;
+        }
+    }
+
+    /// <summary>
+    /// 姘寸
+    /// </summary>
+    [Transaction(TransactionMode.Manual)]
+    public class WaterBoxSystem : IExternalCommand
+    {
+        RevitType m_type = RevitType.RFT_WaterBox;
+        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
+        {
+            DocumentUtil.RegistDocumentEvent(commandData);
+            DockablePaneUtils.ShowDockablePanel(commandData, m_type);
+            return Result.Succeeded;
+        }
+    }
+
+    /// <summary>
+    /// 寮ご
+    /// </summary>
+    [Transaction(TransactionMode.Manual)]
+    public class ElbowSystem : IExternalCommand
+    {
+        RevitType m_type = RevitType.RFT_Elbow;
+        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
+        {
+            DocumentUtil.RegistDocumentEvent(commandData);
+            DockablePaneUtils.ShowDockablePanel(commandData, m_type);
+            return Result.Succeeded;
+        }
+    }
+
+    /// <summary>
+    /// 娑堢伀鏍�
+    /// </summary>
+    [Transaction(TransactionMode.Manual)]
+    public class FireHydrantSystem : IExternalCommand
+    {
+        RevitType m_type = RevitType.RFT_FireHydrant;
+        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
+        {
+            DocumentUtil.RegistDocumentEvent(commandData);
+            DockablePaneUtils.ShowDockablePanel(commandData, m_type);
+            return Result.Succeeded;
+        }
+    }
+
+    /// <summary>
+    /// 杩囨浮浠�
+    /// </summary>
+    [Transaction(TransactionMode.Manual)]
+    public class ReducingSystem : IExternalCommand
+    {
+        RevitType m_type = RevitType.RFT_Converter;
+        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
+        {
+            DocumentUtil.RegistDocumentEvent(commandData);
+            DockablePaneUtils.ShowDockablePanel(commandData, m_type);
+            return Result.Succeeded;
+        }
+    }
+
+    public class WindowHandle : IWin32Window
+    {
+        private IntPtr _handle;
+
+        public WindowHandle(IntPtr h)
+        {
+            Debug.Assert(IntPtr.Zero != h, "expected non-null window handle");
+
+            _handle = h;
+        }
+        public IntPtr Handle => _handle;
+    }
+}

--
Gitblit v1.9.3