簡體   English   中英

不會為pdf文件觸發Forge Viewer Autodesk.Viewing.GEOMETRY_LOADED_EVENT

[英]Forge viewer Autodesk.Viewing.GEOMETRY_LOADED_EVENT not being triggered for pdf files

在我的代碼中,我已將偵聽器附加到Autodesk.Viewing.GEOMETRY_LOADED_EVENT事件,以確保僅在查看器完成加載模型文件后才能運行。 我已經按照從實例

// 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文件)的各種文件。 因此,我需要為查看器支持的所有文件類型完成加載時觸發的某種事件。

謝謝。

無論如何,我嘗試了所有方法,但最終我不得不進行此破解以使其在我的應用程序中起作用。 但這確實做好了:)

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM