12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- using Autodesk.Windows;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Reflection;
- using System.Text;
- using System.Threading.Tasks;
- using UIFramework;
- namespace LRH.Tool.RevitUI
- {
- /// <summary>
- /// RevitUI命令发射器
- /// </summary>
- public class RevitUICommand
- {
- #region 静态相关
- private static readonly MethodInfo m_ExecuteMethod;
- static RevitUICommand()
- {
- //在Revit的UIFramework.dll里有一个CommandUtility,里面有一个Execute(RibbonCommandItem btn)方法,
- //看起来像是一个调用Revit命令的方法,下面来测试一下,有一个问题,这个类不是public的所以调用要用反射
- Type tp = typeof(ShortcutWindow).Assembly.GetTypes().First(m => m.FullName == "UIFramework.CommandUtility");
- if (tp != null)
- {
- MethodInfo mi = tp.GetMethod("Execute");
- m_ExecuteMethod = mi;
- }
- }
- public static void Execute(RibbonCommandItem ribbonCommandItem)
- {
- m_ExecuteMethod?.Invoke(null, new object[] { ribbonCommandItem });
- }
- #endregion
- public RibbonCommandItem CommandItem { get; private set; }
- public RevitUICommand(RibbonCommandItem commandItem)
- {
- CommandItem = commandItem;
- }
- public void Execute()
- {
- if (CommandItem == null)
- return;
- Execute(CommandItem);
- }
- }
- }
|