iflow-engine-base 3.5.0 → 3.5.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.
@@ -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;stroke:#009bea;fill:#009bea;filter:drop-shadow(0px 0px 2px rgba(0,0,0,.3))}.measureBack{cursor:pointer;pointer-events:auto;fill:#fff;padding:5px;top:-50px;rx:5;ry:5;filter:drop-shadow(0px 0px 3px rgba(0,0,0,.3));text-align:center}.measureLabel{position:absolute;fill:#fff;font-family:tahoma;font-size:14px;stroke:#009bea;font-weight:200;pointer-events:none;text-anchor:middle}.measurePointer{fill:#009bea}.Hight{stroke:#fff;font-weight:500;filter:drop-shadow(0px 0px 2px rgb(0,195,255))}.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}}
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;stroke:#009bea;fill:#009bea;filter:drop-shadow(0px 0px 2px rgba(0,0,0,.3))}.measureBack{cursor:pointer;pointer-events:auto;fill:#fff;rx:5;ry:5;filter:drop-shadow(0px 0px 3px rgba(0,0,0,.3));text-align:center}.measureLabel{position:absolute;fill:#fff;font-family:tahoma;font-size:14px;stroke:#009bea;font-weight:200;pointer-events:none;text-anchor:middle}.measurePointer{fill:#009bea}.Hight{stroke:#fff;font-weight:500;filter:drop-shadow(0px 0px 2px rgb(0,195,255))}.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
@@ -1,4 +1,10 @@
1
+ import { Circle } from 'fabric';
1
2
  import { default as default_2 } from 'stats.js';
3
+ import { Group } from 'fabric';
4
+ import { IText } from 'fabric';
5
+ import { Line } from 'fabric';
6
+ import { Path } from 'fabric';
7
+ import { Rect } from 'fabric';
2
8
  import * as THREE from 'three';
3
9
  import * as THREE_2 from '../../../three/three.module.js';
4
10
 
@@ -953,6 +959,80 @@ declare class DeviceModule {
953
959
  };
954
960
  }
955
961
 
962
+ /**
963
+ * DrawingPin 视点管理器
964
+ * 仅暴露两个主接口:
965
+ * 1. get(): 获取当前视点完整状态
966
+ * 2. restore(): 还原视点完整状态
967
+ */
968
+ declare class DrawingPin {
969
+ private engine;
970
+ constructor(engine: any);
971
+ /**
972
+ * 获取当前视点状态(相机 + 剖切 + 测量 + 批注)
973
+ */
974
+ get(): IDrawingPinState;
975
+ /**
976
+ * 还原视点状态(相机 + 剖切 + 测量 + 批注)
977
+ */
978
+ restore(state: IDrawingPinState, mode?: FabricDrawMode): Promise<void>;
979
+ /**
980
+ * 创建视点(进入批注流程)
981
+ * 1. 启用批注功能
982
+ * 2. 用户点击“确定”后自动调用 get()
983
+ * 3. 将完整视点数据通过回调抛出
984
+ */
985
+ create(callback?: (state: IDrawingPinState) => void): void;
986
+ /**
987
+ * 清空批注(便捷接口)
988
+ */
989
+ clearAnnotation(): void;
990
+ /**
991
+ * 获取剖切状态
992
+ */
993
+ private captureClippingState;
994
+ /**
995
+ * 还原剖切状态
996
+ */
997
+ private restoreClippingState;
998
+ /**
999
+ * 还原面剖切(不走拾取流程)
1000
+ */
1001
+ private restoreFaceMode;
1002
+ /**
1003
+ * 将法向/距离应用到 sectionFace
1004
+ */
1005
+ private applyFaceState;
1006
+ /**
1007
+ * 获取测量数据(移除 DOM 引用)
1008
+ */
1009
+ private captureMeasureData;
1010
+ /**
1011
+ * 还原测量数据
1012
+ */
1013
+ private restoreMeasureData;
1014
+ /**
1015
+ * 获取 Fabric 批注数据
1016
+ */
1017
+ private captureAnnotationData;
1018
+ /**
1019
+ * 还原 Fabric 批注数据
1020
+ */
1021
+ private restoreAnnotationData;
1022
+ /**
1023
+ * 按模式启用批注层:view 只查看,edit 可编辑。
1024
+ */
1025
+ private applyAnnotationMode;
1026
+ /**
1027
+ * 深度序列化:保留 Vector3,移除 DOM/函数
1028
+ */
1029
+ private serializeSnapshotValue;
1030
+ /**
1031
+ * 深度反序列化:将标记对象还原为 Vector3
1032
+ */
1033
+ private deserializeSnapshotValue;
1034
+ }
1035
+
956
1036
  /**
957
1037
  * 块定义
958
1038
  */
