As we have known, Naivisworks Ribbon API allows developers to add custom Ribbon (Tab) . These are some articles:
http://adndevblog.typepad.com/aec/2012/07/custom-ribbon-of-navisworks-part-1.html
http://adndevblog.typepad.com/aec/2012/07/custom-ribbon-of-navisworks-part-2.html
http://adndevblog.typepad.com/aec/2012/07/custom-ribbon-of-navisworks-part-3.html
While sometimes, the requirement is to add button/panel to the built-in tabs. Actually, in Navisworks the same library of Ribbon is used: AdWindows.dll which provides some underlying API to get access to that notification under the namespace Autodesk.Windows. We have had some articles for such as Inventor, Revit
http://adndevblog.typepad.com/manufacturing/2013/02/intercept-click-event-on-a-ribbon-tab.html
http://adndevblog.typepad.com/manufacturing/2014/01/modify-ribbon-and-menu-items.html
http://adndevblog.typepad.com/manufacturing/2013/02/intercept-click-event-on-a-ribbon-tab.html
Note: AdWindows APIs are not a section of the official APIs, though you can access it at your own risk.
Based on the ideas, I made some codes in a custom plugin as below. It will add a new panel to the built-in tab [Home], and a button named [ADN Test]. When the tab is activated, a message box will appear. The same when the button is clicked.
The resource codes is available at Download ADNTestBuiltInRibbon. It is tested in Navisworks 2016. The only issue I hit is sometimes the image does not appear. I will update this blog when I figured out.
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Text;
//Add two new namespaces
using Autodesk.Navisworks.Api;
using Autodesk.Navisworks.Api.Plugins;
using Autodesk.Windows;
namespace BasicPlugIn
{
[PluginAttribute("BasicPlugIn.ABasicPlugin", //Plugin name
"ADSK", //4 character Developer ID or GUID
ToolTip = "BasicPlugIn.ABasicPlugin tool tip",//The tooltip for the item in the ribbon
DisplayName = "Hello World Plugin")] //Display name for the Plugin in the Ribbon
public class ABasicPlugin : AddInPlugin //Derives from AddInPlugin
{
// when the tab is activated
void Tab_Activated(object sender, EventArgs e)
{
System.Windows.Forms.MessageBox.Show(
"Tab " + ComponentManager.Ribbon.ActiveTab.Id + " Activated!");
}
//delegate the event when ribbon element is activated
void ComponentManager_UIElementActivated(object sender,UIElementActivatedEventArgs e)
{
if (e != null
&& e.Item != null
&& e.Item.Id != null
&& e.Item.Id == "ID_ADNTestButton")
{
System.Windows.Forms.MessageBox.Show(e.Item.Id + " is clicked!");
}
}
public override int Execute(params string[] parameters)
{
foreach (Autodesk.Windows.RibbonTab Tab in Autodesk.Windows.ComponentManager.Ribbon.Tabs)
{
//get Home tab
if (Tab.Id == "ID_TabHome")
{
Tab.Activated += new EventHandler(Tab_Activated);
RibbonPanel ADNPanel = null;
//check if the custom panel exsits
foreach (RibbonPanel panel in Tab.Panels)
{
if (panel.Source.Name == "ID_ADNTestPanel")
{
ADNPanel = panel;
break;
}
}
if (ADNPanel == null)
{
//create custom Panel
ADNPanel = new RibbonPanel();
//create ribbon panel source and bind it to the panel
RibbonPanelSource ADNSource = new RibbonPanelSource();
ADNSource.Id = "ID_ADNTestPanel";
ADNSource.Name = "ADN Test Panel";
ADNPanel.Source = ADNSource;
//create ribbon button
RibbonButton button = new RibbonButton();
button.IsEnabled = true;
button.IsVisible = true;
button.Image = new System.Windows.Media.Imaging.BitmapImage(new Uri(@"Images/ListAdd.png", UriKind.RelativeOrAbsolute));
button.LargeImage = new System.Windows.Media.Imaging.BitmapImage(new Uri(@"Images/open.png", UriKind.RelativeOrAbsolute));
button.ShowImage = true;
button.Size = RibbonItemSize.Standard;
button.ShowText = true;
button.ResizeStyle = RibbonItemResizeStyles.HideText;
button.Id = "ID_ADNTestButton";
button.Name = "ADNTestButtonName";
button.Text = "ADN Test";
button.Orientation = System.Windows.Controls.Orientation.Vertical;
//add the button to the panel
ADNPanel.Source.Items.Add(button);
//delegate the event when ribbon element is activated
ComponentManager.UIElementActivated += new EventHandler(ComponentManager_UIElementActivated);
//add the panel to the tab
Tab.Panels.Add(ADNPanel);
}
}
}
return 0;
}
}
}
#endregion



Leave a Reply