ADN Open CIS
Сообщество программистов Autodesk в СНГ

13/02/2015

Модификация Ленты

Вопрос:

Я хочу изменить содержимое Ленты (Ribbon) – добавлять/удалять панели, и т.д.. Как это можно сделать?

Ответ:

Это доступно только при помощи AutoCAD .NET API.

Есть два набора функций:

1) Ribbon Runtime API – содержащееся в AdWindows.dll в пространстве имён Autodesk.Windows

Позволяет модифицировать Ленту, но изменения не будут сохраняться в CUIx файл, так что при перезапуске AutoCAD, или даже при переключении рабочего пространства (системной переменной WSCURRENT) или при перезагрузке меню все сделанные вами изменения пропадут и вам понадобится всё повторять.

Это небольшой пример переключения видимости вкладки Главная (Home):

Код - C#: [Выделить]
  1. [CommandMethod("HideShowHomeTab")]
  2. static public void HideShowHomeTab()
  3. {
  4.   Autodesk.Windows.RibbonControl rc =
  5.     Autodesk.Windows.ComponentManager.Ribbon;
  6.  
  7.   Autodesk.Windows.RibbonTab tab =
  8.     rc.FindTab("ACAD.ID_TabHome3D");
  9.  
  10.   if (tab != null)
  11.     tab.IsVisible = !tab.IsVisible;
  12. }

2) CUI API – содержится в AcCui.dll в пространстве имён Autodesk.AutoCAD.Customization

Вы можете использовать это API для изменения пользовательского интерфейса так же, как это делает диалог команды НПИ (CUI) и эти изменения сохраняются.

Этот пример переключает видимость вкладки Главная (Home) при помощи CUI API:

Код - C#: [Выделить]
  1. [CommandMethod("HideShowHomeTabInCurrentWorkspace")]
  2. static public void HideShowHomeTabInCurrentWorkspace()
  3. {
  4.   string menuName =
  5.     (string)Autodesk.AutoCAD.ApplicationServices.
  6.     Application.GetSystemVariable("MENUNAME");
  7.  
  8.   string curWorkspace =
  9.     (string)Autodesk.AutoCAD.ApplicationServices.
  10.     Application.GetSystemVariable("WSCURRENT");
  11.  
  12.   Autodesk.AutoCAD.Customization.CustomizationSection cs =
  13.     new Autodesk.AutoCAD.Customization.CustomizationSection(
  14.       menuName + ".cuix");
  15.  
  16.   Autodesk.AutoCAD.Customization.WSRibbonRoot rr =
  17.     cs.getWorkspace(curWorkspace).WorkspaceRibbonRoot;
  18.  
  19.   Autodesk.AutoCAD.Customization.WSRibbonTabSourceReference tab =
  20.     rr.FindTabReference("ACAD", "ID_TabHome3D");
  21.  
  22.   if (tab != null)
  23.     tab.Show = !tab.Show;
  24.  
  25.   if (cs.IsModified)
  26.   {
  27.     cs.Save();
  28.  
  29.     // перезагружаем, чтобы увидеть изменения
  30.     acApp.ReloadAllMenus();
  31.   }
  32. }

Замечание: Этот пример в не модифицированном виде работает только в чистом 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