From 087c55919d833f08d82f4945075dd9cdf567aeff Mon Sep 17 00:00:00 2001 From: qin <a@163.com> Date: 星期四, 24 十月 2024 12:23:03 +0800 Subject: [PATCH] 空压机、帮助、水力计算 --- HStation.RevitDev/RevitDataExport/Plugin/Command.cs | 697 ++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 630 insertions(+), 67 deletions(-) diff --git a/HStation.RevitDev/RevitDataExport/Plugin/Command.cs b/HStation.RevitDev/RevitDataExport/Plugin/Command.cs index 0435baf..43a96d3 100644 --- a/HStation.RevitDev/RevitDataExport/Plugin/Command.cs +++ b/HStation.RevitDev/RevitDataExport/Plugin/Command.cs @@ -1,67 +1,630 @@ -锘縰sing Autodesk.Revit.Attributes; -using Autodesk.Revit.DB; -using Autodesk.Revit.UI; -using HStation.RevitDev.RevitDataExport.Forms; -using Spire.AI.Api; -using System; -using System.Diagnostics; -using System.Drawing.Drawing2D; -using System.Windows.Controls; -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)); - - //娴嬭瘯浠g爜 - UIApplication uiapp = commandData.Application; - Guid guid = new Guid(Common.GlobalResource.Guid_FamilyPanel); - DockablePaneId paneId = new DockablePaneId(guid); - DockablePane pane = uiapp.GetDockablePane(paneId); - pane.Hide(); - - return Result.Succeeded; - } - } - - [Transaction(TransactionMode.Manual)] - public class PumpSystemAnalysis : IExternalCommand - { - public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) - { - TaskDialog.Show("鎻愮ず","娉电郴缁熷垎鏋愬懡浠よ皟鐢ㄦ垚鍔燂紒"); - UIApplication uiapp = commandData.Application; - Wpf_FamilyPanel page = new Wpf_FamilyPanel(); - Guid guid = Guid.Empty; - guid = new Guid(Common.GlobalResource.Guid_FamilyPanel); - DockablePaneId paneId = new DockablePaneId(guid); - DockablePane pane = uiapp.GetDockablePane(paneId); - pane.Show(); - 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.Utils.Extensions; +using DevExpress.XtraPrinting.Native; +using Glodon.Revit.Utility; +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.IO; +using System.Linq; +using System.Text.RegularExpressions; +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 Analy : IExternalCommand + { + 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; + + commandData.Application.ActiveUIDocument.Document.UpdataDocumentCache(); + + var results = NetWorkHelper.Check(commandData); + if (results.Any()) + { + SystemCheckUtils.ShowCheckResult(m_uiapp, results); + } + else + { + var ml = NetWorkHelper.GetModelList(commandData); + //var aa = NetWorkHelper.Check(ml, commandData); + var inpPath = GlobalResource.TempInpFilePath; + if (!File.Exists(inpPath)) + File.Create(inpPath).Close(); + + try + { + ml.BuildRelation(); + ml.BuildToInp(inpPath); + var result = NetWorkHelper.Calc(inpPath); + using (var trans = new Transaction(doc, "淇敼灞炴��")) + { + trans.Start(); + //result.ForEach(d => + foreach (var d in result) + { + var ut = ""; + if (!d.Key.Contains("_")) + continue; + try + { + var id = 0; + var pid = d.Key.Split('_')[1]; + if (d.Key.Contains("E__") || d.Key.Contains("S__")) + { + pid = d.Key.Split('_')[3]; + } + id = int.Parse(pid); + var p = d.Key.Split('_')[0]; + var prop = ""; + switch (p) + { + case "Flow": + prop = "娴侀噺"; + ut = " (m鲁/h)"; + break; + case "Velocity": + prop = "娴侀��"; + ut = " (m/s)"; + break; + case "Headloss": + prop = "姘存崯"; + ut = " (m)"; + break; + case "Press": + prop = "鍘嬪姏"; + ut = " (m)"; + break; + //case "Head": + // prop = "鍘嬪姏"; + // break; + case "Demand": + prop = "娴侀噺"; + ut = " (m鲁/h)"; + if (d.Key.Contains("S__")) + { + prop = "杩涘彛鍘嬪姏"; + ut = " (m)"; + } + else if (d.Key.Contains("E__")) + { + prop = "鍑哄彛鍘嬪姏"; + ut = " (m)"; + } + + break; + } + var vu = d.Value.ToString("0.000"); + + var eid = new ElementId(id); + var ele = doc.GetElement(eid); + if (ele != null) + { + var pro = ele.GetParameterByProName(prop); + if (pro != null) + { + + if (prop.Equals("娴侀噺") && !vu.Contains("E")) + vu = Math.Abs(decimal.Parse(vu)).ToString("0.000"); + if (pro != null && !pro.IsReadOnly && pro.StorageType == StorageType.String) + { + pro.Set(vu + ut); + } + + var ps = ele.GetParameters(prop); + if (ps != null) + { + var sp = ps.FirstOrDefault(c => !c.IsReadOnly && c.StorageType == StorageType.String); + if (sp != null) + sp.Set(vu + ut); + } + + + } + } + } + catch (Exception ex) + { + var err = ex.Message; + } + }; + + ml.pumps.ForEach(p => + { + if (result.Any()) + { + var p1 = result.FirstOrDefault(c => c.Key == "Press_" + p.Node1).Value; + var p2 = result.FirstOrDefault(c => c.Key == "Press_" + p.Node2).Value; + + var eid = new ElementId(int.Parse(p.ID)); + var ele = doc.GetElement(eid); + if (ele != null) + { + var pro1 = ele.GetParameterByProName("杩涘彛鍘嬪姏"); + var pro2 = ele.GetParameterByProName("鍑哄彛鍘嬪姏"); + if (pro1 != null) + pro1.Set(Math.Abs(p1) > Math.Abs(p2) ? Math.Abs(p2).ToString("0.000") + " (m)" : Math.Abs(p1).ToString("0.000") + " (m)"); + if (pro2 != null) + pro2.Set(Math.Abs(p1) > Math.Abs(p2) ? Math.Abs(p1).ToString("0.000") + " (m)" : Math.Abs(p2).ToString("0.000") + " (m)"); + + } + } + }); + + trans.Commit(); + } + + TaskDialog.Show("鎻愮ず", "璁$畻鎴愬姛!"); + } + catch (Exception ex) + { + TaskDialog.Show("閿欒", "璁$畻閿欒锛�" + ex.Message); + } + } + return Result.Succeeded; + } + + + } + + /// <summary> + /// 鍏跺畠涓�閿樉闅� + /// </summary> + [Transaction(TransactionMode.Manual)] + public class HideOtherModels : IExternalCommand + { + public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) + { + var doc = commandData.Application.ActiveUIDocument.Document; + commandData.Application.ActiveUIDocument.Document.UpdataDocumentCache(); + CacheUtil.HideOrShowOtherModels(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 = NetWorkHelper.Check(commandData);// SystemCheckUtils.SystemCheck(m_data); + if (results != null && results.Any()) + SystemCheckUtils.ShowCheckResult(m_uiapp, results); + else + TaskDialog.Show("绯荤粺妫�鏌�", "绯荤粺妫�鏌ラ�氳繃 !"); + //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 UploadModels : 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.UploadFile(doc, out string err); + if (result) + TaskDialog.Show("鎻愮ず", "鏂囦欢涓婁紶瀹屾垚锛�"); + else TaskDialog.Show("鎻愮ず", "涓婁紶澶辫触锛�" + err); + return Result.Succeeded; + } + } + + /// <summary> + /// 甯姪 + /// </summary> + [Transaction(TransactionMode.Manual)] + public class Help : IExternalCommand + { + public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) + { + Process.Start(new ProcessStartInfo("https://www.yuque.com/yiweikeji-stofk/lu5dm6?#") { UseShellExecute = true }); + 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 WindTurbineSystem : IExternalCommand + { + RevitType m_type = RevitType.RFT_WindTurbine; + 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; + } + } + + /// <summary> + /// 鑷畾涔� + /// </summary> + [Transaction(TransactionMode.Manual)] + public class CustomizeSystem : IExternalCommand + { + RevitType m_type = RevitType.RFT_Customize; + 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; + } + } + + 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