2016-12-19 6 views
0

Autodesk Forge Viewerで要素のTHREE.Meshオブジェクトを取得したいと考えています。Autodesk Forge ViewerでTHREE.Mesh要素を取得

var dbId; // geometry node Id of an element 
var viewer; // GuiViewer3D 
var mesh = viewer.impl.getRenderProxy(viewer.model, dbId); 

リターンメッシュオブジェクトはTHREE.Meshオブジェクトですが、ヌルジオメトリとマテリアルなので役に立たないです。実際のTHREE.Meshオブジェクトを取得するにはどうすればよいですか?

ありがとうございます。

答えて

2

レンダリングスタイルを変更する場合は、renderProxyを取得する必要があります。コンポーネントの位置または回転を変換する場合は、fragmentProxyを取得する必要があります。

これらのメソッドは、dbIdではなくフラグメントIDを入力として受け取ります。

の両方のために例を見つける:あなたが選択イベントから、上記のサンプルに示されているように、またはenumNodeFragmentsを使用して、いずれかの所与のDBIDのための断片のIdsを得る

Viewing.Extension.Material

Viewing.Extension.Transform

var instanceTree = model.getData().instanceTree 

var fragIds = [] 

instanceTree.enumNodeFragments(dbId, function(fragId){ 
    fragIds.push(fragId) 
}) 

// to change material or transform, need to iterate all 
// fragments of a given dbId and apply same material/transform 

fragIds.forEach(function(fragId) { 

    var renderProxy = viewer.impl.getRenderProxy(viewer.model, fragId) 

    var fragmentproxy = viewer.impl.getFragmentProxy(viewer.model, fragId) 
}) 
+0

ノード要素(dbId)とフラグメント(fragId)の違いについて説明してください。私は1つのdbIdが多くのfragIsにマップできることを知っていて、1つのfragIdは多くのdbIdにマップできます。 Forgeビューアで視覚的にはどうなっていますか? –

+0

正確には、Forgeビューアをクリックすると、完全なジオメトリとオブジェクトの素材を持つ実際のTHREE.Meshオブジェクトを取得したいと考えています。 renderProxy = viewer.impl.getRenderProxy(viewer.model、fragId)には実際のジオメトリがありません。 THREE.BufferGeometry.computeBoundingBox()または.computeBoundingSphere()を実行した後でも、ゼロまたはゼロの境界ボックスおよび球があります。 –

+0

Forgeビューアgeometry.boundingBoxは空のため、私は手動でそれを計算するためにfragmentList.getWorldBounds(fragId、fragBox)を実行する必要があります。 –

関連する問題