不用Forge Viewer的API獲取模型的層次結構以及構件的DbId

一般,基於Forge Viewer 開發的的朋友須要獲取到模型的層次結構以及構件的DbId,用於在本身的流程中構造相關對象和處理。尤爲DbId,大部分Forge Viewer對象的操做,參數是輸入的DbId,而用來惟一肯定構件的信息是一些其它的Id,例如ExternalId。因此,有時要作ID的映射,方便前端流程中,能夠更快速的找到對應的構件。前端

一些朋友喜歡在Forge Viewer加載模型( 譬如在這個事件中Autodesk.Viewing.GEOMETRY_LOADED_EVENT)來遍歷Viewer.InstanceTree (instanceTree.enumNodeChildren)獲取DbId。對於簡單模型,這個方法可用,而對於複雜模型,將形成較長時間才能完成遍歷過程,影響流程的其它工做。數據庫

另一篇文章中,介紹瞭如何經過Viewer.InstanceTree 直接拿到DbId的數組,而在本文中,咱們看看如何在模型轉換後,無需前端加載模型就能獲得模型的層次結構以及構件的DbId。segmentfault

你們知道,模型要能在Forge Viewer中顯示,首先要經過Forge的【【模型數據提取和格式轉換服務】來轉換 ,英文叫作Model Derivative API。 一般,你們已經很熟悉這兩個服務:api

發起轉換的服務:POST https://developer.api.autodes...
查詢轉換狀態GET https://developer.api.autodes...數組

而實際上,在轉換程SVF數據包之後,該服務還有另外幾個API,用於獲取模型層次結構以及對象的屬性。只須要:ui

  1. 發起服務獲取metadata GET https://developer.api.autodes...
    此服務用來獲得文件中全部model (3D,2D)的view id。這是一個guid。例如本例中,只有一個3D內容:

圖片描述

  1. 發起服務請求獲得模型層次結構
    GET https://developer.api.autodes...

此服務輸入#1中獲得的guid,請求獲得對應內容的模型層次結構。注意:請求後,首先返回的是202,代表Forge接受了任務,即將開始操做。因此這裏須要澄清一個誤解,轉換後的SVF數據包含有模型層次結構,對象屬性等,但考慮到數據量較大,默認並無現成的Json形式的模型層次對象,屬性的數據放在Forge雲端。只有當開發者請求的時候,Forge纔會從雲端轉換後的數據庫提取出來,所以須要點時間操做完成。
等待片刻,繼續發起請求,將返回200成功,這時就能夠拿到Json形式的層次結構了,而這個信息就包括了DbIdspa

圖片描述

若是是獲取對象屬性,只須要用這個過程也是相似的,只是請求端口是:
GET https://developer.api.autodes...對象

這也是爲什麼把Model Derivative API叫作 【模型數據提取和格式轉換服務】。blog

相關文章
相關標籤/搜索