一般,基於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中獲得的guid,請求獲得對應內容的模型層次結構。注意:請求後,首先返回的是202,代表Forge接受了任務,即將開始操做。因此這裏須要澄清一個誤解,轉換後的SVF數據包含有模型層次結構,對象屬性等,但考慮到數據量較大,默認並無現成的Json形式的模型層次對象,屬性的數據放在Forge雲端。只有當開發者請求的時候,Forge纔會從雲端轉換後的數據庫提取出來,所以須要點時間操做完成。
等待片刻,繼續發起請求,將返回200成功,這時就能夠拿到Json形式的層次結構了,而這個信息就包括了DbIdspa
若是是獲取對象屬性,只須要用這個過程也是相似的,只是請求端口是:
GET https://developer.api.autodes...對象
這也是爲什麼把Model Derivative API叫作 【模型數據提取和格式轉換服務】。blog