Экземпляр ModelStructurePanel в элементе div вне средства просмотра GUI - PullRequest
0 голосов
/ 20 марта 2020

Я создаю html страницу с функциональностью запроса модели, начиная с просмотра. Я реализовал несколько методов, включая viewer.getProperties () и viewer.getBulkProperties (). Работая над этими темами, я понял, что было бы очень полезно создавать экземпляры панелей (модель структуры, свойства и т. Д. c ...) в элементах, внешних по отношению к зрителю (не в стыковочных панелях), поддерживая функциональность и, если возможно, настраивая их (например, показывая элементы не-свернутые). Первый вопрос: возможно ли это сделать? Второй вопрос: предложения по общему методу или учебнику по этой теме?

1 Ответ

0 голосов
/ 23 марта 2020

Для Q1 это можно сделать, добавив контейнер ModelStructurePanel к элементу div вне контейнера средства просмотра, но это не рекомендуется. Потребовалось бы приложить дополнительные усилия для исправления CSS ModelStructurePanel после перемещения его из контейнера средства просмотра.

Для Q2 вы можете воспользоваться jstree. js, чтобы сделать три подобных пользовательского интерфейса, и для перестройки данных иерархии моделей, как это делает нативный ModelStructurePanel, вот фрагмент кода для вас. Вам придется изменить его в соответствии с требованиями к данным jstree.

function buildModelTree( model ) {

  //builds model tree recursively
  function _buildModelTreeRec( node ) {

    it.enumNodeChildren( node.dbId, function(childId) {
        node.children = node.children || [];

        var childNode = {
          dbId: childId,
          name: it.getNodeName( childId )
        };

        node.children.push( childNode );

        _buildModelTreeRec( childNode );
      });

  }

  //get model instance tree and root component
  var it = model.getData().instanceTree;

  var rootId = it.getRootId();

  var rootNode = {
    dbId: rootId,
    name: it.getNodeName( rootId )
  };

  _buildModelTreeRec( rootNode );

  return rootNode;
}

var root = buildModelTree( viewer.model );

Затем вам нужно будет связать эти события, чтобы изменить внешний вид пользовательского интерфейса дерева в некоторых конкретных ситуациях:

  • Autodesk. Просмотр.SELECTION_CHANGED_EVENT: чтобы сделать узлы дерева выбранными.
  • Autodesk.Viewing.ISOLATE_EVENT:
  • Autodesk.Viewing.HIDE_EVENT: Чтобы изменить внешний вид узлов дерева, сделайте текст на узлах дерева серым, если это узел невидим.
  • Autodesk.Viewing.SHOW_EVENT: изменить цвет текста выделенных трех узлов с серого на черный
  • Autodesk.Viewing.ISOLATE_EVENT: комбинация HIDE_EVENT и SHOW_EVENT.

And bind select_node.jstree Событие для изоляции, пригодное для просмотра объектов просмотра в соответствии с выбранными тремя узлами.

...