@@ -1456,6 +1536,8 @@ declare class EngineKernelV2 {
1456
1536
  linkElement2d3d: LinkElement2d3d;
1457
1537
  linkView2d3d: LinkView2d3d;
1458
1538
  oneClickEncoding: OneClickEncoding;
1539
+ fabricDraw: FabricDraw;
1540
+ drawingPin: DrawingPin;
1459
1541
  models: any[];
1460
1542
  reactBoundingClientRect: {
1461
1543
  left: number;
@@ -1891,6 +1973,164 @@ declare enum EventType720 {
1891
1973
  ViewAngleChanged = "view-angle-changed"
1892
1974
  }
1893
1975
 
1976
+ /**
1977
+ * Fabric 鎵规敞绠$悊鍣細璐熻矗鎵规敞缁樺埗銆佹牱寮忋€佹祴璺濊仈鍔ㄣ€佹埅鍥惧悎鎴愩€? */
1978
+ declare class FabricDraw {
1979
+ private readonly engine;
1980
+ private readonly wrapper;
1981
+ private readonly canvasEl;
1982
+ private readonly canvas;
1983
+ private readonly toolbar;
1984
+ private isActive;
1985
+ private isVisible;
1986
+ private isDistanceMeasureMode;
1987
+ private isMeasurePanelExpanded;
1988
+ private drawType;
1989
+ private mode;
1990
+ private currentMeasureType;
1991
+ private sessionSnapshot;
1992
+ private actionHandlers;
1993
+ private drawStyle;
1994
+ private startPoint;
1995
+ private tempObject;
1996
+ private cloudPoints;
1997
+ private readonly onMouseDown;
1998
+ private readonly onMouseMove;
1999
+ private readonly onMouseUp;
2000
+ private readonly onMouseDblClick;
2001
+ private readonly onSelectionChanged;
2002
+ private readonly onKeyDown;
2003
+ constructor(engine: any);
2004
+ /**
2005
+ * 婵€娲荤粯鍒跺姛鑳姐€? */
2006
+ active(mode?: FabricDrawMode): void;
2007
+ /**
2008
+ * 鍏抽棴缁樺埗鍔熻兘銆? */
2009
+ disActive(): void;
2010
+ /**
2011
+ * close 涓?disActive 鐨勮涔夊埆鍚嶃€? */
2012
+ close(): void;
2013
+ /**
2014
+ * 闅愯棌缁樺埗灞傘€? */
2015
+ hide(): void;
2016
+ /**
2017
+ * 鏄剧ず缁樺埗灞傘€? */
2018
+ show(): void;
2019
+ isShown(): boolean;
2020
+ /**
2021
+ * 璁剧疆缁樺埗绫诲瀷鍜屾牱寮忋€? */
2022
+ setDrawType(type: FabricDrawType, style?: Partial<FabricDrawStyle>): void;
2023
+ getDrawType(): FabricDrawType;
2024
+ /**
2025
+ * 璁剧疆鈥滃彇娑?纭畾鈥濆洖璋冦€? */
2026
+ setActionHandlers(handlers: FabricDrawActionHandlers): void;
2027
+ /**
2028
+ * 鐩存帴缁樺埗绾挎銆? */
2029
+ drawLine(start: FabricDrawPoint, end: FabricDrawPoint, style?: Partial<FabricDrawStyle>): Line;
2030
+ /**
2031
+ * 鐩存帴缁樺埗绠ご銆? */
2032
+ drawArrow(start: FabricDrawPoint, end: FabricDrawPoint, style?: Partial<FabricDrawStyle>): Group;
2033
+ /**
2034
+ * 鐩存帴缁樺埗鐭╁舰銆? */
2035
+ drawRect(start: FabricDrawPoint, end: FabricDrawPoint, style?: Partial<FabricDrawStyle>): Rect;
2036
+ /**
2037
+ * 鐩存帴缁樺埗鍦嗗舰銆? */
2038
+ drawCircle(start: FabricDrawPoint, end: FabricDrawPoint, style?: Partial<FabricDrawStyle>): Circle;
2039
+ /**
2040
+ * 鐩存帴缁樺埗鏂囧瓧銆? */
2041
+ drawText(point: FabricDrawPoint, text?: string, style?: Partial<FabricDrawStyle>): IText;
2042
+ /**
2043
+ * 鐩存帴缁樺埗浜戠嚎銆? */
2044
+ drawCloudLine(points: FabricDrawPoint[], style?: Partial<FabricDrawStyle>): Path | null;
2045
+ /**
2046
+ * 鑾峰彇鎵€鏈夊浘褰€? */
2047
+ getAllShapes(): Record<string, any>;
2048
+ /**
2049
+ * 娓呯┖鎵€鏈夊浘褰€? */
2050
+ clearAllShapes(): void;
2051
+ /**
2052
+ * 杩樺師鎵€鏈夊浘褰€? */
2053
+ restoreAllShapes(data: string | Record<string, any>): Promise<void>;
2054
+ /**
2055
+ * 鎴浘淇濆瓨锛堟ā鍨?Fabric鎵规敞鍚堟垚锛夈€? */
2056
+ saveScreenshot(fileName?: string): string | null;
2057
+ /**
2058
+ * 鍚屾鐢诲竷灏哄銆? */
2059
+ resize(width?: number, height?: number): void;
2060
+ /**
2061
+ * 閿€姣併€? */
2062
+ dispose(): void;
2063
+ private handleMouseDown;
2064
+ private handleMouseMove;
2065
+ private handleMouseUp;
2066
+ private handleMouseDblClick;
2067
+ private handleKeyDown;
2068
+ private getPointFromEvent;
2069
+ private shouldAppendCloudPoint;
2070
+ private createDraftObject;
2071
+ private updateDraftObject;
2072
+ private mergeStyle;
2073
+ private createObjectBase;
2074
+ private createLineObject;
2075
+ private createRectObject;
2076
+ private createCircleObject;
2077
+ private createArrowObject;
2078
+ private createCloudObject;
2079
+ private getBoxFromPoints;
2080
+ private getCircleFromPoints;
2081
+ /**
2082
+ * 灏嗘姌绾跨鏁f垚鈥滈紦鍖呪€濊矾寰勶紝褰㈡垚浜戠嚎瑙嗚鏁堟灉銆? */
2083
+ private buildCloudPath;
2084
+ private handleColorInputChange;
2085
+ private handleStrokeWidthInputChange;
2086
+ private handleFontSizeInputChange;
2087
+ private applyCurrentStyleToSelection;
2088
+ private applyStyleToObject;
2089
+ private syncStyleFromSelection;
2090
+ private readStyleFromObject;
2091
+ private isTextObject;
2092
+ private isInputElement;
2093
+ private applyCanvasInteractive;
2094
+ private parseNumber;
2095
+ private colorToAlpha;
2096
+ private toggleMeasurePanel;
2097
+ private activateDistanceMeasure;
2098
+ private stopDistanceMeasureMode;
2099
+ private disActiveMeasureTools;
2100
+ private activeMeasureTool;
2101
+ private updateOverlayPointerEvents;
2102
+ private handleCancelClick;
2103
+ private handleCloseClick;
2104
+ private handleConfirmClick;
2105
+ private refreshToolbarStyleValues;
2106
+ private refreshToolbarState;
2107
+ private createScreenshotFileName;
2108
+ private cloneJson;
2109
+ }
2110
+
2111
+ declare interface FabricDrawActionHandlers {
2112
+ onConfirm?: (data: Record<string, any>) => void;
2113
+ onCancel?: () => void;
2114
+ }
2115
+
2116
+ declare type FabricDrawMode = 'view' | 'edit';
2117
+
2118
+ declare interface FabricDrawPoint {
2119
+ x: number;
2120
+ y: number;
2121
+ }
2122
+
2123
+ declare interface FabricDrawStyle {
2124
+ stroke: string;
2125
+ strokeWidth: number;
2126
+ fill: string;
2127
+ fontSize: number;
2128
+ text: string;
2129
+ cloudRadius: number;
2130
+ }
2131
+
2132
+ declare type FabricDrawType = 'none' | 'line' | 'arrow' | 'rect' | 'circle' | 'text' | 'cloudline';
2133
+
1894
2134
  declare class Grid {
1895
2135
  private readonly engine;
1896
2136
  private rootGroup;
@@ -2177,6 +2417,28 @@ declare interface ICameraPose {
2177
2417
  orthographicHeight?: number;
2178
2418
  }
2179
2419
 
2420
+ declare interface IClippingBoxState {
2421
+ minX: number;
2422
+ minY: number;
2423
+ minZ: number;
2424
+ maxX: number;
2425
+ maxY: number;
2426
+ maxZ: number;
2427
+ }
2428
+
2429
+ declare interface IClippingFaceState {
2430
+ normal: IPoint3;
2431
+ distance: number;
2432
+ direction: number;
2433
+ }
2434
+
2435
+ declare interface IClippingState {
2436
+ mode: string;
2437
+ fillCutFace: boolean;
2438
+ box?: IClippingBoxState;
2439
+ face?: IClippingFaceState;
2440
+ }
2441
+
2180
2442
  /**
2181
2443
  * 图标标注配置
2182
2444
  */
@@ -2192,6 +2454,13 @@ declare interface IconAnnotationConfig {
2192
2454
  metadata?: any;
2193
2455
  }
2194
2456
 
2457
+ declare interface IDrawingPinState {
2458
+ cameraPose: ICameraPose | null;
2459
+ clipping: IClippingState;
2460
+ measureData: Record<string, any> | null;
2461
+ annotationData: Record<string, any> | null;
2462
+ }
2463
+
2195
2464
  declare class InteractionModule {
2196
2465
  private engine;
2197
2466
  private behavior;
@@ -2291,6 +2560,12 @@ declare interface IPlayOptions {
2291
2560
  onPointComplete?: (pointIndex: number) => void;
2292
2561
  }
2293
2562
 
2563
+ declare interface IPoint3 {
2564
+ x: number;
2565
+ y: number;
2566
+ z: number;
2567
+ }
2568
+
2294
2569
  /**
2295
2570
  * 路径点位接口
2296
2571
  * 继承自相机姿态,增加停留时间属性
@@ -4030,7 +4305,13 @@ declare class ViewCube {
4030
4305
  declare class ViewTree {
4031
4306
  private engine;
4032
4307
  constructor(engine: any);
4033
- getViewTreeData(url: string): any;
4308
+ getAllViewTreeData(): any[];
4309
+ getViewTreeData(url: string): {
4310
+ ceilingPlans: never[];
4311
+ elevations: never[];
4312
+ floorPlans: never[];
4313
+ sections: never[];
4314
+ };
4034
4315
  openView(url: string, viewId: string): void;
4035
4316
  }
4036
4317
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iflow-engine-base",
3
- "version": "3.5.0",
3
+ "version": "3.5.1",
4
4
  "description": "BIM Engine SDK for Vue2, Vue3, React and HTML",
5
5
  "main": "./dist/bim-engine-sdk.umd.js",
6
6
  "module": "./dist/bim-engine-sdk.es.js",
@@ -43,6 +43,7 @@
43
43
  "dependencies": {
44
44
  "@types/three": "^0.181.0",
45
45
  "axios": "^1.13.2",
46
+ "fabric": "^7.3.1",
46
47
  "jszip": "^3.10.1",
47
48
  "opentype.js": "^1.3.4",
48
49
  "stats.js": "^0.17.0",