伪造查看器仅显示元素/节点的一部分

时间:2018-05-29 08:42:07

标签: autodesk-forge autodesk-viewer autodesk

我们实现了一个复杂的过滤方法来过滤模型的元素。一切都基于国际金融公司。下面是一个带有2个子元素的IfcFooting元素的例子:

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

过滤方法可以找到具有特殊子元素"钢筋混凝土的IfcFooting元素"。返回值是ID 1和3.在查看器中,我们使用以下方法仅显示过滤结果:

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

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

问题是,使用ID 1调用此方法时,查看器将显示1,2和3.是否可以禁用此行为?我们只需要显示子元素3,但是不可能忽略过滤结果中的ID 1 ...... thx!

1 个答案:

答案 0 :(得分:2)

这是预期的行为,如果id不是叶子组件而是拥有子组件的逻辑组件,那么显示/隐藏此组件将影响其所有子组件是正常的。

您应该做的是确保您收集的所有ID都是叶子组件(检查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
}