RevitUICommand.cs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. using Autodesk.Windows;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Reflection;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. using UIFramework;
  9. namespace LRH.Tool.RevitUI
  10. {
  11. /// <summary>
  12. /// RevitUI命令发射器
  13. /// </summary>
  14. public class RevitUICommand
  15. {
  16. #region 静态相关
  17. private static readonly MethodInfo m_ExecuteMethod;
  18. static RevitUICommand()
  19. {
  20. //在Revit的UIFramework.dll里有一个CommandUtility,里面有一个Execute(RibbonCommandItem btn)方法,
  21. //看起来像是一个调用Revit命令的方法,下面来测试一下,有一个问题,这个类不是public的所以调用要用反射
  22. Type tp = typeof(ShortcutWindow).Assembly.GetTypes().First(m => m.FullName == "UIFramework.CommandUtility");
  23. if (tp != null)
  24. {
  25. MethodInfo mi = tp.GetMethod("Execute");
  26. m_ExecuteMethod = mi;
  27. }
  28. }
  29. public static void Execute(RibbonCommandItem ribbonCommandItem)
  30. {
  31. m_ExecuteMethod?.Invoke(null, new object[] { ribbonCommandItem });
  32. }
  33. #endregion
  34. public RibbonCommandItem CommandItem { get; private set; }
  35. public RevitUICommand(RibbonCommandItem commandItem)
  36. {
  37. CommandItem = commandItem;
  38. }
  39. public void Execute()
  40. {
  41. if (CommandItem == null)
  42. return;
  43. Execute(CommandItem);
  44. }
  45. }
  46. }