簡體   English   中英

Forge查看器僅顯示元素/節點的一部分

[英]Forge viewer display only part of element / node

我們實現了一種復雜的過濾方法來過濾模型的元素。 一切都基於IFC。 以下是具有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。

這是預期的行為,如果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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM