BIMFACE二次開發(fā)系列目錄???? ?【已更新最新開發(fā)文章,點擊查看詳細】
?
在上一篇博客《C#開發(fā)BIMFACE系列42 服務(wù)端API之圖紙對比》的最后留了一個問題,在常規(guī)業(yè)務(wù)場景下,一個.dwg文件中包含多個圖框,如下圖
那么當前版本與歷史版本對比完成后,在Web網(wǎng)頁中點擊差異項可以自動定位到圖元變化所在位置。是否可以知道差異項來自哪個圖框呢?
這篇博客針對該問題進行詳細的講解。
圖紙拆分應(yīng)用場景與效果
1、應(yīng)用場景
? ? ?一個.dwg文件中包含多個圖框,在BIMFACE中瀏覽時,可以根據(jù)圖框編號與名稱定位到具體的圖框,使用更加便捷。
2、效果
(1)未拆分
?(2)已拆分
? ? ? ? ? 拆分后的圖紙,工具條上多了一個“圖紙”按鈕,點擊后彈出圖紙列表層,每一項里面包含“圖紙名稱”與“圖號”,點擊圖紙項,自動定位到對應(yīng)的圖紙。
圖紙拆分規(guī)則說明
1、圖框識別,按照以下條件綜合判斷
(1)圖框符合國標的標準尺寸,如A0,A0(1+1/4)等。標準的尺寸識別準確率更高,但也考慮了一定的容差,若圖幅與規(guī)范有一定的出入仍可被識別。
(2)圖框中包含圖簽信息,如圖紙名稱、圖紙編號等信息。
2、圖簽識別,可以識別以下字段
(1)圖紙名稱(圖名、標題、圖紙內(nèi)容)
(2)圖紙序號(圖號、圖紙編號、張次、竣工圖號、頁碼)
(3)圖紙專業(yè)(專業(yè)、圖別、設(shè)計專業(yè)、專業(yè)名稱、圖紙類別)
(4)工程名稱(工程項目、項目、設(shè)計項目、工程總稱)
(5)圖紙日期(日期、升版日期、出圖日期、修改日期、編制日期)
3、注意事項
(1)相鄰的圖框不要相連,不要重疊。
(2)圖框外不要有額外的矩形框。
(3)圖框需要有明確的圖簽字段。
圖紙拆分API
1、發(fā)起拆分
調(diào)用接口
1 /// <summary>
2 /// 通過圖紙文件ID,按圖框拆分圖紙。
3 /// (提示:圖紙拆分必須在【圖紙轉(zhuǎn)換】接口完成且轉(zhuǎn)換狀態(tài)為 success 之后才能發(fā)起,拆分是在轉(zhuǎn)換成功的基礎(chǔ)之上進行的)
4 /// </summary>
5 /// <param name="accessToken">【必填】令牌</param>
6 /// <param name="fileId">【必填】代表該單圖紙的文件ID</param>
7 /// <param name="callbak">【選填】回調(diào)url。圖紙拆分是一個耗時的操作,并不能立刻完成??梢酝ㄟ^回調(diào)地址通知拆分結(jié)果</param>
8 /// <returns></returns>
9 public SplitDrawingResponse SplitDrawing(string accessToken, long fileId, string callbak = "")
10 {
11 // PUT https://api.bimface.com/files/{fileId}/split
12 string url = string.Format(BIMFaceConstants.API_HOST + "/files/{0}/split", fileId);
13 if (callbak.IsNotNullAndWhiteSpace())
14 {
15 url += "?callback=" + callbak.UriEscapeDataString();
16 }
17 BIMFaceHttpHeaders headers = new BIMFaceHttpHeaders();
18 headers.AddOAuth2Header(accessToken);
19
20 try
21 {
22 SplitDrawingResponse response;
23
24 HttpManager httpManager = new HttpManager(headers);
25 HttpResult httpResult = httpManager.Put(url);
26 if (httpResult.Status == HttpResult.STATUS_SUCCESS)
27 {
28 response = httpResult.Text.DeserializeJsonToObject<SplitDrawingResponse>();
29 }
30 else
31 {
32 response = new SplitDrawingResponse
33 {
34 Message = httpResult.RefText
35 };
36 }
37
38 return response;
39 }
40 catch (Exception ex)
41 {
42 throw new BIMFaceException("[通過圖紙文件ID,按圖框拆分圖紙]發(fā)生異常!", ex);
43 }
44 }
2、獲取圖紙拆分狀態(tài)
圖紙拆分不能立刻完成,需要等待一段時間??梢酝ㄟ^ callback 方式獲取拆分的信息(不推薦),也可以通過 BIMFACE 提供的接口進行查詢。
調(diào)用接口
1 /// <summary>
2 /// 獲取圖紙拆分狀態(tài)
3 /// </summary>
4 /// <param name="accessToken">【必填】令牌</param>
5 /// <param name="fileId">【必填】代表該單圖紙的文件ID</param>
6 /// <returns></returns>
7 public SplitDrawingResponse GetSplitDrawingStatus(string accessToken, long fileId)
8 {
9 // GET https://api.bimface.com/files/{fileId}/split
10 string url = string.Format(BIMFaceConstants.API_HOST + "/files/{0}/split", fileId);
11
12 BIMFaceHttpHeaders headers = new BIMFaceHttpHeaders();
13 headers.AddOAuth2Header(accessToken);
14
15 try
16 {
17 SplitDrawingResponse response;
18
19 HttpManager httpManager = new HttpManager(headers);
20 HttpResult httpResult = httpManager.Get(url);
21 if (httpResult.Status == HttpResult.STATUS_SUCCESS)
22 {
23 response = httpResult.Text.DeserializeJsonToObject<SplitDrawingResponse>();
24 }
25 else
26 {
27 response = new SplitDrawingResponse
28 {
29 Message = httpResult.RefText
30 };
31 }
32
33 return response;
34 }
35 catch (Exception ex)
36 {
37 throw new BIMFaceException("[獲取圖紙拆分狀態(tài)]發(fā)生異常!", ex);
38 }
39 }
3、獲取圖紙拆分結(jié)果
完整的拆分結(jié)果如下
{
"code": "success",
"message": null,
"data": [
{
"frames": [
{
"boundingBox": {
"min": {
"x": 686680.0,
"y": 1066999.0
},
"max": {
"x": 770782.0,
"y": 1126401.0
}
},
"id": 1,
"name": "unknown-name",
"number": "unknown-no-1"
},
{
"boundingBox": {
"min": {
"x": 752146.0,
"y": 1010435.0
},
"max": {
"x": 836248.0,
"y": 1069837.0
}
},
"id": 2,
"name": "電氣抗震設(shè)計專篇",
"number": "電施01"
},
{
"boundingBox": {
"min": {
"x": 875778.0,
"y": 1006559.0
},
"max": {
"x": 1054130.0,
"y": 1132711.0
}
},
"id": 3,
"name": "一層電氣平面(一)",
"number": "電施02"
},
{
"boundingBox": {
"min": {
"x": 1070846.0,
"y": 1006559.0
},
"max": {
"x": 1249198.0,
"y": 1132711.0
}
},
"id": 4,
"name": "一層電氣平面(二)",
"number": "電施03"
},
{
"boundingBox": {
"min": {
"x": 1261883.0,
"y": 1006559.0
},
"max": {
"x": 1440235.0,
"y": 1132711.0
}
},
"id": 5,
"name": "屋頂防雷平面",
"number": "電施04"
},
{
"boundingBox": {
"min": {
"x": 1460840.0,
"y": 1006559.0
},
"max": {
"x": 1639192.0,
"y": 1132711.0
}
},
"id": 6,
"name": "基礎(chǔ)接地平面",
"number": "電施05"
}
],
"id": 0,
"name": "Model"
}
]
}
說明:
(1)frames:一個dwg文件中的圖框?qū)ο蠹?/p>
(2)boundingBox:圖框外的矩形框?qū)ο?/p>
(3)min、max:矩形框的左上角、右下角在圖紙中的XY坐標
(4)id:圖紙序號
(5)name:圖紙名稱
(6)number:圖號
調(diào)用接口
1 /// <summary>
2 /// 獲取圖紙拆分結(jié)果
3 /// </summary>
4 /// <param name="accessToken"></param>
5 /// <param name="fileId"></param>
6 /// <returns></returns>
7 public SplitDrawingResultResponse GetSplitDrawingResult(string accessToken, long fileId)
8 {
9 // GET https://api.bimface.com/data/v2/files/{fileId}/frames
10 string url = string.Format(BIMFaceConstants.API_HOST + "/data/v2/files/{0}/frames", fileId);
11
12 BIMFaceHttpHeaders headers = new BIMFaceHttpHeaders();
13 headers.AddOAuth2Header(accessToken);
14
15 try
16 {
17 SplitDrawingResultResponse response;
18
19 HttpManager httpManager = new HttpManager(headers);
20 HttpResult httpResult = httpManager.Get(url);
21 if (httpResult.Status == HttpResult.STATUS_SUCCESS)
22 {
23 response = httpResult.Text.DeserializeJsonToObject<SplitDrawingResultResponse>();
24 }
25 else
26 {
27 response = new SplitDrawingResultResponse
28 {
29 Message = httpResult.RefText
30 };
31 }
32
33 return response;
34 }
35 catch (Exception ex)
36 {
37 throw new BIMFaceException("[獲取圖紙拆分結(jié)果]發(fā)生異常!", ex);
38 }
39 }
上述測試程序使用了 《BIMFace.SDK.CSharp》開源SDK。歡迎大家下載使用。
BIMFACE二次開發(fā)系列目錄???? ?【已更新最新開發(fā)文章,點擊查看詳細】
?
??
?技術(shù)棧
? ?
?1、Visual Studio、.C#/.NET、.NET Core、MVC、Web API、RESTful API、gRPC、SignalR、Python
?2、jQuery、Vue.js、Bootstrap
?3、數(shù)據(jù)庫:SQLServer、MySQL、PostgreSQL、Oracle、SQLite、Redis、MongoDB、ElasticSearch、TiDB、達夢DM、人大金倉、 神通、南大通用 GBase、華為 GaussDB 、騰訊 TDSQL 、阿里 PolarDB、螞蟻金服 OceanBase、東軟 OpenBASE、浪潮云溪數(shù)據(jù)庫 ZNBase
?4、ORM:Dapper、Entity Framework、FreeSql、SqlSugar、分庫分表、讀寫分離
?5、架構(gòu):領(lǐng)域驅(qū)動設(shè)計 DDD、ABP
?6、環(huán)境:跨平臺、Windows、Linux(CentOS、麒麟、統(tǒng)信UOS、深度Linux)、maxOS、IIS、Nginx、Apach
?7、移動App:Android、IOS、HarmonyOS、微信、小程序、快應(yīng)用、Xamarin、uni-app、MUI、Flutter、Framework7、Cordova、Ionic、React Native、Taro、NutUI、Smobiler
? ?
?云原生、微服務(wù)、Docker、CI/CD、DevOps、K8S;
?Dapr、RabbitMQ、Kafka、分布式、大數(shù)據(jù)、高并發(fā)、負載均衡、中間件、RPC、ELK;
?.NET + Docker + jenkins + Github + Harbor + K8S;
?
作者:張傳寧 ??微軟MCP、系統(tǒng)架構(gòu)設(shè)計師、系統(tǒng)集成項目管理工程師、科技部創(chuàng)新工程師。
??????????專注于微軟.NET技術(shù)(.NET Core、Web、MVC、WinForm、WPF)、通用權(quán)限管理系統(tǒng)、工作流引擎、自動化項目(代碼)生成器、SOA 、DDD、 云原生(Docker、微服務(wù)、DevOps、CI/CD);PDF、CAD、BIM 審圖等研究與應(yīng)用。
??????????多次參與電子政務(wù)、圖書教育、生產(chǎn)制造等企業(yè)級大型項目研發(fā)與管理工作。
??????????熟悉中小企業(yè)軟件開發(fā)過程:需求分析、架構(gòu)設(shè)計、編碼測試、實施部署、項目管理。通過技術(shù)與管理幫助中小企業(yè)快速化實現(xiàn)互聯(lián)網(wǎng)技術(shù)全流程解決方案。
?????????
?
本文摘自 :https://blog.51cto.com/u