using 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.Linq; using System.Reflection; using System.Windows.Media.Imaging; namespace HStation.RevitDev.RevitDataExport.Plugin { [Transaction(TransactionMode.Manual)] public class Application : IExternalApplication { private UIControlledApplication m_application; public Result OnShutdown(UIControlledApplication application) { return Result.Succeeded; } public static PushButton _pBtnExit; //退出按钮 public Result OnStartup(UIControlledApplication application) { m_application = application; GlobalResource.CurrentRevitVersion = application.ControlledApplication.VersionNumber; Ribbon ribbon = new Ribbon(application); //水力组件 RibbonPanel panel1 = ribbon.CreatePanel("水力组件"); CreateFamilyBottons(ribbon, panel1); //显示控制 RibbonPanel panel3 = ribbon.CreatePanel("显示控制"); CreateVisibleBotton(ribbon, panel3); CreateVisibleOtherBotton(ribbon, panel3); //拓扑检查 RibbonPanel panel4 = ribbon.CreatePanel("系统校验"); CreateCheckBotton(ribbon, panel4); CreateAnalyBotton(ribbon, panel4); DockPaneUtil.RegistInstanceDockablePanel(application); //计算分析 //RibbonPanel panel5 = ribbon.CreatePanel("计算分析"); //CreateAnalyBotton(ribbon, panel4); //系统管理 RibbonPanel panel6 = ribbon.CreatePanel("系统管理"); CreateAutoClassifiedBotton(ribbon, panel6); CreateFamilyManagerBotton(ribbon, panel6); //导入导出 RibbonPanel panel2 = ribbon.CreatePanel("上传发布"); CreateExportBottons(ribbon, panel2); //CreateSystemSelectBotton(ribbon, panel2); CreateUploadBottons(ribbon, panel2); //查询 RibbonPanel panel8 = ribbon.CreatePanel("查询"); CreateSearchBotton(ribbon, panel8); //其它 RibbonPanel panel7 = ribbon.CreatePanel("其它"); CreateHelpBotton(ribbon, panel7); 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 CreateHelpBotton(Ribbon ribbon, RibbonPanel ribbonPanel) { //if (!string.IsNullOrEmpty(GlobalResource.LoginUser)) //{ // string classNameLoginOut = "HStation.RevitDev.RevitDataExport.LoginOutModels"; // string pathLoginOut = Assembly.GetExecutingAssembly().Location; // PushButtonData pdataLoginOut = new PushButtonData("Login", "退出", pathLoginOut, classNameLoginOut); // PushButton pBtnLoginOut = ribbonPanel.AddItem(pdataLoginOut) as PushButton; // string imagePathLoginOut = Path.Combine(GlobalResource.ImageDirectory, $"退出.png"); // pBtnLoginOut.LargeImage = new BitmapImage(new Uri(imagePathLoginOut));//32 * 32 // pBtnLoginOut.ToolTip = "退出"; //} //Check Links string className = "HStation.RevitDev.RevitDataExport.Help"; string path = Assembly.GetExecutingAssembly().Location; PushButtonData pdata = new PushButtonData("Help", "帮助", 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 = "帮助"; string classNameAbout = "HStation.RevitDev.RevitDataExport.About"; string pathAbout = Assembly.GetExecutingAssembly().Location; PushButtonData pdataAbout = new PushButtonData("About", "关于", pathAbout, classNameAbout); PushButton pBtnAbout = ribbonPanel.AddItem(pdataAbout) as PushButton; string imagePathAbout = Path.Combine(GlobalResource.ImageDirectory, $"关于.png"); pBtnAbout.LargeImage = new BitmapImage(new Uri(imagePathAbout));//32 * 32 pBtnAbout.ToolTip = "关于"; string classNameExit = "HStation.RevitDev.RevitDataExport.Exit"; string pathExit = Assembly.GetExecutingAssembly().Location; PushButtonData pdataExit = new PushButtonData("Exit", "登出", pathExit, classNameExit); _pBtnExit = ribbonPanel.AddItem(pdataExit) as PushButton; if (File.Exists(GlobalResource.LoginUserFilePath)) { _pBtnExit.Visible = true; } else { _pBtnExit.Visible = false; } string imagePathExit = Path.Combine(GlobalResource.ImageDirectory, $"登出.png"); _pBtnExit.LargeImage = new BitmapImage(new Uri(imagePathExit));//32 * 32 _pBtnExit.ToolTip = "登出"; } private void CreateSearchBotton(Ribbon ribbon, RibbonPanel ribbonPanel) { //Check Links string className = "HStation.RevitDev.RevitDataExport.Search"; string path = Assembly.GetExecutingAssembly().Location; PushButtonData pdata = new PushButtonData("Search", "查找", 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 CreateAnalyBotton(Ribbon ribbon, RibbonPanel ribbonPanel) { //Check Links string className = "HStation.RevitDev.RevitDataExport.Analy"; string path = Assembly.GetExecutingAssembly().Location; PushButtonData pdata = new PushButtonData("Analy", "水力校验", 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 CreateVisibleOtherBotton(Ribbon ribbon, RibbonPanel ribbonPanel) { //Hide Or Display Models string className = "HStation.RevitDev.RevitDataExport.HideOtherModels"; string path = Assembly.GetExecutingAssembly().Location; PushButtonData pdata = new PushButtonData("HideOther", "其它显隐", 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 void CreateUploadBottons(Ribbon ribbon, RibbonPanel ribbonPanel) { string className = "HStation.RevitDev.RevitDataExport.UploadModels"; string path = Assembly.GetExecutingAssembly().Location; PushButtonData pdata = new PushButtonData("Upload", "上传", 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 className33 = "HStation.RevitDev.RevitDataExport.CoolingTowerSystem"; ribbon.CreateButton_SystemAnalysis(ribbonPanel, RevitType.RFT_CoolingTower, className33); //换热器 if (GlobalResource.ConfigSettingModel.SystemType == ConfigHelper.SystemType.All || GlobalResource.ConfigSettingModel.SystemType == ConfigHelper.SystemType.CirculatingWater) { string className4 = "HStation.RevitDev.RevitDataExport.HeatExchangerSystem"; ribbon.CreateButton_SystemAnalysis(ribbonPanel, RevitType.RFT_HeatExchanger, className4); string className41 = "HStation.RevitDev.RevitDataExport.WindTurbineSystem"; ribbon.CreateButton_SystemAnalysis(ribbonPanel, RevitType.RFT_WindTurbine, className41); } //喷淋头 if (GlobalResource.ConfigSettingModel.SystemType == ConfigHelper.SystemType.All || GlobalResource.ConfigSettingModel.SystemType == ConfigHelper.SystemType.Fire) { string className6 = "HStation.RevitDev.RevitDataExport.ShowerSystem"; ribbon.CreateButton_SystemAnalysis(ribbonPanel, RevitType.RFT_Shower, className6); } string className9 = "HStation.RevitDev.RevitDataExport.WaterMeterSystem"; ribbon.CreateButton_SystemAnalysis(ribbonPanel, RevitType.RFT_WaterMeter, className9); string className91 = "HStation.RevitDev.RevitDataExport.WaterMeterPressSystem"; ribbon.CreateButton_SystemAnalysis(ribbonPanel, RevitType.RFT_WaterMeterPress, className91); string className92 = "HStation.RevitDev.RevitDataExport.WaterMeterFlowSystem"; ribbon.CreateButton_SystemAnalysis(ribbonPanel, RevitType.RFT_WaterMeterFlow, className92); 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); //消火栓 //if (GlobalResource.ConfigSettingModel.SystemType == ConfigHelper.SystemType.All || GlobalResource.ConfigSettingModel.SystemType == ConfigHelper.SystemType.Fire) //{ // string className13 = "HStation.RevitDev.RevitDataExport.FireHydrantSystem"; // ribbon.CreateButton_SystemAnalysis(ribbonPanel, RevitType.RFT_FireHydrant, className13); //} string className12 = "HStation.RevitDev.RevitDataExport.ElbowSystem"; ribbon.CreateButton_SystemAnalysis(ribbonPanel, RevitType.RFT_Elbow, className12); string className5 = "HStation.RevitDev.RevitDataExport.BlockerSystem"; ribbon.CreateButton_SystemAnalysis(ribbonPanel, RevitType.RFT_Blocker, className5); 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 className14 = "HStation.RevitDev.RevitDataExport.ReducingSystem"; ribbon.CreateButton_SystemAnalysis(ribbonPanel, RevitType.RFT_Converter, className14); string className15 = "HStation.RevitDev.RevitDataExport.CustomizeSystem"; ribbon.CreateButton_SystemAnalysis(ribbonPanel, RevitType.RFT_Customize, className15); } 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) { var doc = e.Document; GlobalResource.CurrentDocument = e.Document; DockPaneUtil.HideAllDockablePane(m_application); var cache = GlobalResource.RevitModels.Find(x => x.Item1 == doc.Title); if (cache == null) { GlobalResource.RevitModels.Add(new Tuple>>(doc.Title, new Dictionary>())); } } private void ControlledApplication_DocumentOpened(object sender, Autodesk.Revit.DB.Events.DocumentOpenedEventArgs e) { DockPaneUtil.HideAllDockablePane(m_application); GlobalResource.CurrentDocument = e.Document; CacheUtil.InitCache(e.Document); DocumentUtil.UpdataDocumentCache(e.Document); } private void ControlledApplication_DocumentCreating(object sender, Autodesk.Revit.DB.Events.DocumentCreatingEventArgs e) { DockPaneUtil.HideAllDockablePane(m_application); } } }