python與bim BIM輕量化之路(二)

2021-10-21 04:09:08 字數 1924 閱讀 7328

前言

上文提到如果專案需求的業務管理功能多、整合度高,那麼就建議使用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功能比較全面,比較重,...