iflow-engine-base 3.1.3 → 3.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/README.md +33 -33
  2. package/dist/bim-engine-sdk.es.js +9755 -7957
  3. package/dist/bim-engine-sdk.es.js.map +1 -1
  4. package/dist/bim-engine-sdk.umd.js +811 -583
  5. package/dist/bim-engine-sdk.umd.js.map +1 -1
  6. package/dist/fonts/simfang.ttf +0 -0
  7. package/dist/iflow-engine-base.css +1 -1
  8. package/dist/index.d.ts +328 -6
  9. package/dist/main-2Txx2Vau.mjs +175 -0
  10. package/dist/main-2Txx2Vau.mjs.map +1 -0
  11. package/dist/model00/info +0 -0
  12. package/dist/model00/lod0 +0 -0
  13. package/dist/model00/lod1 +0 -0
  14. package/dist/model00/lod2 +0 -0
  15. package/dist/model00/property +0 -0
  16. package/dist/step-CkmZYIvn.mjs +251 -0
  17. package/dist/step-CkmZYIvn.mjs.map +1 -0
  18. package/dist/textture/waternormals.jpg +0 -0
  19. package/package.json +53 -51
  20. package/dist/main-Bcaj0lBB.mjs +0 -175
  21. package/dist/main-Bcaj0lBB.mjs.map +0 -1
  22. package/dist/model0/info +0 -0
  23. package/dist/model0/lod0 +0 -0
  24. package/dist/model0/property +0 -0
  25. package/dist/model1/info +0 -0
  26. package/dist/model1/info~/info.json +0 -1
  27. package/dist/model1/lod0 +0 -0
  28. package/dist/model1/lod0~/instances.json +0 -1
  29. package/dist/model1/lod0~/nodes.json +0 -1
  30. package/dist/model1/lod0~/primitives/0.glb +0 -0
  31. package/dist/model1/lod0~/primitives/1.glb +0 -0
  32. package/dist/model1/lod0~/primitives/10.glb +0 -0
  33. package/dist/model1/lod0~/primitives/11.glb +0 -0
  34. package/dist/model1/lod0~/primitives/12.glb +0 -0
  35. package/dist/model1/lod0~/primitives/13.glb +0 -0
  36. package/dist/model1/lod0~/primitives/14.glb +0 -0
  37. package/dist/model1/lod0~/primitives/15.glb +0 -0
  38. package/dist/model1/lod0~/primitives/16.glb +0 -0
  39. package/dist/model1/lod0~/primitives/17.glb +0 -0
  40. package/dist/model1/lod0~/primitives/18.glb +0 -0
  41. package/dist/model1/lod0~/primitives/19.glb +0 -0
  42. package/dist/model1/lod0~/primitives/2.glb +0 -0
  43. package/dist/model1/lod0~/primitives/20.glb +0 -0
  44. package/dist/model1/lod0~/primitives/21.glb +0 -0
  45. package/dist/model1/lod0~/primitives/22.glb +0 -0
  46. package/dist/model1/lod0~/primitives/23.glb +0 -0
  47. package/dist/model1/lod0~/primitives/24.glb +0 -0
  48. package/dist/model1/lod0~/primitives/25.glb +0 -0
  49. package/dist/model1/lod0~/primitives/26.glb +0 -0
  50. package/dist/model1/lod0~/primitives/27.glb +0 -0
  51. package/dist/model1/lod0~/primitives/28.glb +0 -0
  52. package/dist/model1/lod0~/primitives/29.glb +0 -0
  53. package/dist/model1/lod0~/primitives/3.glb +0 -0
  54. package/dist/model1/lod0~/primitives/30.glb +0 -0
  55. package/dist/model1/lod0~/primitives/31.glb +0 -0
  56. package/dist/model1/lod0~/primitives/4.glb +0 -0
  57. package/dist/model1/lod0~/primitives/5.glb +0 -0
  58. package/dist/model1/lod0~/primitives/6.glb +0 -0
  59. package/dist/model1/lod0~/primitives/7.glb +0 -0
  60. package/dist/model1/lod0~/primitives/8.glb +0 -0
  61. package/dist/model1/lod0~/primitives/9.glb +0 -0
  62. package/dist/model1/property +0 -0
  63. package/dist/model2/info +0 -0
  64. package/dist/model2/lod0 +0 -0
  65. package/dist/model2/property +0 -0
  66. package/dist/model2d/cad.json +0 -1
  67. package/dist/model2d/info +0 -0
  68. package/dist/model4/info +0 -0
  69. package/dist/model4/lod0 +0 -0
  70. package/dist/model4/property +0 -0
  71. package/dist/model720/720.png +0 -0
  72. package/dist/step-Ci61eU9h.mjs +0 -251
  73. package/dist/step-Ci61eU9h.mjs.map +0 -1
