GlobalUtility.cs 4.4 KB

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