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 { /// /// RevitUI命令发射器 /// 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); } } }