我们实现了一个复杂的过滤方法来过滤模型的元素。一切都基于国际金融公司。下面是一个带有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!
答案 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
}