fl-web-component 2.0.18 → 2.0.19-beta.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.
- package/dist/fl-web-component.common.1.js.map +1 -1
- package/dist/fl-web-component.common.2.js.map +1 -1
- package/dist/fl-web-component.common.js +1527 -1270
- package/dist/fl-web-component.common.js.map +1 -1
- package/dist/fl-web-component.css +1 -1
- package/package.json +4 -3
- package/packages/components/com-graphics/index.vue +154 -6
- package/packages/components/com-graphics/mock.json +115 -0
- package/packages/utils/StreamLoader.js +250 -107
- package/packages/utils/StreamLoaderParser.worker.js +184 -76
- package/src/utils/flgltf-parser.js +21 -9
- package/src/utils/instance-parser.js +75 -75
- package/packages/components/com-graphics/box.json +0 -77
|
@@ -1 +1 @@
|
|
|
1
|
-
@charset "UTF-8";.fl-model-containor[data-v-7fad0c6c]{width:100%;height:100%;position:relative;cursor:pointer}[data-v-7fad0c6c] .tips-label{width:60px;color:#000;font:12px Helvetica;margin-top:-3em;padding:5px;text-align:center;vertical-align:middle;background-color:khaki}[data-v-7fad0c6c] .measure-label{max-width:100px;margin-top:-1em;border:10px;border-radius:5px;padding:3px 10px;cursor:pointer;color:#009bea;background-color:#f4f4f4;-webkit-box-shadow:0 1px 3px 1px rgba(0,0,0,.25);box-shadow:0 1px 3px 1px rgba(0,0,0,.25)}[data-v-7fad0c6c] .circle-tag{width:10px;height:10px;margin-top:5px;border-radius:50%;background-color:#ff5000}[data-v-7fad0c6c] .measure-label-font{word-break:break-all}[data-v-7fad0c6c] .mark-label-img{padding-top:5px;width:20px;height:20px}.loading-overlay[data-v-7fad0c6c]{position:absolute;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,.7);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;z-index:1000;opacity:0;visibility:hidden;-webkit-transition:opacity .3s ease,visibility .3s ease;transition:opacity .3s ease,visibility .3s ease}.loading-overlay--visible[data-v-7fad0c6c]{opacity:1;visibility:visible}.loading-content[data-v-7fad0c6c]{background:#fff;border-radius:12px;padding:30px;text-align:center;-webkit-box-shadow:0 8px 32px rgba(0,0,0,.3);box-shadow:0 8px 32px rgba(0,0,0,.3);min-width:300px;max-width:400px}.loading-spinner[data-v-7fad0c6c]{width:40px;height:40px;border:4px solid #f3f3f3;border-top:4px solid #409eff;border-radius:50%;-webkit-animation:spin-7fad0c6c 1s linear infinite;animation:spin-7fad0c6c 1s linear infinite;margin:0 auto 20px}@-webkit-keyframes spin-7fad0c6c{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes spin-7fad0c6c{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.loading-text[data-v-7fad0c6c]{font-size:16px;font-weight:500;color:#333;margin-bottom:20px}.loading-this.progress-bar[data-v-7fad0c6c]{width:100%;height:8px;background-color:#f0f0f0;border-radius:4px;overflow:hidden;margin-bottom:15px}.loading-this.progress-fill[data-v-7fad0c6c]{height:100%;background:-webkit-gradient(linear,left top,right top,from(#409eff),to(#67c23a));background:linear-gradient(90deg,#409eff,#67c23a);border-radius:4px;-webkit-transition:width .3s ease;transition:width .3s ease}.loading-details[data-v-7fad0c6c]{font-size:12px;color:#666;line-height:1.5}.lil-this.gui{background:hsla(0,0%,100%,.95)!important;border:1px solid #e0e0e0!important;border-radius:8px!important;-webkit-box-shadow:0 4px 12px rgba(0,0,0,.15)!important;box-shadow:0 4px 12px rgba(0,0,0,.15)!important;backdrop-filter:blur(10px)!important;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif!important}.lil-this.gui .title{background:linear-gradient(135deg,#f8f9fa,#e9ecef)!important;color:#495057!important;border-bottom:1px solid #dee2e6!important;font-weight:600!important;padding:0 12px!important;border-radius:8px 8px 0 0!important}.lil-this.gui .controller{border-bottom:1px solid #f1f3f4!important;background:transparent!important}.lil-this.gui .controller:last-child{border-bottom:none!important}.lil-this.gui .controller .name{color:#495057!important;font-weight:500!important;font-size:12px!important}.lil-this.gui .controller .widget{background:#f8f9fa!important;border:1px solid #ced4da!important;border-radius:4px!important;color:#495057!important}.lil-this.gui .controller .widget:focus,.lil-this.gui .controller .widget:hover{border-color:#80bdff!important;-webkit-box-shadow:0 0 0 2px rgba(0,123,255,.25)!important;box-shadow:0 0 0 2px rgba(0,123,255,.25)!important}.lil-this.gui .controller .widget:focus{outline:none!important}.lil-this.gui .controller input[type=range]{background:#e9ecef!important;height:4px!important;-webkit-appearance:none!important;-moz-appearance:none!important;appearance:none!important;border-radius:2px!important}.lil-this.gui .controller.number .fill{border-right:solid #008de9}.lil-this.gui .controller input[type=range]::-webkit-slider-thumb{background:#007bff!important;border:2px solid #fff!important;-webkit-box-shadow:0 2px 4px rgba(0,0,0,.2)!important;box-shadow:0 2px 4px rgba(0,0,0,.2)!important;width:16px!important;height:16px!important;border-radius:50%!important;-webkit-appearance:none!important;appearance:none!important;cursor:pointer!important}.lil-this.gui .controller input[type=range]::-moz-range-thumb{background:#007bff!important;border:2px solid #fff!important;box-shadow:0 2px 4px rgba(0,0,0,.2)!important;width:16px!important;height:16px!important;border-radius:50%!important;cursor:pointer!important}.lil-this.gui .controller .option{background:#fff!important;color:#495057!important;border-bottom:1px solid #f1f3f4!important}.lil-this.gui .controller .option:hover{background:#f8f9fa!important}.lil-this.gui .controller .option:last-child{border-bottom:none!important}.lil-this.gui input:active{background:#e6eff4}.lil-this.gui .controller button{background:linear-gradient(135deg,#007bff,#0056b3)!important;color:#fff!important;border:none!important;border-radius:4px!important;font-weight:500!important;-webkit-transition:all .2s ease!important;transition:all .2s ease!important}.lil-this.gui .controller button:hover{background:linear-gradient(135deg,#0056b3,#004085)!important;-webkit-transform:translateY(-1px)!important;transform:translateY(-1px)!important;-webkit-box-shadow:0 4px 8px rgba(0,123,255,.3)!important;box-shadow:0 4px 8px rgba(0,123,255,.3)!important}.lil-this.gui .controller .color{border:2px solid #fff!important;border-radius:4px!important;-webkit-box-shadow:0 2px 4px rgba(0,0,0,.1)!important;box-shadow:0 2px 4px rgba(0,0,0,.1)!important}.lil-this.gui .controller.number .slider,.lil-this.gui .controller.number .slider:hover{background-color:#e6eff4}.lil-this.gui input,.lil-this.gui input:hover,.lil-this.gui input[type=number]:focus,.lil-this.gui input[type=text]:focus{background:#e6eff4}.lil-this.gui .controller>.name{min-width:25px}.lil-this.gui .controller.number input{color:#2e3136}.lil-this.gui .controller.number .slider:active{background-color:#e6eff4}.lil-this.gui .folder>.title{background:linear-gradient(135deg,#f1f3f4,#e9ecef)!important;color:#495057!important;border-bottom:1px solid #dee2e6!important}.lil-this.gui .folder>.title:before{color:#6c757d!important}.lil-this.gui .folder.closed>.children{display:none!important}#konva-container[data-v-b313ab6c]{z-index:3;width:100%;height:100%;cursor:pointer;overflow:hidden}span[data-v-f547d5c6]{font-weight:bolder}.text[data-v-f547d5c6]{margin-top:20px}.line[data-v-f547d5c6]{border-bottom:1px solid #dcdfe6;margin:20px 0}.center[data-v-f547d5c6]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.center .cen span[data-v-f547d5c6],.center .top span[data-v-f547d5c6]{color:"#53a8ff";display:inline-block;width:30px;height:30px;text-align:center;line-height:30px;border:1px solid;padding:5px;margin-bottom:10px;background-color:#e9f3ff}.center .cen span[data-v-f547d5c6]{margin:10px}.button[data-v-f547d5c6]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:end;margin-top:20px}@font-face{font-family:iconfont;src:url(//at.alicdn.com/t/font_3226805_qqvo3ag3r8.woff2?t=1646635700216) format("woff2"),url(//at.alicdn.com/t/font_3226805_qqvo3ag3r8.woff?t=1646635700216) format("woff"),url(//at.alicdn.com/t/font_3226805_qqvo3ag3r8.ttf?t=1646635700216) format("truetype")}.iconfont[data-v-f547d5c6]{font-family:iconfont!important;font-size:50px;font-style:normal;color:"#53a8ff";-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-shubiao[data-v-f547d5c6]:before{content:""}.main_body[data-v-4b17bce0]{position:relative;width:100%;height:100%;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden}.classification_title[data-v-4b17bce0]{margin:0 0 10px 0;color:#fff;font-size:14px;cursor:default}.toolbar[data-v-4b17bce0]{z-index:10;position:absolute;width:520px;padding:8px 16px;border-radius:6px;-webkit-box-shadow:0 2px 10px 0 rgba(6,29,44,.25);box-shadow:0 2px 10px 0 rgba(6,29,44,.25);background-color:#fff;top:10px;left:50%;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-transform:translateX(-50%);transform:translateX(-50%);display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-pack:distribute;justify-content:space-around}.icon_toolbar[data-v-4b17bce0],.text_toolbar[data-v-4b17bce0]{float:left;width:32px;height:32px;padding:0!important;background-repeat:no-repeat;background-size:24px;background-position:50%}.icon_active[data-v-4b17bce0],.icon_toolbar[data-v-4b17bce0]:hover,.text_toolbar[data-v-4b17bce0]:hover{background-color:#eee}[data-v-4b17bce0].icon_color .el-color-picker__trigger{height:24px;margin-top:4px;width:24px!important}[data-v-4b17bce0].el-color-picker--medium,[data-v-4b17bce0].el-color-picker--medium .el-color-picker__trigger{width:24px!important;height:24px!important}.canvas_container[data-v-4b17bce0]{position:relative;width:100%;height:100%;overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box}.canvas_container canvas[data-v-4b17bce0]{position:absolute;left:0}.canvas_container #ctx_front[data-v-4b17bce0]{z-index:5;background-color:transparent}.canvas_container #ctx_back[data-v-4b17bce0]{z-index:3}.canvas_container #ctx_base[data-v-4b17bce0]{z-index:1}#text[data-v-4b17bce0]{position:absolute;z-index:-1;resize:none;outline:none;border:1px dashed #9c9c9c;overflow:hidden;background:transparent;line-height:30px;display:none}#text[data-v-4b17bce0]:hover{border:1px dashed #53a8ff}#svg-component[data-v-2572c0e2],#svg-tigger[data-v-2572c0e2]{cursor:pointer;height:100%;width:100%;position:relative}#toolbar-show[data-v-2572c0e2]{z-index:20;position:absolute;width:100%;height:100%;top:0;left:0;overflow:hidden;background:#fff}
|
|
1
|
+
@charset "UTF-8";.fl-model-containor[data-v-46d6866f]{width:100%;height:100%;position:relative;cursor:pointer}[data-v-46d6866f] .tips-label{width:60px;color:#000;font:12px Helvetica;margin-top:-3em;padding:5px;text-align:center;vertical-align:middle;background-color:khaki}[data-v-46d6866f] .measure-label{max-width:100px;margin-top:-1em;border:10px;border-radius:5px;padding:3px 10px;cursor:pointer;color:#009bea;background-color:#f4f4f4;-webkit-box-shadow:0 1px 3px 1px rgba(0,0,0,.25);box-shadow:0 1px 3px 1px rgba(0,0,0,.25)}[data-v-46d6866f] .circle-tag{width:10px;height:10px;margin-top:5px;border-radius:50%;background-color:#ff5000}[data-v-46d6866f] .measure-label-font{word-break:break-all}[data-v-46d6866f] .mark-label-img{padding-top:5px;width:20px;height:20px}.loading-overlay[data-v-46d6866f]{position:absolute;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,.7);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;z-index:1000;opacity:0;visibility:hidden;-webkit-transition:opacity .3s ease,visibility .3s ease;transition:opacity .3s ease,visibility .3s ease}.loading-overlay--visible[data-v-46d6866f]{opacity:1;visibility:visible}.loading-content[data-v-46d6866f]{background:#fff;border-radius:12px;padding:30px;text-align:center;-webkit-box-shadow:0 8px 32px rgba(0,0,0,.3);box-shadow:0 8px 32px rgba(0,0,0,.3);min-width:300px;max-width:400px}.loading-spinner[data-v-46d6866f]{width:40px;height:40px;border:4px solid #f3f3f3;border-top:4px solid #409eff;border-radius:50%;-webkit-animation:spin-46d6866f 1s linear infinite;animation:spin-46d6866f 1s linear infinite;margin:0 auto 20px}@-webkit-keyframes spin-46d6866f{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes spin-46d6866f{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.loading-text[data-v-46d6866f]{font-size:16px;font-weight:500;color:#333;margin-bottom:20px}.loading-this.progress-bar[data-v-46d6866f]{width:100%;height:8px;background-color:#f0f0f0;border-radius:4px;overflow:hidden;margin-bottom:15px}.loading-this.progress-fill[data-v-46d6866f]{height:100%;background:-webkit-gradient(linear,left top,right top,from(#409eff),to(#67c23a));background:linear-gradient(90deg,#409eff,#67c23a);border-radius:4px;-webkit-transition:width .3s ease;transition:width .3s ease}.loading-details[data-v-46d6866f]{font-size:12px;color:#666;line-height:1.5}.lil-this.gui{background:hsla(0,0%,100%,.95)!important;border:1px solid #e0e0e0!important;border-radius:8px!important;-webkit-box-shadow:0 4px 12px rgba(0,0,0,.15)!important;box-shadow:0 4px 12px rgba(0,0,0,.15)!important;backdrop-filter:blur(10px)!important;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif!important}.lil-this.gui .title{background:linear-gradient(135deg,#f8f9fa,#e9ecef)!important;color:#495057!important;border-bottom:1px solid #dee2e6!important;font-weight:600!important;padding:0 12px!important;border-radius:8px 8px 0 0!important}.lil-this.gui .controller{border-bottom:1px solid #f1f3f4!important;background:transparent!important}.lil-this.gui .controller:last-child{border-bottom:none!important}.lil-this.gui .controller .name{color:#495057!important;font-weight:500!important;font-size:12px!important}.lil-this.gui .controller .widget{background:#f8f9fa!important;border:1px solid #ced4da!important;border-radius:4px!important;color:#495057!important}.lil-this.gui .controller .widget:focus,.lil-this.gui .controller .widget:hover{border-color:#80bdff!important;-webkit-box-shadow:0 0 0 2px rgba(0,123,255,.25)!important;box-shadow:0 0 0 2px rgba(0,123,255,.25)!important}.lil-this.gui .controller .widget:focus{outline:none!important}.lil-this.gui .controller input[type=range]{background:#e9ecef!important;height:4px!important;-webkit-appearance:none!important;-moz-appearance:none!important;appearance:none!important;border-radius:2px!important}.lil-this.gui .controller.number .fill{border-right:solid #008de9}.lil-this.gui .controller input[type=range]::-webkit-slider-thumb{background:#007bff!important;border:2px solid #fff!important;-webkit-box-shadow:0 2px 4px rgba(0,0,0,.2)!important;box-shadow:0 2px 4px rgba(0,0,0,.2)!important;width:16px!important;height:16px!important;border-radius:50%!important;-webkit-appearance:none!important;appearance:none!important;cursor:pointer!important}.lil-this.gui .controller input[type=range]::-moz-range-thumb{background:#007bff!important;border:2px solid #fff!important;box-shadow:0 2px 4px rgba(0,0,0,.2)!important;width:16px!important;height:16px!important;border-radius:50%!important;cursor:pointer!important}.lil-this.gui .controller .option{background:#fff!important;color:#495057!important;border-bottom:1px solid #f1f3f4!important}.lil-this.gui .controller .option:hover{background:#f8f9fa!important}.lil-this.gui .controller .option:last-child{border-bottom:none!important}.lil-this.gui input:active{background:#e6eff4}.lil-this.gui .controller button{background:linear-gradient(135deg,#007bff,#0056b3)!important;color:#fff!important;border:none!important;border-radius:4px!important;font-weight:500!important;-webkit-transition:all .2s ease!important;transition:all .2s ease!important}.lil-this.gui .controller button:hover{background:linear-gradient(135deg,#0056b3,#004085)!important;-webkit-transform:translateY(-1px)!important;transform:translateY(-1px)!important;-webkit-box-shadow:0 4px 8px rgba(0,123,255,.3)!important;box-shadow:0 4px 8px rgba(0,123,255,.3)!important}.lil-this.gui .controller .color{border:2px solid #fff!important;border-radius:4px!important;-webkit-box-shadow:0 2px 4px rgba(0,0,0,.1)!important;box-shadow:0 2px 4px rgba(0,0,0,.1)!important}.lil-this.gui .controller.number .slider,.lil-this.gui .controller.number .slider:hover{background-color:#e6eff4}.lil-this.gui input,.lil-this.gui input:hover,.lil-this.gui input[type=number]:focus,.lil-this.gui input[type=text]:focus{background:#e6eff4}.lil-this.gui .controller>.name{min-width:25px}.lil-this.gui .controller.number input{color:#2e3136}.lil-this.gui .controller.number .slider:active{background-color:#e6eff4}.lil-this.gui .folder>.title{background:linear-gradient(135deg,#f1f3f4,#e9ecef)!important;color:#495057!important;border-bottom:1px solid #dee2e6!important}.lil-this.gui .folder>.title:before{color:#6c757d!important}.lil-this.gui .folder.closed>.children{display:none!important}#konva-container[data-v-b313ab6c]{z-index:3;width:100%;height:100%;cursor:pointer;overflow:hidden}span[data-v-f547d5c6]{font-weight:bolder}.text[data-v-f547d5c6]{margin-top:20px}.line[data-v-f547d5c6]{border-bottom:1px solid #dcdfe6;margin:20px 0}.center[data-v-f547d5c6]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.center .cen span[data-v-f547d5c6],.center .top span[data-v-f547d5c6]{color:"#53a8ff";display:inline-block;width:30px;height:30px;text-align:center;line-height:30px;border:1px solid;padding:5px;margin-bottom:10px;background-color:#e9f3ff}.center .cen span[data-v-f547d5c6]{margin:10px}.button[data-v-f547d5c6]{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:end;margin-top:20px}@font-face{font-family:iconfont;src:url(//at.alicdn.com/t/font_3226805_qqvo3ag3r8.woff2?t=1646635700216) format("woff2"),url(//at.alicdn.com/t/font_3226805_qqvo3ag3r8.woff?t=1646635700216) format("woff"),url(//at.alicdn.com/t/font_3226805_qqvo3ag3r8.ttf?t=1646635700216) format("truetype")}.iconfont[data-v-f547d5c6]{font-family:iconfont!important;font-size:50px;font-style:normal;color:"#53a8ff";-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-shubiao[data-v-f547d5c6]:before{content:""}.main_body[data-v-4b17bce0]{position:relative;width:100%;height:100%;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden}.classification_title[data-v-4b17bce0]{margin:0 0 10px 0;color:#fff;font-size:14px;cursor:default}.toolbar[data-v-4b17bce0]{z-index:10;position:absolute;width:520px;padding:8px 16px;border-radius:6px;-webkit-box-shadow:0 2px 10px 0 rgba(6,29,44,.25);box-shadow:0 2px 10px 0 rgba(6,29,44,.25);background-color:#fff;top:10px;left:50%;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-transform:translateX(-50%);transform:translateX(-50%);display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-pack:distribute;justify-content:space-around}.icon_toolbar[data-v-4b17bce0],.text_toolbar[data-v-4b17bce0]{float:left;width:32px;height:32px;padding:0!important;background-repeat:no-repeat;background-size:24px;background-position:50%}.icon_active[data-v-4b17bce0],.icon_toolbar[data-v-4b17bce0]:hover,.text_toolbar[data-v-4b17bce0]:hover{background-color:#eee}[data-v-4b17bce0].icon_color .el-color-picker__trigger{height:24px;margin-top:4px;width:24px!important}[data-v-4b17bce0].el-color-picker--medium,[data-v-4b17bce0].el-color-picker--medium .el-color-picker__trigger{width:24px!important;height:24px!important}.canvas_container[data-v-4b17bce0]{position:relative;width:100%;height:100%;overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box}.canvas_container canvas[data-v-4b17bce0]{position:absolute;left:0}.canvas_container #ctx_front[data-v-4b17bce0]{z-index:5;background-color:transparent}.canvas_container #ctx_back[data-v-4b17bce0]{z-index:3}.canvas_container #ctx_base[data-v-4b17bce0]{z-index:1}#text[data-v-4b17bce0]{position:absolute;z-index:-1;resize:none;outline:none;border:1px dashed #9c9c9c;overflow:hidden;background:transparent;line-height:30px;display:none}#text[data-v-4b17bce0]:hover{border:1px dashed #53a8ff}#svg-component[data-v-2572c0e2],#svg-tigger[data-v-2572c0e2]{cursor:pointer;height:100%;width:100%;position:relative}#toolbar-show[data-v-2572c0e2]{z-index:20;position:absolute;width:100%;height:100%;top:0;left:0;overflow:hidden;background:#fff}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fl-web-component",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.19-beta.1",
|
|
4
4
|
"scripts": {
|
|
5
5
|
"postinstall": "patch-package",
|
|
6
6
|
"tip1": "仅调试本组件不涉及业务组件,请执行dev",
|
|
@@ -8,8 +8,9 @@
|
|
|
8
8
|
"lint": "eslint \"{src,packages}/**/*.{vue,js}\" --fix",
|
|
9
9
|
"prettier": "prettier --write \"packages/**/*.{js,css,less,scss,vue,html}\"",
|
|
10
10
|
"=": "=============================================================",
|
|
11
|
-
"tip2": "同时调试本组件与业务组件,请执行watch",
|
|
12
|
-
"watch": "vue-cli-service build --watch --mode
|
|
11
|
+
"tip2": "同时调试本组件与业务组件,请执行watch,生产模式监听请执行watch:prod",
|
|
12
|
+
"watch": "vue-cli-service build --watch --mode development --target lib --name fl-web-component --formats commonjs ./src/main.js",
|
|
13
|
+
"watch:prod": "vue-cli-service build --watch --mode production --target lib --name fl-web-component --formats commonjs ./src/main.js",
|
|
13
14
|
"build": "npm run lint && vue-cli-service build --target lib --name fl-web-component --formats commonjs ./src/main.js",
|
|
14
15
|
"build:test": "vue-cli-service build --target lib --name fl-web-component --formats commonjs ./src/main.js",
|
|
15
16
|
"publish:base": "npm run build && npm publish --registry https://registry.npmjs.org/",
|
|
@@ -138,6 +138,7 @@ import MeasureHeight from '@/utils/threejs/measure-height.js';
|
|
|
138
138
|
import MeasureClearDistance from '@/utils/threejs/measure-clear-distance.js';
|
|
139
139
|
import { parseData, processMeshData, processNodeData } from '@/utils/flgltf-parser';
|
|
140
140
|
import {
|
|
141
|
+
GEOM_TYPES,
|
|
141
142
|
handleInstancedMeshModel,
|
|
142
143
|
resetProcessingState,
|
|
143
144
|
PRIMITIVE_TYPE,
|
|
@@ -154,7 +155,7 @@ import { OutlinePass } from 'three/examples/jsm/postprocessing/OutlinePass.js';
|
|
|
154
155
|
import { OutputPass } from 'three/examples/jsm/postprocessing/OutputPass.js';
|
|
155
156
|
import Stats from 'three/examples/jsm/libs/stats.module.js';
|
|
156
157
|
import { OBB } from 'three/examples/jsm/math/OBB.js';
|
|
157
|
-
import boxJson from './box.json';
|
|
158
|
+
// import boxJson from './box.json';
|
|
158
159
|
import { StreamLoader } from '../../utils/StreamLoader.js';
|
|
159
160
|
import StreamLoaderParserWorker from '../../utils/StreamLoaderParser.worker.js';
|
|
160
161
|
import SceneCommandService from '@/utils/threejs/editor/scene-command-service.js';
|
|
@@ -164,6 +165,7 @@ import { onContextHandle } from './component/context';
|
|
|
164
165
|
|
|
165
166
|
const isDebug = process.env.NODE_ENV !== 'production' || process.env.VUE_APP_IS_WATCH === true;
|
|
166
167
|
// const isDebug = false;
|
|
168
|
+
const COLLISION_PENETRATION_EPSILON = 0.1;
|
|
167
169
|
|
|
168
170
|
export default {
|
|
169
171
|
name: 'FlModel',
|
|
@@ -1535,8 +1537,12 @@ export default {
|
|
|
1535
1537
|
if (isAdd && boxJson) {
|
|
1536
1538
|
const arr = boxJson ? boxJson : [];
|
|
1537
1539
|
const modelIds = new Set();
|
|
1540
|
+
const validGeomTypes = new Set(Object.values(GEOM_TYPES));
|
|
1538
1541
|
for (let i = 0; i < arr.length; i++) {
|
|
1539
1542
|
const it = arr[i];
|
|
1543
|
+
if (!validGeomTypes.has(it.geomType)) {
|
|
1544
|
+
continue;
|
|
1545
|
+
}
|
|
1540
1546
|
if (it.obb.length == 0) {
|
|
1541
1547
|
continue;
|
|
1542
1548
|
}
|
|
@@ -1548,10 +1554,22 @@ export default {
|
|
|
1548
1554
|
// 构造 AABB
|
|
1549
1555
|
const boxThree = new this.THREE.Box3(min, max);
|
|
1550
1556
|
|
|
1551
|
-
const hasMatrix = Array.isArray(it.matrix);
|
|
1552
|
-
|
|
1553
|
-
|
|
1554
|
-
|
|
1557
|
+
const hasMatrix = Array.isArray(it.matrix) && it.matrix.length >= 16;
|
|
1558
|
+
const hasMeshMatrix = Array.isArray(it.meshMatrix) && it.meshMatrix.length >= 16;
|
|
1559
|
+
let localMatrix = null;
|
|
1560
|
+
if (hasMatrix || hasMeshMatrix) {
|
|
1561
|
+
localMatrix = new this.THREE.Matrix4();
|
|
1562
|
+
if (hasMeshMatrix) {
|
|
1563
|
+
localMatrix.fromArray(it.meshMatrix);
|
|
1564
|
+
} else {
|
|
1565
|
+
localMatrix.identity();
|
|
1566
|
+
}
|
|
1567
|
+
if (hasMatrix) {
|
|
1568
|
+
const matrix = new this.THREE.Matrix4().fromArray(it.matrix);
|
|
1569
|
+
localMatrix.multiply(matrix);
|
|
1570
|
+
}
|
|
1571
|
+
|
|
1572
|
+
const worldMatrix = localMatrix.clone();
|
|
1555
1573
|
if (this.bizToThreeMatrix) {
|
|
1556
1574
|
worldMatrix.premultiply(this.bizToThreeMatrix);
|
|
1557
1575
|
}
|
|
@@ -1563,14 +1581,18 @@ export default {
|
|
|
1563
1581
|
|
|
1564
1582
|
const userData = {
|
|
1565
1583
|
flag: it.flag || 1, // 默认为 1
|
|
1584
|
+
geomType: it.geomType,
|
|
1566
1585
|
obbData: it.obb, // 存储原始 OBB 数据
|
|
1567
1586
|
transparent: it.transp > 0,
|
|
1568
1587
|
sourceVisible: it.visible === false ? false : true,
|
|
1569
1588
|
visible: it.visible === false ? false : true, // 默认显示
|
|
1589
|
+
occlusionEnabled:
|
|
1590
|
+
it.geomType === GEOM_TYPES.geom_3d || it.geomType === GEOM_TYPES.geom_3d_obj,
|
|
1570
1591
|
};
|
|
1571
1592
|
if (it.flag === 1) {
|
|
1572
1593
|
userData.indices = it.indices;
|
|
1573
|
-
userData.matrix = it.matrix;
|
|
1594
|
+
userData.matrix = localMatrix ? localMatrix.toArray() : it.matrix;
|
|
1595
|
+
userData.meshMatrix = it.meshMatrix;
|
|
1574
1596
|
// userData.matrix = new this.THREE.Matrix4().identity();
|
|
1575
1597
|
}
|
|
1576
1598
|
// 如果是 flag=3,解析并存储中心点、半轴长、旋转矩阵
|
|
@@ -1588,6 +1610,9 @@ export default {
|
|
|
1588
1610
|
center.z
|
|
1589
1611
|
);
|
|
1590
1612
|
obbMatrix.multiply(rotationMatrix4);
|
|
1613
|
+
if (localMatrix) {
|
|
1614
|
+
obbMatrix.premultiply(localMatrix);
|
|
1615
|
+
}
|
|
1591
1616
|
|
|
1592
1617
|
userData.obb = {
|
|
1593
1618
|
matrix: obbMatrix,
|
|
@@ -1632,6 +1657,9 @@ export default {
|
|
|
1632
1657
|
this.buildOctreeFromBoxIndex();
|
|
1633
1658
|
console.log('time end', Date.now());
|
|
1634
1659
|
},
|
|
1660
|
+
shouldApplyOcclusionByBox(box) {
|
|
1661
|
+
return !!(box && box.userData && box.userData.occlusionEnabled);
|
|
1662
|
+
},
|
|
1635
1663
|
tryInitialCenterAfterBoundsReady() {
|
|
1636
1664
|
if (this.hasExecutedCentering || this.userInteracting) return;
|
|
1637
1665
|
if (
|
|
@@ -1742,6 +1770,84 @@ export default {
|
|
|
1742
1770
|
}
|
|
1743
1771
|
node.items.push({ id, box });
|
|
1744
1772
|
},
|
|
1773
|
+
_isCollisionBoxAvailable(box) {
|
|
1774
|
+
if (!box || !box.isBox3 || box.isEmpty()) return false;
|
|
1775
|
+
if (box.userData && box.userData.visible === false) return false;
|
|
1776
|
+
return true;
|
|
1777
|
+
},
|
|
1778
|
+
_formatCollisionPairId(id) {
|
|
1779
|
+
const value = String(id);
|
|
1780
|
+
const numberValue = Number(value);
|
|
1781
|
+
return Number.isFinite(numberValue) ? numberValue : id;
|
|
1782
|
+
},
|
|
1783
|
+
_getBoxMinPenetration(boxA, boxB) {
|
|
1784
|
+
const x = Math.min(boxA.max.x - boxB.min.x, boxB.max.x - boxA.min.x);
|
|
1785
|
+
const y = Math.min(boxA.max.y - boxB.min.y, boxB.max.y - boxA.min.y);
|
|
1786
|
+
const z = Math.min(boxA.max.z - boxB.min.z, boxB.max.z - boxA.min.z);
|
|
1787
|
+
return Math.min(x, y, z);
|
|
1788
|
+
},
|
|
1789
|
+
_isCollisionBoxMatched(boxA, boxB) {
|
|
1790
|
+
if (!this._isCollisionBoxAvailable(boxA) || !this._isCollisionBoxAvailable(boxB))
|
|
1791
|
+
return false;
|
|
1792
|
+
if (!boxA.intersectsBox(boxB)) return false;
|
|
1793
|
+
return this._getBoxMinPenetration(boxA, boxB) > COLLISION_PENETRATION_EPSILON;
|
|
1794
|
+
},
|
|
1795
|
+
_queryOctreeByBox(box) {
|
|
1796
|
+
const results = [];
|
|
1797
|
+
const root = this._octree;
|
|
1798
|
+
if (!root || !this._isCollisionBoxAvailable(box)) return results;
|
|
1799
|
+
|
|
1800
|
+
const stack = [root];
|
|
1801
|
+
while (stack.length) {
|
|
1802
|
+
const node = stack.pop();
|
|
1803
|
+
if (!node || !node.box || !this._isCollisionBoxMatched(node.box, box)) continue;
|
|
1804
|
+
|
|
1805
|
+
if (node.children) {
|
|
1806
|
+
for (let i = 0; i < 8; i++) {
|
|
1807
|
+
stack.push(node.children[i]);
|
|
1808
|
+
}
|
|
1809
|
+
}
|
|
1810
|
+
|
|
1811
|
+
if (node.items && node.items.length) {
|
|
1812
|
+
for (let i = 0; i < node.items.length; i++) {
|
|
1813
|
+
const item = node.items[i];
|
|
1814
|
+
if (item && this._isCollisionBoxMatched(item.box, box)) {
|
|
1815
|
+
results.push(item);
|
|
1816
|
+
}
|
|
1817
|
+
}
|
|
1818
|
+
}
|
|
1819
|
+
}
|
|
1820
|
+
|
|
1821
|
+
return results;
|
|
1822
|
+
},
|
|
1823
|
+
getOctreeCollisionPairs() {
|
|
1824
|
+
const pairs = [];
|
|
1825
|
+
if (!this._boxIndex || this._boxIndex.size === 0) return { pairs };
|
|
1826
|
+
|
|
1827
|
+
if (!this._octree) {
|
|
1828
|
+
this.buildOctreeFromBoxIndex();
|
|
1829
|
+
}
|
|
1830
|
+
if (!this._octree) return { pairs };
|
|
1831
|
+
|
|
1832
|
+
this._boxIndex.forEach((boxA, idA) => {
|
|
1833
|
+
if (!this._isCollisionBoxAvailable(boxA)) return;
|
|
1834
|
+
|
|
1835
|
+
const hits = this._queryOctreeByBox(boxA);
|
|
1836
|
+
for (let i = 0; i < hits.length; i++) {
|
|
1837
|
+
const item = hits[i];
|
|
1838
|
+
if (!item || String(item.id) === String(idA)) continue;
|
|
1839
|
+
const boxB = item.box;
|
|
1840
|
+
if (!this._isCollisionBoxMatched(boxA, boxB)) continue;
|
|
1841
|
+
|
|
1842
|
+
pairs.push({
|
|
1843
|
+
idA: this._formatCollisionPairId(idA),
|
|
1844
|
+
idB: this._formatCollisionPairId(item.id),
|
|
1845
|
+
});
|
|
1846
|
+
}
|
|
1847
|
+
});
|
|
1848
|
+
|
|
1849
|
+
return { pairs };
|
|
1850
|
+
},
|
|
1745
1851
|
_getCurrentFrustum() {
|
|
1746
1852
|
// 确保相机矩阵是最新的
|
|
1747
1853
|
if (this.camera) {
|
|
@@ -2224,6 +2330,10 @@ export default {
|
|
|
2224
2330
|
for (let i = 0; i < hits.length; i++) {
|
|
2225
2331
|
if (hits[i].box && hits[i].box.userData && hits[i].box.userData.visible === false)
|
|
2226
2332
|
continue;
|
|
2333
|
+
if (!this.shouldApplyOcclusionByBox(hits[i].box)) {
|
|
2334
|
+
visibleIdSet.add(this.formatModelId(hits[i].modelId));
|
|
2335
|
+
continue;
|
|
2336
|
+
}
|
|
2227
2337
|
candidates.push(hits[i]);
|
|
2228
2338
|
}
|
|
2229
2339
|
} else if (this._boxIndex && this._boxIndex.size > 0) {
|
|
@@ -2231,6 +2341,10 @@ export default {
|
|
|
2231
2341
|
if (bypassList && bypassList.size > 0 && bypassList.has(modelId)) return;
|
|
2232
2342
|
if (box.userData && box.userData.visible === false) return;
|
|
2233
2343
|
if (this.isBoxInFrustum(box)) {
|
|
2344
|
+
if (!this.shouldApplyOcclusionByBox(box)) {
|
|
2345
|
+
visibleIdSet.add(this.formatModelId(modelId));
|
|
2346
|
+
return;
|
|
2347
|
+
}
|
|
2234
2348
|
candidates.push({ modelId, box });
|
|
2235
2349
|
}
|
|
2236
2350
|
});
|
|
@@ -2906,6 +3020,16 @@ export default {
|
|
|
2906
3020
|
instanceInfo && typeof instanceInfo.instanceIndex === 'number'
|
|
2907
3021
|
? instanceInfo.instanceIndex
|
|
2908
3022
|
: null;
|
|
3023
|
+
const box =
|
|
3024
|
+
this._boxIndex && this._boxIndex.has(String(modelId))
|
|
3025
|
+
? this._boxIndex.get(String(modelId))
|
|
3026
|
+
: this._boxIndex && this._boxIndex.has(modelId)
|
|
3027
|
+
? this._boxIndex.get(modelId)
|
|
3028
|
+
: null;
|
|
3029
|
+
if (!this.shouldApplyOcclusionByBox(box)) {
|
|
3030
|
+
allInactive = false;
|
|
3031
|
+
continue;
|
|
3032
|
+
}
|
|
2909
3033
|
|
|
2910
3034
|
const inFrustum = this.isModelInFrustum(child, instanceIndex, globalFrustum);
|
|
2911
3035
|
const modelInVisible = toLoadSet.has(modelId);
|
|
@@ -2919,6 +3043,18 @@ export default {
|
|
|
2919
3043
|
|
|
2920
3044
|
// 第二遍遍历:同步状态并决定是否卸载
|
|
2921
3045
|
for (const modelId of modelIds) {
|
|
3046
|
+
const box =
|
|
3047
|
+
this._boxIndex && this._boxIndex.has(String(modelId))
|
|
3048
|
+
? this._boxIndex.get(String(modelId))
|
|
3049
|
+
: this._boxIndex && this._boxIndex.has(modelId)
|
|
3050
|
+
? this._boxIndex.get(modelId)
|
|
3051
|
+
: null;
|
|
3052
|
+
if (!this.shouldApplyOcclusionByBox(box)) {
|
|
3053
|
+
if (toLoadSet.has(modelId)) {
|
|
3054
|
+
toLoadSet.delete(modelId);
|
|
3055
|
+
}
|
|
3056
|
+
continue;
|
|
3057
|
+
}
|
|
2922
3058
|
// 无论是否卸载,只要模型已在场景中,就从待加载集合中移除
|
|
2923
3059
|
if (toLoadSet.has(modelId)) {
|
|
2924
3060
|
toLoadSet.delete(modelId);
|
|
@@ -2940,6 +3076,18 @@ export default {
|
|
|
2940
3076
|
? child.parent.userData.instanceId
|
|
2941
3077
|
: child.uuid;
|
|
2942
3078
|
if (bypassList && bypassList.size > 0 && bypassList.has(modelId)) return;
|
|
3079
|
+
const box =
|
|
3080
|
+
this._boxIndex && this._boxIndex.has(String(modelId))
|
|
3081
|
+
? this._boxIndex.get(String(modelId))
|
|
3082
|
+
: this._boxIndex && this._boxIndex.has(modelId)
|
|
3083
|
+
? this._boxIndex.get(modelId)
|
|
3084
|
+
: null;
|
|
3085
|
+
if (!this.shouldApplyOcclusionByBox(box)) {
|
|
3086
|
+
if (toLoadSet.has(modelId)) {
|
|
3087
|
+
toLoadSet.delete(modelId);
|
|
3088
|
+
}
|
|
3089
|
+
return;
|
|
3090
|
+
}
|
|
2943
3091
|
|
|
2944
3092
|
const inFrustum = this.isModelInFrustum(child, null, globalFrustum);
|
|
2945
3093
|
let modelInVisible = toLoadSet.has(modelId);
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
{
|
|
2
|
+
"material": [
|
|
3
|
+
{
|
|
4
|
+
"id": "2:33ffd3ca-2567-48fe-9651-c8db640f4414",
|
|
5
|
+
"color": [0, 0, 0, 1],
|
|
6
|
+
"visible": true,
|
|
7
|
+
"transp": 0,
|
|
8
|
+
"documentId": "33ffd3ca-2567-48fe-9651-c8db640f4414"
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"id": "5:33ffd3ca-2567-48fe-9651-c8db640f4414",
|
|
12
|
+
"color": [0, 0, 0, 1],
|
|
13
|
+
"visible": true,
|
|
14
|
+
"transp": 0,
|
|
15
|
+
"documentId": "33ffd3ca-2567-48fe-9651-c8db640f4414"
|
|
16
|
+
}
|
|
17
|
+
],
|
|
18
|
+
"mergeMaterial": [],
|
|
19
|
+
"primitive": [
|
|
20
|
+
{
|
|
21
|
+
"id": "5_0:33ffd3ca-2567-48fe-9651-c8db640f4414",
|
|
22
|
+
"documentId": "33ffd3ca-2567-48fe-9651-c8db640f4414",
|
|
23
|
+
"material": "5:33ffd3ca-2567-48fe-9651-c8db640f4414",
|
|
24
|
+
"geomText": "",
|
|
25
|
+
"isCompressed": 0,
|
|
26
|
+
"position": [40, 1030, 0, 40, -970, 0],
|
|
27
|
+
"normal": [],
|
|
28
|
+
"indices": [],
|
|
29
|
+
"dataType": "00111",
|
|
30
|
+
"min": [40, -970, 0],
|
|
31
|
+
"max": [40, 1030, 0],
|
|
32
|
+
"geomType": 57351
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"id": "5_1:33ffd3ca-2567-48fe-9651-c8db640f4414",
|
|
36
|
+
"documentId": "33ffd3ca-2567-48fe-9651-c8db640f4414",
|
|
37
|
+
"material": "5:33ffd3ca-2567-48fe-9651-c8db640f4414",
|
|
38
|
+
"geomText": "",
|
|
39
|
+
"isCompressed": 0,
|
|
40
|
+
"position": [-460, 30, 0, 540, 30, 0],
|
|
41
|
+
"normal": [],
|
|
42
|
+
"indices": [],
|
|
43
|
+
"dataType": "00111",
|
|
44
|
+
"min": [-460, -970, 0],
|
|
45
|
+
"max": [540, 1030, 0],
|
|
46
|
+
"geomType": 57351
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"id": "5_2:33ffd3ca-2567-48fe-9651-c8db640f4414",
|
|
50
|
+
"documentId": "33ffd3ca-2567-48fe-9651-c8db640f4414",
|
|
51
|
+
"material": "5:33ffd3ca-2567-48fe-9651-c8db640f4414",
|
|
52
|
+
"geomText": "",
|
|
53
|
+
"isCompressed": 0,
|
|
54
|
+
"position": [40, 1030, 0, 35, 990, 0],
|
|
55
|
+
"normal": [],
|
|
56
|
+
"indices": [],
|
|
57
|
+
"dataType": "00111",
|
|
58
|
+
"min": [-460, -970, 0],
|
|
59
|
+
"max": [540, 1030, 0],
|
|
60
|
+
"geomType": 57351
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"id": "5_3:33ffd3ca-2567-48fe-9651-c8db640f4414",
|
|
64
|
+
"documentId": "33ffd3ca-2567-48fe-9651-c8db640f4414",
|
|
65
|
+
"material": "5:33ffd3ca-2567-48fe-9651-c8db640f4414",
|
|
66
|
+
"geomText": "",
|
|
67
|
+
"isCompressed": 0,
|
|
68
|
+
"position": [40, 1030, 0, 45, 990, 0],
|
|
69
|
+
"normal": [],
|
|
70
|
+
"indices": [],
|
|
71
|
+
"dataType": "00111",
|
|
72
|
+
"min": [-460, -970, 0],
|
|
73
|
+
"max": [540, 1030, 0],
|
|
74
|
+
"geomType": 57351
|
|
75
|
+
}
|
|
76
|
+
],
|
|
77
|
+
"mesh": [
|
|
78
|
+
{
|
|
79
|
+
"id": "5:33ffd3ca-2567-48fe-9651-c8db640f4414",
|
|
80
|
+
"documentId": "33ffd3ca-2567-48fe-9651-c8db640f4414",
|
|
81
|
+
"primitives": [
|
|
82
|
+
{
|
|
83
|
+
"prmid": "5_0:33ffd3ca-2567-48fe-9651-c8db640f4414",
|
|
84
|
+
"matrix": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1],
|
|
85
|
+
"min": [-460, -970, 0],
|
|
86
|
+
"max": [540, 1030, 0]
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"prmid": "5_1:33ffd3ca-2567-48fe-9651-c8db640f4414",
|
|
90
|
+
"matrix": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1],
|
|
91
|
+
"min": [-460, -970, 0],
|
|
92
|
+
"max": [540, 1030, 0]
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"prmid": "5_2:33ffd3ca-2567-48fe-9651-c8db640f4414",
|
|
96
|
+
"matrix": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1],
|
|
97
|
+
"min": [-460, -970, 0],
|
|
98
|
+
"max": [540, 1030, 0]
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
"prmid": "5_3:33ffd3ca-2567-48fe-9651-c8db640f4414",
|
|
102
|
+
"matrix": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1],
|
|
103
|
+
"min": [-460, -970, 0],
|
|
104
|
+
"max": [540, 1030, 0]
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"prmid": "5_4:33ffd3ca-2567-48fe-9651-c8db640f4414",
|
|
108
|
+
"matrix": [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1],
|
|
109
|
+
"min": [-460, -970, 0],
|
|
110
|
+
"max": [540, 1030, 0]
|
|
111
|
+
}
|
|
112
|
+
]
|
|
113
|
+
}
|
|
114
|
+
]
|
|
115
|
+
}
|