C#開發BIMFACE系列43 服務端API之圖紙拆分

張傳寧發表於2021-10-12
BIMFACE二次開發系列目錄     【已更新最新開發文章,點選檢視詳細】
C#開發BIMFACE系列43 服務端API之圖紙拆分

在上一篇部落格《C#開發BIMFACE系列42 服務端API之圖紙對比》的最後留了一個問題,在常規業務場景下,一個.dwg檔案中包含多個圖框,如下圖

C#開發BIMFACE系列43 服務端API之圖紙拆分

那麼當前版本與歷史版本對比完成後,在Web網頁中點選差異項可以自動定位到圖元變化所在位置。是否可以知道差異項來自哪個圖框呢?

這篇部落格針對該問題進行詳細的講解。

圖紙拆分應用場景與效果

1、應用場景

     一個.dwg檔案中包含多個圖框,在BIMFACE中瀏覽時,可以根據圖框編號與名稱定位到具體的圖框,使用更加便捷。

2、效果

(1)未拆分

C#開發BIMFACE系列43 服務端API之圖紙拆分

 (2)已拆分

          拆分後的圖紙,工具條上多了一個“圖紙”按鈕,點選後彈出圖紙列表層,每一項裡面包含“圖紙名稱”與“圖號”,點選圖紙項,自動定位到對應的圖紙。

C#開發BIMFACE系列43 服務端API之圖紙拆分

圖紙拆分規則說明

1、圖框識別,按照以下條件綜合判斷

(1)圖框符合國標的標準尺寸,如A0,A0(1+1/4)等。標準的尺寸識別準確率更高,但也考慮了一定的容差,若圖幅與規範有一定的出入仍可被識別。

(2)圖框中包含圖籤資訊,如圖紙名稱、圖紙編號等資訊。

2、圖籤識別,可以識別以下欄位

(1)圖紙名稱(圖名、標題、圖紙內容)

(2)圖紙序號(圖號、圖紙編號、張次、竣工圖號、頁碼)

(3)圖紙專業(專業、圖別、設計專業、專業名稱、圖紙類別)

(4)工程名稱(工程專案、專案、設計專案、工程總稱)

(5)圖紙日期(日期、升版日期、出圖日期、修改日期、編制日期)

3、注意事項

(1)相鄰的圖框不要相連,不要重疊。

(2)圖框外不要有額外的矩形框。

(3)圖框需要有明確的圖簽欄位。

C#開發BIMFACE系列43 服務端API之圖紙拆分

C#開發BIMFACE系列43 服務端API之圖紙拆分

C#開發BIMFACE系列43 服務端API之圖紙拆分

C#開發BIMFACE系列43 服務端API之圖紙拆分

C#開發BIMFACE系列43 服務端API之圖紙拆分

圖紙拆分API

1、發起拆分

C#開發BIMFACE系列43 服務端API之圖紙拆分

呼叫介面

 1     /// <summary>
 2     /// 通過圖紙檔案ID,按圖框拆分圖紙。
 3     /// (提示:圖紙拆分必須在【圖紙轉換】介面完成且轉換狀態為 success 之後才能發起,拆分是在轉換成功的基礎之上進行的)
 4     /// </summary>
 5     /// <param name="accessToken">【必填】令牌</param>
 6     /// <param name="fileId">【必填】代表該單圖紙的檔案ID</param>
 7     /// <param name="callbak">【選填】回撥url。圖紙拆分是一個耗時的操作,並不能立刻完成。可以通過回撥地址通知拆分結果</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,按圖框拆分圖紙]發生異常!", ex);
43         }
44     }

2、獲取圖紙拆分狀態

圖紙拆分不能立刻完成,需要等待一段時間。可以通過 callback 方式獲取拆分的資訊(不推薦),也可以通過 BIMFACE 提供的介面進行查詢。

C#開發BIMFACE系列43 服務端API之圖紙拆分

呼叫介面

 1     /// <summary>
 2     ///  獲取圖紙拆分狀態
 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("[獲取圖紙拆分狀態]發生異常!", ex);
38         }
39     }

3、獲取圖紙拆分結果

C#開發BIMFACE系列43 服務端API之圖紙拆分

完整的拆分結果如下

{
  "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": "電氣抗震設計專篇",
          "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": "基礎接地平面",
          "number": "電施05"
        }
      ],
      "id": 0,
      "name": "Model"
    }
  ]
}

C#開發BIMFACE系列43 服務端API之圖紙拆分

說明:

(1)frames:一個dwg檔案中的圖框物件集合

(2)boundingBox:圖框外的矩形框物件

(3)min、max:矩形框的左上角、右下角在圖紙中的XY座標

(4)id:圖紙序號

(5)name:圖紙名稱

(6)number:圖號

呼叫介面

 1     /// <summary>
 2     /// 獲取圖紙拆分結果
 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("[獲取圖紙拆分結果]發生異常!", ex);
38         }
39     }

上述測試程式使用了 《BIMFace.SDK.CSharp》開源SDK。歡迎大家下載使用。

C#開發BIMFACE系列43 服務端API之圖紙拆分

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

相關文章