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

23/06/2015

Настройка пользовательского интерфейса Fusion 360 при помощи Fusion API - Часть 3

Очистка ваших команд

Как правило, пользовательский интерфейс изменяется путем добавления команды, когда загружается надстройка. Fusion не помнит изменений, внесенных в пользовательский интерфейс, так что при следующем запуске Fusion все будет восстановлено в его состояние по умолчанию времени и надстройке нужно будет заново создать его команды каждый раз, когда она запускается. Если надстройка выгружается пользователем во время сессии Fusion, все её команды останутся на экране команд для этой сессии, но будут "мертвы", потому что надстройка больше не работает, чтобы получить доступ к созданным командой событиям. Чтобы предотвратить это надстройка, должна провести чистку и удалить любые созданные ею пользовательские интерфейсы. Это можно сделать в функции останова надстроек, которые вызывает Fusion, когда выгружается надстройка. Для того, чтобы полностью удалить элементы пользовательского интерфейса, должны быть удалены определения команд и управления. Это также позволяет надстройке быть чисто загруженной повторно, если пользователь это выберет.

Код Python ниже демонстрирует удаление определения команды и элемента управления, которые были созданы выше.

Код - Python: [Выделить]
  1. # Получить объект UserInterface и коллекцию CommandDefinitions.
  2. ui = app.userInterface
  3. cmdDefs = ui.commandDefinitions
  4.  
  5. # Удалить определение кнопки.
  6. buttonExample = ui.commandDefinitions.itemById('MyButtonDefId')
  7. if buttonExample:
  8.       buttonExample.deleteMe
  9.      
  10. # Получить и удалить элемент управления.
  11. inspectPanel = ui.toolbarPanels.itemById('InspectPanel')
  12.  
  13. # Получить кнопку.
  14. buttonControl = inspectPanel.controls.itemById('MyButtonControlID')
  15. if buttonControl:
  16.       buttonControl.deleteMe

Иконки для команд

Многие из элементов управления поддерживают использование значков. В Fusion, значки определяются указанием каталог, содержащего все изображения для этой команды. Каждая иконка имеет свой собственный каталог изображений ресурса. Часто может быть несколько размеров одной и той же иконки, используемой Fusion, который требует нескольких изображений в связанном каталоге ресурсов. Например, когда команда добавляется в группу панелей инструментов при работе на Windows, значок отображается в выпадающем меню 16х16 пикселей, но если пользователь продвигает его на панель, то он отображается с помощью значка 32x32 пикселей. Существует стандарт именования, который Fusion ожидает, чтобы понять где какое изображение. Имена файлов для изображения по умолчанию являются:

  •           16x16.png
  •           32x32.png
  •           64x64.png

На Mac с дисплеем Retina, 32x32.png используется для маленького значка, а 64x64.png используется для большого значка. Помните, что каждая команда имеет свою собственную папку, так что имена файлов одинаковые, но различаются по папке они находятся.

Для каждого размера, Fusion также требуется версия отключенного изображения. Файлы для наборов отключенных изображений являются:

  •           16x16-disabled.png
  •           32x32-disabled.png
  •           64x64-disabled.png

Наконец, Fusion также нуждается в версию изображения, которое используется, когда команда активна. В этом случае появляется кнопка отжата и фон темно-синий. Вы можете создать собственное изображение для этого случая, так чтобы любые темные цвета не исчезали в фоне. Часто это просто копия изображения по умолчанию. Имена изображений для темного фона являются:

  •           16x16-dark.png
  •           32x32-dark.png
  •           64x64-dark.png

Ниже в качестве примера приведены изображения, используемые для команды выдавливания Fusion.

 

Если вы не предоставите необходимое изображение, Fusion автоматически создаст шаблон изображения с правильным именем и изображением вопросительного знака. Если вы видите знак вопроса для любой из ваших команд, это означает, что вы пропустили одно из необходимых изображений, и вы должны будете заменить его правильным образом.

Ресурсы определяются путем указания пути к папке ресурсов. Путь к ресурсам, как правило, определяется с помощью относительного пути, но также может быть полный путь. Относительный путь является относительным к файлу .py или .js. Например, для структуры папок, показанной ниже, относительный путь к изображениям для команды Keyhoile в надстройке SketchShapes является ".//Resources//Kehole” при том, что файл Keyhole.py находится в каталоге SketchShapes.

 

Существует каталог для всего, что требует значок. В приведенном выше примере есть один для каждой команды, созданной надстройкой SketchShapes и каждый из каталогов содержит следующие файлы. Все файлы имеют одинаковое имя, но, конечно, фактические изображения являются специфическими для каждой команды.

Позиционирование ваших элементов управления

Возможно, самой трудной частью добавления своих команды пользовательского интерфейса Fusion является понимание того, как позиционировать элемент управления там, где вы этого хотите. Чтобы расположить ваши команды, вам нужны имена групп панелей инструментов, панелей и команд, по отношению к которым вы хотите позиционировать. Например, целью является вставка новой команды выпадающее меню файла панели быстрого доступа над командой "3D Print", как показано ниже. Чтобы создать элемент управления в этом месте, мы должны знать имя панели инструментов, представляющей панель быстрого доступа, имя в раскрывающемся списке, где расположены файловые команды, и имя "3D print command".

 

Вот код, который выполняет это.

Код - Python: [Выделить]
  1. # Получить панель быстрого доступа.
  2. qat = ui.toolbars.itemById('QAT')
  3.  
  4. # Получить раскрывающийся список, содержащий команды, связанные с файлами.
  5. fileDropDown = qat.controls.itemById('FileSubMenuCommand')
  6.  
  7. # Получить элемент управления для команды 3D Print.
  8. print3DCmd = fileDropDown.controls.itemById('ThreeDprintCmdDef')
  9.  
  10. # Добавить новую кнопку рядом с элементом управления 3D Print.
  11. buttonControl = fileDropDown.controls.addCommand(testCommandDef, 'testCmdDefControl', print3DCmd.index)

 

Вы можете увидеть имена на панели инструментов и элементов управления, которые используются, чтобы найти их в различных коллекциях. Чтобы определить, какие имена различных элементов пользовательского интерфейса вы можете использовать, используйте программу-пример Write user interface to a file который сбрасывает текущий пользовательский интерфейс в текстовый файл.Результатом является виде древовидная структура, которая отражает структуру пользовательского интерфейса. Ниже представлена обрезанная версия файла, который показывает части, которые нам необходимы для выполнения представленной выше задачи. Из этого мы видим, что имя панели быстрого доступа является "QAT", имя меню файлов является "FileSubMenuCommand", а имя команды 3D Print является "ThreeDprintCmdDef".

Код - XML: [Выделить]
  1. ** Toolbars (7) **
  2.  .
  3.  .
  4.  .
  5.  QAT (10)____
  6.   .
  7.   .
  8.   .
  9.   Drop Down Control (27)____
  10.     ID: FileSubMenuCommand
  11.              .
  12.              .
  13.              .
  14.     Command Control____
  15.      Control ID: ExportCommand
  16.      isVisible: True
  17.      index: 12
  18.     Command Control____
  19.      Control ID: ThreeDprintCmdDef
  20.      isVisible: True
  21.      index: 13
  22.     Command Control____
  23.      Control ID: SaveAsImageCommand
  24.      isVisible: True
  25.      index: 14

Источник: http://fusion360.autodesk.com/resources

Автор перевода: Дмитрий Емельянов

Обсуждение: http://adn-cis.org/forum/index.php?topic=2838

Опубликовано 23.06.2015
Отредактировано 07.07.2015 в 16:51:17