2017-02-02 25 views
0

私のコードでは、ビューアが完全にモデルファイルをロードした後にのみ実行されるように、Autodesk.Viewing.GEOMETRY_LOADED_EVENTイベントにリスナーを付けました。私はthisの例を追跡しました。ForgeビューアAutodesk.Viewing.GEOMETRY_LOADED_EVENTがpdfファイルに対してトリガーされていない

// Attach event handlers 
viewer.addEventListener(Autodesk.Viewing.GEOMETRY_LOADED_EVENT,() => $timeout(handleViewerGeometryLoaded));   
viewer.addEventListener(Autodesk.Viewing.SELECTION_CHANGED_EVENT,() => $timeout(handleViewerSelectionChanged)); 


function handleViewerGeometryLoaded() { 
    // Perform some actions here after everything is loaded. 
} 

そして、これは完全に罰金限り、視聴者がファイルをロードして行われたときGEOMETRY_LOADED_EVENT取得者がトリガとして作品です。しかし、最近私が見つけたことの1つは、pdfのようないくつかのファイルタイプでは、このイベントは発生しません。 3dファイル、rvt、dwgファイルなどの他のすべてのファイルについては、これは完全にうまく動作します。しかし、pdfファイルの場合、これは機能しません。

これは、これがpdfファイルではうまくいかないのは間違いありませんか?これらのファイルがビューアによってロードされた時点を知るにはどうすればよいですか?私がここで使うことができる他の同様の出来事はありますか?

私たちのアプリケーションでは、3dモデルからpdfファイルを含む2dファイルまであらゆる種類のファイルをサポートする必要があります。ですから、私は、視聴者がサポートしているすべてのファイルタイプに対して読み込みが行われたときに何らかのイベントが発生する必要があります。

ありがとうございました。

+1

.pdf私はそれがGEOMETRY_LOADED_EVENTは発射されないと予想されると思います。ドキュメントが完全にロードされていることを確認するために使用できる別のイベントがある場合は、開発チームに確認しています。 –

+0

@PhilippeLeefsmaこれは意味があります。しかし、視聴者がファイルを完全に読み込んだときを知るために、聞くべきイベントが必要です。このための回避策があれば教えてください。 – kabirbaidhya

+0

これは私が求めていることです。フィードバックを受け取ったら教えてあげます... –

答えて

0

とにかく、私はすべてを試しましたが、最終的に私はこのハックを自分のアプリケーションで動作させるためにしなければなりませんでした。しかしそれは仕事をしました:

let modelCompletelyLoaded === false; 

function ensureModelsWithoutGeometryLoaded(viewer) { 
    const CHECK_INTERVAL = 1000; 

    return new Promise(resolve => { 
     // This is a dirty hack we need to do to ensure pdf files 
     // to know when pdf files are loaded. We had to do this since 
     // the GEOMETRY_LOADED_EVENT won't get triggered for the pdf files and 
     // the files that doesn't have any geometry so we need to poll continously 
     // to know if the model is fully loaded. 
     let loadChecker = setInterval(() => { 
      let hasMyData = viewer.model && viewer.model.myData; 
      let loaded = hasMyData && viewer.model.myData.loadDone; 
      let is2d = hasMyData && viewer.model.myData.is2d; 
      let hasInstanceTree = hasMyData && (typeof viewer.model.myData.instanceTree === 'object'); 

      // It's not a 2d model, or the instanceTree has been loaded i.e the it has geometry 
      // it implies that this couldn't be a pdf file, just skip it. 
      if (is2d === false || hasInstanceTree) { 
       clearInterval(loadChecker); 
      } else if (loaded) { 
       // Loaded now. Okay, great trigger the event finally. 
       resolve(); 
       clearInterval(loadChecker); 
      } 
     }, CHECK_INTERVAL); 
    }); 
} 

function handleObjectLoaded() { 
    if (modelCompletelyLoaded === true) { 
     return 
    } 

    modelCompletelyLoaded === true; 

    // Perform some actions here after everything is loaded. 
    // ... 
} 

// Attach event handlers (this would work for all the files except those that doesn't have geometry data). 
viewer.addEventListener(Autodesk.Viewing.GEOMETRY_LOADED_EVENT, handleObjectLoaded); 

// For pdf files and those that don't contain geometry do this 
ensureModelsWithoutGeometryLoaded(viewer).then(handleObjectLoaded); 
関連する問題