- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
Hello,
I'm new in AutoCAD development but I have a lot of experience in Revit API.
In Revit the IExternalApplication.OnStartup is the best place to register a RibbonPanel when the application start.
In AutoCAD the IExtensionApplication.Initialize looks similar but the ComponentManager.Ribbon is null at that moment.
I see some users using Application.Idle to register the Ribbons as a solution, and found a different approach that looks better in my opinion that use the ComponentManager.ItemInitialized.
I create an abstract class to help with OnStartup/OnShutdown the Ribbon.
public abstract class ExtensionApplication : IExtensionApplication
{
public virtual void Initialize()
{
ComponentManager.ItemInitialized += ComponentManager_ItemInitialized;
if (ComponentManager.Ribbon is not null) ComponentManager_ItemInitialized(null, null);
Application.QuitWillStart += Application_QuitWillStart;
}
public virtual void Terminate()
{
ComponentManager.ItemInitialized -= ComponentManager_ItemInitialized;
Application.QuitWillStart -= Application_QuitWillStart;
}
private void ComponentManager_ItemInitialized(object sender, RibbonItemEventArgs e)
{
ComponentManager.ItemInitialized -= ComponentManager_ItemInitialized;
OnStartup(ComponentManager.Ribbon);
}
private void Application_QuitWillStart(object sender, EventArgs e)
{
Application.QuitWillStart -= Application_QuitWillStart;
OnShutdown(ComponentManager.Ribbon);
}
public abstract void OnStartup(RibbonControl ribbonControl);
public abstract void OnShutdown(RibbonControl ribbonControl);
}
And my main application would be something like:
public class App : ExtensionApplication
{
public override void OnStartup(RibbonControl ribbonControl)
{
ribbonControl.CreateOrSelectPanel("PanelName", "TabName");
}
public override void OnShutdown(RibbonControl ribbonControl)
{
}
}
If someone with more experience with AutoCAD API could judge my approach, any improvement would be appreciate.
See yaa
Solved! Go to Solution.