Модификация Ленты
Вопрос:Я хочу изменить содержимое Ленты (Ribbon) – добавлять/удалять панели, и т.д.. Как это можно сделать?
Ответ:
Это доступно только при помощи AutoCAD .NET API.
Есть два набора функций:
1) Ribbon Runtime API – содержащееся в AdWindows.dll в пространстве имён Autodesk.Windows
Позволяет модифицировать Ленту, но изменения не будут сохраняться в CUIx файл, так что при перезапуске AutoCAD, или даже при переключении рабочего пространства (системной переменной WSCURRENT) или при перезагрузке меню все сделанные вами изменения пропадут и вам понадобится всё повторять.
Это небольшой пример переключения видимости вкладки Главная (Home):
- [CommandMethod("HideShowHomeTab")]
- static public void HideShowHomeTab()
- {
- Autodesk.Windows.RibbonControl rc =
- Autodesk.Windows.ComponentManager.Ribbon;
- Autodesk.Windows.RibbonTab tab =
- rc.FindTab("ACAD.ID_TabHome3D");
- if (tab != null)
- tab.IsVisible = !tab.IsVisible;
- }
2) CUI API – содержится в AcCui.dll в пространстве имён Autodesk.AutoCAD.Customization
Вы можете использовать это API для изменения пользовательского интерфейса так же, как это делает диалог команды НПИ (CUI) и эти изменения сохраняются.
Этот пример переключает видимость вкладки Главная (Home) при помощи CUI API:
- [CommandMethod("HideShowHomeTabInCurrentWorkspace")]
- static public void HideShowHomeTabInCurrentWorkspace()
- {
- string menuName =
- (string)Autodesk.AutoCAD.ApplicationServices.
- Application.GetSystemVariable("MENUNAME");
- string curWorkspace =
- (string)Autodesk.AutoCAD.ApplicationServices.
- Application.GetSystemVariable("WSCURRENT");
- Autodesk.AutoCAD.Customization.CustomizationSection cs =
- new Autodesk.AutoCAD.Customization.CustomizationSection(
- menuName + ".cuix");
- Autodesk.AutoCAD.Customization.WSRibbonRoot rr =
- cs.getWorkspace(curWorkspace).WorkspaceRibbonRoot;
- Autodesk.AutoCAD.Customization.WSRibbonTabSourceReference tab =
- rr.FindTabReference("ACAD", "ID_TabHome3D");
- if (tab != null)
- tab.Show = !tab.Show;
- if (cs.IsModified)
- {
- cs.Save();
- // перезагружаем, чтобы увидеть изменения
- acApp.ReloadAllMenus();
- }
- }
Замечание: Этот пример в не модифицированном виде работает только в чистом AutoCAD (где menugroup называется ACAD) и в рабочем пространстве 3D-моделирование (3D Modeling) (где идентификатор вкладки Главная (Home) равен ID_TabHome3D)
Источник: http://adndevblog.typepad.com/autocad/2012/07/modify-ribbon.html
Обсуждение: http://adn-cis.org/forum/index.php?topic=1857
Опубликовано 13.02.2015