Для 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 Событие для изоляции, пригодное для просмотра объектов просмотра в соответствии с выбранными тремя узлами.