qin
2024-08-15 763de811220b4b724f355965c156ce95d62d64e5
HStation.RevitDev/RevitDataExport/Plugin/Command.cs
@@ -1,269 +1,361 @@
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using HStation.Model;
using HStation.RevitDev.Model.ModelEnum;
using HStation.RevitDev.RevitDataExport.Forms;
using HStation.RevitDev.RevitDataExport.Utility;
using System;
using System.Diagnostics;
using System.IO;
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 ExportModels : IExternalCommand
    {
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            var doc = commandData.Application.ActiveUIDocument.Document;
            //CacheUtil.SaveCache(commandData.Application.ActiveUIDocument.Document);
            //TaskDialog.Show("提示", "导出完成!");
            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.Application.Application);
            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)
        {
            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
    {
        RevitType m_type = RevitType.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
    {
        RevitType m_type = RevitType.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
    {
        RevitType m_type = RevitType.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
    {
        RevitType m_type = RevitType.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
    {
        RevitType m_type = RevitType.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
    {
        RevitType m_type = RevitType.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
    {
        RevitType m_type = RevitType.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
    {
        RevitType m_type = RevitType.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
    {
        RevitType m_type = RevitType.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
    {
        RevitType m_type = RevitType.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
    {
        RevitType m_type = RevitType.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;
        }
    }
    /// <summary>
    /// 变径
    /// </summary>
    [Transaction(TransactionMode.Manual)]
    public class ReducingSystem : IExternalCommand
    {
        RevitType m_type = RevitType.RFT_Reducing;
        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;
    }
}
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
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.Show(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();
            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
            {
                SystemCheckUtils.SystemCheck(m_data);
                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;
            doc.UpdataDocumentCache();
            CacheUtil.SaveCache(commandData.Application.ActiveUIDocument.Document);
            var result = CacheUtil.ExportZipFile(commandData.Application.ActiveUIDocument.Document);
            if (result)
                TaskDialog.Show("提示", "导出完成!");
            else TaskDialog.Show("提示", "导出失败,请重试!");
            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;
    }
}