GlobalUtility.cs 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. using Autodesk.Max;
  2. using Autodesk.Max.IQuadMenuContext;
  3. using Autodesk.Max.Plugins;
  4. using MaxSharp;
  5. namespace Max2Babylon
  6. {
  7. class GlobalUtility : GUP
  8. {
  9. IIMenu menu;
  10. IIMenuItem menuItem;
  11. IIMenuItem menuItemBabylon;
  12. uint idActionTable;
  13. IActionTable actionTable;
  14. IActionCallback actionCallback;
  15. public override void Stop()
  16. {
  17. if (actionTable != null)
  18. {
  19. Loader.Global.COREInterface.ActionManager.DeactivateActionTable(actionCallback, idActionTable);
  20. }
  21. // Clean up menu
  22. if (menu != null)
  23. {
  24. Loader.Global.COREInterface.MenuManager.UnRegisterMenu(menu);
  25. Loader.Global.ReleaseIMenu(menu);
  26. Loader.Global.ReleaseIMenuItem(menuItemBabylon);
  27. Loader.Global.ReleaseIMenuItem(menuItem);
  28. menu = null;
  29. menuItem = null;
  30. }
  31. }
  32. public override uint Start
  33. {
  34. get
  35. {
  36. IIActionManager actionManager = Loader.Core.ActionManager;
  37. IIMenuManager menuManager = Loader.Core.MenuManager;
  38. // Set up global actions
  39. idActionTable = (uint)actionManager.NumActionTables;
  40. string actionTableName = "Babylon Actions";
  41. actionTable = Loader.Global.ActionTable.Create(idActionTable, 0, ref actionTableName);
  42. actionTable.AppendOperation(new BabylonExportActionItem());
  43. actionTable.AppendOperation(new BabylonPropertiesActionItem());
  44. actionCallback = new BabylonActionCallback();
  45. actionManager.RegisterActionTable(actionTable);
  46. actionManager.ActivateActionTable(actionCallback as ActionCallback, idActionTable);
  47. // Set up menu
  48. menu = menuManager.FindMenu("Babylon");
  49. if (menu != null)
  50. {
  51. menuManager.UnRegisterMenu(menu);
  52. Loader.Global.ReleaseIMenu(menu);
  53. menu = null;
  54. }
  55. // Main menu
  56. menu = Loader.Global.IMenu;
  57. menu.Title = "Babylon";
  58. menuManager.RegisterMenu(menu, 0);
  59. // Launch option
  60. menuItemBabylon = Loader.Global.IMenuItem;
  61. menuItemBabylon.Title = "&File Exporter";
  62. menuItemBabylon.ActionItem = actionTable[0];
  63. menu.AddItem(menuItemBabylon, -1);
  64. menuItem = Loader.Global.IMenuItem;
  65. menuItem.SubMenu = menu;
  66. menuManager.MainMenuBar.AddItem(menuItem, -1);
  67. // Quad
  68. var rootQuadMenu = menuManager.GetViewportRightClickMenu(RightClickContext.NonePressed);
  69. var quadMenu = rootQuadMenu.GetMenu(0);
  70. menu = menuManager.FindMenu("Babylon...");
  71. if (menu != null)
  72. {
  73. menuManager.UnRegisterMenu(menu);
  74. Loader.Global.ReleaseIMenu(menu);
  75. menu = null;
  76. }
  77. menu = Loader.Global.IMenu;
  78. menu.Title = "Babylon...";
  79. menuManager.RegisterMenu(menu, 0);
  80. menuItemBabylon = Loader.Global.IMenuItem;
  81. menuItemBabylon.Title = "Babylon Properties";
  82. menuItemBabylon.ActionItem = actionTable[1];
  83. menu.AddItem(menuItemBabylon, -1);
  84. menuItem = Loader.Global.IMenuItem;
  85. menuItem.SubMenu = menu;
  86. quadMenu.AddItem(menuItem, -1);
  87. Loader.Global.COREInterface.MenuManager.UpdateMenuBar();
  88. return 0;
  89. }
  90. }
  91. }
  92. }