using Autodesk.Revit.Attributes; using Autodesk.Revit.DB; using Autodesk.Revit.UI; using DevExpress.Internal.WinApi.Windows.UI.Notifications; 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.Linq; using System.Windows.Forms; namespace HStation.RevitDev.RevitDataExport { /// /// 导入 /// [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; } } /// /// 族库管理 /// [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; } } /// /// 构件分类 /// [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; } } /// /// 一键显隐 /// [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; } } /// /// 水力计算 /// [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 = SystemCheckUtils.SystemCheck(m_data); if (results.Any()) { SystemCheckUtils.ShowCheckResult(m_uiapp, results); } else { var ml = NetWorkHelper.GetModelList(); var inpPath = "d:\\revitinp.inp"; try { ml.BuildRelation(); ml.BuildToInp(inpPath); var result = ml.Calc(inpPath); using (var trans = new Transaction(doc, "修改属性")) { trans.Start(); //result.ForEach(d => foreach (var d in result) { 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 = "流量"; break; case "Velocity": prop = "流速"; break; case "Headloss": prop = "水损"; break; case "Press": prop = "压力"; break; //case "Head": // prop = "压力"; // break; case "Demand": prop = "流量"; if (d.Key.Contains("S__")) prop = "进口压力"; else if (d.Key.Contains("E__")) prop = "出口压力"; break; } var vu = d.Value.ToString(); var eid = new ElementId(id); var ele = doc.GetElement(eid); if (id == 766275) { var a = 0; } var pro = ele.GetParameterByProName(prop); if (pro != null) { if (prop.Equals("流量") && !vu.Contains("E")) vu = Math.Abs(decimal.Parse(vu)).ToString(); if (pro != null && !pro.IsReadOnly && pro.StorageType == StorageType.String) { pro.Set(vu); } 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); } } } catch (Exception ex) { var err = ex.Message; } }; trans.Commit(); } TaskDialog.Show("提示", "计算成功!"); } catch (Exception ex) { TaskDialog.Show("错误", "计算错误:" + ex.Message); } } return Result.Succeeded; } } /// /// 其它一键显隐 /// [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; } } /// /// 系统检查 /// [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; // } //} } /// /// 导出模型 /// [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; } } /// /// 水泵 /// [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; } } /// /// 管道 /// [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; } } /// /// 阀门 /// [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; } } /// /// 换热气 /// [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; } } /// /// 闷头 /// [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; } } /// /// 喷淋头 /// [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; } } /// /// 三通 /// [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; } } /// /// 四通 /// [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; } } /// /// 水表 /// [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; } } /// /// 水库 /// [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; } } /// /// 水箱 /// [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; } } /// /// 弯头 /// [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; } } /// /// 消火栓 /// [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; } } /// /// 过渡件 /// [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; } }