Hi%
I have actually figure out how you can add a QuadMenu to your menu prior max2025.
Also you have to be careful with the .mnux files here:
C:\Users\%username%\AppData\Local\Autodesk\3dsMax\2024 - 64bit\ENU\en-US\UI
C:\Users\%username%\AppData\Local\Autodesk\3dsMax\2024 - 64bit\ENU\en-US\UI\Workspaces\usersave
Clean up the entries with -1 that matches your plug-in. This crashes max when you want to edit the menu within the QuadMenu editor.
To make it work, the best way to init it
<MenuContext type="1" typeName="kMenuContextQuadMenu" contextID="314757" title="My Plugin Context">
<Context menuID="-1" title="MyPlugin Quad" showAll="0" />
<RightClickContexts>
<Context menuID="-1" contextID="0" />
</RightClickContexts>
</MenuContext>
The actual code that registers your menu. The best way to register it is somewhere in the init process. It can be the __declspec( dllexport ) int LibInitialize(void) in the DllEntry, or in your : public .GUP Start() method or in an FPInterfaceDesc etc...
void CreateQuadMenu()
{
IMenuManager* menuman = GetCOREInterface()->GetMenuManager();
// Regsitering a Context to menuman
MenuContextId ContextID = 01234567; // Set an ID... Whatever you want
menuman->RegisterQuadMenuContext(ContextID, L"My Quad Menu Context");
IMenuContext* Context = menuman->GetContext(ContextID);
IQuadMenuContext* QuadMenuContext = dynamic_cast<IQuadMenuContext*>(Context);
if (QuadMenuContext)
{
// Create an IQuadMenu
IQuadMenu* QuadMenu = GetIQuadMenu();
QuadMenuContext->SetRightClickMenu(IQuadMenuContext::RightClickContext::kNonePressed, QuadMenu);
// Creating Quad Menu quadrants
IMenu* quadrant1 = GetIMenu();
IMenu* quadrant2 = GetIMenu();
IMenu* quadrant3 = GetIMenu();
IMenu* quadrant4 = GetIMenu();
quadrant1->SetTitle(L"Quadrant 1");
quadrant2->SetTitle(L"Quadrant 2");
quadrant3->SetTitle(L"Quadrant 3");
quadrant4->SetTitle(L"Quadrant 4");
// Add the quadrants to your QuadMenu
QuadMenu->AddMenu(quadrant1);
QuadMenu->AddMenu(quadrant2);
QuadMenu->AddMenu(quadrant3);
QuadMenu->AddMenu(quadrant4);
// Creating the entries for your quadrants
IMenuItem* item1 = GetIMenuItem();
IMenuItem* item2 = GetIMenuItem();
IMenuItem* item3 = GetIMenuItem();
IMenuItem* item4 = GetIMenuItem();
item1->SetActionItem(YourActionItemPtr1);
item2->SetActionItem(YourActionItemPtr2);
item3->SetActionItem(YourActionItemPtr3);
item4->SetActionItem(YourActionItemPtr4);
// Adding the entries to your quadrants
quadrant1->AddItem(item1);
quadrant2->AddItem(item2);
quadrant3->AddItem(item3);
quadrant4->AddItem(item4);
// Adding the menu to your context
QuadMenuContext->SetMenu(0, QuadMenu, L"My Quad");
}
}