2017-01-09 5 views
0

私はviewer.getObjectTree = function(onSuccessCallback, onErrorCallback)を使用してモデルオブジェクトツリーを取得し、ルートノードからすべてのリーフノードまでトラバースします。コードは次のとおりです。2D図面のモデルオブジェクトツリーを取得する方法

viewer.getObjectTree(function (objTree) { 
    objTree.enumNodeChildren(
     objTree.getRootId(), 
     function (dbId) { 
      // Work with dbId 
     }, 
     true 
    ); 
}; 

ただし、3Dモデルでのみ動作します。 2Dモデルはコールバックイベントにジャンプしません。 2Dレイアウト/図面のすべてのオブジェクトIDを取得するにはどうすればよいですか?

+0

サンプルのRevitファイルで確認したところ、ビューア2.11で2Dモデルを使用してもうまくいきました。 問題の原因は、通常、取得しようとするとインスタンスツリーが初期化されないためです。したがって、インスタンスツリーが既に設定されていることを確認する必要があります。それが同じ問題の場合に備えて、この投稿をチェックしましたか?http://stackoverflow.com/questions/38904993/how-to-retrieve-forge-viewer-objecttree/38909765#38909765 –

+0

'viewer.getObjectTree'を' Autodesk.Viewing.OBJECT_TREE_CREATED_EVENT'の中に入れましたが、2D図面では機能しませんでした。3Dモデルのみでした。あなたは完全なコードを共有してください。 –

+0

Autodesk.Viewing.GEOMETRY_LOADED_EVENT内でこれを実行しようとしましたか?私は実際にこのイベントの中でそれを作った。 –

答えて

0

理由を見つけました。 2Dレイアウト/図面にはモデルオブジェクトツリー(単なるレイヤー)はありません。 3Dモデルでは異なるデータ構造を使用します。 3Dはインスタンスツリーを使用してすべてのノードを取得しますが、2Dは一連のDbIdsを使用します。

3Dモデルでオブジェクトを移動するには、viewer.getObjectTreeviewer.model.getData().instanceTreeを使用します。

2Dレイアウトでオブジェクトを移動するには、viewer.model.getData()を使用します。 viewer.model.getData().stringDbIds

+0

'viewer.model.getData()。stringDbIds'は、2D図面で使用される正しいDbIdを返しません。 –

+0

シードファイルの形式は何ですか?それはDWGファイルですか? –

+0

私のシードファイルは2D DWFです。 DWGも同じです。 –

関連する問題