学习地址:https://www.bilibili.com/video/BV1mf4y1S72o?p=16
实例练习一(应用级别事件)
应用级别文件修改事件
创建项目WPF
创建Command类
添加引用
Command.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Autodesk.Revit.DB; using Autodesk.Revit.UI; using Autodesk.Revit.Attributes; using Autodesk.Revit.DB.Events; namespace ETest { /// <summary> /// 创建应用级别的事件 /// </summary> [TransactionAttribute(TransactionMode.Manual)] [RegenerationAttribute(RegenerationOption.Manual)] public class Command : IExternalCommand { public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { commandData.Application.Application.DocumentChanged += appChange; return Result.Succeeded; } private void appChange(object sender, DocumentChangedEventArgs e) { TaskDialog.Show("改动", "已改动"); } } }
演示
实例练习二(文档级别)
修改刚才那个Command.cs文件,修改为如下
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Autodesk.Revit.DB; using Autodesk.Revit.UI; using Autodesk.Revit.Attributes; using Autodesk.Revit.DB.Events; namespace ETest { /// <summary> /// 创建文档级别的事件 /// </summary> [TransactionAttribute(TransactionMode.Manual)] [RegenerationAttribute(RegenerationOption.Manual)] public class Command : IExternalCommand { public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { commandData.Application.ActiveUIDocument.Document.DocumentClosing += docCloing; return Result.Succeeded; } private void docCloing(object sender, DocumentClosingEventArgs e) { TaskDialog.Show("关闭", "已关闭"); } } }
演示
实例练习三(外部事件)
给WPF添加一个按钮
给按钮添加一个事件
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using Autodesk.Revit.DB; using Autodesk.Revit.UI; using Autodesk.Revit.Attributes; using Autodesk.Revit.DB.Events; namespace ETest { /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { ExternalEvent ee = null; ExternalCommand cmd =null; public MainWindow() { InitializeComponent(); if (cmd==null) { cmd = new ExternalCommand(); } if (ee==null) { ee = ExternalEvent.Create((IExternalEventHandler)cmd); } } private void Button_Click(object sender, RoutedEventArgs e) { ee.Raise(); } } }
修改Command.cs类
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Autodesk.Revit.DB; using Autodesk.Revit.UI; using Autodesk.Revit.Attributes; using Autodesk.Revit.DB.Events; namespace ETest { /// <summary> /// 创建文档级别的事件 /// </summary> [TransactionAttribute(TransactionMode.Manual)] [RegenerationAttribute(RegenerationOption.Manual)] public class Command : IExternalCommand { public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { //commandData.Application.Application.DocumentChanged += appChange; //commandData.Application.ActiveUIDocument.Document.DocumentClosing += docCloing; MainWindow mWin = new MainWindow(); mWin.Show(); return Result.Succeeded; } //private void docCloing(object sender, DocumentClosingEventArgs e) //{ // TaskDialog.Show("关闭", "已关闭"); //} //private void appChange(object sender, DocumentChangedEventArgs e) //{ // TaskDialog.Show("改动", "已改动"); //} } public class ExternalCommand : IExternalEventHandler { public void Execute(UIApplication app) { TaskDialog.Show("测试", "测试中"); } public string GetName() { return "名称"; } } }
测试
实例练习四(闲置事件)
修改Command.cs类
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Autodesk.Revit.DB; using Autodesk.Revit.UI; using Autodesk.Revit.Attributes; using Autodesk.Revit.DB.Events; using Autodesk.Revit.UI.Events; namespace ETest { /// <summary> /// 创建文档级别的事件 /// </summary> [TransactionAttribute(TransactionMode.Manual)] [RegenerationAttribute(RegenerationOption.Manual)] public class Command : IExternalCommand { public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { //commandData.Application.Application.DocumentChanged += appChange; //commandData.Application.ActiveUIDocument.Document.DocumentClosing += docCloing; //MainWindow mWin = new MainWindow(); //mWin.Show(); commandData.Application.Idling += IdlingTest; return Result.Succeeded; } private void IdlingTest(object sender, IdlingEventArgs e) { UIApplication m_uiapp = sender as UIApplication; Autodesk.Revit.DB.Document m_doc = m_uiapp.ActiveUIDocument.Document; Transaction trans = new Transaction(m_doc, "idling"); trans.Start(); ElementId id = new ElementId(7366); TextNote tn = m_doc.GetElement(id) as TextNote; string str = tn.Text; int i = 0; int.TryParse(str, out i); tn.Text = (i + 1).ToString(); trans.Commit(); } //private void docCloing(object sender, DocumentClosingEventArgs e) //{ // TaskDialog.Show("关闭", "已关闭"); //} //private void appChange(object sender, DocumentChangedEventArgs e) //{ // TaskDialog.Show("改动", "已改动"); //} } public class ExternalCommand : IExternalEventHandler { public void Execute(UIApplication app) { TaskDialog.Show("测试", "测试中"); } public string GetName() { return "名称"; } } }