Как создать двухуровневое контекстное меню в Autodesk Forge

Я хочу создать двухуровневое контекстное меню, но для этого нет API. Просто посмотрите на этот контекст уровня изображение меню что я могу сделать?


person weijie    schedule 23.08.2017    source источник


Ответы (2)


К сожалению, он недоступен в текущей версии программы просмотра. Возможно, вам придется написать собственное контекстное меню глубоко. Но есть обходной путь, которому вы можете следовать:

  1. Переопределите функции Autodesk.Viewing.Private.ContextMenu, чтобы обеспечить многоуровневое меню.
  2. Обратитесь к кодам из Autodesk.Viewing.UI.ObjectContextMenu, затем создайте свой собственный ObjectContextMenu и замените свойство contextMenu собственными несколькими уровнями ContextMenu из шага 1.
  3. Обратитесь к кодам из Autodesk.Viewing.Extensions.ViewerObjectContextMenu, затем напишите свой собственный ViewerObjectContextMenu, который наследует пользовательский ObjectContextMenu из шага 2.

P.S. Это всего лишь обходной путь, это не формальное решение, возможно, вам придется использовать его на свой страх и риск.

person Eason Kang    schedule 24.08.2017

Довольно просто получить многоуровневое контекстное меню, производное от Autodesk.Viewing.UI.ObjectContextMenu. Просто укажите массив в поле target:

buildMenu (event, node) {

  var menu = []

  switch (node.type) {

    case 'hubs':

      menu.push({
        title: 'Show details',
        className: 'fa fa-share',
        target: [{
          title: 'Hub details',
          className: 'fa fa-cloud',
          target: () => {
            this.emit('context.details', {
              event, node, type: 'hubs'
            })
          }
        }, {
          title: 'Projects details',
          className: 'fa fa-folder',
          target: () => {
            this.emit('context.details', {
              event, node, type: 'hubs.projects'
            })
          }
        }]
      })

      break

введите здесь описание изображения

Полный пример этого можно найти здесь: DataContextMenu.js

person Philippe    schedule 31.08.2017
comment
Спасибо, этот метод может создать двухуровневое меню. Но как вызвать двухуровневое меню с помощью события наведения? Не очень полезно запускать вторичное меню с помощью события щелчка. - person weijie; 04.09.2017
comment
Что ж, вы можете создать свой собственный ContextMenu и реализовать собственное поведение, посмотрите методы ContextMenu.prototype.addCallbackToMenuItem и ContextMenu.prototype.addSubmenuCallbackToMenuItem в viewer3D.js, где реализовано событие щелчка. Вместо этого используйте событие наведения мыши. Или, как предложил Eason ранее, реализовать с нуля собственное меню или использовать для этого множество доступных библиотек с открытым исходным кодом. К сожалению, я не могу порекомендовать вам какой-то конкретный. - person Philippe; 04.09.2017
comment
Большое спасибо. Я изменил несколько функций viewer3D.js по-вашему. Работает хорошо. - person weijie; 05.09.2017