簡體   English   中英

如何保存多 model Autodesk Forge 查看器 state 並恢復相同?

[英]How to save a multi model Autodesk forge viewer state and restore the same?

我在同一場景中加載了多個模型,並希望保留切片查看器 state 並稍后恢復。 它適用於單個 model 但不適用於多個型號。

不幸的是,目前您只能為1個模型恢復狀態。 但是我已經將此問題提交給我們的工程師,他們已將其添加為增強功能。

從多個模型保存和恢復查看器 state 的解決方案是更改 seedUrn 在 ViewerState.js 上的工作方式。

問題在於 seedUrn 作為一個簡單的字符串,無法准確識別模型。 該解決方案的工作原理是將其更改為 object,其中包含 model 的 urn 和一個唯一密鑰(在 model 加載期間設置為 loadOption)。 當 ViewerState 需要找到一個 model 時,它會同時搜索 urn 和加載的密鑰,如果唯一的話,它甚至能夠處理多個相同的模型,只要密鑰是唯一的(也許不需要 urn,但我贏了'現在處理)。

這是更改 ViewerState 上與生成和比較 seedUrn 相關的兩個方法的代碼:

    NOP_VIEWER.viewerState.getSeedUrn = function (model) {
        model = model || viewer.model;
        if (model === null) {
            return {
                urn: "",
                uniqueKey: undefined
            };
        } else {
            return {
                urn: model.getSeedUrn(),
                uniqueKey: model.myData.loadOptions.uniqueKey
            };
        }
    };

    NOP_VIEWER.viewerState.getVisibleModel = function (seedUrn) {
        const visibleModels = viewer.getVisibleModels();
        for (let i = 0; i < visibleModels.length; ++i) {
            const modelSeedUrn = this.getSeedUrn(visibleModels[i]);
            if (modelSeedUrn.urn === seedUrn.urn && modelSeedUrn.uniqueKey === seedUrn.uniqueKey) {
                return visibleModels[i];
            }
        }
    };

將 model 加載到查看器時,將 uniqueKey 作為 loadOption 傳遞:

viewer.loadDocumentNode(obj.doc, obj.geometry, {
    ...
    uniqueKey: 'a unique identifier',
    ...
})

例如,如果您需要將 state 保存在數據庫中,請確保您還保存了 model 的唯一密鑰,因為它需要使用 state JSON 中包含的相同密鑰進行加載。

請注意,此解決方案不處理切面,切面仍依賴於查看器。model。 解決這個問題需要完全覆蓋 getState 和 restoreState 函數,這在較新版本的 Viewer 中可能很快就會過時。

暫無
暫無

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

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