2

私の目標は、ここで行っているように、revit で作成した線に基づいてビューアに新しいジオメトリを追加して、部屋を強調することですリンク

しかし、これらの行IDにアクセスする方法がわかりません。それらがrevit(element_id)にあることは知っていますが、dbidとしてどのようにマッピングされているかはわかりません。

このブログ投稿に続いて

拡張機能で objectTree にアクセスして調べたいのですが、常に未定義として返されます。

var tree;
//old way - viewer is your viewer object - undefined
viewer.getObjectTree(function (objTree) {
 tree = objTree;
});

//2.5 - 未定義

  var instanceTree = viewer.model.getData().instanceTree;
  var rootId = this.rootId = instanceTree.getRootId();

//- 未定義

  var objectTree = viewer.getObjectTree();

まだ機能しているかどうか誰か教えてください

これを呼び出すと、dbidのリストが表示されることに注意してください

var model = viewer.impl.model;
var data = model.getData();
var fragId2dbIdArray = data.fragments.fragId2dbId ;

Revit element_id にマッピングする方法がありません

4

2 に答える 2

5

バージョン 2.9 の時点で、これはまだ機能しています。これが私のコンソールです: コンソールログ

以下のことを試してみてください。

  1. viewer未定義ですか?をつかむときに正しいスコープにいviewerますか?
  2. インスタンス ツリーを取得する前に、ドキュメントをロードする必要があります。ドキュメントが読み込まれると、呼び出されたイベントAutodesk.Viewing.GEOMETRY_LOADED_EVENTが発生し、インスタンス ツリーの操作を開始できます。

これを行うだけです:

viewer.addEventListener(Autodesk.Viewing.GEOMETRY_LOADED_EVENT, function () {
var instanceTree = viewer.model.getData().instanceTree;
});

より構造化されたコードについては、このガイドに従って拡張機能を追加してください。

どのイベントをリッスンするかについては、より詳細なブログ投稿があります。ただし、インスタンスツリーを取得するためにまだ古い方法を使用しています。

于 2016-08-12T02:36:14.500 に答える
3

Shiya Luo は正しかったです。閲覧者はジオメトリの読み込みをまだ完了していません

私のエクステンションLoad関数で、2つのイベントリスナーを追加し、instanceTreeにアクセスする前に両方が起動したことを確認しました

 viewer.addEventListener(Autodesk.Viewing.GEOMETRY_LOADED_EVENT, function () {
    finishedGEOMETRY_LOADED_EVENT = true;
    if(finishedGEOMETRY_LOADED_EVENT && finishedOBJECT_TREE_CREATED_EVENT ){
        afterModelLoadEvents(viewer);
    }
 });
viewer.addEventListener(Autodesk.Viewing.OBJECT_TREE_CREATED_EVENT, function () {
    finishedOBJECT_TREE_CREATED_EVENT = true;
    if(finishedGEOMETRY_LOADED_EVENT && finishedOBJECT_TREE_CREATED_EVENT ){
        afterModelLoadEvents(viewer);           
    }
 });
于 2016-08-12T04:09:53.530 に答える