2017-06-26 7 views
0

ビューアをオフにするdbIdの配列を渡すと、モデル内のすべてのノードがオフになります。Autodesk Forge setNodeOffがすべてのノードをオフにします

Autodesk.Viewing.Viewer3D.prototype.turnOff = function(dbIds) { 
     var node; 

     $(dbIds) 
      .each(function(index, item) { 
       node = viewer.model.getData().instanceTree.nodeAccess.nodes[item]; 

       viewer.impl.visibilityManager.setNodeOff(node, true); 
      }); 
} 
+0

あなたの質問 – ninjaproger

答えて

0

親のIDを渡すと、すべての子がオフになります。これはおそらくあなたのケースで起こります。ノードをオフにすることは間違いなく機能します。私のデモをhttps://forge-rcdb.autodesk.ioに見ることができます。

データベースビューまたは円グラフのセグメント内の行を選択します。

enter image description here

あなたがする必要がどのようなリーフノードのみがジオメトリで表され、リーフノードのIDを取得することですビューア。ここで

thereから抽出された、いくつかのES6のコードサンプルです:

static getLeafNodes (model, dbIds) { 

    return new Promise((resolve, reject)=>{ 

    try { 

     const instanceTree = model.getData().instanceTree 

     dbIds = dbIds || instanceTree.getRootId() 

     const dbIdArray = Array.isArray(dbIds) ? dbIds : [dbIds] 

     let leafIds = [] 

     const getLeafNodesRec = (id) => { 

     var childCount = 0; 

     instanceTree.enumNodeChildren(id, (childId) => { 

      getLeafNodesRec(childId) 

      ++childCount 
     }) 

     if (childCount == 0) { 

      leafIds.push(id) 
     } 
     } 

     for (var i = 0; i < dbIdArray.length; ++i) { 

     getLeafNodesRec(dbIdArray[i]) 
     } 

     return resolve(leafIds) 

    } catch(ex){ 

     return reject(ex) 
    } 
    }) 
} 

static async isolateFull (viewer, dbIds = [], model = null) { 

    try { 

    model = model || viewer.activeModel || viewer.model 

    viewer.isolate(dbIds) 

    const targetIds = Array.isArray(dbIds) ? dbIds : [dbIds] 

    const targetLeafIds = await ViewerToolkit.getLeafNodes(
     model, targetIds) 

    const leafIds = await ViewerToolkit.getLeafNodes (model) 

    const leafTasks = leafIds.map((dbId) => { 

     return new Promise((resolveLeaf) => { 

     const show = !targetLeafIds.length || 
      targetLeafIds.indexOf(dbId) > -1 

     viewer.impl.visibilityManager.setNodeOff(
      dbId, !show) 

     resolveLeaf() 
     }) 
    }) 

    return Promise.all(leafTasks) 

    } catch (ex) { 

    return Promise.reject(ex) 
    } 
} 
+1

の書式コードを修正してください、これは仕事をした、ありがとう。 –

+0

解決策として受け入れることができますので、将来的に正しい回答を見つけることは簡単です。ありがとう;) –

関連する問題