BIMFACE二次開發系列目錄 【已更新最新開發文章,點選檢視詳細】
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZwpmL0gTOyYzN0YDOtIDOykzM0ITMyMDM2ATMyAjMtUzNyIDNx8CX2ATMyAjMvwVN3IjM0EzLcd2bsJ2Lc12bj5ycn9Gbi52YuAjMwIzZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
離線資料包是存儲在BIMFACE公有雲伺服器上的,是以使用之前需要将其下載下傳到本地。本文将介紹通過接口下載下傳離線資料包的操作過程。
擷取離線資料包下載下傳位址
1 /// <summary>
2 /// 擷取資料包下載下傳位址
3 /// </summary>
4 /// <param name="accessToken">【必填】令牌</param>
5 /// <param name="objectId">【必填】模型Id 或 模型內建Id 或 模型對比Id</param>
6 /// <param name="modelType">【必填】模型類别</param>
7 /// <param name="databagVersion">資料包版本;對于offline、vr資料包,如果隻有一個,則下載下傳唯一的資料包,如果多個,則必須指定資料包版本</param>
8 /// <param name="type">資料包類型,如offline、vr、igms</param>
9 /// <returns></returns>
10 private GetUrlSwaggerDisplay GetDatabagDownloadUrl(string accessToken, long objectId, ModelType modelType, string databagVersion = "", string type = "offline")
11 {
12 //GET https://api.bimface.com/data/databag/downloadUrl
13 string url = BIMFaceConstants.API_HOST + "/data/databag/downloadUrl?" + modelType.ToString() + "=" + objectId;
14 if (databagVersion.IsNotNullAndWhiteSpace())
15 {
16 url += "&databagVersion=" + databagVersion;
17 }
18 if (type.IsNotNullAndWhiteSpace())
19 {
20 url += "&type=" + type;
21 }
22
23 BIMFaceHttpHeaders headers = new BIMFaceHttpHeaders();
24 headers.AddOAuth2Header(accessToken);
25
26 try
27 {
28 GetUrlSwaggerDisplay response;
29 HttpManager httpManager = new HttpManager(headers);
30 HttpResult httpResult = httpManager.Get(url);
31 if (httpResult.Status == HttpResult.STATUS_SUCCESS)
32 {
33 response = httpResult.Text.DeserializeJsonToObject<GetUrlSwaggerDisplay>();
34 }
35 else
36 {
37 response = new GetUrlSwaggerDisplay
38 {
39 Message = httpResult.RefText
40 };
41 }
42
43 return response;
44 }
45 catch (Exception ex)
46 {
47 throw new BIMFaceException("[擷取資料包下載下傳位址]發生異常!", ex);
48 }
49 }
View Code
接口傳回的data參數值即為離線資料包的下載下傳位址
https://bf-prod-databag.oss-cn-beijing.aliyuncs.com/4ab9f2df0a8fa218e8ecec619c7090df/4ab9f2df0a8fa218e8ecec619c7090df.zip?Expires=1634202927&OSSAccessKeyId=LTAI4FeTn1BWYhirPskmAUWm&Signature=OE4TZwfjTMZfKvLUbx%2FORkpTxvk%3D
可以看出離線資料庫是一個.zip壓縮封包件,
Expires:位址的有效時間。
OSSAccessKeyId:BIMFACE在阿裡雲開發者賬号key值。
Signature:簽名,已加密。
擷取到下載下傳位址後即可下載下傳檔案即可,三個參數都不用處理。
下載下傳離線資料包
兩種方式下載下傳
- 程式設計下載下傳
- 手動在浏覽器中下載下傳
一般來說離線資料包應用在模型/圖紙數量不多,且内容不變的場景中,是以手動下載下傳即可。即使使用程式設計下載下傳到本地電腦指定位置之後還是要手動解壓縮、部署等動作,是以推薦手動下載下傳的方式。
将上述url複制并粘貼到浏覽器的位址欄中,按下Enter鍵
下載下傳到本地的檔案是一個.zip壓縮包
壓縮包的名稱是随機命名的Guid值,并無實際意義。手動解壓縮後,目錄結構如下
壓縮包内部檔案結構解析
離線資料包是一組靜态資源檔案,并不需要特定的雲端程式提供運作時環境,是以可以像部署網頁的css、js、image一樣部署在靜态Web伺服器上。 注意:在部署前,必須把壓縮檔案解壓。為了加速通路,離線資料包中的很多檔案都進行了gzip壓縮。
1、584e7191686a5f8307cdd973b77a1520 目錄
目錄名稱是随機命名的Guid值,并無實際意義。子目錄結構如下
- data
- drawingsheets.json 存儲模型中內建的圖紙資訊
- spaces 存儲模型的空間結構資訊
- tree 存儲模型的樹狀展現結構資訊
- metadata
存儲了模型/圖紙的所有中繼資料資訊,大多是Json格式檔案
- property
包含模型的盒子、元素、元素屬性、元素類、族新、族類型、模型架構、資料庫檔案等。
其中資料庫檔案
- resource
包含了模型的資源資訊,如:模型建構的線條、地圖、标記、場景、質感等
- thumbnail
存儲了模型/圖紙預設視角的3張縮略圖,尺寸分别為96x96、256x256、512x512
2、2231874221895488.txt
日志檔案,記錄了從調用生成離線資料包接口開始到完成的過程中所有步驟資訊。如果生成失敗,則可以通過該日志排查具體原因。
1 2021-10-14 16:15:26,342 INFO - -------------Starting Job 2231874221895488 Logger-------------
2 2021-10-14 16:15:26,342 INFO - Notice sended, jobId = 2231874221895488, status = download, code = null, message = null, usage = null
3 2021-10-14 16:15:26,545 INFO - File downloaded, size = -1, cost = 188
4 2021-10-14 16:15:26,545 INFO - Notice sended, jobId = 2231874221895488, status = execute, code = null, message = null, usage = null
5 2021-10-14 16:15:26,545 INFO - worker command = [python -u C:\Job\worker\local-databag\20210511-5ff76e\framework/worker.py --workflow localpack/localpack.json --input "C:\Job\wd\2231874221895488\input\584e7191686a5f8307cdd973b77a1520.zip" --config "C:\Job\wd\2231874221895488\input\config.json" --output "C:\Job\wd\2231874221895488\4ab9f2df0a8fa218e8ecec619c7090df"], job id = 2231874221895488
6 2021-10-14 16:15:26,717 INFO - WORKER OUTPUT: 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)]
7 2021-10-14 16:15:26,717 INFO - WORKER OUTPUT: sys.version_info(major=3, minor=6, micro=1, releaselevel='final', serial=0)
8 2021-10-14 16:15:26,717 INFO - WORKER OUTPUT: C:\Job\wd\2231874221895488\input\config.json
9 2021-10-14 16:15:26,717 INFO - WORKER OUTPUT: Namespace(config=<__main__.CustomConfig object at 0x000001E99F701AC8>, configPath='C:\\Job\\wd\\2231874221895488\\input\\config.json', input='C:\\Job\\wd\\2231874221895488\\input\\584e7191686a5f8307cdd973b77a1520.zip', links=None, maxLevel=None, maxTime=None, model='', output='C:\\Job\\wd\\2231874221895488\\4ab9f2df0a8fa218e8ecec619c7090df', rule=None, workflow='localpack/localpack.json')
10 2021-10-14 16:15:26,717 INFO - WORKER OUTPUT: {'keepModel': 'true', 'keepDB': 'true'}
11 2021-10-14 16:15:26,717 INFO - WORKER OUTPUT: >> WORKFLOW: localpack/localpack.json
12 2021-10-14 16:15:26,717 INFO - WORKER OUTPUT: C:\Job\worker\local-databag\20210511-5ff76e\7zip
13 2021-10-14 16:15:26,717 INFO - WORKER OUTPUT: C:\Job\worker\local-databag\20210511-5ff76e\localpack
14 2021-10-14 16:15:26,795 INFO - WORKER OUTPUT: C:\Job\worker\local-databag\20210511-5ff76e\misc
15 2021-10-14 16:15:26,811 INFO - WORKER OUTPUT: ___________________________________________
16 2021-10-14 16:15:26,812 INFO - WORKER OUTPUT: >> TASK START: prepare 2021-10-14 16:15:26.811123
17 2021-10-14 16:15:26,812 INFO - WORKER OUTPUT: Unzip: C:\Job\wd\2231874221895488\input\584e7191686a5f8307cdd973b77a1520.zip -> C:\Job\wd\2231874221895488\4ab9f2df0a8fa218e8ecec619c7090df
18 2021-10-14 16:15:26,826 INFO - WORKER OUTPUT:
19 2021-10-14 16:15:26,826 INFO - WORKER OUTPUT: 7-Zip [32] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
20 2021-10-14 16:15:26,826 INFO - WORKER OUTPUT:
21 2021-10-14 16:15:26,826 INFO - WORKER OUTPUT: Scanning the drive for archives:
22 2021-10-14 16:15:26,826 INFO - WORKER OUTPUT: 1 file, 1497163 bytes (1463 KiB)
23 2021-10-14 16:15:26,826 INFO - WORKER OUTPUT:
24 2021-10-14 16:15:26,826 INFO - WORKER OUTPUT: Extracting archive: C:\Job\wd\2231874221895488\input\584e7191686a5f8307cdd973b77a1520.zip
25 2021-10-14 16:15:27,014 INFO - WORKER OUTPUT: --
26 2021-10-14 16:15:27,014 INFO - WORKER OUTPUT: Path = C:\Job\wd\2231874221895488\input\584e7191686a5f8307cdd973b77a1520.zip
27 2021-10-14 16:15:27,014 INFO - WORKER OUTPUT: Type = zip
28 2021-10-14 16:15:27,014 INFO - WORKER OUTPUT: Physical Size = 1497163
29 2021-10-14 16:15:27,014 INFO - WORKER OUTPUT:
30 2021-10-14 16:15:27,014 INFO - WORKER OUTPUT: Everything is Ok
31 2021-10-14 16:15:27,014 INFO - WORKER OUTPUT:
32 2021-10-14 16:15:27,014 INFO - WORKER OUTPUT: Folders: 32
33 2021-10-14 16:15:27,014 INFO - WORKER OUTPUT: Files: 172
34 2021-10-14 16:15:27,014 INFO - WORKER OUTPUT: Size: 2578287
35 2021-10-14 16:15:27,014 INFO - WORKER OUTPUT: Compressed: 1497163
36 2021-10-14 16:15:27,014 INFO - WORKER OUTPUT: >> TASK END: prepare 0:00:00.203097
37 2021-10-14 16:15:27,014 INFO - WORKER OUTPUT: JOB_PROGRESS: [ 33.333333333333336 ]
38 2021-10-14 16:15:27,014 INFO - WORKER OUTPUT: ___________________________________________
39 2021-10-14 16:15:27,014 INFO - WORKER OUTPUT: >> TASK START: mdb2Json 2021-10-14 16:15:27.014220
40 2021-10-14 16:15:27,014 INFO - WORKER OUTPUT: C:\Job\worker\local-databag\20210511-5ff76e\localpack\bin/mdb2json.exe --input "C:\Job\wd\2231874221895488\4ab9f2df0a8fa218e8ecec619c7090df\584e7191686a5f8307cdd973b77a1520\property\modeldrive.db" --output "C:\Job\wd\2231874221895488\4ab9f2df0a8fa218e8ecec619c7090df\584e7191686a5f8307cdd973b77a1520\property"
41 2021-10-14 16:15:27,642 INFO - WORKER OUTPUT: Write to the Value.json.gz successfully!
42 2021-10-14 16:15:27,648 INFO - WORKER OUTPUT: Write to the Schema.json.gz successfully!
43 2021-10-14 16:15:27,670 INFO - WORKER OUTPUT: Missing family type: 0
44 2021-10-14 16:15:27,670 INFO - WORKER OUTPUT: Missing family type: 0
45 2021-10-14 16:15:27,670 INFO - WORKER OUTPUT: write to the Families.json.gz successfully!
46 2021-10-14 16:15:27,670 INFO - WORKER OUTPUT: write to the FamilyTypeProperties.json.gz successfully!
47 2021-10-14 16:15:27,670 INFO - WORKER OUTPUT: write to the Elements.json.gz successfully!
48 2021-10-14 16:15:27,670 INFO - WORKER OUTPUT: write to the ElementProperties.json.gz successfully!
49 2021-10-14 16:15:27,670 INFO - WORKER OUTPUT: write to the BoundingBox.json.gz successfully!
50 2021-10-14 16:15:27,686 INFO - WORKER OUTPUT: db to json done!
51 2021-10-14 16:15:27,701 INFO - WORKER OUTPUT: >> TASK END: mdb2Json 0:00:00.687467
52 2021-10-14 16:15:27,701 INFO - WORKER OUTPUT: JOB_PROGRESS: [ 66.66666666666667 ]
53 2021-10-14 16:15:27,701 INFO - WORKER OUTPUT: ___________________________________________
54 2021-10-14 16:15:27,701 INFO - WORKER OUTPUT: >> TASK START: localpack 2021-10-14 16:15:27.701687
55 2021-10-14 16:15:27,701 INFO - WORKER OUTPUT: Download: https://api.bimface.com/data/internal/files/10000709359577/floors?includeArea=true&includeRoom=true -> C:\Job\wd\2231874221895488\4ab9f2df0a8fa218e8ecec619c7090df\584e7191686a5f8307cdd973b77a1520\data\spaces.json
56 2021-10-14 16:15:27,967 INFO - WORKER OUTPUT: Download: https://api.bimface.com/data/internal/files/10000709359577/drawingsheets -> C:\Job\wd\2231874221895488\4ab9f2df0a8fa218e8ecec619c7090df\584e7191686a5f8307cdd973b77a1520\data\drawingsheets.json
57 2021-10-14 16:15:28,029 INFO - WORKER OUTPUT: Clean up models...
58 2021-10-14 16:15:28,029 INFO - WORKER OUTPUT: Create viewToken.json
59 2021-10-14 16:15:28,029 INFO - WORKER OUTPUT: >> TASK END: localpack 0:00:00.328082
60 2021-10-14 16:15:28,029 INFO - WORKER OUTPUT: JOB_PROGRESS: [ 100.0 ]
61 2021-10-14 16:15:28,029 INFO - WORKER OUTPUT: Worker finished with code 0
62 2021-10-14 16:15:28,092 INFO - Notice sended, jobId = 2231874221895488, status = upload, code = null, message = null, usage = null
3、index.html
模型/圖紙浏覽時呈現的網頁
1 <!DOCTYPE html>
2 <html lang="en">
3 <head>
4 <meta charset="UTF-8">
5 <meta name="viewport" content="width=device-width, initial-scale=1.0">
6 <meta http-equiv="X-UA-Compatible" content="ie=edge">
7 <title>BimfaceApplication</title>
8 <style media="screen">
9 html,
10 body{
11 margin: 0;
12 padding: 0;
13 width: 100%;
14 height: 100%;
15 }
16 #view{
17 width: 100%;
18 height: 100%;
19 }
20 </style>
21 <script src="./jssdk/[email protected]" charset="utf-8"></script>
22 <script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js"></script>
23 </head>
24 <body>
25 <div id="view"></div>
26 <script type="text/javascript">
27 function downloadLatestSDK(){
28 $.ajax({
29 url: 'https://bimface.com/api/console/offlineJsSDK/latest',
30 success: function(result){
31 console.log(result);
32 window.location.href = result["data"];
33 }
34 });
35 }
36 var viewer;
37 try {
38 var BimfaceLoaderConfig = new BimfaceSDKLoaderConfig();
39 } catch (error) {
40 var message = window.confirm("沒有找到JSSDK,點選确定下載下傳最新的JSSDK。");
41 if(message) {
42 downloadLatestSDK();
43 }
44 }
45 BimfaceLoaderConfig.dataEnvType = BimfaceEnvOption.Local;
46 BimfaceLoaderConfig.sdkPath = './jssdk';
47 BimfaceLoaderConfig.path = './viewToken.json';
48
49
50 BimfaceSDKLoader.load(BimfaceLoaderConfig,onSDKLoadSucceeded,onSDKLoadFailed);
51
52 function onSDKLoadSucceeded(viewMetaData){
53
54 if(viewMetaData.viewType == "drawingView"){
55 var view = document.getElementById('view');
56 var WebAppConfig = new Glodon.Bimface.Application.WebApplicationDrawingConfig();
57 WebAppConfig.domElement = view;
58 var app = new Glodon.Bimface.Application.WebApplicationDrawing(WebAppConfig);
59
60 viewer = app.getViewer();
61 viewer.addModel(viewMetaData);
62
63 }else if(viewMetaData.viewType == "3DView"){
64 var view = document.getElementById('view')
65 var config = new Glodon.Bimface.Application.WebApplication3DConfig();
66 config.domElement = view;
67 var eventManager = Glodon.Bimface.Application.WebApplication3DEvent;
68 app = new Glodon.Bimface.Application.WebApplication3D(config);
69 viewer = app.getViewer();
70 viewer.addModel(viewMetaData);
71 }else if(viewMetaData.viewType =="rfaView"){
72 var view = document.getElementById('view')
73 var config = new Glodon.Bimface.Application.WebApplicationRfaConfig();
74 config.domElement = view;
75 var eventManager = Glodon.Bimface.Application.WebApplicationRfaEvent;
76 app = new Glodon.Bimface.Application.WebApplicationRfa(config);
77 viewer = app.getViewer();
78 viewer.addModel(viewMetaData);
79 }
80 };
81
82 function onSDKLoadFailed(error){
83 console.log("Failed to load SDK!");
84 };
85 </script>
86 </body>
87 </html>
4、viewToken.json
記錄了模型/圖紙轉化成功後用于浏覽時的基本參數資訊。
1 {
2 "workerType": "rvt-translate",
3 "databagId": "584e7191686a5f8307cdd973b77a1520",
4 "modelId": 10000709359577,
5 "jsSDKVersion": "3.6.160",
6 "modelType": "singleModel",
7 "subRenders": [{
8 "isSupportModelTree": false,
9 "isSupportFamilyTypeList": false,
10 "renderVersion": "1.0",
11 "jsSDKVersion": "[email protected]",
12 "isSupportComponentProperty": false,
13 "isSupportMiniMap": false,
14 "renderType": "drawingView"
15 }, {
16 "isSupportModelTree": false,
17 "isSupportFamilyTypeList": false,
18 "renderVersion": "3.0",
19 "jsSDKVersion": "3.6.160",
20 "isSupportComponentProperty": false,
21 "isSupportMiniMap": false,
22 "renderType": "drawingView"
23 }
24 ],
25 "isSupportModelTree": true,
26 "isSupportWalk": true,
27 "isSupportFamilyTypeList": false,
28 "renderVersion": "3.0",
29 "isSupportRoomArea": true,
30 "isSupportMaterialProperty": true,
31 "isSupportDrawing": true,
32 "name": "01_BIMFACE\u793a\u4f8b\u6587\u4ef6-Revit\u6a21\u578b.rvt",
33 "databagVersion": "3.7",
34 "isSupportComponentProperty": true,
35 "isSupportMiniMap": true,
36 "renderType": "bimView",
37 "config": {
38 "texture": "false",
39 "modelClassification": "architecture"
40 }
41 }
離線資料包下載下傳到本地之後,需要手動部署之後才能正常通路,下一篇部落格詳解介紹幾種不同的部署方式。
上述測試程式使用了 《BIMFace.SDK.CSharp》開源SDK。歡迎大家下載下傳使用。
成在管理,敗在經驗;嬴在選擇,輸在不學! 貴在堅持!
歡迎關注作者頭條号 張傳甯IT講堂,擷取更多IT文章、視訊等優質内容。
個人作品
1、BIMFace.Community.SDK.NET開源位址:https://gitee.com/NAlps/BIMFace.SDK
系列部落格:https://www.cnblogs.com/SavionZhang/p/11424431.html
系列視訊:https://www.cnblogs.com/SavionZhang/p/14258393.html
2、ZCN.NET.Common開源位址:https://gitee.com/NAlps/zcn.net.common
技術棧
1、Visual Studio、.C#/.NET、.NET Core、MVC、Web API、RESTful API、gRPC、SignalR、Python
2、jQuery、Vue.js、Bootstrap
3、資料庫:SQLServer、MySQL、PostgreSQL、Oracle、SQLite、Redis、MongoDB、ElasticSearch、TiDB、達夢DM、人大金倉、 神通、南大通用 GBase、華為 GaussDB 、騰訊 TDSQL 、阿裡 PolarDB、螞蟻金服 OceanBase、東軟 OpenBASE、浪潮雲溪資料庫 ZNBase
4、ORM:Dapper、Entity Framework、FreeSql、SqlSugar、分庫分表、讀寫分離
5、架構:領域驅動設計 DDD、ABP
6、環境:跨平台、Windows、Linux(CentOS、麒麟、統信UOS、深度Linux)、maxOS、IIS、Nginx、Apach
7、移動App:Android、IOS、HarmonyOS、微信、小程式、快應用、Xamarin、uni-app、MUI、Flutter、Framework7、Cordova、Ionic、React Native、Taro、NutUI、Smobiler
雲原生、微服務、Docker、CI/CD、DevOps、K8S;
Dapr、RabbitMQ、Kafka、分布式、大資料、高并發、負載均衡、中間件、RPC、ELK;
.NET + Docker + jenkins + Github + Harbor + K8S;
出處:www.cnblogs.com/SavionZhang
作者:張傳甯 微軟MCP、系統架構設計師、系統內建項目管理工程師、科技部創新工程師。
專注于微軟.NET技術(.NET Core、Web、MVC、WinForm、WPF)、通用權限管理系統、工作流引擎、自動化項目(代碼)生成器、SOA 、DDD、 雲原生(Docker、微服務、DevOps、CI/CD);PDF、CAD、BIM 審圖等研究與應用。
多次參與電子政務、圖書教育、生産制造等企業級大型項目研發與管理工作。
熟悉中小企業軟體開發過程:需求分析、架構設計、編碼測試、實施部署、項目管理。通過技術與管理幫助中小企業快速化實作網際網路技術全流程解決方案。
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。
如有問題,可以通過郵件[email protected]聯系。共同交流、互相學習。
如果您覺得文章對您有幫助,請點選文章右下角【推薦】。您的鼓勵是作者持續創作的最大動力!