BIMFACE二次開發
BIMFACE二次開發系列目錄 【已更新最新開發文章,點選檢視詳細】

在《C#開發BIMFACE系列25 服務端API之擷取模型資料9:擷取樓層對應面積分區清單》一文中介紹了如何擷取單個模型中單個樓層包含的面積分區清單。有了面積分區清單之後,即可查詢單個面積分區的具體資訊。
請求位址:GET https://api.bimface.com/data/v2/files/{fileId}/areas
說明:擷取單個模型中單個面積分區包含的資訊
參數:
請求 path(示例):https://api.bimface.com/data/v2/files/1211223382064960/areas/313467
請求 header(示例):"Authorization: Bearer dc671840-bacc-4dc5-a134-97c1918d664b"
HTTP響應示例(200):
{
"code" : "success",
"data" : {
"area" : 5.168684733047761E7,
"boundary" : "",
"id" : "313137",
"levelId" : "11",
"maxPt" : {
"x" : -4938.068482562385,
"y" : -3201.59397858169,
"z" : 0.0
},
"minPt" : {
"x" : -4938.068482562385,
"y" : -3201.59397858169,
"z" : 0.0
},
"name" : "dining room 4",
"perimeter" : 28802.013920728663,
"properties" : [ {
"group" : "dimension",
"items" : [ {
"code" : "perimeter",
"extension" : "object",
"key" : "perimeter",
"orderNumber" : 0,
"unit" : "mm",
"value" : 17200,
"valueType" : 2
} ]
} ],
"viewName" : "1 1"
},
"message" : ""
}
封裝成對應的C#類如下:
/// <summary>
/// 擷取單個面積分區資訊傳回的結果類
/// </summary>
[Serializable]
public class SingleModelSingleArea : GeneralResponse<Area>
{
}
其中 Area 類,請參考《C#開發BIMFACE系列25 服務端API之擷取模型資料10:擷取樓層對應面積分區清單》。
C#實作方法:
1 /// <summary>
2 /// 擷取單個模型中單個面積分區資訊
3 /// </summary>
4 /// <param name="accessToken">【必填】令牌</param>
5 /// <param name="fileId">【必填】代表該單模型的檔案ID</param>
6 /// <param name="areaId">【必填】面積分區ID</param>
7 /// <returns></returns>
8 public virtual SingleModelSingleArea GetSingleModelSingleArea(string accessToken, long fileId, string areaId)
9 {
10 // GET https://api.bimface.com/data/v2/files/{fileId}/areas/{areaId}
11 string url = string.Format(BimfaceConstants.API_HOST + "/data/v2/files/{0}/areas/{1}", fileId, areaId);
12
13 BimFaceHttpHeaders headers = new BimFaceHttpHeaders();
14 headers.AddOAuth2Header(accessToken);
15
16 try
17 {
18 SingleModelSingleArea response;
19
20 HttpManager httpManager = new HttpManager(headers);
21 HttpResult httpResult = httpManager.Get(url);
22 if (httpResult.Status == HttpResult.STATUS_SUCCESS)
23 {
24 response = httpResult.Text.DeserializeJsonToObject<SingleModelSingleArea>();
25 }
26 else
27 {
28 response = new SingleModelSingleArea
29 {
30 Message = httpResult.RefText
31 };
32 }
33
34 return response;
35 }
36 catch (Exception ex)
37 {
38 throw new Exception("[擷取單個面積分區資訊]發生異常!", ex);
39 }
40 }
其中調用到的 httpManager.Get() 方法,請參考《C# HTTP系列》
測試
在BIMFACE的控制台中可以看到我們上傳的檔案清單,模型狀态均為轉換成功。
使用“bimface_2018_mdv_room.rvt”為例測試上述方法。
在《C#開發BIMFACE系列25 服務端API之擷取模型資料10:擷取樓層對應面積分區清單》中傳回了2個面積分區ID,分别是1092832與1092841。
1092841完整的面積分區資訊如下:
success
[area=4333552.00744229,
boundary={"version":"2.0",
"loops":[[[{"z":2999.9998798520546,"y":-3201.5938503598827,"x":4505.6454184675295},
{"z":2999.9998798520546,"y":-3201.5938503598904,"x":7001.9312370150637}
],
[{"z":2999.9998798520546,"y":-3302.5938463149096,"x":7001.9312370150637},
{"z":2999.9998798520546,"y":-1465.5939198856749,"x":7001.9312370150674}
],
[{"z":2999.9998798520546,"y":-1465.5939198856749,"x":7001.9312370150665},
{"z":2999.9998798520546,"y":-1465.5939198856668,"x":4505.6454184675331}
],
[{"z":2999.9998798520546,"y":-1465.5939198856677,"x":4505.6454184675331},
{"z":2999.9998798520546,"y":-3302.5938463149018,"x":4505.64541846753}
]
]
]
},
id=1092841,
levelId=,
maxPt=[x=7001.93123701507, y=-1465.59391988567, z=2999.99987985205],
minPt=[x=4505.64541846753, y=-3302.59384631491, z=2999.99987985205],
name=面積 3,
perimeter=8104.57151246125,
properties=[group=其他,
items=[code=, extension=, key=面積類型, orderNumber=,unit=,value=建築公共面積,valueType=4]
]
[group=尺寸标注,
items=[code=, extension=, key=周長, orderNumber=,unit=mm,value=8105,valueType=2]
[code=, extension=, key=計算高度, orderNumber=,unit=mm,value=0,valueType=2]
[code=, extension=, key=面積, orderNumber=,unit=m²,value=4,valueType=2]
]
[group=辨別資料,
items=[code=, extension=, key=名稱, orderNumber=,unit=,value=面積,valueType=3]
[code=, extension=, key=圖像, orderNumber=,unit=,value=,valueType=4]
[code=, extension=, key=注釋, orderNumber=,unit=,value=,valueType=3]
[code=, extension=, key=編号, orderNumber=,unit=,value=3,valueType=3]
]
[group=限制條件,
items=[code=, extension=, key=标高, orderNumber=,unit=,value=Level 2,valueType=4]
],
viewName=
]
測試代碼如下:
// 擷取單個面積分區資訊
protected void btnGetSingleModelSingleArea_Click(object sender, EventArgs e)
{
long fileId = txtFileID.Text.Trim().ToLong();
string areaId = txtAreaId.Text.Trim();
FileConvertApi api = new FileConvertApi();
SingleModelSingleArea response = api.GetSingleModelSingleArea(txtAccessToken.Text, fileId, areaId);
txtResult.Text = response.Code.ToString2()
+ Environment.NewLine
+ response.Message.ToString2()
+ Environment.NewLine
+ response.Data;
}
成在管理,敗在經驗;嬴在選擇,輸在不學! 貴在堅持!
歡迎關注作者頭條号 張傳甯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]聯系。共同交流、互相學習。
如果您覺得文章對您有幫助,請點選文章右下角【推薦】。您的鼓勵是作者持續創作的最大動力!