在前兩篇部落格《C#開發BIMFACE系列42 服務端API之圖紙對比》、《C#開發BIMFACE系列43 服務端API之圖紙拆分》中介紹了單檔案多圖框的拆分與對比
本文將詳細講解如何計算圖紙對比差異項來源自哪個圖框。
以控制檯中的2張圖紙【建築圖紙1-已拆分.dwg】 與 【建築圖紙2-已拆分-已變更.dwg】為例
對比結果參考上面第2個動態圖。
呼叫BIMFACE服務端介面
1 /// <summary> 2 /// 分頁獲取二維圖紙對比結果。結果中包含 Type 為 Model 與 Layer 的兩種結果對比,所以可能有重複的構建ID,需要手動過濾。 3 /// </summary> 4 /// <param name="accessToken">【必填】令牌</param> 5 /// <param name="compareId">【必填】對比ID</param> 6 /// <param name="page">頁碼(提示:私有云部署不支援分頁查詢)。如果不傳引數,則預設為1</param> 7 /// <param name="pageSize">每頁記錄數(提示:私有云部署不支援分頁查詢)。如果不傳引數,則預設為50</param> 8 /// <returns></returns> 9 public virtual DrawingCompareDiffResponse GetDrawingCompareDiff(string accessToken, long compareId, int? page = null, int? pageSize = null) 10 { 11 // GET https://api.bimface.com/data/v2/comparisons/{comparisonId}/diff 12 string url = string.Format(BIMFaceConstants.API_HOST + "/data/v2/comparisons/{0}/drawingdiff?v=1", compareId); 13 if (page.HasValue) 14 { 15 if (page.Value <= 1) 16 { 17 page = 1; 18 } 19 20 url += "&page=" + page; 21 } 22 23 if (pageSize.HasValue) 24 { 25 if (pageSize.Value <= 0) 26 { 27 pageSize = 50; 28 } 29 30 url += "&pageSize=" + pageSize; 31 } 32 33 BIMFaceHttpHeaders headers = new BIMFaceHttpHeaders(); 34 headers.AddOAuth2Header(accessToken); 35 36 try 37 { 38 DrawingCompareDiffResponse response; 39 40 HttpManager httpManager = new HttpManager(headers); 41 HttpResult httpResult = httpManager.Get(url); 42 if (httpResult.Status == HttpResult.STATUS_SUCCESS) 43 { 44 response = httpResult.Text.DeserializeJsonToObject<DrawingCompareDiffResponse>(); 45 } 46 else 47 { 48 response = new DrawingCompareDiffResponse 49 { 50 Message = httpResult.RefText 51 }; 52 } 53 54 return response; 55 } 56 catch (Exception ex) 57 { 58 throw new BIMFaceException("[分頁獲取圖紙對比結果]發生異常!", ex); 59 } 60 }
完整的對比差異項紀錄資訊如下:
1 { 2 "code": "success", 3 "message": null, 4 "data": { 5 "data": [ 6 { 7 "diffType": "NEW", 8 "id": "1946877", 9 "layer": "D1", 10 "sheetId": "0", 11 "sheetName": "Model", 12 "type": "Model" 13 }, 14 { 15 "diffType": "NEW", 16 "id": "1946878", 17 "layer": "D1", 18 "sheetId": "0", 19 "sheetName": "Model", 20 "type": "Model" 21 }, 22 { 23 "diffType": "DELETE", 24 "id": "122566", 25 "layer": "D1", 26 "sheetId": "0", 27 "sheetName": "Model", 28 "type": "Model" 29 }, 30 { 31 "diffType": "CHANGE", 32 "id": "104778", 33 "layer": "0", 34 "sheetId": "0", 35 "sheetName": "Model", 36 "type": "Model" 37 }, 38 { 39 "diffType": "CHANGE", 40 "id": "104779", 41 "layer": "0", 42 "sheetId": "0", 43 "sheetName": "Model", 44 "type": "Model" 45 }, 46 { 47 "diffType": "CHANGE", 48 "id": "104780", 49 "layer": "0", 50 "sheetId": "0", 51 "sheetName": "Model", 52 "type": "Model" 53 }, 54 { 55 "diffType": "CHANGE", 56 "id": "104781", 57 "layer": "0", 58 "sheetId": "0", 59 "sheetName": "Model", 60 "type": "Model" 61 }, 62 { 63 "diffType": "CHANGE", 64 "id": "104782", 65 "layer": "0", 66 "sheetId": "0", 67 "sheetName": "Model", 68 "type": "Model" 69 }, 70 { 71 "diffType": "CHANGE", 72 "id": "104783", 73 "layer": "0", 74 "sheetId": "0", 75 "sheetName": "Model", 76 "type": "Model" 77 }, 78 { 79 "diffType": "CHANGE", 80 "id": "104784", 81 "layer": "0", 82 "sheetId": "0", 83 "sheetName": "Model", 84 "type": "Model" 85 }, 86 { 87 "diffType": "CHANGE", 88 "id": "104785", 89 "layer": "0", 90 "sheetId": "0", 91 "sheetName": "Model", 92 "type": "Model" 93 }, 94 { 95 "diffType": "CHANGE", 96 "id": "104786", 97 "layer": "0", 98 "sheetId": "0", 99 "sheetName": "Model", 100 "type": "Model" 101 }, 102 { 103 "diffType": "CHANGE", 104 "id": "104787", 105 "layer": "0", 106 "sheetId": "0", 107 "sheetName": "Model", 108 "type": "Model" 109 }, 110 { 111 "diffType": "CHANGE", 112 "id": "96095", 113 "layer": "0", 114 "sheetId": "0", 115 "sheetName": "Model", 116 "type": "Model" 117 }, 118 { 119 "diffType": "CHANGE", 120 "id": "96096", 121 "layer": "0", 122 "sheetId": "0", 123 "sheetName": "Model", 124 "type": "Model" 125 }, 126 { 127 "diffType": "CHANGE", 128 "id": "96097", 129 "layer": "0", 130 "sheetId": "0", 131 "sheetName": "Model", 132 "type": "Model" 133 }, 134 { 135 "diffType": "CHANGE", 136 "id": "96098", 137 "layer": "0", 138 "sheetId": "0", 139 "sheetName": "Model", 140 "type": "Model" 141 }, 142 { 143 "diffType": "CHANGE", 144 "id": "96099", 145 "layer": "0", 146 "sheetId": "0", 147 "sheetName": "Model", 148 "type": "Model" 149 }, 150 { 151 "diffType": "CHANGE", 152 "id": "96100", 153 "layer": "0", 154 "sheetId": "0", 155 "sheetName": "Model", 156 "type": "Model" 157 }, 158 { 159 "diffType": "CHANGE", 160 "id": "96101", 161 "layer": "0", 162 "sheetId": "0", 163 "sheetName": "Model", 164 "type": "Model" 165 }, 166 { 167 "diffType": "CHANGE", 168 "id": "96102", 169 "layer": "0", 170 "sheetId": "0", 171 "sheetName": "Model", 172 "type": "Model" 173 }, 174 { 175 "diffType": "CHANGE", 176 "id": "96103", 177 "layer": "0", 178 "sheetId": "0", 179 "sheetName": "Model", 180 "type": "Model" 181 }, 182 { 183 "diffType": "CHANGE", 184 "id": "96104", 185 "layer": "0", 186 "sheetId": "0", 187 "sheetName": "Model", 188 "type": "Model" 189 }, 190 { 191 "diffType": "CHANGE", 192 "id": "22307", 193 "layer": "AXIS", 194 "sheetId": "0", 195 "sheetName": "Model", 196 "type": "Model" 197 }, 198 { 199 "diffType": "CHANGE", 200 "id": "22314", 201 "layer": "AXIS", 202 "sheetId": "0", 203 "sheetName": "Model", 204 "type": "Model" 205 }, 206 { 207 "diffType": "CHANGE", 208 "id": "22315", 209 "layer": "AXIS", 210 "sheetId": "0", 211 "sheetName": "Model", 212 "type": "Model" 213 }, 214 { 215 "diffType": "CHANGE", 216 "id": "53351", 217 "layer": "D1", 218 "sheetId": "0", 219 "sheetName": "Model", 220 "type": "Model" 221 }, 222 { 223 "diffType": "CHANGE", 224 "id": "53352", 225 "layer": "D1", 226 "sheetId": "0", 227 "sheetName": "Model", 228 "type": "Model" 229 }, 230 { 231 "diffType": "CHANGE", 232 "id": "53355", 233 "layer": "D1", 234 "sheetId": "0", 235 "sheetName": "Model", 236 "type": "Model" 237 }, 238 { 239 "diffType": "CHANGE", 240 "id": "53356", 241 "layer": "D1", 242 "sheetId": "0", 243 "sheetName": "Model", 244 "type": "Model" 245 }, 246 { 247 "diffType": "CHANGE", 248 "id": "53357", 249 "layer": "D1", 250 "sheetId": "0", 251 "sheetName": "Model", 252 "type": "Model" 253 }, 254 { 255 "diffType": "CHANGE", 256 "id": "53358", 257 "layer": "D1", 258 "sheetId": "0", 259 "sheetName": "Model", 260 "type": "Model" 261 }, 262 { 263 "diffType": "CHANGE", 264 "id": "53359", 265 "layer": "D1", 266 "sheetId": "0", 267 "sheetName": "Model", 268 "type": "Model" 269 }, 270 { 271 "diffType": "CHANGE", 272 "id": "53361", 273 "layer": "D1", 274 "sheetId": "0", 275 "sheetName": "Model", 276 "type": "Model" 277 }, 278 { 279 "diffType": "CHANGE", 280 "id": "53362", 281 "layer": "D1", 282 "sheetId": "0", 283 "sheetName": "Model", 284 "type": "Model" 285 }, 286 { 287 "diffType": "CHANGE", 288 "id": "53363", 289 "layer": "D1", 290 "sheetId": "0", 291 "sheetName": "Model", 292 "type": "Model" 293 }, 294 { 295 "diffType": "CHANGE", 296 "id": "53364", 297 "layer": "D1", 298 "sheetId": "0", 299 "sheetName": "Model", 300 "type": "Model" 301 }, 302 { 303 "diffType": "CHANGE", 304 "id": "53365", 305 "layer": "D1", 306 "sheetId": "0", 307 "sheetName": "Model", 308 "type": "Model" 309 }, 310 { 311 "diffType": "CHANGE", 312 "id": "53366", 313 "layer": "D1", 314 "sheetId": "0", 315 "sheetName": "Model", 316 "type": "Model" 317 }, 318 { 319 "diffType": "CHANGE", 320 "id": "53367", 321 "layer": "D1", 322 "sheetId": "0", 323 "sheetName": "Model", 324 "type": "Model" 325 }, 326 { 327 "diffType": "CHANGE", 328 "id": "53368", 329 "layer": "D1", 330 "sheetId": "0", 331 "sheetName": "Model", 332 "type": "Model" 333 }, 334 { 335 "diffType": "CHANGE", 336 "id": "53369", 337 "layer": "D1", 338 "sheetId": "0", 339 "sheetName": "Model", 340 "type": "Model" 341 }, 342 { 343 "diffType": "CHANGE", 344 "id": "53370", 345 "layer": "D1", 346 "sheetId": "0", 347 "sheetName": "Model", 348 "type": "Model" 349 }, 350 { 351 "diffType": "CHANGE", 352 "id": "53371", 353 "layer": "D1", 354 "sheetId": "0", 355 "sheetName": "Model", 356 "type": "Model" 357 }, 358 { 359 "diffType": "CHANGE", 360 "id": "53372", 361 "layer": "D1", 362 "sheetId": "0", 363 "sheetName": "Model", 364 "type": "Model" 365 }, 366 { 367 "diffType": "CHANGE", 368 "id": "53373", 369 "layer": "D1", 370 "sheetId": "0", 371 "sheetName": "Model", 372 "type": "Model" 373 }, 374 { 375 "diffType": "CHANGE", 376 "id": "53374", 377 "layer": "D1", 378 "sheetId": "0", 379 "sheetName": "Model", 380 "type": "Model" 381 }, 382 { 383 "diffType": "CHANGE", 384 "id": "53375", 385 "layer": "D1", 386 "sheetId": "0", 387 "sheetName": "Model", 388 "type": "Model" 389 }, 390 { 391 "diffType": "CHANGE", 392 "id": "53376", 393 "layer": "D1", 394 "sheetId": "0", 395 "sheetName": "Model", 396 "type": "Model" 397 }, 398 { 399 "diffType": "CHANGE", 400 "id": "53377", 401 "layer": "D1", 402 "sheetId": "0", 403 "sheetName": "Model", 404 "type": "Model" 405 }, 406 { 407 "diffType": "CHANGE", 408 "id": "53378", 409 "layer": "D1", 410 "sheetId": "0", 411 "sheetName": "Model", 412 "type": "Model" 413 }, 414 { 415 "diffType": "CHANGE", 416 "id": "53381", 417 "layer": "D1", 418 "sheetId": "0", 419 "sheetName": "Model", 420 "type": "Model" 421 }, 422 { 423 "diffType": "CHANGE", 424 "id": "53383", 425 "layer": "D1", 426 "sheetId": "0", 427 "sheetName": "Model", 428 "type": "Model" 429 }, 430 { 431 "diffType": "CHANGE", 432 "id": "53384", 433 "layer": "D1", 434 "sheetId": "0", 435 "sheetName": "Model", 436 "type": "Model" 437 }, 438 { 439 "diffType": "CHANGE", 440 "id": "53385", 441 "layer": "D1", 442 "sheetId": "0", 443 "sheetName": "Model", 444 "type": "Model" 445 }, 446 { 447 "diffType": "CHANGE", 448 "id": "53386", 449 "layer": "D1", 450 "sheetId": "0", 451 "sheetName": "Model", 452 "type": "Model" 453 }, 454 { 455 "diffType": "CHANGE", 456 "id": "53387", 457 "layer": "D1", 458 "sheetId": "0", 459 "sheetName": "Model", 460 "type": "Model" 461 }, 462 { 463 "diffType": "CHANGE", 464 "id": "53389", 465 "layer": "D1", 466 "sheetId": "0", 467 "sheetName": "Model", 468 "type": "Model" 469 }, 470 { 471 "diffType": "CHANGE", 472 "id": "53390", 473 "layer": "D1", 474 "sheetId": "0", 475 "sheetName": "Model", 476 "type": "Model" 477 }, 478 { 479 "diffType": "CHANGE", 480 "id": "53391", 481 "layer": "D1", 482 "sheetId": "0", 483 "sheetName": "Model", 484 "type": "Model" 485 }, 486 { 487 "diffType": "CHANGE", 488 "id": "53392", 489 "layer": "D1", 490 "sheetId": "0", 491 "sheetName": "Model", 492 "type": "Model" 493 }, 494 { 495 "diffType": "CHANGE", 496 "id": "53395", 497 "layer": "D1", 498 "sheetId": "0", 499 "sheetName": "Model", 500 "type": "Model" 501 }, 502 { 503 "diffType": "CHANGE", 504 "id": "53396", 505 "layer": "D1", 506 "sheetId": "0", 507 "sheetName": "Model", 508 "type": "Model" 509 }, 510 { 511 "diffType": "CHANGE", 512 "id": "53397", 513 "layer": "D1", 514 "sheetId": "0", 515 "sheetName": "Model", 516 "type": "Model" 517 }, 518 { 519 "diffType": "CHANGE", 520 "id": "53400", 521 "layer": "D1", 522 "sheetId": "0", 523 "sheetName": "Model", 524 "type": "Model" 525 }, 526 { 527 "diffType": "CHANGE", 528 "id": "53401", 529 "layer": "D1", 530 "sheetId": "0", 531 "sheetName": "Model", 532 "type": "Model" 533 }, 534 { 535 "diffType": "CHANGE", 536 "id": "53403", 537 "layer": "D1", 538 "sheetId": "0", 539 "sheetName": "Model", 540 "type": "Model" 541 }, 542 { 543 "diffType": "CHANGE", 544 "id": "53404", 545 "layer": "D1", 546 "sheetId": "0", 547 "sheetName": "Model", 548 "type": "Model" 549 }, 550 { 551 "diffType": "CHANGE", 552 "id": "53405", 553 "layer": "D1", 554 "sheetId": "0", 555 "sheetName": "Model", 556 "type": "Model" 557 }, 558 { 559 "diffType": "CHANGE", 560 "id": "53406", 561 "layer": "D1", 562 "sheetId": "0", 563 "sheetName": "Model", 564 "type": "Model" 565 }, 566 { 567 "diffType": "CHANGE", 568 "id": "53407", 569 "layer": "D1", 570 "sheetId": "0", 571 "sheetName": "Model", 572 "type": "Model" 573 }, 574 { 575 "diffType": "CHANGE", 576 "id": "53408", 577 "layer": "D1", 578 "sheetId": "0", 579 "sheetName": "Model", 580 "type": "Model" 581 }, 582 { 583 "diffType": "CHANGE", 584 "id": "53409", 585 "layer": "D1", 586 "sheetId": "0", 587 "sheetName": "Model", 588 "type": "Model" 589 }, 590 { 591 "diffType": "CHANGE", 592 "id": "53410", 593 "layer": "D1", 594 "sheetId": "0", 595 "sheetName": "Model", 596 "type": "Model" 597 }, 598 { 599 "diffType": "CHANGE", 600 "id": "53411", 601 "layer": "D1", 602 "sheetId": "0", 603 "sheetName": "Model", 604 "type": "Model" 605 } 606 ], 607 "page": 1, 608 "total": 75 609 } 610 }
引數說明
(1)diffType:圖元變更型別。NEW 表示新增的圖元、DELETE 表示刪除的圖元、CHANGE 表示修改的圖元。
(2)id:變更的圖元的唯一編號。
(3)layer:變更的圖元所在的圖層名稱。
(4)sheetId:未知
(5)sheetName:未知
(6)type:變更的圖元所在的圖紙展示型別(Model 與Layer )
從上述Json結果中只能看出圖元的變更型別與編號,並不知道其所屬的圖框,需要通過解析圖紙對比的資料包資訊才能計算出來。
呼叫BIMFACE服務端介面如下:
1 /// <summary> 2 /// 【官方非正式介面】根據 CompareId 獲取圖紙對比的資料包資訊 3 /// </summary> 4 /// <param name="compareId">對比記錄的ID</param> 5 /// <returns></returns> 6 public DrawingCompareDatabagResponse GetDrawingCompareDatabage(string accessToken, long compareId) 7 { 8 IBasicApi api = new BasicApi(); 9 10 ViewTokenResponse viewTokenResponse = api.GetViewTokenByCompareId(accessToken, compareId); 11 if (viewTokenResponse != null && viewTokenResponse.Code == "success" && viewTokenResponse.Data != null) 12 { 13 return GetDrawingCompareDatabageByCompareViewToken(viewTokenResponse.Data); 14 } 15 16 return null; 17 } 18 19 20 /// <summary> 21 /// 【官方非正式介面】根據對比記錄的 ViewToken 獲取圖紙對比的資料包資訊 22 /// </summary> 23 /// <param name="compareViewToken">對比記錄的ViewToken</param> 24 /// <returns></returns> 25 public DrawingCompareDatabagResponse GetDrawingCompareDatabageByCompareViewToken(string compareViewToken) 26 { 27 //GET https://api.bimface.com/inside/databag?viewToken=b80412dcba2a47b0860eeff8f2c578a9 28 29 string url = string.Format(BIMFaceConstants.API_HOST + "/inside/databag?viewToken={0}", compareViewToken); 30 try 31 { 32 DrawingCompareDatabagResponse response; 33 34 HttpManager httpManager = new HttpManager(); 35 HttpResult httpResult = httpManager.Get(url); 36 if (httpResult.Status == HttpResult.STATUS_SUCCESS) 37 { 38 response = httpResult.Text.DeserializeJsonToObject<DrawingCompareDatabagResponse>(); 39 } 40 else 41 { 42 response = new DrawingCompareDatabagResponse 43 { 44 Message = httpResult.RefText 45 }; 46 } 47 48 return response; 49 } 50 catch (Exception ex) 51 { 52 throw new BIMFaceException("[獲取圖紙對比的資料包資訊]發生異常!", ex); 53 } 54 } 55
介面返回的完整資訊如下:
1 { 2 "code": "success", 3 "message": null, 4 "data": { 5 "databagId": "76d256b09416830a8079914ab7d40fdf", 6 "isSupportComponentProperty": false, 7 "isSupportDrawing": false, 8 "isSupportFamilyTypeList": false, 9 "isSupportMaterialProperty": false, 10 "isSupportMiniMap": false, 11 "isSupportModelTree": false, 12 "isSupportRoomArea": false, 13 "isSupportWalk": true, 14 "jsSDKVersion": "3.6.159", 15 "modelId": 2230429779838240, 16 "modelType": "compareModel", 17 "name": "202110121516-對比", 18 "renderType": "drawingView", 19 "renderVersion": "3.0", 20 "subRenders": [ 21 { 22 "isSupportComponentProperty": false, 23 "isSupportFamilyTypeList": false, 24 "isSupportMiniMap": false, 25 "isSupportModelTree": false, 26 "jsSDKVersion": "3.6.159", 27 "renderType": "bimView", 28 "renderVersion": "3.0" 29 }, 30 { 31 "isSupportComponentProperty": false, 32 "isSupportFamilyTypeList": false, 33 "isSupportMiniMap": false, 34 "isSupportModelTree": false, 35 "jsSDKVersion": "Drawing@1.6.95", 36 "renderType": "drawingView", 37 "renderVersion": "1.0" 38 } 39 ], 40 "type": 3, 41 "workerType": "drawing-compare" 42 } 43 }
該介面主要獲取 databagId,供下面的介面使用。
測試程式如下:
呼叫BIMFACE服務端介面如下:
1 /// <summary> 2 /// 【官方非正式介面】根據圖紙對比的資料包Id,獲取圖紙對比差異資料包結果 3 /// </summary> 4 /// <param name="databagId">圖紙對比的資料包Id,</param> 5 /// <returns></returns> 6 public DrawingCompareDatabagDiffResult GetDrawingCompareDatabageDiffResult(string databagId) 7 { 8 //GET https://m.bimface.com/{databagId}/result.json 9 10 string url = string.Format("https://m.bimface.com/{0}/result.json", databagId); 11 try 12 { 13 DrawingCompareDatabagDiffResult response = null; 14 15 HttpManager httpManager = new HttpManager(); 16 HttpResult httpResult = httpManager.Get(url); 17 if (httpResult.Status == HttpResult.STATUS_SUCCESS) 18 { 19 response = httpResult.Text.DeserializeJsonToObject<DrawingCompareDatabagDiffResult>(); 20 } 21 22 return response; 23 } 24 catch (Exception ex) 25 { 26 throw new BIMFaceException("[獲取圖紙對比的資料包資訊]發生異常!", ex); 27 } 28 }
介面返回的完整資訊如下:
1 { 2 "ver": "4.0", 3 "model": { 4 "id": "0", 5 "name": "Model", 6 "additions": [ 7 { 8 "layer": "D1", 9 "id": "1946878", 10 "frame": { 11 "id": "6", 12 "name": "基礎接地平面", 13 "number": "電施05" 14 } 15 }, 16 { 17 "layer": "D1", 18 "id": "1946877", 19 "frame": { 20 "id": "5", 21 "name": "屋頂防雷平面", 22 "number": "電施04" 23 } 24 } 25 ], 26 "deletions": [ 27 { 28 "layer": "D1", 29 "id": "122566", 30 "frame": { 31 "id": "3", 32 "name": "一層電氣平面(一)", 33 "number": "電施02" 34 } 35 } 36 ], 37 "modifications": [ 38 { 39 "previousLayer": "0", 40 "currentLayer": "0", 41 "id": "96103", 42 "previousFrame": { 43 "id": "2", 44 "name": "電氣抗震設計專篇", 45 "number": "電施01" 46 }, 47 "currentFrame": { 48 "id": "2", 49 "name": "電氣抗震設計專篇", 50 "number": "電施01" 51 } 52 }, 53 { 54 "previousLayer": "D1", 55 "currentLayer": "D1", 56 "id": "53383", 57 "previousFrame": { 58 "id": "3", 59 "name": "一層電氣平面(一)", 60 "number": "電施02" 61 }, 62 "currentFrame": { 63 "id": "3", 64 "name": "一層電氣平面(一)", 65 "number": "電施02" 66 } 67 }, 68 { 69 "previousLayer": "D1", 70 "currentLayer": "D1", 71 "id": "53351", 72 "previousFrame": { 73 "id": "3", 74 "name": "一層電氣平面(一)", 75 "number": "電施02" 76 }, 77 "currentFrame": { 78 "id": "3", 79 "name": "一層電氣平面(一)", 80 "number": "電施02" 81 } 82 }, 83 { 84 "previousLayer": "0", 85 "currentLayer": "0", 86 "id": "96099", 87 "previousFrame": { 88 "id": "2", 89 "name": "電氣抗震設計專篇", 90 "number": "電施01" 91 }, 92 "currentFrame": { 93 "id": "2", 94 "name": "電氣抗震設計專篇", 95 "number": "電施01" 96 } 97 }, 98 { 99 "previousLayer": "0", 100 "currentLayer": "0", 101 "id": "104785", 102 "previousFrame": { 103 "id": "2", 104 "name": "電氣抗震設計專篇", 105 "number": "電施01" 106 }, 107 "currentFrame": { 108 "id": "2", 109 "name": "電氣抗震設計專篇", 110 "number": "電施01" 111 } 112 }, 113 { 114 "previousLayer": "D1", 115 "currentLayer": "D1", 116 "id": "53403", 117 "previousFrame": { 118 "id": "3", 119 "name": "一層電氣平面(一)", 120 "number": "電施02" 121 }, 122 "currentFrame": { 123 "id": "3", 124 "name": "一層電氣平面(一)", 125 "number": "電施02" 126 } 127 }, 128 { 129 "previousLayer": "D1", 130 "currentLayer": "D1", 131 "id": "53395", 132 "previousFrame": { 133 "id": "3", 134 "name": "一層電氣平面(一)", 135 "number": "電施02" 136 }, 137 "currentFrame": { 138 "id": "3", 139 "name": "一層電氣平面(一)", 140 "number": "電施02" 141 } 142 }, 143 { 144 "previousLayer": "AXIS", 145 "currentLayer": "AXIS", 146 "id": "22315", 147 "previousFrame": { 148 "id": "5", 149 "name": "屋頂防雷平面", 150 "number": "電施04" 151 }, 152 "currentFrame": { 153 "id": "5", 154 "name": "屋頂防雷平面", 155 "number": "電施04" 156 } 157 }, 158 { 159 "previousLayer": "0", 160 "currentLayer": "0", 161 "id": "104786", 162 "previousFrame": { 163 "id": "2", 164 "name": "電氣抗震設計專篇", 165 "number": "電施01" 166 }, 167 "currentFrame": { 168 "id": "2", 169 "name": "電氣抗震設計專篇", 170 "number": "電施01" 171 } 172 }, 173 { 174 "previousLayer": "D1", 175 "currentLayer": "D1", 176 "id": "53384", 177 "previousFrame": { 178 "id": "3", 179 "name": "一層電氣平面(一)", 180 "number": "電施02" 181 }, 182 "currentFrame": { 183 "id": "3", 184 "name": "一層電氣平面(一)", 185 "number": "電施02" 186 } 187 }, 188 { 189 "previousLayer": "D1", 190 "currentLayer": "D1", 191 "id": "53352", 192 "previousFrame": { 193 "id": "3", 194 "name": "一層電氣平面(一)", 195 "number": "電施02" 196 }, 197 "currentFrame": { 198 "id": "3", 199 "name": "一層電氣平面(一)", 200 "number": "電施02" 201 } 202 }, 203 { 204 "previousLayer": "D1", 205 "currentLayer": "D1", 206 "id": "53400", 207 "previousFrame": { 208 "id": "3", 209 "name": "一層電氣平面(一)", 210 "number": "電施02" 211 }, 212 "currentFrame": { 213 "id": "3", 214 "name": "一層電氣平面(一)", 215 "number": "電施02" 216 } 217 }, 218 { 219 "previousLayer": "D1", 220 "currentLayer": "D1", 221 "id": "53368", 222 "previousFrame": { 223 "id": "3", 224 "name": "一層電氣平面(一)", 225 "number": "電施02" 226 }, 227 "currentFrame": { 228 "id": "3", 229 "name": "一層電氣平面(一)", 230 "number": "電施02" 231 } 232 }, 233 { 234 "previousLayer": "AXIS", 235 "currentLayer": "AXIS", 236 "id": "22307", 237 "previousFrame": { 238 "id": "5", 239 "name": "屋頂防雷平面", 240 "number": "電施04" 241 }, 242 "currentFrame": { 243 "id": "5", 244 "name": "屋頂防雷平面", 245 "number": "電施04" 246 } 247 }, 248 { 249 "previousLayer": "D1", 250 "currentLayer": "D1", 251 "id": "53371", 252 "previousFrame": { 253 "id": "3", 254 "name": "一層電氣平面(一)", 255 "number": "電施02" 256 }, 257 "currentFrame": { 258 "id": "3", 259 "name": "一層電氣平面(一)", 260 "number": "電施02" 261 } 262 }, 263 { 264 "previousLayer": "AXIS", 265 "currentLayer": "AXIS", 266 "id": "22314", 267 "previousFrame": { 268 "id": "5", 269 "name": "屋頂防雷平面", 270 "number": "電施04" 271 }, 272 "currentFrame": { 273 "id": "5", 274 "name": "屋頂防雷平面", 275 "number": "電施04" 276 } 277 }, 278 { 279 "previousLayer": "0", 280 "currentLayer": "0", 281 "id": "96098", 282 "previousFrame": { 283 "id": "2", 284 "name": "電氣抗震設計專篇", 285 "number": "電施01" 286 }, 287 "currentFrame": { 288 "id": "2", 289 "name": "電氣抗震設計專篇", 290 "number": "電施01" 291 } 292 }, 293 { 294 "previousLayer": "D1", 295 "currentLayer": "D1", 296 "id": "53386", 297 "previousFrame": { 298 "id": "3", 299 "name": "一層電氣平面(一)", 300 "number": "電施02" 301 }, 302 "currentFrame": { 303 "id": "3", 304 "name": "一層電氣平面(一)", 305 "number": "電施02" 306 } 307 }, 308 { 309 "previousLayer": "0", 310 "currentLayer": "0", 311 "id": "96097", 312 "previousFrame": { 313 "id": "2", 314 "name": "電氣抗震設計專篇", 315 "number": "電施01" 316 }, 317 "currentFrame": { 318 "id": "2", 319 "name": "電氣抗震設計專篇", 320 "number": "電施01" 321 } 322 }, 323 { 324 "previousLayer": "D1", 325 "currentLayer": "D1", 326 "id": "53397", 327 "previousFrame": { 328 "id": "3", 329 "name": "一層電氣平面(一)", 330 "number": "電施02" 331 }, 332 "currentFrame": { 333 "id": "3", 334 "name": "一層電氣平面(一)", 335 "number": "電施02" 336 } 337 }, 338 { 339 "previousLayer": "0", 340 "currentLayer": "0", 341 "id": "104783", 342 "previousFrame": { 343 "id": "2", 344 "name": "電氣抗震設計專篇", 345 "number": "電施01" 346 }, 347 "currentFrame": { 348 "id": "2", 349 "name": "電氣抗震設計專篇", 350 "number": "電施01" 351 } 352 }, 353 { 354 "previousLayer": "D1", 355 "currentLayer": "D1", 356 "id": "53405", 357 "previousFrame": { 358 "id": "3", 359 "name": "一層電氣平面(一)", 360 "number": "電施02" 361 }, 362 "currentFrame": { 363 "id": "3", 364 "name": "一層電氣平面(一)", 365 "number": "電施02" 366 } 367 }, 368 { 369 "previousLayer": "0", 370 "currentLayer": "0", 371 "id": "104779", 372 "previousFrame": { 373 "id": "2", 374 "name": "電氣抗震設計專篇", 375 "number": "電施01" 376 }, 377 "currentFrame": { 378 "id": "2", 379 "name": "電氣抗震設計專篇", 380 "number": "電施01" 381 } 382 }, 383 { 384 "previousLayer": "0", 385 "currentLayer": "0", 386 "id": "96095", 387 "previousFrame": { 388 "id": "2", 389 "name": "電氣抗震設計專篇", 390 "number": "電施01" 391 }, 392 "currentFrame": { 393 "id": "2", 394 "name": "電氣抗震設計專篇", 395 "number": "電施01" 396 } 397 }, 398 { 399 "previousLayer": "D1", 400 "currentLayer": "D1", 401 "id": "53375", 402 "previousFrame": { 403 "id": "3", 404 "name": "一層電氣平面(一)", 405 "number": "電施02" 406 }, 407 "currentFrame": { 408 "id": "3", 409 "name": "一層電氣平面(一)", 410 "number": "電施02" 411 } 412 }, 413 { 414 "previousLayer": "D1", 415 "currentLayer": "D1", 416 "id": "53355", 417 "previousFrame": { 418 "id": "3", 419 "name": "一層電氣平面(一)", 420 "number": "電施02" 421 }, 422 "currentFrame": { 423 "id": "3", 424 "name": "一層電氣平面(一)", 425 "number": "電施02" 426 } 427 }, 428 { 429 "previousLayer": "0", 430 "currentLayer": "0", 431 "id": "96104", 432 "previousFrame": { 433 "id": "2", 434 "name": "電氣抗震設計專篇", 435 "number": "電施01" 436 }, 437 "currentFrame": { 438 "id": "2", 439 "name": "電氣抗震設計專篇", 440 "number": "電施01" 441 } 442 }, 443 { 444 "previousLayer": "D1", 445 "currentLayer": "D1", 446 "id": "53356", 447 "previousFrame": { 448 "id": "3", 449 "name": "一層電氣平面(一)", 450 "number": "電施02" 451 }, 452 "currentFrame": { 453 "id": "3", 454 "name": "一層電氣平面(一)", 455 "number": "電施02" 456 } 457 }, 458 { 459 "previousLayer": "D1", 460 "currentLayer": "D1", 461 "id": "53357", 462 "previousFrame": { 463 "id": "3", 464 "name": "一層電氣平面(一)", 465 "number": "電施02" 466 }, 467 "currentFrame": { 468 "id": "3", 469 "name": "一層電氣平面(一)", 470 "number": "電施02" 471 } 472 }, 473 { 474 "previousLayer": "D1", 475 "currentLayer": "D1", 476 "id": "53358", 477 "previousFrame": { 478 "id": "3", 479 "name": "一層電氣平面(一)", 480 "number": "電施02" 481 }, 482 "currentFrame": { 483 "id": "3", 484 "name": "一層電氣平面(一)", 485 "number": "電施02" 486 } 487 }, 488 { 489 "previousLayer": "D1", 490 "currentLayer": "D1", 491 "id": "53359", 492 "previousFrame": { 493 "id": "3", 494 "name": "一層電氣平面(一)", 495 "number": "電施02" 496 }, 497 "currentFrame": { 498 "id": "3", 499 "name": "一層電氣平面(一)", 500 "number": "電施02" 501 } 502 }, 503 { 504 "previousLayer": "D1", 505 "currentLayer": "D1", 506 "id": "53361", 507 "previousFrame": { 508 "id": "3", 509 "name": "一層電氣平面(一)", 510 "number": "電施02" 511 }, 512 "currentFrame": { 513 "id": "3", 514 "name": "一層電氣平面(一)", 515 "number": "電施02" 516 } 517 }, 518 { 519 "previousLayer": "D1", 520 "currentLayer": "D1", 521 "id": "53362", 522 "previousFrame": { 523 "id": "3", 524 "name": "一層電氣平面(一)", 525 "number": "電施02" 526 }, 527 "currentFrame": { 528 "id": "3", 529 "name": "一層電氣平面(一)", 530 "number": "電施02" 531 } 532 }, 533 { 534 "previousLayer": "D1", 535 "currentLayer": "D1", 536 "id": "53363", 537 "previousFrame": { 538 "id": "3", 539 "name": "一層電氣平面(一)", 540 "number": "電施02" 541 }, 542 "currentFrame": { 543 "id": "3", 544 "name": "一層電氣平面(一)", 545 "number": "電施02" 546 } 547 }, 548 { 549 "previousLayer": "D1", 550 "currentLayer": "D1", 551 "id": "53364", 552 "previousFrame": { 553 "id": "3", 554 "name": "一層電氣平面(一)", 555 "number": "電施02" 556 }, 557 "currentFrame": { 558 "id": "3", 559 "name": "一層電氣平面(一)", 560 "number": "電施02" 561 } 562 }, 563 { 564 "previousLayer": "D1", 565 "currentLayer": "D1", 566 "id": "53365", 567 "previousFrame": { 568 "id": "3", 569 "name": "一層電氣平面(一)", 570 "number": "電施02" 571 }, 572 "currentFrame": { 573 "id": "3", 574 "name": "一層電氣平面(一)", 575 "number": "電施02" 576 } 577 }, 578 { 579 "previousLayer": "D1", 580 "currentLayer": "D1", 581 "id": "53366", 582 "previousFrame": { 583 "id": "3", 584 "name": "一層電氣平面(一)", 585 "number": "電施02" 586 }, 587 "currentFrame": { 588 "id": "3", 589 "name": "一層電氣平面(一)", 590 "number": "電施02" 591 } 592 }, 593 { 594 "previousLayer": "D1", 595 "currentLayer": "D1", 596 "id": "53367", 597 "previousFrame": { 598 "id": "3", 599 "name": "一層電氣平面(一)", 600 "number": "電施02" 601 }, 602 "currentFrame": { 603 "id": "3", 604 "name": "一層電氣平面(一)", 605 "number": "電施02" 606 } 607 }, 608 { 609 "previousLayer": "D1", 610 "currentLayer": "D1", 611 "id": "53369", 612 "previousFrame": { 613 "id": "3", 614 "name": "一層電氣平面(一)", 615 "number": "電施02" 616 }, 617 "currentFrame": { 618 "id": "3", 619 "name": "一層電氣平面(一)", 620 "number": "電施02" 621 } 622 }, 623 { 624 "previousLayer": "D1", 625 "currentLayer": "D1", 626 "id": "53370", 627 "previousFrame": { 628 "id": "3", 629 "name": "一層電氣平面(一)", 630 "number": "電施02" 631 }, 632 "currentFrame": { 633 "id": "3", 634 "name": "一層電氣平面(一)", 635 "number": "電施02" 636 } 637 }, 638 { 639 "previousLayer": "D1", 640 "currentLayer": "D1", 641 "id": "53372", 642 "previousFrame": { 643 "id": "3", 644 "name": "一層電氣平面(一)", 645 "number": "電施02" 646 }, 647 "currentFrame": { 648 "id": "3", 649 "name": "一層電氣平面(一)", 650 "number": "電施02" 651 } 652 }, 653 { 654 "previousLayer": "D1", 655 "currentLayer": "D1", 656 "id": "53373", 657 "previousFrame": { 658 "id": "3", 659 "name": "一層電氣平面(一)", 660 "number": "電施02" 661 }, 662 "currentFrame": { 663 "id": "3", 664 "name": "一層電氣平面(一)", 665 "number": "電施02" 666 } 667 }, 668 { 669 "previousLayer": "D1", 670 "currentLayer": "D1", 671 "id": "53374", 672 "previousFrame": { 673 "id": "3", 674 "name": "一層電氣平面(一)", 675 "number": "電施02" 676 }, 677 "currentFrame": { 678 "id": "3", 679 "name": "一層電氣平面(一)", 680 "number": "電施02" 681 } 682 }, 683 { 684 "previousLayer": "D1", 685 "currentLayer": "D1", 686 "id": "53376", 687 "previousFrame": { 688 "id": "3", 689 "name": "一層電氣平面(一)", 690 "number": "電施02" 691 }, 692 "currentFrame": { 693 "id": "3", 694 "name": "一層電氣平面(一)", 695 "number": "電施02" 696 } 697 }, 698 { 699 "previousLayer": "0", 700 "currentLayer": "0", 701 "id": "96101", 702 "previousFrame": { 703 "id": "2", 704 "name": "電氣抗震設計專篇", 705 "number": "電施01" 706 }, 707 "currentFrame": { 708 "id": "2", 709 "name": "電氣抗震設計專篇", 710 "number": "電施01" 711 } 712 }, 713 { 714 "previousLayer": "D1", 715 "currentLayer": "D1", 716 "id": "53377", 717 "previousFrame": { 718 "id": "3", 719 "name": "一層電氣平面(一)", 720 "number": "電施02" 721 }, 722 "currentFrame": { 723 "id": "3", 724 "name": "一層電氣平面(一)", 725 "number": "電施02" 726 } 727 }, 728 { 729 "previousLayer": "D1", 730 "currentLayer": "D1", 731 "id": "53378", 732 "previousFrame": { 733 "id": "3", 734 "name": "一層電氣平面(一)", 735 "number": "電施02" 736 }, 737 "currentFrame": { 738 "id": "3", 739 "name": "一層電氣平面(一)", 740 "number": "電施02" 741 } 742 }, 743 { 744 "previousLayer": "D1", 745 "currentLayer": "D1", 746 "id": "53381", 747 "previousFrame": { 748 "id": "3", 749 "name": "一層電氣平面(一)", 750 "number": "電施02" 751 }, 752 "currentFrame": { 753 "id": "3", 754 "name": "一層電氣平面(一)", 755 "number": "電施02" 756 } 757 }, 758 { 759 "previousLayer": "D1", 760 "currentLayer": "D1", 761 "id": "53385", 762 "previousFrame": { 763 "id": "3", 764 "name": "一層電氣平面(一)", 765 "number": "電施02" 766 }, 767 "currentFrame": { 768 "id": "3", 769 "name": "一層電氣平面(一)", 770 "number": "電施02" 771 } 772 }, 773 { 774 "previousLayer": "D1", 775 "currentLayer": "D1", 776 "id": "53387", 777 "previousFrame": { 778 "id": "3", 779 "name": "一層電氣平面(一)", 780 "number": "電施02" 781 }, 782 "currentFrame": { 783 "id": "3", 784 "name": "一層電氣平面(一)", 785 "number": "電施02" 786 } 787 }, 788 { 789 "previousLayer": "D1", 790 "currentLayer": "D1", 791 "id": "53389", 792 "previousFrame": { 793 "id": "3", 794 "name": "一層電氣平面(一)", 795 "number": "電施02" 796 }, 797 "currentFrame": { 798 "id": "3", 799 "name": "一層電氣平面(一)", 800 "number": "電施02" 801 } 802 }, 803 { 804 "previousLayer": "D1", 805 "currentLayer": "D1", 806 "id": "53390", 807 "previousFrame": { 808 "id": "3", 809 "name": "一層電氣平面(一)", 810 "number": "電施02" 811 }, 812 "currentFrame": { 813 "id": "3", 814 "name": "一層電氣平面(一)", 815 "number": "電施02" 816 } 817 }, 818 { 819 "previousLayer": "D1", 820 "currentLayer": "D1", 821 "id": "53392", 822 "previousFrame": { 823 "id": "3", 824 "name": "一層電氣平面(一)", 825 "number": "電施02" 826 }, 827 "currentFrame": { 828 "id": "3", 829 "name": "一層電氣平面(一)", 830 "number": "電施02" 831 } 832 }, 833 { 834 "previousLayer": "D1", 835 "currentLayer": "D1", 836 "id": "53391", 837 "previousFrame": { 838 "id": "3", 839 "name": "一層電氣平面(一)", 840 "number": "電施02" 841 }, 842 "currentFrame": { 843 "id": "3", 844 "name": "一層電氣平面(一)", 845 "number": "電施02" 846 } 847 }, 848 { 849 "previousLayer": "D1", 850 "currentLayer": "D1", 851 "id": "53396", 852 "previousFrame": { 853 "id": "3", 854 "name": "一層電氣平面(一)", 855 "number": "電施02" 856 }, 857 "currentFrame": { 858 "id": "3", 859 "name": "一層電氣平面(一)", 860 "number": "電施02" 861 } 862 }, 863 { 864 "previousLayer": "D1", 865 "currentLayer": "D1", 866 "id": "53401", 867 "previousFrame": { 868 "id": "3", 869 "name": "一層電氣平面(一)", 870 "number": "電施02" 871 }, 872 "currentFrame": { 873 "id": "3", 874 "name": "一層電氣平面(一)", 875 "number": "電施02" 876 } 877 }, 878 { 879 "previousLayer": "D1", 880 "currentLayer": "D1", 881 "id": "53404", 882 "previousFrame": { 883 "id": "3", 884 "name": "一層電氣平面(一)", 885 "number": "電施02" 886 }, 887 "currentFrame": { 888 "id": "3", 889 "name": "一層電氣平面(一)", 890 "number": "電施02" 891 } 892 }, 893 { 894 "previousLayer": "D1", 895 "currentLayer": "D1", 896 "id": "53406", 897 "previousFrame": { 898 "id": "3", 899 "name": "一層電氣平面(一)", 900 "number": "電施02" 901 }, 902 "currentFrame": { 903 "id": "3", 904 "name": "一層電氣平面(一)", 905 "number": "電施02" 906 } 907 }, 908 { 909 "previousLayer": "D1", 910 "currentLayer": "D1", 911 "id": "53407", 912 "previousFrame": { 913 "id": "3", 914 "name": "一層電氣平面(一)", 915 "number": "電施02" 916 }, 917 "currentFrame": { 918 "id": "3", 919 "name": "一層電氣平面(一)", 920 "number": "電施02" 921 } 922 }, 923 { 924 "previousLayer": "D1", 925 "currentLayer": "D1", 926 "id": "53408", 927 "previousFrame": { 928 "id": "3", 929 "name": "一層電氣平面(一)", 930 "number": "電施02" 931 }, 932 "currentFrame": { 933 "id": "3", 934 "name": "一層電氣平面(一)", 935 "number": "電施02" 936 } 937 }, 938 { 939 "previousLayer": "D1", 940 "currentLayer": "D1", 941 "id": "53409", 942 "previousFrame": { 943 "id": "3", 944 "name": "一層電氣平面(一)", 945 "number": "電施02" 946 }, 947 "currentFrame": { 948 "id": "3", 949 "name": "一層電氣平面(一)", 950 "number": "電施02" 951 } 952 }, 953 { 954 "previousLayer": "D1", 955 "currentLayer": "D1", 956 "id": "53410", 957 "previousFrame": { 958 "id": "3", 959 "name": "一層電氣平面(一)", 960 "number": "電施02" 961 }, 962 "currentFrame": { 963 "id": "3", 964 "name": "一層電氣平面(一)", 965 "number": "電施02" 966 } 967 }, 968 { 969 "previousLayer": "D1", 970 "currentLayer": "D1", 971 "id": "53411", 972 "previousFrame": { 973 "id": "3", 974 "name": "一層電氣平面(一)", 975 "number": "電施02" 976 }, 977 "currentFrame": { 978 "id": "3", 979 "name": "一層電氣平面(一)", 980 "number": "電施02" 981 } 982 }, 983 { 984 "previousLayer": "0", 985 "currentLayer": "0", 986 "id": "104782", 987 "previousFrame": { 988 "id": "2", 989 "name": "電氣抗震設計專篇", 990 "number": "電施01" 991 }, 992 "currentFrame": { 993 "id": "2", 994 "name": "電氣抗震設計專篇", 995 "number": "電施01" 996 } 997 }, 998 { 999 "previousLayer": "0", 1000 "currentLayer": "0", 1001 "id": "96096", 1002 "previousFrame": { 1003 "id": "2", 1004 "name": "電氣抗震設計專篇", 1005 "number": "電施01" 1006 }, 1007 "currentFrame": { 1008 "id": "2", 1009 "name": "電氣抗震設計專篇", 1010 "number": "電施01" 1011 } 1012 }, 1013 { 1014 "previousLayer": "0", 1015 "currentLayer": "0", 1016 "id": "104778", 1017 "previousFrame": { 1018 "id": "2", 1019 "name": "電氣抗震設計專篇", 1020 "number": "電施01" 1021 }, 1022 "currentFrame": { 1023 "id": "2", 1024 "name": "電氣抗震設計專篇", 1025 "number": "電施01" 1026 } 1027 }, 1028 { 1029 "previousLayer": "0", 1030 "currentLayer": "0", 1031 "id": "96100", 1032 "previousFrame": { 1033 "id": "2", 1034 "name": "電氣抗震設計專篇", 1035 "number": "電施01" 1036 }, 1037 "currentFrame": { 1038 "id": "2", 1039 "name": "電氣抗震設計專篇", 1040 "number": "電施01" 1041 } 1042 }, 1043 { 1044 "previousLayer": "0", 1045 "currentLayer": "0", 1046 "id": "96102", 1047 "previousFrame": { 1048 "id": "2", 1049 "name": "電氣抗震設計專篇", 1050 "number": "電施01" 1051 }, 1052 "currentFrame": { 1053 "id": "2", 1054 "name": "電氣抗震設計專篇", 1055 "number": "電施01" 1056 } 1057 }, 1058 { 1059 "previousLayer": "0", 1060 "currentLayer": "0", 1061 "id": "104780", 1062 "previousFrame": { 1063 "id": "2", 1064 "name": "電氣抗震設計專篇", 1065 "number": "電施01" 1066 }, 1067 "currentFrame": { 1068 "id": "2", 1069 "name": "電氣抗震設計專篇", 1070 "number": "電施01" 1071 } 1072 }, 1073 { 1074 "previousLayer": "0", 1075 "currentLayer": "0", 1076 "id": "104781", 1077 "previousFrame": { 1078 "id": "2", 1079 "name": "電氣抗震設計專篇", 1080 "number": "電施01" 1081 }, 1082 "currentFrame": { 1083 "id": "2", 1084 "name": "電氣抗震設計專篇", 1085 "number": "電施01" 1086 } 1087 }, 1088 { 1089 "previousLayer": "0", 1090 "currentLayer": "0", 1091 "id": "104784", 1092 "previousFrame": { 1093 "id": "2", 1094 "name": "電氣抗震設計專篇", 1095 "number": "電施01" 1096 }, 1097 "currentFrame": { 1098 "id": "2", 1099 "name": "電氣抗震設計專篇", 1100 "number": "電施01" 1101 } 1102 }, 1103 { 1104 "previousLayer": "0", 1105 "currentLayer": "0", 1106 "id": "104787", 1107 "previousFrame": { 1108 "id": "2", 1109 "name": "電氣抗震設計專篇", 1110 "number": "電施01" 1111 }, 1112 "currentFrame": { 1113 "id": "2", 1114 "name": "電氣抗震設計專篇", 1115 "number": "電施01" 1116 } 1117 } 1118 ] 1119 } 1120 }
引數說明
通過 GetDrawingCompareDiff() 介面獲取的結果中包含的差異型別 diffType 、id 與 GetDrawingCompareDatabageDiffResult()介面獲取的結果中的 additions、deletions、modifications 物件以及物件屬性ID 對比,即可知道變更項來自哪個圖框。關聯關係如下圖:
參考下面的計算邏輯
1 /// <summary> 2 /// 計算對比結果中差異項來自的圖框資訊 3 /// </summary> 4 /// <param name="node_Child">圖紙節點</param> 5 /// <param name="compareId">對比ID</param> 6 /// <param name="diffResult">對比差異結果</param> 7 private void CalcaDiffTK(Node node_Child, long compareId, string diffResult) 8 { 9 DrawingCompareDiffResponse diffResponse = 10 BIMFace.SDK.CSharp.Common.Extensions.CommonExtension.DeserializeJsonToObject<DrawingCompareDiffResponse>(diffResult);//arrCompare[0]["DiffResult"].ToString2() 11 if (diffResponse != null) 12 { 13 if (diffResponse.Code == "success" && diffResponse.Data != null) 14 { 15 List<BIMCompareDiffDetail> diffNews = new List<BIMCompareDiffDetail>(); 16 List<BIMCompareDiffDetail> diffChanges = new List<BIMCompareDiffDetail>(); 17 List<BIMCompareDiffDetail> diffDeletes = new List<BIMCompareDiffDetail>(); 18 DrawingCompareDiff[] diffData = diffResponse.Data.Data; 19 if (diffData != null && diffData.Length > 0) 20 { 21 // diffData 中有重複的資料(包含模型、佈局),需要 DistinctBy() 去重 22 diffNews = 23 diffData.Where(x => x.DiffType == ModelCompareDiffType.NEW.ToString()) 24 .Select(x => new BIMCompareDiffDetail 25 { 26 categoryName = "", 27 elementId = x.Id, 28 elementName = "" 29 }).DistinctBy(x => x.elementId).ToList(); 30 31 diffChanges = 32 diffData.Where(x => x.DiffType == ModelCompareDiffType.CHANGE.ToString()) 33 .Select(x => new BIMCompareDiffDetail 34 { 35 categoryName = "", 36 elementId = x.Id, 37 elementName = "" 38 }).DistinctBy(x => x.elementId).ToList(); 39 40 diffDeletes = 41 diffData.Where(x => x.DiffType == ModelCompareDiffType.DELETE.ToString()) 42 .Select(x => new BIMCompareDiffDetail 43 { 44 categoryName = "", 45 elementId = x.Id, 46 elementName = "" 47 }).DistinctBy(x => x.elementId).ToList(); 48 49 SimpleResult<string> compareDatabagDiffResult = new WebServiceDAL().GetDrawingCompareDatabagDiffResult(compareId);// arrCompare[0]["CompareId"].ToInt64() 50 if (compareDatabagDiffResult.ResultCode) 51 { 52 if (string.IsNullOrWhiteSpace(compareDatabagDiffResult.ResultObject) == false) 53 { 54 DrawingCompareDatabagDiffResult objCompareDatabagDiffResult = 55 BIMFace.SDK.CSharp.Common.Extensions.CommonExtension.DeserializeJsonToObject<DrawingCompareDatabagDiffResult>(compareDatabagDiffResult.ResultObject); 56 if (objCompareDatabagDiffResult.Model != null) 57 { 58 if (objCompareDatabagDiffResult.Model.Additions != null && 59 objCompareDatabagDiffResult.Model.Additions.Count > 0) 60 { 61 foreach (var item in diffNews) 62 { 63 var addition = objCompareDatabagDiffResult.Model.Additions.Where(x => x.Id == item.elementId).FirstOrDefault(); 64 if (addition != null) 65 { 66 string diffItemFromTK = "【新增構建】" + addition.Frame ?? string.Empty;//圖框名稱 67 68 // 其他業務邏輯 69 } 70 } 71 } 72 73 if (objCompareDatabagDiffResult.Model.Modifications != null && 74 objCompareDatabagDiffResult.Model.Modifications.Count > 0) 75 { 76 foreach (var item in diffChanges) 77 { 78 var modifications = objCompareDatabagDiffResult.Model.Modifications.Where(x => x.Id == item.elementId).FirstOrDefault(); 79 if (modifications != null) 80 { 81 string diffItemFromTK = "【修改構建】" + addition.Frame ?? string.Empty;//圖框名稱 82 83 // 其他業務邏輯 84 } 85 } 86 } 87 88 89 if (objCompareDatabagDiffResult.Model.Deletions != null && 90 objCompareDatabagDiffResult.Model.Deletions.Count > 0) 91 { 92 foreach (var item in diffDeletes) 93 { 94 var deletions = objCompareDatabagDiffResult.Model.Deletions.Where(x => x.Id == item.elementId).FirstOrDefault(); 95 if (deletions != null) 96 { 97 string diffItemFromTK = "【刪除構建】" + addition.Frame ?? string.Empty;//圖框名稱 98 99 // 其他業務邏輯 100 } 101 } 102 } 103 } 104 } 105 } 106 } 107 } 108 } 109 }
1 public class BIMCompareDiffDetail 2 { 3 /// <summary> 4 /// 對比差異構件所屬類別名稱。樣例 : "framework" 5 /// </summary> 6 public string categoryName { get; set; } 7 8 /// <summary> 9 /// 對比差異構件ID。樣例 : "296524" 10 /// </summary> 11 public string elementId { get; set; } 12 13 /// <summary> 14 /// 對比差異構件名稱 15 /// </summary> 16 public string elementName { get; set; } 17 }
上述測試程式使用了 《BIMFace.SDK.CSharp》開源SDK。歡迎大家下載使用。