Forge Viewer отображать только часть элемента / узла - PullRequest
0 голосов
/ 29 мая 2018

мы реализовали сложный метод фильтрации для фильтрации элементов модели.Все основано на МФК.Ниже приведен пример элемента IfcFooting с 2 подэлементами:

ID      IfcType                     Description
--------------------------------------------------------
1       IfcFooting                  Base
2       > IfcBuildingElementPart    Insulation
3       > IfcBuildingElementPart    Reinforced Concrete

Метод фильтра может найти элементы IfcFooting со специальным подэлементом «Железобетон».Возвращаемое значение - идентификаторы 1 и 3. В программе просмотра мы используем следующий метод для отображения только результатов фильтра:

viewer3d.impl.visibilityManager.hide(rootId, model);

$.each(selection, function (k, v) {
    viewer3d.impl.visibilityManager.show(v, model);
});

Проблема заключается в том, что при вызове этого метода с идентификатором 1 программа просмотра отображает 1, 2и 3. Можно ли отключить это поведение?Нам нужно только отобразить подэлемент 3, но невозможно игнорировать идентификатор 1 в результатах фильтрации ... thx!

1 Ответ

0 голосов
/ 29 мая 2018

Это ожидаемое поведение, если идентификатор не является компонентом листа, а является логическим компонентом, который владеет дочерними элементами, тогда нормально, что показ / скрытие этого компонента повлияет на все его дочерние элементы.

Что вам следует сделать, так этоубедитесь, что все идентификаторы, которые вы собираете, являются конечными компонентами (убедитесь, что instanceTree.enumNodeChildren (dbId) не имеет дочерних элементов).И выполнять логику только на листе.

В вашем случае вы бы отфильтровали dbId 1, потому что у него есть дочерние элементы, и показали бы только dbId 3.

Вот пример:

 function isLeafComponent (dbId) {

  var instanceTree = viewer.model.getData().instanceTree

  var childCount = 0

  instanceTree.enumNodeChildren(dbId, function(childId) {

    ++childCount
  })

  return (childCount < 2) // Handles IFC with "Body" child
}
...