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;
}
}