2017-02-02 10 views
0

В моем коде я подключил слушателей к событию Autodesk.Viewing.GEOMETRY_LOADED_EVENT, чтобы убедиться, что все работает только после того, как программа полностью выполнена с загрузкой файла модели. Я следовал примерам с this.Forge viewer 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 прибудет-х, когда зритель по окончанию загрузки файла. Но недавно я обнаружил, что для некоторых типов файлов, таких как pdf, это событие не будет запущено. Для всех других файлов, таких как 3d-файлы, файлы rvt, dwg и т. Д., Это работает отлично. Но в случае файлов PDF это не работает.

Правильно ли это, что это не будет работать для файлов PDF? Что я могу сделать, чтобы узнать, когда эти файлы загружаются зрителем? Есть ли другие подобные события, которые я могу использовать здесь?

В нашем приложении нам необходимо поддерживать все виды файлов с 3d моделей до 2d файлов, включая даже PDF-файлы. Поэтому мне нужно какое-то событие, которое срабатывает, когда загрузка выполняется для всех типов файлов, поддерживаемых средством просмотра.

Спасибо.

+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); 

 Смежные вопросы

  • Нет связанных вопросов^_^