前言
上文提到如果專案需求的業務管理功能多、整合度高,那麼就建議使用webgl的技術方向進行模型輕量化。
一、輕量化流程
經過多種途徑的試探,結合目前的資源,決定全面轉向threejs實現輕量化,實現的大概流程:
理想中輕量化應該是上傳rvt檔案後,伺服器自動對各版本的檔案進行解析處理,將相應的資料及檔案存入資料庫及檔案伺服器。模型的展示應該是元件化模組化,對於其他應用模組提供標準開放介面,方便外部呼叫。所以應該本著檔案盡可能小、展示真實、操作流暢的原則進行開發。
二、資料提取
1.revit分類
首先要大概了解revit類別結構
category:類別,比如梁、板、柱、門、窗等大的分類。
family:族,子分類。
familysymbol:族型別,個人理解是體現子類的規格。
familyinstance:例項化出新的物件,體現在revit中就是建立了乙個新的構件,這個構件屬於category、family、familysymbol一種,熟悉物件導向的程式語言應該很容易理解這個概念
所以簡單的理解revit的資料儲存結構是樹狀結構
2.revit分類編碼規則
revit 分類編碼採用的是國際行業標準的omniclass編碼,是對建築全生命週期進行編碼,印象中總共有30多個table,revit主要使用的是第23個table中的編碼,例如:23.25.30.11.14.11,在表中可以查到對應的解釋。revit內建大約有1000多種族分類。
3.外掛程式開發
4.匯出gltf
使用gitf格式作為模型檔案,一是它的目標是成為模型界的通用格式,類似界的jpeg。二是對opengl的相容性好,資料格式清晰簡單,三是自己對計算機圖形學不了解,自定義格式難度大,還是考慮成熟的資料格式。
這裡是對gltf的檔案格式定義,按照revit二次開發規範實現iexternalcommand,iexportcontext介面生成dll和addin檔案,然後關聯到revit上即可匯出檔案:
匯出結果:
4.檔案大小優化
對模型進一步優化可以使用谷歌開源的draco,大幅加速 3d 資料的編碼、傳輸和解碼。
gltf-pipeline:依賴node.js,通過命令列視窗可以對模型進行優化:
轉換glb:gltf-pipeline -i newproject.gltf -o newproject.glb
轉換draco:gltf-pipeline -i newproject.gltf -o builddraco.gltf –d
原始檔大小為6m,壓縮完後為1m,壓縮比接近6:1,對於管線、精裝修等mesh多的情況達不到這種壓縮比。
總結提取的演算法優化空間還很大,比如移除重複頂點和重複面、三角網簡化等,只不過自己的能力不足,需要繼續學習,感興趣的同學可以進一步優化。
python 包開發 Python輕量包開發流程
很多時候我們需要自己開發一些簡易的python包來滿足個人需要。輕量級python包可能只包含少數功能,並且通常我們希望能夠像呼叫公共包一樣呼叫自定義的包。這樣的乙個包的開發流程如下。乙個包可以看做是一款軟體。包 目錄,模組 py文件,具體的功能如函式和類等都寫在模組中。包內可以有子包。每乙個包下面...
Python輕量Web框架Flask使用
目錄 flask安裝 python開發工具eclipsepydev準備 flask專案框架搭建 mvc模式例項開發 登入例項 python語言近些年越來越火,其特點是開發迅速,語法簡單,可移植等。本人就python3基礎語法寫了demo 可以當作基礎教程和手冊查閱。python web開發框架常用的...
Python輕量Web框架Flask使用
python語言近些年越來越火,其特點是開發迅速,語法簡單,可移植等。本人就python3基礎語法寫了demo 可以當作基礎教程和手冊查閱。python web開發框架常用的包括django,flask,tornado,bottle,web.py,quixote等。django功能比較全面,比較重,...