GlobalUtility.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  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. actionCallback = new BabylonActionCallback();
  51. actionManager.RegisterActionTable(actionTable);
  52. actionManager.ActivateActionTable(actionCallback as ActionCallback, idActionTable);
  53. // Set up menu
  54. menu = menuManager.FindMenu("Babylon");
  55. if (menu != null)
  56. {
  57. menuManager.UnRegisterMenu(menu);
  58. Loader.Global.ReleaseIMenu(menu);
  59. menu = null;
  60. }
  61. // Main menu
  62. menu = Loader.Global.IMenu;
  63. menu.Title = "Babylon";
  64. menuManager.RegisterMenu(menu, 0);
  65. // Launch option
  66. menuItemBabylon = Loader.Global.IMenuItem;
  67. menuItemBabylon.Title = "&File Exporter";
  68. menuItemBabylon.ActionItem = actionTable[0];
  69. menu.AddItem(menuItemBabylon, -1);
  70. menuItem = Loader.Global.IMenuItem;
  71. menuItem.SubMenu = menu;
  72. menuManager.MainMenuBar.AddItem(menuItem, -1);
  73. // Quad
  74. var rootQuadMenu = menuManager.GetViewportRightClickMenu(RightClickContext.NonePressed);
  75. var quadMenu = rootQuadMenu.GetMenu(0);
  76. menu = menuManager.FindMenu("Babylon...");
  77. if (menu != null)
  78. {
  79. menuManager.UnRegisterMenu(menu);
  80. Loader.Global.ReleaseIMenu(menu);
  81. menu = null;
  82. }
  83. menu = Loader.Global.IMenu;
  84. menu.Title = "Babylon...";
  85. menuManager.RegisterMenu(menu, 0);
  86. menuItemBabylon = Loader.Global.IMenuItem;
  87. menuItemBabylon.Title = "Babylon Properties";
  88. menuItemBabylon.ActionItem = actionTable[1];
  89. menu.AddItem(menuItemBabylon, -1);
  90. menuItem = Loader.Global.IMenuItem;
  91. menuItem.SubMenu = menu;
  92. quadMenu.AddItem(menuItem, -1);
  93. Loader.Global.COREInterface.MenuManager.UpdateMenuBar();
  94. return 0;
  95. }
  96. }
  97. }
  98. }