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

01/03/2018

Базовое расширения: панель инструментов и присоединяемая панель

 

Создание расширения - это рекомендуемый подход для добавления пользовательского кода в Viewer. И в большинстве случаев нам нужен некоторый пользовательский интерфейс: кнопки и панели. Этот базовый код показывает, как создать расширение со всем этим. 

Прикрепляемая панель

Сначала создадим прикрепляемую панель, используя Autodesk.Viewing.UI.DockingPanel UI . Обратите внимание, что основной контейнер содержит панель, а дочерний div - это место, где мы должны размещать контент. CSS класс, используемый здесь, позволяет темы для Viewer версии 4 и выше.

Код - JavaScript: [Выделить]
  1. // *******************************************
  2. // Моя замечательная (прикрепляемая) панель
  3. // *******************************************
  4. function MyAwesomePanel(viewer, container, id, title, options) {
  5.     this.viewer = viewer;
  6.     Autodesk.Viewing.UI.DockingPanel.call(this, container, id, title, options);
  7.  
  8.     // стиль прикрепляемой панели
  9.     // используем этот встроенный стиль для поддержки Themes в Viewer 4 и выше
  10.     this.container.classList.add('docking-panel-container-solid-color-a');
  11.     this.container.style.top = "10px";
  12.     this.container.style.left = "10px";
  13.     this.container.style.width = "auto";
  14.     this.container.style.height = "auto";
  15.     this.container.style.resize = "auto";
  16.  
  17.     // здесь мы должны размещать содержимое нашей панели
  18.     var div = document.createElement('div');
  19.     div.style.margin = '20px';
  20.     div.innerText = "Мой контент здесь";
  21.     this.container.appendChild(div);
  22.     // и также может добавлять дочерние элементы ...
  23.  
  24. }
  25. MyAwesomePanel.prototype = Object.create(Autodesk.Viewing.UI.DockingPanel.prototype);
  26. MyAwesomePanel.prototype.constructor = MyAwesomePanel;

Расширение

На самом деле у нас много примеров с расширениями, здесь основное различие заключается в объединении с ним кнопки панели инструментов. На эту тему есть 2 учебника: расширения и панель инструментов. Следующий код просто соединяет их вместе и использует присоединяемую панель, описанную выше. Кнопка CSS должна быть определена в вашем файле .css.

Код - JavaScript: [Выделить]
  1. // *******************************************
  2. // Мое Удивительное расширение
  3. // *******************************************
  4. function MyAwesomeExtension(viewer, options) {
  5.     Autodesk.Viewing.Extension.call(this, viewer, options);
  6.     this.panel = null;
  7. }
  8.  
  9. MyAwesomeExtension.prototype = Object.create(Autodesk.Viewing.Extension.prototype);
  10. MyAwesomeExtension.prototype.constructor = MyAwesomeExtension;
  11.  
  12. MyAwesomeExtension.prototype.load = function () {
  13.     if (this.viewer.toolbar) {
  14.         // Панель инструментов уже доступна, создайте пользовательский интерфейс
  15.         this.createUI();
  16.     } else {
  17.         // Панель инструментов еще не создана, подождите, пока мы не получим уведомление о ее создании
  18.         this.onToolbarCreatedBinded = this.onToolbarCreated.bind(this);
  19.         this.viewer.addEventListener(av.TOOLBAR_CREATED_EVENT, this.onToolbarCreatedBinded);
  20.     }
  21.     return true;
  22. };
  23.  
  24. MyAwesomeExtension.prototype.onToolbarCreated = function () {
  25.     this.viewer.removeEventListener(av.TOOLBAR_CREATED_EVENT, this.onToolbarCreatedBinded);
  26.     this.onToolbarCreatedBinded = null;
  27.     this.createUI();
  28. };
  29.  
  30. MyAwesomeExtension.prototype.createUI = function () {
  31.     var viewer = this.viewer;
  32.     var panel = this.panel;
  33.  
  34.     // для отображения прикрепляемой панели
  35.     var toolbarButtonShowDockingPanel = new Autodesk.Viewing.UI.Button('showMyAwesomePanel');
  36.     toolbarButtonShowDockingPanel.onClick = function (e) {
  37.         // если null, создадим ее
  38.         if (panel == null) {
  39.             panel = new MyAwesomePanel(viewer, viewer.container,
  40.                 'awesomeExtensionPanel', 'Мое Удивительное расширение');
  41.         }
  42.         // показать / скрыть прикрепляемую панель
  43.         panel.setVisible(!panel.isVisible());
  44.     };
  45.     // класс myAwesomeToolbarButton CSS должен быть определен в вашем файле .css
  46.     // вы можете включать значки, ниже приведен пример класса:
  47.     /*
  48.     .myAwesomeToolbarButton {
  49.         background-image: url(/img/myAwesomeIcon.png);
  50.         background-size: 24px;
  51.         background-repeat: no-repeat;
  52.         background-position: center;
  53.     }*/
  54.     toolbarButtonShowDockingPanel.addClass('myAwesomeToolbarButton');
  55.     toolbarButtonShowDockingPanel.setToolTip ('Мое Удивительное расширение');
  56.  
  57.     // подпанель (SubToolbar)
  58.     this.subToolbar = new Autodesk.Viewing.UI.ControlGroup('MyAwesomeAppToolbar');
  59.     this.subToolbar.addControl(toolbarButtonShowDockingPanel);
  60.  
  61.     viewer.toolbar.addControl(this.subToolbar);
  62. };
  63.  
  64. MyAwesomeExtension.prototype.unload = function () {
  65.     this.viewer.toolbar.removeControl(this.subToolbar);
  66.     return true;
  67. };
  68.  
  69. Autodesk.Viewing.theExtensionManager.registerExtension('MyAwesomeExtension', MyAwesomeExtension);

Источник: https://forge.autodesk.com/blog/extension-skeleton-toolbar-docking-panel

 

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

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

Опубликовано 01.03.2018