Binary file
@@ -1 +1 @@
1
- .originRotate{width:10px;height:10px;background-color:red}.versionText{position:absolute;right:10px;color:#86d9ff;z-index:1000;bottom:0;font-size:10px;background:transparent;pointer-events:none}.originDiv{position:absolute;top:100px;left:100px;width:30px;height:30px;border-radius:50%;z-index:1000;pointer-events:none}.tagDiv{color:gray;background:#fffc;padding:5px;font-size:12px}.catchPoint{pointer-events:none;stroke:#08dfd7;fill:transparent;stroke-width:2}.catchLine{position:absolute;width:10px;height:10px;pointer-events:none;background-color:green}.catchPlane{position:absolute;width:10px;height:10px;pointer-events:none;background-color:#ff0}.ViewCube{position:absolute;width:120px;height:120px;top:0;right:0;z-index:999}.homeViewWrapper{position:absolute;cursor:pointer;pointer-events:auto;background-image:url(/assets/viewcube/home.png);background-size:100% 100%;background-repeat:no-repeat;background-color:#fff0;color:#fff;top:10px;right:100;width:20px;height:20px;z-index:999;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.viewSettingWrapper{position:absolute;cursor:pointer;pointer-events:auto;background-size:100% 100%;background-repeat:no-repeat;font-weight:800;background-color:#fff0;color:#fff;top:30px;right:100;width:20px;height:20px;z-index:999;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.cameraToggleWrapper{position:absolute;cursor:pointer;pointer-events:auto;background-color:#ffffffe6;color:#333;font-size:26px;font-weight:700;display:none;align-items:center;justify-content:center;border-radius:4px;box-shadow:0 2px 4px #0003;transition:all .3s ease;top:70px;right:90px;width:44px;height:44px;z-index:999;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.cameraToggleWrapper.show{display:flex}.cameraToggleWrapper:hover{background-color:#fff;box-shadow:0 3px 6px #0000004d;transform:scale(1.1)}.screenshotWrapper{position:absolute;cursor:pointer;pointer-events:auto;background-color:#ffffffe6;color:#333;font-size:20px;display:none;align-items:center;justify-content:center;border-radius:4px;box-shadow:0 2px 4px #0003;transition:all .3s ease;top:120px;right:90px;width:44px;height:44px;z-index:999;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.screenshotWrapper.show{display:flex}.screenshotWrapper:hover{background-color:#fff;box-shadow:0 3px 6px #0000004d;transform:scale(1.1)}.fullscreenWrapper{position:absolute;cursor:pointer;pointer-events:auto;background-color:#ffffffe6;color:#333;font-size:26px;font-weight:700;display:none;align-items:center;justify-content:center;border-radius:4px;box-shadow:0 2px 4px #0003;transition:all .3s ease;top:170px;right:90px;width:44px;height:44px;z-index:999;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.fullscreenWrapper.show{display:flex}.fullscreenWrapper:hover{background-color:#fff;box-shadow:0 3px 6px #0000004d;transform:scale(1.1)}.measure-elevation{position:absolute;pointer-events:none}.measureSvg{position:absolute;width:1920px;height:1080px}.catch-point{position:absolute;width:10px;height:10px;background-color:red;border-radius:50%;pointer-events:none}.annotation-container{position:absolute;pointer-events:none;top:0;left:0}.measureLine{position:absolute;pointer-events:none}.measureBack{cursor:pointer;pointer-events:auto;fill:orange;top:-50px;rx:5;ry:5}.measureLabel{position:absolute;fill:#fff;font-size:14px;font-family:Arial,sans-serif;pointer-events:none}.measurePointer{fill:orange}.Hight{stroke:#fff;stroke-width:2}.allow-select{pointer-events:auto}.disallow-select{pointer-events:none}.angle-annotation{position:absolute;pointer-events:auto}.engine-2d-container{position:relative;width:100%;height:100%;overflow:hidden}.engine-2d-canvas{display:block;width:100%;height:100%;outline:none}.engine-2d-cad-cursor{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;overflow:hidden}.engine-2d-cad-cursor__h{position:absolute;left:0;width:100%;height:1px;background:var(--e2d-cursor, rgba(255, 255, 255, .85));transform:translateY(-50%)}.engine-2d-cad-cursor__v{position:absolute;top:0;width:1px;height:100%;background:var(--e2d-cursor, rgba(255, 255, 255, .85));transform:translate(-50%)}.engine-2d-cad-cursor__box{position:absolute;width:8px;height:8px;border:1px solid var(--e2d-cursor, rgba(255, 255, 255, .85));transform:translate(-50%,-50%)}.engine-2d-context-menu{position:absolute;z-index:9999;min-width:140px;background:var(--e2d-bg2, #252526);border:1px solid var(--e2d-border, rgba(255, 255, 255, .12));border-radius:4px;box-shadow:0 4px 16px var(--e2d-shadow, rgba(0, 0, 0, .5));padding:4px 0;display:none;-webkit-user-select:none;user-select:none}.engine-2d-context-menu--visible{display:block}.engine-2d-context-menu__item{padding:7px 16px;font-size:13px;color:var(--e2d-text2, #cccccc);cursor:pointer;white-space:nowrap;transition:background .1s,color .1s}.engine-2d-context-menu__item:hover{background:var(--e2d-bg-accent, #094771);color:var(--e2d-text-accent, #ffffff)}.engine-2d-context-menu__divider{height:1px;background:var(--e2d-border, rgba(255, 255, 255, .1));margin:4px 0}.engine-2d-stats{position:absolute;top:10px;left:10px;background:var(--e2d-float-bg, rgba(0, 0, 0, .7));color:var(--e2d-text, #e0e0e0);padding:8px 12px;border-radius:4px;font-family:monospace;font-size:12px;pointer-events:none;-webkit-user-select:none;user-select:none}.engine-2d-stats div{margin:2px 0}.engine-2d-loading{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:var(--e2d-float-bg, rgba(0, 0, 0, .8));color:var(--e2d-text, #e0e0e0);padding:20px 40px;border-radius:8px;font-size:16px;text-align:center}.engine-2d-loading-spinner{border:3px solid var(--e2d-border, rgba(255, 255, 255, .3));border-top:3px solid var(--e2d-accent, #4fc3f7);border-radius:50%;width:40px;height:40px;animation:engine-2d-spin 1s linear infinite;margin:0 auto 10px}@keyframes engine-2d-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.engine-2d-error{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#d32f2feb;color:#fff;padding:20px 40px;border-radius:8px;font-size:14px;max-width:80%;text-align:center}.engine-2d-controls-hint{position:absolute;bottom:10px;left:10px;background:var(--e2d-float-bg, rgba(0, 0, 0, .6));color:var(--e2d-text, #e0e0e0);border:1px solid var(--e2d-float-border, rgba(255, 255, 255, .08));padding:8px 12px;border-radius:4px;font-size:12px;pointer-events:none;-webkit-user-select:none;user-select:none}.engine-2d-controls-hint kbd{background:var(--e2d-icon-bg, rgba(255, 255, 255, .2));color:var(--e2d-text, #e0e0e0);padding:2px 6px;border-radius:3px;font-family:monospace}.engine-2d-search{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:9998;display:none}.engine-2d-search--visible{display:block}.engine-2d-search__box{position:absolute;top:14%;left:50%;transform:translate(-50%);width:480px;max-width:calc(100% - 40px);background:var(--e2d-bg, #1e1f22);border:1px solid var(--e2d-border, rgba(255, 255, 255, .14));border-radius:10px;box-shadow:0 8px 40px var(--e2d-shadow-lg, rgba(0, 0, 0, .65)),0 2px 8px var(--e2d-shadow, rgba(0, 0, 0, .4));overflow:hidden;pointer-events:auto;animation:engine-2d-search-in .18s cubic-bezier(.34,1.2,.64,1)}@keyframes engine-2d-search-in{0%{opacity:0;transform:translate(-50%) translateY(-8px) scale(.97)}to{opacity:1;transform:translate(-50%) translateY(0) scale(1)}}.engine-2d-search__input-row{display:flex;align-items:center;padding:0 12px;gap:8px;height:48px}.engine-2d-search__icon{flex-shrink:0;color:var(--e2d-icon, rgba(255, 255, 255, .4));display:flex;align-items:center}.engine-2d-search__input{flex:1;background:transparent;border:none;outline:none;color:var(--e2d-text, #e0e0e0);font-size:14px;line-height:1.4;caret-color:var(--e2d-accent, #4fc3f7)}.engine-2d-search__input::placeholder{color:var(--e2d-text3, rgba(255, 255, 255, .25))}.engine-2d-search__clear{flex-shrink:0;background:var(--e2d-icon-bg, rgba(255, 255, 255, .08));border:none;border-radius:4px;color:var(--e2d-icon, rgba(255, 255, 255, .5));cursor:pointer;display:flex;align-items:center;justify-content:center;width:22px;height:22px;padding:0;opacity:0;pointer-events:none;transition:opacity .15s,background .15s,color .15s}.engine-2d-search__clear:hover{background:var(--e2d-icon-bg-hover, rgba(255, 255, 255, .16));color:var(--e2d-close-hover, #ffffff)}.engine-2d-search__divider{height:1px;background:var(--e2d-border2, rgba(255, 255, 255, .08));display:none}.engine-2d-search__status{padding:6px 16px;font-size:11px;color:var(--e2d-text3, rgba(255, 255, 255, .35));display:none;-webkit-user-select:none;user-select:none}.engine-2d-search__list{list-style:none;margin:0;padding:4px 0;max-height:320px;overflow-y:auto;display:none;scrollbar-width:thin;scrollbar-color:var(--e2d-scrollbar, rgba(255, 255, 255, .15)) transparent}.engine-2d-search__list::-webkit-scrollbar{width:4px}.engine-2d-search__list::-webkit-scrollbar-track{background:transparent}.engine-2d-search__list::-webkit-scrollbar-thumb{background:var(--e2d-scrollbar, rgba(255, 255, 255, .15));border-radius:2px}.engine-2d-search__item{display:flex;align-items:center;gap:8px;padding:8px 14px;cursor:pointer;transition:background .1s;min-height:38px;flex-wrap:nowrap}.engine-2d-search__item:hover,.engine-2d-search__item--active{background:var(--e2d-bg-hover, rgba(79, 195, 247, .08))}.engine-2d-search__item-badge{flex-shrink:0;font-size:10px;font-weight:500;padding:2px 6px;border-radius:3px;letter-spacing:.03em;white-space:nowrap}.engine-2d-search__item-name{flex:1;font-size:13px;color:var(--e2d-text, #e0e0e0);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.engine-2d-search__item-layer{flex-shrink:0;font-size:11px;color:var(--e2d-text3, rgba(255, 255, 255, .3));white-space:nowrap;max-width:100px;overflow:hidden;text-overflow:ellipsis}.engine-2d-search__item-desc{flex-shrink:0;font-size:11px;color:var(--e2d-text4, rgba(255, 255, 255, .25));white-space:nowrap;max-width:120px;overflow:hidden;text-overflow:ellipsis}.engine-2d-search__mark{background:transparent;color:var(--e2d-accent, #4fc3f7);font-weight:600}.engine-2d-mouse-coord{position:absolute;bottom:10px;left:50%;transform:translate(-50%);display:flex;align-items:center;gap:12px;background:var(--e2d-float-bg, rgba(0, 0, 0, .65));color:var(--e2d-text, #e0e0e0);padding:5px 14px;border-radius:4px;font-family:monospace;font-size:12px;pointer-events:none;-webkit-user-select:none;user-select:none;border:1px solid var(--e2d-float-border, rgba(255, 255, 255, .08))}.engine-2d-mouse-coord__label{color:var(--e2d-coord-label, rgba(255, 255, 255, .45));font-size:11px;letter-spacing:.05em}.engine-2d-mouse-coord__value{min-width:90px;color:var(--e2d-coord-value, #76c8ff)}.panorama-annotation-container{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:1000;overflow:hidden}.panorama-annotation{position:absolute;pointer-events:auto;cursor:pointer;transform:translate(-50%,-50%);transition:opacity .2s ease,transform .2s ease;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.panorama-annotation:hover{z-index:1001;transform:translate(-50%,-50%) scale(1.1)}.panorama-annotation-icon{width:40px;height:40px}.panorama-annotation-icon img{width:100%;height:100%;object-fit:contain;display:block;filter:drop-shadow(0 2px 4px rgba(0,0,0,.3))}.panorama-annotation-text{max-width:200px;text-align:center;line-height:1.4}.panorama-annotation-link{transition:background-color .2s ease,transform .2s ease}.panorama-annotation-link:hover{z-index:1002}.panorama-annotation-link img{display:block;flex-shrink:0}.panorama-annotation.hidden{display:none!important}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.panorama-annotation.loading{animation:pulse 1.5s ease-in-out infinite}@media(max-width:768px){.panorama-annotation-icon{width:32px;height:32px}.panorama-annotation-text,.panorama-annotation-link{font-size:12px!important;padding:6px 10px!important}}
1
+ .originRotate{width:10px;height:10px;background-color:red}.versionText{position:absolute;right:10px;color:#86d9ff;z-index:1000;bottom:0;font-size:10px;background:transparent;pointer-events:none}.originDiv{position:absolute;top:100px;left:100px;width:30px;height:30px;border-radius:50%;z-index:1000;pointer-events:none}.tagDiv{color:gray;background:#fffc;padding:5px;font-size:12px}.catchPoint{pointer-events:none;stroke:#08dfd7;fill:transparent;stroke-width:2}.catchLine{position:absolute;width:10px;height:10px;pointer-events:none;background-color:green}.catchPlane{position:absolute;width:10px;height:10px;pointer-events:none;background-color:#ff0}.ViewCube{position:absolute;width:120px;height:120px;top:0;right:0;z-index:999}.homeViewWrapper{position:absolute;cursor:pointer;pointer-events:auto;background-image:url(/assets/viewcube/home.png);background-size:100% 100%;background-repeat:no-repeat;background-color:#fff0;color:#fff;top:10px;right:100;width:20px;height:20px;z-index:999;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.viewSettingWrapper{position:absolute;cursor:pointer;pointer-events:auto;background-size:100% 100%;background-repeat:no-repeat;font-weight:800;background-color:#fff0;color:#fff;top:30px;right:100;width:20px;height:20px;z-index:999;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.cameraToggleWrapper{position:absolute;cursor:pointer;pointer-events:auto;background-color:#ffffffe6;color:#333;font-size:26px;font-weight:700;display:none;align-items:center;justify-content:center;border-radius:4px;box-shadow:0 2px 4px #0003;transition:all .3s ease;top:70px;right:90px;width:44px;height:44px;z-index:999;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.cameraToggleWrapper.show{display:flex}.cameraToggleWrapper:hover{background-color:#fff;box-shadow:0 3px 6px #0000004d;transform:scale(1.1)}.screenshotWrapper{position:absolute;cursor:pointer;pointer-events:auto;background-color:#ffffffe6;color:#333;font-size:20px;display:none;align-items:center;justify-content:center;border-radius:4px;box-shadow:0 2px 4px #0003;transition:all .3s ease;top:120px;right:90px;width:44px;height:44px;z-index:999;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.screenshotWrapper.show{display:flex}.screenshotWrapper:hover{background-color:#fff;box-shadow:0 3px 6px #0000004d;transform:scale(1.1)}.fullscreenWrapper{position:absolute;cursor:pointer;pointer-events:auto;background-color:#ffffffe6;color:#333;font-size:26px;font-weight:700;display:none;align-items:center;justify-content:center;border-radius:4px;box-shadow:0 2px 4px #0003;transition:all .3s ease;top:170px;right:90px;width:44px;height:44px;z-index:999;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.fullscreenWrapper.show{display:flex}.fullscreenWrapper:hover{background-color:#fff;box-shadow:0 3px 6px #0000004d;transform:scale(1.1)}.measure-elevation{position:absolute;pointer-events:none}.measureSvg{position:absolute;width:1920px;height:1080px}.catch-point{position:absolute;width:10px;height:10px;background-color:red;border-radius:50%;pointer-events:none}.annotation-container{position:absolute;pointer-events:none;top:0;left:0}.measureLine{position:absolute;pointer-events:none}.measureBack{cursor:pointer;pointer-events:auto;fill:orange;padding:5px;top:-50px;rx:5;ry:5}.measureLabel{position:absolute;fill:#fff;font-size:14px;font-family:Arial,sans-serif;pointer-events:none}.measurePointer{fill:orange}.Hight{stroke:#fff;stroke-width:2}.allow-select{pointer-events:auto}.disallow-select{pointer-events:none}.angle-annotation{position:absolute;pointer-events:auto}.MapController{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.engine-2d-container{position:relative;width:100%;height:100%;overflow:hidden}.engine-2d-canvas{display:block;width:100%;height:100%;outline:none}.engine-2d-cad-cursor{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;overflow:hidden}.engine-2d-cad-cursor__h{position:absolute;left:0;width:100%;height:1px;background:var(--e2d-cursor, rgba(255, 255, 255, .85));transform:translateY(-50%)}.engine-2d-cad-cursor__v{position:absolute;top:0;width:1px;height:100%;background:var(--e2d-cursor, rgba(255, 255, 255, .85));transform:translate(-50%)}.engine-2d-cad-cursor__box{position:absolute;width:8px;height:8px;border:1px solid var(--e2d-cursor, rgba(255, 255, 255, .85));transform:translate(-50%,-50%)}.engine-2d-context-menu{position:absolute;z-index:9999;min-width:140px;background:var(--e2d-bg2, #252526);border:1px solid var(--e2d-border, rgba(255, 255, 255, .12));border-radius:4px;box-shadow:0 4px 16px var(--e2d-shadow, rgba(0, 0, 0, .5));padding:4px 0;display:none;-webkit-user-select:none;user-select:none}.engine-2d-context-menu--visible{display:block}.engine-2d-context-menu__item{padding:7px 16px;font-size:13px;color:var(--e2d-text2, #cccccc);cursor:pointer;white-space:nowrap;transition:background .1s,color .1s}.engine-2d-context-menu__item:hover{background:var(--e2d-bg-accent, #094771);color:var(--e2d-text-accent, #ffffff)}.engine-2d-context-menu__divider{height:1px;background:var(--e2d-border, rgba(255, 255, 255, .1));margin:4px 0}.engine-2d-stats{position:absolute;top:10px;left:10px;background:var(--e2d-float-bg, rgba(0, 0, 0, .7));color:var(--e2d-text, #e0e0e0);padding:8px 12px;border-radius:4px;font-family:monospace;font-size:12px;pointer-events:none;-webkit-user-select:none;user-select:none}.engine-2d-stats div{margin:2px 0}.engine-2d-loading{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:var(--e2d-float-bg, rgba(0, 0, 0, .8));color:var(--e2d-text, #e0e0e0);padding:20px 40px;border-radius:8px;font-size:16px;text-align:center}.engine-2d-loading-spinner{border:3px solid var(--e2d-border, rgba(255, 255, 255, .3));border-top:3px solid var(--e2d-accent, #4fc3f7);border-radius:50%;width:40px;height:40px;animation:engine-2d-spin 1s linear infinite;margin:0 auto 10px}@keyframes engine-2d-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.engine-2d-error{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);background:#d32f2feb;color:#fff;padding:20px 40px;border-radius:8px;font-size:14px;max-width:80%;text-align:center}.engine-2d-controls-hint{position:absolute;bottom:10px;left:10px;background:var(--e2d-float-bg, rgba(0, 0, 0, .6));color:var(--e2d-text, #e0e0e0);border:1px solid var(--e2d-float-border, rgba(255, 255, 255, .08));padding:8px 12px;border-radius:4px;font-size:12px;pointer-events:none;-webkit-user-select:none;user-select:none}.engine-2d-controls-hint kbd{background:var(--e2d-icon-bg, rgba(255, 255, 255, .2));color:var(--e2d-text, #e0e0e0);padding:2px 6px;border-radius:3px;font-family:monospace}.engine-2d-search{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:9998;display:none}.engine-2d-search--visible{display:block}.engine-2d-search__box{position:absolute;top:14%;left:50%;transform:translate(-50%);width:480px;max-width:calc(100% - 40px);background:var(--e2d-bg, #1e1f22);border:1px solid var(--e2d-border, rgba(255, 255, 255, .14));border-radius:10px;box-shadow:0 8px 40px var(--e2d-shadow-lg, rgba(0, 0, 0, .65)),0 2px 8px var(--e2d-shadow, rgba(0, 0, 0, .4));overflow:hidden;pointer-events:auto;animation:engine-2d-search-in .18s cubic-bezier(.34,1.2,.64,1)}@keyframes engine-2d-search-in{0%{opacity:0;transform:translate(-50%) translateY(-8px) scale(.97)}to{opacity:1;transform:translate(-50%) translateY(0) scale(1)}}.engine-2d-search__input-row{display:flex;align-items:center;padding:0 12px;gap:8px;height:48px}.engine-2d-search__icon{flex-shrink:0;color:var(--e2d-icon, rgba(255, 255, 255, .4));display:flex;align-items:center}.engine-2d-search__input{flex:1;background:transparent;border:none;outline:none;color:var(--e2d-text, #e0e0e0);font-size:14px;line-height:1.4;caret-color:var(--e2d-accent, #4fc3f7)}.engine-2d-search__input::placeholder{color:var(--e2d-text3, rgba(255, 255, 255, .25))}.engine-2d-search__clear{flex-shrink:0;background:var(--e2d-icon-bg, rgba(255, 255, 255, .08));border:none;border-radius:4px;color:var(--e2d-icon, rgba(255, 255, 255, .5));cursor:pointer;display:flex;align-items:center;justify-content:center;width:22px;height:22px;padding:0;opacity:0;pointer-events:none;transition:opacity .15s,background .15s,color .15s}.engine-2d-search__clear:hover{background:var(--e2d-icon-bg-hover, rgba(255, 255, 255, .16));color:var(--e2d-close-hover, #ffffff)}.engine-2d-search__divider{height:1px;background:var(--e2d-border2, rgba(255, 255, 255, .08));display:none}.engine-2d-search__status{padding:6px 16px;font-size:11px;color:var(--e2d-text3, rgba(255, 255, 255, .35));display:none;-webkit-user-select:none;user-select:none}.engine-2d-search__list{list-style:none;margin:0;padding:4px 0;max-height:320px;overflow-y:auto;display:none;scrollbar-width:thin;scrollbar-color:var(--e2d-scrollbar, rgba(255, 255, 255, .15)) transparent}.engine-2d-search__list::-webkit-scrollbar{width:4px}.engine-2d-search__list::-webkit-scrollbar-track{background:transparent}.engine-2d-search__list::-webkit-scrollbar-thumb{background:var(--e2d-scrollbar, rgba(255, 255, 255, .15));border-radius:2px}.engine-2d-search__item{display:flex;align-items:center;gap:8px;padding:8px 14px;cursor:pointer;transition:background .1s;min-height:38px;flex-wrap:nowrap}.engine-2d-search__item:hover,.engine-2d-search__item--active{background:var(--e2d-bg-hover, rgba(79, 195, 247, .08))}.engine-2d-search__item-badge{flex-shrink:0;font-size:10px;font-weight:500;padding:2px 6px;border-radius:3px;letter-spacing:.03em;white-space:nowrap}.engine-2d-search__item-name{flex:1;font-size:13px;color:var(--e2d-text, #e0e0e0);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.engine-2d-search__item-layer{flex-shrink:0;font-size:11px;color:var(--e2d-text3, rgba(255, 255, 255, .3));white-space:nowrap;max-width:100px;overflow:hidden;text-overflow:ellipsis}.engine-2d-search__item-desc{flex-shrink:0;font-size:11px;color:var(--e2d-text4, rgba(255, 255, 255, .25));white-space:nowrap;max-width:120px;overflow:hidden;text-overflow:ellipsis}.engine-2d-search__mark{background:transparent;color:var(--e2d-accent, #4fc3f7);font-weight:600}.engine-2d-mouse-coord{position:absolute;bottom:10px;left:50%;transform:translate(-50%);display:flex;align-items:center;gap:12px;background:var(--e2d-float-bg, rgba(0, 0, 0, .65));color:var(--e2d-text, #e0e0e0);padding:5px 14px;border-radius:4px;font-family:monospace;font-size:12px;pointer-events:none;-webkit-user-select:none;user-select:none;border:1px solid var(--e2d-float-border, rgba(255, 255, 255, .08))}.engine-2d-mouse-coord__label{color:var(--e2d-coord-label, rgba(255, 255, 255, .45));font-size:11px;letter-spacing:.05em}.engine-2d-mouse-coord__value{min-width:90px;color:var(--e2d-coord-value, #76c8ff)}.panorama-annotation-container{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;z-index:1000;overflow:hidden}.panorama-annotation{position:absolute;pointer-events:auto;cursor:pointer;transform:translate(-50%,-50%);transition:opacity .2s ease,transform .2s ease;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.panorama-annotation:hover{z-index:1001;transform:translate(-50%,-50%) scale(1.1)}.panorama-annotation-icon{width:40px;height:40px}.panorama-annotation-icon img{width:100%;height:100%;object-fit:contain;display:block;filter:drop-shadow(0 2px 4px rgba(0,0,0,.3))}.panorama-annotation-text{max-width:200px;text-align:center;line-height:1.4}.panorama-annotation-link{transition:background-color .2s ease,transform .2s ease}.panorama-annotation-link:hover{z-index:1002}.panorama-annotation-link img{display:block;flex-shrink:0}.panorama-annotation.hidden{display:none!important}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.panorama-annotation.loading{animation:pulse 1.5s ease-in-out infinite}@media(max-width:768px){.panorama-annotation-icon{width:32px;height:32px}.panorama-annotation-text,.panorama-annotation-link{font-size:12px!important;padding:6px 10px!important}}
package/dist/index.d.ts CHANGED
@@ -270,11 +270,34 @@ declare class CameraModule {
270
270
  constructor(engine: any);
271
271
  switchCurrentCamera(): void;
272
272
  private updateComposerCamera;
273
+ /**
274
+ * 将透视相机调成「效果接近正交」:通过缩小 FOV 减弱透视畸变。
275
+ * @param fov 垂直视野角(度),默认 60。设为 10~15 可得到近正交效果,越小越接近正交。
276
+ * @param options.adjustDistance 是否按 FOV 比例调整相机距离以保持取景一致,默认 true(缩小 FOV 时自动拉远)
277
+ */
278
+ setPerspectiveFov(fov: number, options?: {
279
+ adjustDistance?: boolean;
280
+ }): void;
273
281
  switchToPerspectiveCamera(): void;
274
282
  switchToOrthographicCamera(): void;
275
283
  getCameraType(): CameraType;
276
284
  getCameraPose(): ICameraPose;
277
285
  restoreCameraPose(pose: ICameraPose): void;
286
+ /**
287
+ * 根据视图原点与视线方向设置相机(用于打开剖面视图等)
288
+ * @param origin 目标点坐标 {x, y, z}
289
+ * @param direction 视线方向(相机看向的方向){x, y, z},会做归一化
290
+ * @param distance 相机到目标点的距离,不传则根据场景包围盒自动计算
291
+ */
292
+ setViewFromOriginAndDirection(origin: {
293
+ x: number;
294
+ y: number;
295
+ z: number;
296
+ }, direction: {
297
+ x: number;
298
+ y: number;
299
+ z: number;
300
+ }, distance?: number): void;
278
301
  }
279
302
 
280
303
  declare class CameraModule2d {
@@ -291,15 +314,36 @@ declare class CameraModule2d {
291
314
  * 创建正交相机
292
315
  */
293
316
  private createOrthographicCamera;
317
+ private animationId;
318
+ private animationStartTime;
319
+ private animationDuration;
320
+ private animationStartState;
321
+ private animationTargetState;
294
322
  /**
295
323
  * 适配视图到模型边界
296
324
  * @param extents 模型边界 { min: [x, y, z], max: [x, y, z] }
297
325
  * @param padding 边距(默认 1.2 = 20% 边距)
326
+ * @param animated 是否使用动画(默认 true)
327
+ * @param duration 动画时长(毫秒,默认 800)
298
328
  */
299
329
  fitToExtents(extents: {
300
330
  min: number[];
301
331
  max: number[];
302
- }, padding?: number): void;
332
+ }, padding?: number, animated?: boolean, duration?: number): void;
333
+ /**
334
+ * 缓动函数 - easeOutCubic
335
+ * @param t 进度 0-1
336
+ * @returns 缓动后的值
337
+ */
338
+ private easeOutCubic;
339
+ /**
340
+ * 执行 fitToExtents 动画
341
+ */
342
+ private animateFitToExtents;
343
+ /**
344
+ * 线性插值
345
+ */
346
+ private lerp;
303
347
  /**
304
348
  * 设置缩放级别
305
349
  * @param zoom 缩放级别
@@ -464,6 +508,21 @@ declare class Clipping {
464
508
  recover(): void;
465
509
  reverse(): void;
466
510
  disActive(): void;
511
+ /**
512
+ * 按视图原点与视线方向设置剖面(用于打开剖面视图)
513
+ * 剖切面过 origin,法向指向相机侧,并生成与场景包围盒同大的剖切面
514
+ * @param origin 剖面上的点 {x, y, z}(与视图 Origin 一致)
515
+ * @param viewDirection 视线方向 {x, y, z}(与视图 ViewDirection 一致)
516
+ */
517
+ setSectionByView(origin: {
518
+ x: number;
519
+ y: number;
520
+ z: number;
521
+ }, viewDirection: {
522
+ x: number;
523
+ y: number;
524
+ z: number;
525
+ }): void;
467
526
  }
468
527
 
469
528
  declare class ComposerModule {
@@ -819,6 +878,8 @@ declare interface Engine2dOptions {
819
878
  selectionColor?: number;
820
879
  highlightColor?: number;
821
880
  enablePerformanceMonitoring?: boolean;
881
+ /** 自定义字体 TTF 文件 URL,支持中文等完整 Unicode 字符 */
882
+ fontUrl?: string;
822
883
  }
823
884
 
824
885
  /**
@@ -877,6 +938,9 @@ declare class EngineKernel2d {
877
938
  private fpsLastCheck;
878
939
  private currentFps;
879
940
  private enablePerformanceMonitoring;
941
+ modelToolModule2d: ModelToolModule2d;
942
+ engineStatus2d: EngineStatus2d;
943
+ octreeBox2d: OctreeBox2d;
880
944
  events: EventModule2d;
881
945
  handelBehaved2d: any;
882
946
  interactionModule2d: InteractionModule2d;
@@ -890,6 +954,9 @@ declare class EngineKernel2d {
890
954
  themeManager: ThemeManager;
891
955
  private cadCursorUI;
892
956
  private contextMenuUI;
957
+ private loadingUI;
958
+ private linkView2d3d;
959
+ private linkElement2d3d;
893
960
  scene: THREE.Scene | null;
894
961
  camera: THREE.OrthographicCamera | null;
895
962
  renderer: THREE.WebGLRenderer | null;
@@ -985,6 +1052,42 @@ declare class EngineKernel2d {
985
1052
  * 调整渲染器尺寸
986
1053
  */
987
1054
  resize(): void;
1055
+ /**
1056
+ * 将主 canvas 转换成图片
1057
+ * @param options 图片导出选项
1058
+ * @returns 图片信息(包含 Data URL 和 Blob URL)
1059
+ */
1060
+ captureImage(options?: {
1061
+ format?: 'png' | 'jpeg' | 'webp';
1062
+ quality?: number;
1063
+ filename?: string;
1064
+ download?: boolean;
1065
+ transparent?: boolean;
1066
+ hideGrid?: boolean;
1067
+ hideAxes?: boolean;
1068
+ }): {
1069
+ dataURL: string;
1070
+ blobURL?: string;
1071
+ blob?: Blob;
1072
+ } | null;
1073
+ /**
1074
+ * 将主 canvas 转换成图片(异步版本,返回 Blob)
1075
+ * @param options 图片导出选项
1076
+ * @returns Promise,包含图片信息(Data URL、Blob URL 和 Blob)
1077
+ */
1078
+ captureImageAsync(options?: {
1079
+ format?: 'png' | 'jpeg' | 'webp';
1080
+ quality?: number;
1081
+ filename?: string;
1082
+ download?: boolean;
1083
+ transparent?: boolean;
1084
+ hideGrid?: boolean;
1085
+ hideAxes?: boolean;
1086
+ }): Promise<{
1087
+ dataURL: string;
1088
+ blobURL: string;
1089
+ blob: Blob;
1090
+ } | null>;
988
1091
  /**
989
1092
  * 销毁引擎
990
1093
  */
@@ -1168,6 +1271,8 @@ declare class EngineKernelV2 {
1168
1271
  stats?: default_2;
1169
1272
  catchSvg: SVGSVGElement;
1170
1273
  engineModelModule: EngineModelModule;
1274
+ viewTree: ViewTree;
1275
+ merge2d: Merge2d;
1171
1276
  viewCube: ViewCube;
1172
1277
  rangeScale: RangeScale;
1173
1278
  setting: Setting;
@@ -1187,6 +1292,10 @@ declare class EngineKernelV2 {
1187
1292
  text: Text_2;
1188
1293
  hdr: Hdr;
1189
1294
  ground: Ground;
1295
+ skyManager: SkyManager;
1296
+ linkElement2d3d: LinkElement2d3d;
1297
+ linkView2d3d: LinkView2d3d;
1298
+ oneClickEncoding: OneClickEncoding;
1190
1299
  models: any[];
1191
1300
  reactBoundingClientRect: {
1192
1301
  left: number;
@@ -1357,6 +1466,17 @@ declare class EngineStatus {
1357
1466
  closeAllFunction: () => void;
1358
1467
  }
1359
1468
 
1469
+ declare class EngineStatus2d {
1470
+ private engine;
1471
+ isFree: boolean;
1472
+ highlightModels: any[];
1473
+ highlightHoverModels: any[];
1474
+ hideModels: any[];
1475
+ translucentModels: any[];
1476
+ models: any[];
1477
+ constructor(engine: any);
1478
+ }
1479
+
1360
1480
  /**
1361
1481
  * 实体类型枚举
1362
1482
  */
@@ -1544,6 +1664,7 @@ declare enum EventType {
1544
1664
  */
1545
1665
  declare enum EventType2d {
1546
1666
  ModelLoadStart = "model-load-start",
1667
+ ModelLoadProgress = "model-load-progress",
1547
1668
  ModelLoaded = "model-loaded",
1548
1669
  ModelLoadError = "model-load-error",
1549
1670
  RenderStart = "render-start",
@@ -1635,9 +1756,12 @@ declare class Ground {
1635
1756
  private currentId;
1636
1757
  private readonly groundGroup;
1637
1758
  private groundMesh;
1638
- private waterMaterial;
1759
+ /** 当前为官方 Water 水面时为 true,用于 update/dispose 分支 */
1760
+ private isWaterAddon;
1639
1761
  private readonly clock;
1640
1762
  private groundY;
1763
+ /** 默认水面法线贴图路径(项目内为 public/textture/waternormals.jpg) */
1764
+ private static readonly DEFAULT_WATER_NORMALS;
1641
1765
  private groundList;
1642
1766
  constructor(engine: any);
1643
1767
  init(): void;
@@ -1653,8 +1777,7 @@ declare class Ground {
1653
1777
  setHeight(y: number): void;
1654
1778
  /** 获取当前地面高度 */
1655
1779
  getHeight(): number;
1656
- private _createWaterMaterial;
1657
- /** 每帧调用,驱动水面动画 */
1780
+ /** 每帧调用,驱动水面动画并与场景阳光/相机同步 */
1658
1781
  update(): void;
1659
1782
  /** 获取地面列表(id + 名称) */
1660
1783
  getGroundList(): Array<{
@@ -1678,6 +1801,12 @@ declare interface GroundConfig {
1678
1801
  sunDirection?: THREE.Vector3;
1679
1802
  /** 水面透明度(默认 0.82) */
1680
1803
  opacity?: number;
1804
+ /** 水面法线贴图 URL(默认使用 public 下的 waternormals.jpg) */
1805
+ waterNormalsUrl?: string;
1806
+ /** 水面反射扭曲强度,覆盖预设 */
1807
+ distortionScale?: number;
1808
+ /** 水面波纹密度(size uniform),覆盖预设 */
1809
+ waterSize?: number;
1681
1810
  }
1682
1811
 
1683
1812
  declare type GroundId = "0" | "1" | "2" | "3" | "4" | "5";
@@ -1863,7 +1992,9 @@ declare class InteractionModule2d {
1863
1992
  init(): void;
1864
1993
  active(): void;
1865
1994
  disActive(): void;
1995
+ private oldId;
1866
1996
  handleMouseMove(event: any): void;
1997
+ handelKeyEscDown(event: any): void;
1867
1998
  handleMouseClick(event: any): void;
1868
1999
  dispose(): void;
1869
2000
  }
@@ -1940,7 +2071,7 @@ declare class Level {
1940
2071
  constructor(engine: any);
1941
2072
  private _initSvg;
1942
2073
  /** 传入标高数据并渲染 */
1943
- setData(data: LevelData[]): void;
2074
+ setData(data: LevelData[], box: any): void;
1944
2075
  /** 使用内置模拟数据(调试用) */
1945
2076
  setMockData(): void;
1946
2077
  /** 显示标高 */
@@ -1989,6 +2120,24 @@ declare interface LinkAnnotationConfig {
1989
2120
  metadata?: any;
1990
2121
  }
1991
2122
 
2123
+ declare class LinkElement2d3d {
2124
+ private engine;
2125
+ constructor(engine: any);
2126
+ private active;
2127
+ private disActive;
2128
+ private readonly listenElementClick;
2129
+ }
2130
+
2131
+ declare class LinkView2d3d {
2132
+ private engine;
2133
+ constructor(engine: any);
2134
+ private active;
2135
+ private disActive;
2136
+ private readonly listenViewUpdate;
2137
+ private applyPosition;
2138
+ private applyRotation;
2139
+ }
2140
+
1992
2141
  declare class LoaderModule {
1993
2142
  private engine;
1994
2143
  constructor(engine: any);
@@ -2037,6 +2186,8 @@ declare class LoaderModule2d {
2037
2186
  private totalBlock;
2038
2187
  private font;
2039
2188
  private loadFont;
2189
+ /** 发射加载进度事件,让 UI 可以感知阶段变化 */
2190
+ private _emitProgress;
2040
2191
  private buildScene;
2041
2192
  private loadBlock;
2042
2193
  private getPoint_polyline;
@@ -2115,6 +2266,36 @@ declare class Measure {
2115
2266
  update(): void;
2116
2267
  }
2117
2268
 
2269
+ /**
2270
+ * 生成与 boundingBox 同大的剖切面并贴到剖面上(仅负责平面 mesh 的创建与展示,剖切逻辑在 Clipping 中)
2271
+ */
2272
+ declare class Merge2d {
2273
+ private engine;
2274
+ private sectionPlaneGroup;
2275
+ private loaderModule2d;
2276
+ constructor(engine: any);
2277
+ /**
2278
+ * 根据剖切面原点与视线方向,生成与场景 boundingBox 同大的平面 mesh 并添加到场景(贴到剖面上)
2279
+ * @param origin 剖面上的点 {x, y, z}
2280
+ * @param viewDirection 视线方向 {x, y, z},剖切面法向取反后指向相机侧
2281
+ */
2282
+ attachSectionPlane(url: string, viewId: string, origin: {
2283
+ x: number;
2284
+ y: number;
2285
+ z: number;
2286
+ }, viewDirection: {
2287
+ x: number;
2288
+ y: number;
2289
+ z: number;
2290
+ }): Promise<void>;
2291
+ /**
2292
+ * 移除由 attachSectionPlane 添加的剖切面平面
2293
+ */
2294
+ removeSectionPlane(): void;
2295
+ private getMatrix;
2296
+ computeMatrixFromOriginAndDirection(origin: any, direction: any): THREE.Matrix4;
2297
+ }
2298
+
2118
2299
  /**
2119
2300
  * 大模型API调用封装 - 简化版
2120
2301
  * 使用浏览器原生 fetch API,支持 OpenAI 兼容格式
@@ -2214,6 +2395,7 @@ declare class ModelProperties {
2214
2395
  private engine;
2215
2396
  constructor(engine: any);
2216
2397
  init(): void;
2398
+ getModelPropertiesWithName(url: string, id: string, names: [], callback: (properties: any) => void): void;
2217
2399
  getModelProperties(url: string, id: string, callback: (properties: any) => void): void;
2218
2400
  }
2219
2401
 
@@ -2225,6 +2407,7 @@ declare class ModelToolModule {
2225
2407
  constructor(engine_: any);
2226
2408
  split_merge_model(model: any): void;
2227
2409
  un_split_merge_model(model: any): void;
2410
+ getSceneModel(index: number): any;
2228
2411
  highlightModel(models: any): void;
2229
2412
  unhighlightModel(models: any): void;
2230
2413
  unhighlightAllModels(isClear?: boolean): void;
@@ -2243,6 +2426,28 @@ declare class ModelToolModule {
2243
2426
  batchSelectSameTypeModel(models: any[]): void;
2244
2427
  }
2245
2428
 
2429
+ declare class ModelToolModule2d {
2430
+ private engine;
2431
+ private highlightMaterial;
2432
+ private hideMaterial;
2433
+ private translucentMaterial;
2434
+ constructor(engine_: any);
2435
+ split_merge_model(model: any): void;
2436
+ un_split_merge_model(model: any): void;
2437
+ highlightModelHover(models: any[]): void;
2438
+ unHighlightModelHover(): void;
2439
+ highlightModel(models: any): void;
2440
+ unhighlightModel(models: any): void;
2441
+ unhighlightAllModels(isClear?: boolean): void;
2442
+ hideModel(models: any): void;
2443
+ showModel(models: any): void;
2444
+ showAllModels(): void;
2445
+ highLightRenderLine(ps: []): void;
2446
+ unhighLightRenderLine(): void;
2447
+ highLightRenderLineHover(ps: []): void;
2448
+ unhighLightRenderLineHover(): void;
2449
+ }
2450
+
2246
2451
  declare class ModelTree {
2247
2452
  private engine;
2248
2453
  constructor(engine: any);
@@ -2251,6 +2456,26 @@ declare class ModelTree {
2251
2456
  getMajorTreeData(): any[];
2252
2457
  }
2253
2458
 
2459
+ declare class OctreeBox2d {
2460
+ private engine;
2461
+ private pickBoxElementIds;
2462
+ private worldToScreen;
2463
+ constructor(engine: any);
2464
+ init(): void;
2465
+ pick2d(rayCaster: any, event: any): any;
2466
+ RecurrentIteration(rayCaster: any, box: any): void;
2467
+ }
2468
+
2469
+ declare class OneClickEncoding {
2470
+ private engine;
2471
+ private readonly apiKey;
2472
+ private readonly baseURL;
2473
+ constructor(engine: any, apiKey?: string);
2474
+ private start;
2475
+ startChat(url: string, str: string): Promise<void>;
2476
+ chat(str: string): Promise<any>;
2477
+ }
2478
+
2254
2479
  declare class Pan2dControls extends THREE.EventDispatcher {
2255
2480
  object: THREE.OrthographicCamera;
2256
2481
  domElement: HTMLElement;
@@ -3187,6 +3412,95 @@ declare class Setting {
3187
3412
  setHDRBackground(hdrTexture: THREE.Texture | null): void;
3188
3413
  }
3189
3414
 
3415
+ declare class SkyManager {
3416
+ private engine;
3417
+ private sky;
3418
+ private sun;
3419
+ private params;
3420
+ private readonly skyScale;
3421
+ private readonly skyName;
3422
+ /** 激活天空前相机的 far,关闭时恢复 */
3423
+ private savedCameraFar;
3424
+ constructor(engine: any);
3425
+ /**
3426
+ * 激活天空球:创建 Sky 并加入场景,应用当前参数
3427
+ */
3428
+ activate(): void;
3429
+ /**
3430
+ * 关闭天空球:从场景移除并释放,或仅隐藏
3431
+ * @param remove - true 从场景移除并 dispose,false 仅隐藏
3432
+ */
3433
+ close(remove?: boolean): void;
3434
+ /**
3435
+ * 是否已激活(天空对象存在且已加入场景)
3436
+ */
3437
+ isActive(): boolean;
3438
+ /**
3439
+ * 获取当前参数(副本)
3440
+ */
3441
+ getParams(): Readonly<Required<SkyParams>>;
3442
+ /**
3443
+ * 使用对象设置参数(支持部分字段),并立即应用到天空与渲染器
3444
+ */
3445
+ setParams(params: SkyParams): void;
3446
+ /**
3447
+ * 应用预设
3448
+ */
3449
+ setPreset(name: SkyPresetName): void;
3450
+ /**
3451
+ * 获取所有预设名称
3452
+ */
3453
+ getPresetNames(): SkyPresetName[];
3454
+ /**
3455
+ * 更新云层动画时间(每帧调用一次,例如在渲染循环中)
3456
+ * 同时根据当前相机类型(透视/正交)同步曝光,保证切换相机后天空亮度正确。
3457
+ * @param time - 秒,不传则使用 performance.now() * 0.001
3458
+ */
3459
+ update(time?: number): void;
3460
+ /** 当前相机是否为正交相机 */
3461
+ private _isOrthographicCamera;
3462
+ /** 获取当前相机有效曝光(正交相机使用 orthoExposureScale 补偿) */
3463
+ private _getEffectiveExposure;
3464
+ /** 扩大相机 far 以容纳天空盒,避免被裁剪成黑屏(支持透视与正交) */
3465
+ private _expandCameraFarForSky;
3466
+ /** 关闭天空时恢复相机 far(支持透视与正交) */
3467
+ private _restoreCameraFar;
3468
+ private _applyParamsToSky;
3469
+ /** Set shader uniform if it exists on current Sky material to avoid runtime errors with stock shader. */
3470
+ private _setUniformValue;
3471
+ }
3472
+
3473
+ /** 天空球参数(与 Three.js Sky 材质 uniform 及曝光对应) */
3474
+ declare interface SkyParams {
3475
+ /** 大气浑浊度,0~20,默认 10 */
3476
+ turbidity?: number;
3477
+ /** 瑞利散射,0~4,默认 3 */
3478
+ rayleigh?: number;
3479
+ /** Mie 系数,0~0.1,默认 0.005 */
3480
+ mieCoefficient?: number;
3481
+ /** Mie 方向性,0~1,默认 0.7 */
3482
+ mieDirectionalG?: number;
3483
+ /** 太阳仰角(度),0~90,默认 2 */
3484
+ elevation?: number;
3485
+ /** 太阳方位角(度),-180~180,默认 180 */
3486
+ azimuth?: number;
3487
+ /** 渲染器曝光,0~1,默认 0.5 */
3488
+ exposure?: number;
3489
+ /** 正交相机下的曝光倍数,用于补偿正交投影下天空偏暗,默认 1.5 */
3490
+ orthoExposureScale?: number;
3491
+ /** 云层覆盖,0~1,默认 0.4 */
3492
+ cloudCoverage?: number;
3493
+ /** 云层密度,0~1,默认 0.4 */
3494
+ cloudDensity?: number;
3495
+ /** 云层高度感,0~1,默认 0.5 */
3496
+ cloudElevation?: number;
3497
+ /** 是否显示日盘,默认 true */
3498
+ showSunDisc?: boolean;
3499
+ }
3500
+
3501
+ /** 预设名称 */
3502
+ declare type SkyPresetName = 'default' | 'sunset' | 'overcast' | 'clear' | 'night';
3503
+
3190
3504
  /**
3191
3505
  * 步骤接口
3192
3506
  */
@@ -3256,11 +3570,19 @@ declare class ViewCube {
3256
3570
  cubeTool: any;
3257
3571
  constructor(engine: any);
3258
3572
  init(): void;
3259
- CameraGoHome(): void;
3573
+ CameraGoHome(time: number): void;
3260
3574
  zoomToModel(box: any): void;
3575
+ zoomToModels(m: any): void;
3261
3576
  hide(): void;
3262
3577
  }
3263
3578
 
3579
+ declare class ViewTree {
3580
+ private engine;
3581
+ constructor(engine: any);
3582
+ getViewTreeData(url: string): any;
3583
+ openView(url: string, viewId: string): void;
3584
+ }
3585
+
3264
3586
  /**
3265
3587
  * 世界坐标与屏幕坐标转换工具类
3266
3588
  * 提供世界坐标(3D空间坐标)与屏幕坐标(2D像素坐标)之间的双向转换功能