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

一個三維模型中可能包含對應多張二維圖紙清單,如果在在上傳轉換時設定導出二維圖紙,則轉換完成後三維模型自動關聯所有的二維圖紙。
在BIM檢視器的左上角【視圖】->【目錄樹】下拉選項中選擇“圖紙”選項,如果三維模型包含二維圖紙,則在上傳轉換時設定導出二維圖紙,則此處就會列出所有的圖紙。輕按兩下一個圖紙,右上側顯示該圖紙。當輕按兩下三維模型的構件時,如果包含對應的二維圖紙,則自動定位到二維圖紙上;輕按兩下二維圖紙上的圖元時,自動定位到三維模型的構件。
本篇主要介紹如何擷取模型檔案對應的圖紙清單。
請求位址:GET https://api.bimface.com/data/v2/files/{fileId}/drawingsheets
說明:擷取單個模型檔案對應的圖紙清單。如果請求參數elementId為null,傳回所有圖紙,否則傳回包含該構件的所有圖紙。
參數:
請求 path(示例):https://api.bimface.com/data/v2/files/1211223382064960/drawingsheets
請求 header(示例):"Authorization: Bearer dc671840-bacc-4dc5-a134-97c1918d664b"
HTTP響應示例(200):
{
"code" : "success",
"data" : [ {
"fileId" : 0,
"portsAndViews" : [ {
"elevation" : 0.0,
"outline" : [ 0.0 ],
"viewId" : "6278f2c7786043d4a35ae4115571b7c8",
"viewPoint" : {
"origin" : [ 0.0 ],
"rightDirection" : [ 0.0 ],
"scale" : 0,
"upDirection" : [ 0.0 ],
"viewDirection" : [ 0.0 ]
},
"viewType" : "viewType",
"viewport" : [ 0.0 ]
} ],
"viewInfo" : {
"cropBox" : [ -12147.804809235151, -19279.554054815613, -30480.0, 22637.545576143948, 6805.089759789783, 30480.0 ],
"elevation" : 0.0,
"id" : "312",
"levelId" : "312",
"name" : "Level 1",
"outline" : [ -146.52900292249365, -215.01048476685295, 240.3331231070219, 110.78415780710446 ],
"preview" : {
"height" : 0,
"path" : "path",
"width" : 0
},
"thumbnails" : [ "m.bimface.com/9b711803a43b92d871cde346b63e5019/resource/thumbnails/312/312.96x96.png" ],
"viewPoint" : {
"origin" : [ 0.0 ],
"rightDirection" : [ 0.0 ],
"scale" : 0,
"upDirection" : [ 0.0 ],
"viewDirection" : [ 0.0 ]
},
"viewType" : "FloorPlain"
}
} ],
"message" : ""
}
傳回結果的結構比較複雜。封裝成對應的 C# 類,SingleModelDrawingSheets
/// <summary>
/// 擷取單個模型的圖紙清單傳回的結果類
/// </summary>
[Serializable]
public class SingleModelDrawingSheets : GeneralResponse<List<DrawingSheet>>
{
}
引用的 DrawingSheet 類
/// <summary>
/// 圖紙資訊類
/// </summary>
[Serializable]
public class DrawingSheet
{
/// <summary>
/// 檔案ID
/// </summary>
[JsonProperty("fileId")]
public long? FileId { get; set; }
/// <summary>
/// 樣例 : [ 0.0 ]
/// </summary>
[JsonProperty("portsAndViews")]
public PortAndView[] PortAndViews { get; set; }
[JsonProperty("viewInfo")]
public ViewInfo ViewInfo { get; set; }
/// <summary>傳回表示目前對象的字元串。</summary>
/// <returns>表示目前對象的字元串。</returns>
public override string ToString()
{
return String.Format("[fileId={0}, portAndViews={1}, viewInfo={2}]",
FileId, PortAndViews.ToStringLine(), ViewInfo);
}
}
引用的 PortAndView 類
[Serializable]
public class PortAndView
{
/// <summary>
/// 樣例 : 0.0
/// </summary>
[JsonProperty("elevation")]
public double? Elevation { get; set; }
/// <summary>
/// 樣例 : [ 0.0 ]
/// </summary>
[JsonProperty("outline")]
public double?[] Outline { get; set; }
/// <summary>
/// 樣例 : "6278f2c7786043d4a35ae4115571b7c8"
/// </summary>
[JsonProperty("viewId")]
public string ViewId { get; set; }
[JsonProperty("viewPoint")]
public ViewPoint ViewPoint { get; set; }
/// <summary>
/// 樣例 : "viewType"
/// </summary>
[JsonProperty("viewType")]
public string ViewType { get; set; }
/// <summary>
/// 樣例 : [ 0.0 ]
/// </summary>
[JsonProperty("viewport")]
public double?[] Viewport { get; set; }
/// <summary>傳回表示目前對象的字元串。</summary>
/// <returns>表示目前對象的字元串。</returns>
public override string ToString()
{
return String.Format("[elevation={0}, outline={1}, viewId={2}, viewPoint={3}, viewType={4}, viewport={5}]",
Elevation, Outline.ToStringWith(","), ViewId, ViewPoint, ViewType, Viewport.ToStringWith(","));
}
}
引用的 ViewPoint 類
[Serializable]
public class ViewPoint
{
/// <summary>
/// 樣例 : [ 0.0 ]
/// </summary>
[JsonProperty("origin")]
public double?[] Origin { get; set; }
/// <summary>
/// 樣例 : [ 0.0 ]
/// </summary>
[JsonProperty("rightDirection")]
public double?[] RightDirection { get; set; }
/// <summary>
/// 樣例 : [ 0.0 ]
/// </summary>
[JsonProperty("scale")]
public int? Scale { get; set; }
/// <summary>
/// 樣例 : [ 0.0 ]
/// </summary>
[JsonProperty("upDirection")]
public double?[] UpDirection { get; set; }
/// <summary>
/// 樣例 : [ 0.0 ]
/// </summary>
[JsonProperty("viewDirection")]
public double?[] ViewDirection { get; set; }
/// <summary>傳回表示目前對象的字元串。</summary>
/// <returns>表示目前對象的字元串。</returns>
public override string ToString()
{
return String.Format("[origin={0}, rightDirection={1}, scale={2}, upDirection={3}, ViewDirection={4}]",
Origin.ToStringWith(","), RightDirection.ToStringWith(","), Scale, UpDirection.ToStringWith(","),
ViewDirection.ToStringWith(","));
}
}
C#實作方法:
1 /// <summary>
2 /// 擷取單個模型的圖紙清單。
3 /// 如果請求參數elementId為null,傳回所有圖紙,否則傳回包含該構件的所有圖紙
4 /// </summary>
5 /// <param name="accessToken">【必填】令牌</param>
6 /// <param name="fileId">【必填】代表該單模型的檔案ID</param>
7 /// <param name="elementId">【非必填】構件ID</param>
8 /// <returns></returns>
9 public virtual SingleModelDrawingSheets GetSingleModelDrawingSheets(string accessToken, long fileId, string elementId = null)
10 {
11 // GET https://api.bimface.com/data/v2/files/{fileId}/drawingsheets
12 string url = string.Format(BimfaceConstants.API_HOST + "/data/v2/files/{0}/drawingsheets", fileId);
13 if (!string.IsNullOrWhiteSpace(elementId))
14 {
15 url = url + "?elementId=" + elementId;
16 }
17
18 BimFaceHttpHeaders headers = new BimFaceHttpHeaders();
19 headers.AddOAuth2Header(accessToken);
20
21 try
22 {
23 SingleModelDrawingSheets response;
24
25 HttpManager httpManager = new HttpManager(headers);
26 HttpResult httpResult = httpManager.Get(url);
27 if (httpResult.Status == HttpResult.STATUS_SUCCESS)
28 {
29 response = httpResult.Text.DeserializeJsonToObject<SingleModelDrawingSheets>();
30 }
31 else
32 {
33 response = new SingleModelDrawingSheets
34 {
35 Message = httpResult.RefText
36 };
37 }
38
39 return response;
40 }
41 catch (Exception ex)
42 {
43 throw new Exception("[擷取圖紙清單]發生異常!", ex);
44 }
45 }
測試
在BIMFACE的控制台中可以看到我們上傳的檔案清單,模型狀态均為轉換成功。
使用“bimface_2018_mdv_room.rvt”為例測試上述方法。
完整的圖紙清單資訊為:
success
[fileId=,
portAndViews=,
viewInfo=[cropBox=-30479.998046875,-30479.998046875,-304800,30479.998046875,30479.998046875,-30.4799995422363,
elevation=0,
width=382617,
Id=382617,
levelId=,
Outline=2.49999989974552,-0.999999959964061,842.499966258321,592.999976250742,
preview=[height=724,
path=m.bimface.com/6bd2057ac6d8072ad03758b0b34e205d/resource/thumbnails/382617/382617.png,
width=1024
],
thumbnails=m.bimface.com/6bd2057ac6d8072ad03758b0b34e205d/resource/thumbnails/382617/382617.96x96.png,
viewPoint=[height=, path=, width=],
viewType=DrawingSheet]
]
[fileId=,
portAndViews=,
viewInfo=[cropBox=-30479.998046875,-30479.998046875,-304800,30479.998046875,30479.998046875,-30.4799995422363,
elevation=0,
width=503701,
Id=503701,
levelId=,
Outline=2.49999989974552,-0.999999959964061,842.499966258321,592.999976250742,
preview=[height=724,
path=m.bimface.com/6bd2057ac6d8072ad03758b0b34e205d/resource/thumbnails/503701/503701.png,
width=1024
],
thumbnails=m.bimface.com/6bd2057ac6d8072ad03758b0b34e205d/resource/thumbnails/503701/503701.96x96.png,
viewPoint=[height=, path=, width=],
viewType=DrawingSheet
]
]
[fileId=,
portAndViews=,
viewInfo=[cropBox=-30479.998046875,-30479.998046875,-304800,30479.998046875,30479.998046875,-30.4799995422363,
elevation=0,
width=958184,
Id=958184,
levelId=,
Outline=2.49999989974552,-0.999999959964061,842.499966258321,592.999976250742,
preview=[height=724,
path=m.bimface.com/6bd2057ac6d8072ad03758b0b34e205d/resource/thumbnails/958184/958184.png,
width=1024
],
thumbnails=m.bimface.com/6bd2057ac6d8072ad03758b0b34e205d/resource/thumbnails/958184/958184.96x96.png,
viewPoint=[height=, path=, width=],
viewType=DrawingSheet
]
]
測試代碼如下:
// 擷取圖紙清單
protected void btnGetSingleModelDrawingSheets_Click(object sender, EventArgs e)
{
long fileId = txtFileID.Text.Trim().ToLong();
string elementId = txtElementId.Text.Trim();
FileConvertApi api = new FileConvertApi();
SingleModelDrawingSheets response = api.GetSingleModelDrawingSheets(txtAccessToken.Text, fileId, elementId);
txtResult.Text = response.Code.ToString2()
+ Environment.NewLine
+ response.Message.ToString2()
+ Environment.NewLine
+ response.Data.ToStringLine();
}
我的部落格即将同步至騰訊雲+社群,邀請大家一同入駐:
https://cloud.tencent.com/developer/support-plan?invite_code=1e6h2qd3iny51
成在管理,敗在經驗;嬴在選擇,輸在不學! 貴在堅持!
歡迎關注作者頭條号 張傳甯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]聯系。共同交流、互相學習。
如果您覺得文章對您有幫助,請點選文章右下角【推薦】。您的鼓勵是作者持續創作的最大動力!