Это ожидаемое поведение, если идентификатор не является компонентом листа, а является логическим компонентом, который владеет дочерними элементами, тогда нормально, что показ / скрытие этого компонента повлияет на все его дочерние элементы.
Что вам следует сделать, так этоубедитесь, что все идентификаторы, которые вы собираете, являются конечными компонентами (убедитесь, что 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
}