InventorNetAddinWizard ((Inventor .NET Addin Wizard)) has provided Inventor AppMenu Creator coder since build #0.8.8.0. The Inventor AppMenu Creator coder helps create Inventor AppMenu creation code automatically in a moment with a nice UI and a reusable back-end storage file.
Here is how the friendly UI of the Inventor AppMenu Creator coder with some sample AppMenu creation rows looks like if popped up from Visual Studio IDE:
If the OK button is pressed, the Inventor AppMenu Creator specifications will be saved back to the .IAPM file (in XML format) if already named otherwise to a new .IAPM first as specified in a popped up File SaveAs dialog. After that, the following code (including both the AppMenu creator method and its dependent methods) will be properly generated into the body of the class as specified.
public static void AppMenuAppendTest1(Inventor.Application app)
{
CommandControls amControls = app.UserInterfaceManager.FileBrowserControls;
//TODO: change the macro call below.
MacroControlDefinition amItem01 = app.CommandManager.ControlDefinitions.AddMacroControlDefinition("MainProgPropMgr.OpenMainFormPropMgr");
amControls.AddMacro(amItem01);
ButtonDefinition amItem02 = app.CommandManager.ControlDefinitions.AddButtonDefinition("Button1", "InventorNetAddinCS5.Test1.AppMenuAppendTest1.Button_02", CommandTypesEnum.kQueryOnlyCmdType);
amControls.AddButton(amItem02);
amItem02.DescriptionText = "Button #1";
amItem02.ToolTipText = "Button #1";
amItem02.StandardIcon = GetRibbonResouce("g.ico", false);
amItem02.LargeIcon = GetRibbonResouce("g.ico", true);
amItem02.OnExecute += (NameValueMap nvMap) => { MessageBox.Show("Hi"); };
//TODO: change the copy source below.
CommandControl amItem03 = app.UserInterfaceManager.Ribbons[1].RibbonTabs[1].RibbonPanels[1].CommandControls[1];
amControls.AddCopy(amItem03);
ObjectCollection amGroup01 = app.TransientObjects.CreateObjectCollection();
ButtonDefinition amGroup01Item01 = app.CommandManager.ControlDefinitions.AddButtonDefinition("Popup1Item1", "InventorNetAddinCS5.Test1.AppMenuAppendTest1.amGroup01_01", CommandTypesEnum.kShapeEditCmdType);
amGroup01.Add(amGroup01Item01);
amGroup01Item01.DescriptionText = "Popup #1 Item #1";
amGroup01Item01.ToolTipText = "Popup #1 Item #1";
amGroup01Item01.OnExecute += (NameValueMap nvMap) => { MessageBox.Show("Hi"); };
ButtonDefinition amGroup01Item02 = app.CommandManager.ControlDefinitions.AddButtonDefinition("Popup1Item2", "InventorNetAddinCS5.Test1.AppMenuAppendTest1.amGroup01_02", CommandTypesEnum.kFileOperationsCmdType);
amGroup01.Add(amGroup01Item02);
amGroup01Item02.DescriptionText = "Popup #1 Item #2";
amGroup01Item02.ToolTipText = "Popup #1 Item #2";
ButtonDefinition amGroup01Item03 = app.CommandManager.ControlDefinitions.AddButtonDefinition("Popup1Item3", "InventorNetAddinCS5.Test1.AppMenuAppendTest1.amGroup01_03", CommandTypesEnum.kFilePropertyEditCmdType);
amGroup01.Add(amGroup01Item03);
amGroup01Item03.DescriptionText = "Popup #1 Item #3";
amGroup01Item03.ToolTipText = "Popup #1 Item #3";
amGroup01Item03.OnExecute += (NameValueMap nvMap) => { MessageBox.Show("Hi"); };
amControls.AddPopup(amGroup01Item01, amGroup01);
ObjectCollection amGroup02 = app.TransientObjects.CreateObjectCollection();
ButtonDefinition amGroup02Item01 = app.CommandManager.ControlDefinitions.AddButtonDefinition("Split1Item1", "InventorNetAddinCS5.Test1.AppMenuAppendTest1.amGroup02_01", CommandTypesEnum.kNonShapeEditCmdType);
amGroup02.Add(amGroup02Item01);
amGroup02Item01.DescriptionText = "Split #1 Item #1";
amGroup02Item01.ToolTipText = "Split #1 Item #1";
ButtonDefinition amGroup02Item02 = app.CommandManager.ControlDefinitions.AddButtonDefinition("Split1Item2", "InventorNetAddinCS5.Test1.AppMenuAppendTest1.amGroup02_02", CommandTypesEnum.kEditMaskCmdType);
amGroup02.Add(amGroup02Item02);
amGroup02Item02.DescriptionText = "Split #1 Item #2";
amGroup02Item02.ToolTipText = "Split #1 Item #2";
amGroup02Item02.OnExecute += (NameValueMap nvMap) => { MessageBox.Show("Hi"); };
ButtonDefinition amGroup02Item03 = app.CommandManager.ControlDefinitions.AddButtonDefinition("Split1Item3", "InventorNetAddinCS5.Test1.AppMenuAppendTest1.amGroup02_03", CommandTypesEnum.kSchemaChangeCmdType);
amGroup02.Add(amGroup02Item03);
amGroup02Item03.DescriptionText = "Split #1 Item #3";
amGroup02Item03.ToolTipText = "Split #1 Item #3";
amControls.AddSplitButton(amGroup02Item01, amGroup02);
}
public static stdole.IPictureDisp GetRibbonResouce(string name, bool isLarge)
{
Icon icon = new Icon(typeof(InventorNetAddinCS5.Test1), string.Format("Resources.Ribbon.{0}", name));
if (isLarge)
return InventorButton.IconToPicture(new Icon(icon, new System.Drawing.Size(32, 32)));
else
return InventorButton.IconToPicture(new Icon(icon, new System.Drawing.Size(16, 16)));
}
All the code compiles just fine for Inventor API 2014 or 2013, and if called up from an addin starter or a command callback, the AppMenu items would be showed up as expected in the Inventor window. Readers please try it and feel its wonderfulness yourselves. Enjoy!
By the way, here is what the content of the Inventor AppMenu Creator specification file (.IAPM in XML format) may look like:
<?xml version="1.0"?>
<ArrayOfArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ArrayOfString>
<string>AppMenu</string>
<string>Macro</string>
<string>Macro1</string>
<string>Macro #1</string>
<string>False</string>
<string />
<string />
<string />
</ArrayOfString>
<ArrayOfString>
<string>AppMenu</string>
<string>Button</string>
<string>Button1</string>
<string>Button #1</string>
<string>True</string>
<string>C:\Temp\g.ico</string>
<string />
<string>QueryOnly</string>
</ArrayOfString>
<ArrayOfString>
<string>AppMenu</string>
<string>Copy</string>
<string>Copy1</string>
<string>Copy #1</string>
<string>False</string>
<string />
<string />
<string />
</ArrayOfString>
<ArrayOfString>
<string>Popup</string>
<string>Container</string>
<string />
<string />
<string>False</string>
<string />
<string />
<string />
</ArrayOfString>
<ArrayOfString>
<string>Popup</string>
<string>Item</string>
<string>Popup1Item1</string>
<string>Popup #1 Item #1</string>
<string>True</string>
<string />
<string />
<string>ShapeEdit</string>
</ArrayOfString>
<ArrayOfString>
<string>Popup</string>
<string>Item</string>
<string>Popup1Item2</string>
<string>Popup #1 Item #2</string>
<string>False</string>
<string />
<string />
<string>FileOperations</string>
</ArrayOfString>
<ArrayOfString>
<string>Popup</string>
<string>Item</string>
<string>Popup1Item3</string>
<string>Popup #1 Item #3</string>
<string>True</string>
<string />
<string />
<string>FilePropertyEdit</string>
</ArrayOfString>
<ArrayOfString>
<string>SplitButton</string>
<string>Container</string>
<string />
<string />
<string>False</string>
<string />
<string />
<string />
</ArrayOfString>
<ArrayOfString>
<string>SplitButton</string>
<string>Item</string>
<string>Split1Item1</string>
<string>Split #1 Item #1</string>
<string>False</string>
<string />
<string />
<string>NonShapeEdit</string>
</ArrayOfString>
<ArrayOfString>
<string>SplitButton</string>
<string>Item</string>
<string>Split1Item2</string>
<string>Split #1 Item #2</string>
<string>True</string>
<string />
<string />
<string>EditMask</string>
</ArrayOfString>
<ArrayOfString>
<string>SplitButton</string>
<string>Item</string>
<string>Split1Item3</string>
<string>Split #1 Item #3</string>
<string>False</string>
<string />
<string />
<string>SchemaChange</string>
</ArrayOfString>
<ArrayOfString />
</ArrayOfArrayOfString>
The leading edge Inventor .NET Addin Wizard (InventorNetAddinWizard) can be found and downloaded from the A Wizard for Inventor .NET Addin page.
Posted by: |