Закрепление панелей инструментов в рядах с использованием CUI API
Создание и закрепление панелей в AutoCAD API представлено в COM API. Хотя панели можно закреплять при помощи COM API, в нём нет возможности организовывать панели в несколько рядов. Сам AutoCAD использует внутри себя метод закрепления панелей в рядах, который не представлен в COM API.
Способ обойти это ограничение заключается в использовании для настройки панелей инструментов в рабочем пространстве при помощи CUI API. Вот пример кода, который организует панели инструментов в текущем рабочем пространстве, как показано на следующем скриншоте. Все остальные панели инструментов в текущем рабочем пространстве скрыты. При необходимости вы можете модифицировать код, чтобы показать другие панели.
Вот расположение панелей инструментов, которое мы хотим получить:
Ряд: 0 Колонка: 0 – Гладкая сеть (Smooth Mesh)
Ряд: 1 Колонка: 0 – Сглаживание сетевых примитивов (Smooth Mesh Primitives)
Ряд: 0 Колонка: 1 – Рисование (Draw)
Ряд: 1 Колонка: 1 – Порядок прорисовки (Draw order)
Ряд: 0 Колонка: 2 – Стандартная (Standard)
Ряд: 1 Колонка: 2 – Стандарты оформления (CAD Standard)
- using Autodesk.AutoCAD.Customization;
- [DllImport("accore.dll" , CharSet = CharSet.Ansi,
- CallingConvention = CallingConvention.Cdecl,
- EntryPoint = "acedCmdS" )]
- private static extern int acedCmdS(System.IntPtr vlist);
- [CommandMethod("SetDockedToolbars" )]
- public void SetDockedToolbarsMethod()
- {
- Document activeDoc
- = Application.DocumentManager.MdiActiveDocument;
- Database db = activeDoc.Database;
- Editor ed = activeDoc.Editor;
- string mainCuiFile =
- (string)Application.GetSystemVariable("MENUNAME" );
- mainCuiFile += ".cuix" ;
- CustomizationSection cs
- = new CustomizationSection(mainCuiFile);
- string curWorkspace =
- (string)Application.GetSystemVariable("WSCURRENT" );
- Workspace ws = cs.getWorkspace(curWorkspace);
- // Выключаем все панели в рабочем пространстве.
- // Позднее мы включим только те, которые нам нужны,
- // и закрепим их
- foreach (WorkspaceToolbar wsTb in ws.WorkspaceToolbars)
- {
- wsTb.Display = 0;
- }
- // Панель Гладкая сеть
- Toolbar tbSmoothMesh =
- cs.MenuGroup.Toolbars.
- FindToolbarWithName("Гладкая сеть" );
- WorkspaceToolbar wsTbSmoothMesh =
- ws.WorkspaceToolbars.FindWorkspaceToolbar
- (tbSmoothMesh.ElementID, cs.MenuGroup.Name);
- if (wsTbSmoothMesh == null)
- {
- wsTbSmoothMesh = new WorkspaceToolbar(ws, tbSmoothMesh);
- ws.WorkspaceToolbars.Add(wsTbSmoothMesh);
- }
- wsTbSmoothMesh.Display = 1;
- wsTbSmoothMesh.ToolbarOrient = ToolbarOrient.left;
- wsTbSmoothMesh.DockRow = 0;
- wsTbSmoothMesh.DockColumn = 0;
- // Панель Сглаживание сетевых примитивов
- Toolbar tbSmoothMeshPrimitives
- = cs.MenuGroup.Toolbars.FindToolbarWithName
- ("Сглаживание сетевых примитивов" );
- WorkspaceToolbar wsTbSmoothMeshPrimitives
- = ws.WorkspaceToolbars.FindWorkspaceToolbar
- (tbSmoothMeshPrimitives.ElementID, cs.MenuGroup.Name);
- if (wsTbSmoothMeshPrimitives == null)
- {
- wsTbSmoothMeshPrimitives =
- new WorkspaceToolbar(ws, tbSmoothMeshPrimitives);
- ws.WorkspaceToolbars.Add(wsTbSmoothMeshPrimitives);
- }
- wsTbSmoothMeshPrimitives.Display = 1;
- wsTbSmoothMeshPrimitives.ToolbarOrient = ToolbarOrient.left;
- wsTbSmoothMeshPrimitives.DockRow = 1;
- wsTbSmoothMeshPrimitives.DockColumn = 0;
- // Панель Рисование
- Toolbar tbDraw =
- cs.MenuGroup.Toolbars.FindToolbarWithName("Рисование" );
- WorkspaceToolbar wsTbDraw =
- ws.WorkspaceToolbars.FindWorkspaceToolbar
- (tbDraw.ElementID, cs.MenuGroup.Name);
- if (wsTbDraw == null)
- {
- wsTbDraw = new WorkspaceToolbar(ws, tbDraw);
- ws.WorkspaceToolbars.Add(wsTbDraw);
- }
- wsTbDraw.Display = 1;
- wsTbDraw.ToolbarOrient = ToolbarOrient.left;
- wsTbDraw.DockRow = 0;
- wsTbDraw.DockColumn = 1;
- // Панель Порядок прорисовки
- Toolbar tbDrawOrder =
- cs.MenuGroup.Toolbars.FindToolbarWithName("Порядок прорисовки" );
- WorkspaceToolbar wsTbDrawOrder =
- ws.WorkspaceToolbars.FindWorkspaceToolbar
- (tbDrawOrder.ElementID, cs.MenuGroup.Name);
- if (wsTbDrawOrder == null)
- {
- wsTbDrawOrder = new WorkspaceToolbar(ws, tbDrawOrder);
- ws.WorkspaceToolbars.Add(wsTbDrawOrder);
- }
- wsTbDrawOrder.Display = 1;
- wsTbDrawOrder.ToolbarOrient = ToolbarOrient.left;
- wsTbDrawOrder.DockRow = 1;
- wsTbDrawOrder.DockColumn = 1;
- // Панель Стандартная
- Toolbar tbStandard =
- cs.MenuGroup.Toolbars.FindToolbarWithName("Стандартная" );
- WorkspaceToolbar wsTbStandard =
- ws.WorkspaceToolbars.FindWorkspaceToolbar
- (tbStandard.ElementID, cs.MenuGroup.Name);
- if (wsTbStandard == null)
- {
- wsTbStandard = new WorkspaceToolbar(ws, tbStandard);
- ws.WorkspaceToolbars.Add(wsTbStandard);
- }
- wsTbStandard.Display = 1;
- wsTbStandard.ToolbarOrient = ToolbarOrient.left;
- wsTbStandard.DockRow = 0;
- wsTbStandard.DockColumn = 2;
- // Панель Стандарты оформления
- Toolbar tbCADStandards =
- cs.MenuGroup.Toolbars.FindToolbarWithName
- ("Стандарты оформления");
- WorkspaceToolbar wsTbCADStandards
- = ws.WorkspaceToolbars.FindWorkspaceToolbar
- (tbCADStandards.ElementID, cs.MenuGroup.Name);
- if (wsTbCADStandards == null)
- {
- wsTbCADStandards =
- new WorkspaceToolbar(ws, tbCADStandards);
- ws.WorkspaceToolbars.Add(wsTbCADStandards);
- }
- wsTbCADStandards.Display = 1;
- wsTbCADStandards.ToolbarOrient = ToolbarOrient.left;
- wsTbCADStandards.DockRow = 1;
- wsTbCADStandards.DockColumn = 2;
- saveCui(cs);
- }
- public static void saveCui(CustomizationSection cs)
- {
- if (cs.IsModified)
- cs.Save();
- ResultBuffer rb = new ResultBuffer();
- rb.Add(new TypedValue(5005, "_FILEDIA" ));
- rb.Add(new TypedValue(5005, "0" ));
- acedCmdS(rb.UnmanagedObject);
- string cuiMenuGroup = cs.MenuGroup.Name;
- rb = new ResultBuffer();
- rb.Add(new TypedValue(5005, "_CUIUNLOAD" ));
- rb.Add(new TypedValue(5005, cuiMenuGroup));
- acedCmdS(rb.UnmanagedObject);
- string cuiFileName = cs.CUIFileName;
- rb = new ResultBuffer();
- rb.Add(new TypedValue(5005, "_CUILOAD" ));
- rb.Add(new TypedValue(5005, cuiFileName));
- acedCmdS(rb.UnmanagedObject);
- ResultBuffer rb = new ResultBuffer();
- rb.Add(new TypedValue(5005, "_FILEDIA" ));
- rb.Add(new TypedValue(5005, "1" ));
- acedCmdS(rb.UnmanagedObject);
- }
Источник: http://adndevblog.typepad.com/autocad/2015/10/docking-toolbars-in-rows-using-cui-api.html
Обсуждение: http://adn-cis.org/forum/index.php?topic=3100
Опубликовано 12.10.2015Отредактировано 12.10.2015 в 23:17:12