Revit二次开发-外部事件ExternalEvent封装
制作个ExternalEventManager类
public static class ExternalEventManager
{
private static ExternalEvent externalEvent;
private static IExternalEventHandler eventHandler;
/// <summary>
/// 初始化外部事件
/// </summary>
/// <typeparam name="T">传入ExternalEventHandler</typeparam>
public static void Initialize<T>() where T : IExternalEventHandler, new()
{
eventHandler = new T();
externalEvent = ExternalEvent.Create(eventHandler);
ExEvents.Add(eventHandler.GetName(), externalEvent);
}
public static void ExecuteEvent()
{
externalEvent.Raise();
}
}
初始化 外部事件 ExternalEventManager.Initialize,如果使用MVVM框架可以在ViewModel的构造函数里面初始化(也可以在程序入口或者在 WPF的Xaml.cs的InitializeComponent()构造函数)
//MVVM框架
public CreateUpAndDownPipeViewModel()
{
ExternalEventManager.Initialize<CreateUpAndDownPipeExternalEvenHandler>();
command = new RelayCommand(ExecuteMyCommand);
}
//直接在Xaml.cs
public partial class ToolsGroupsWPF : Window
{
public ToolsGroupsWPF()
{
InitializeComponent();
//Initialize<CreateMEPFloorPlan>()
ExternalEventManager.Initialize<CreateMEPFloorPlan>();
}
}
新建一个类CreateMEPFloorPlan 承继接口IExternalEventHandler
internal class CreateMEPFloorPlan :IExternalEventHandler
{
public void Execute(UIApplication app)
{
CreateMEPFloorPlanMain(app);
}
public string GetName()
{
return nameof(CreateMEPFloorPlan);
}
//主要的实现方法
public void CreateMEPFloorPlanMain(UIApplication app)
{
if (app.ActiveUIDocument == null || app.ActiveUIDocument.Document == null)
return;
UIDocument uidoc = app.ActiveUIDocument;
Document doc = uidoc.Document;
//do something
}
}
最后调用执行
private void Creatafloorplan_Click(object sender, RoutedEventArgs e)
{
//需要执行命令,直接调用(输入方法名)
ExternalEventManager.ExecuteEvent();
}
分享一个自制Revit插件,本人是个BIM工程师,该插件是根据自己做工程一些经验和对插件功能的频繁度,自己整合开发功能,初衷是提高效率。
目前MagicTools的功能包括通用功能、土建、机电、审图、出图功能。还有好多功能都想做,如果有好的需求也可以提,后续有新增继续增加上去,努力弄个实用的插件,希望能帮到真正有需要的BIMer。
如有需要的可以加企鹅群:630552940
插件下载地址,免费试用
链接:https://pan.baidu.com/s/1GDnHeWwZ5r_HrnT3Mo7twA?pwd=jhlt
提取码:jhlt