fl-web-component 2.0.17 → 2.0.19-beta.0
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/README.md +2 -0
- 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 +1439 -872
- 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 +87 -7
- 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/src/utils/threejs/measure-clear-distance.js +346 -0
- package/packages/components/com-graphics/box.json +0 -77
|
@@ -1 +1 @@
|
|
|
1
|
-
@charset "UTF-8";.fl-model-containor[data-v-48280acc]{width:100%;height:100%;position:relative;cursor:pointer}[data-v-48280acc] .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-48280acc] .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-48280acc] .circle-tag{width:10px;height:10px;margin-top:5px;border-radius:50%;background-color:#ff5000}[data-v-48280acc] .measure-label-font{word-break:break-all}[data-v-48280acc] .mark-label-img{padding-top:5px;width:20px;height:20px}.loading-overlay[data-v-48280acc]{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-48280acc]{opacity:1;visibility:visible}.loading-content[data-v-48280acc]{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-48280acc]{width:40px;height:40px;border:4px solid #f3f3f3;border-top:4px solid #409eff;border-radius:50%;-webkit-animation:spin-48280acc 1s linear infinite;animation:spin-48280acc 1s linear infinite;margin:0 auto 20px}@-webkit-keyframes spin-48280acc{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes spin-48280acc{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.loading-text[data-v-48280acc]{font-size:16px;font-weight:500;color:#333;margin-bottom:20px}.loading-this.progress-bar[data-v-48280acc]{width:100%;height:8px;background-color:#f0f0f0;border-radius:4px;overflow:hidden;margin-bottom:15px}.loading-this.progress-fill[data-v-48280acc]{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-48280acc]{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-a4813dca]{width:100%;height:100%;position:relative;cursor:pointer}[data-v-a4813dca] .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-a4813dca] .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-a4813dca] .circle-tag{width:10px;height:10px;margin-top:5px;border-radius:50%;background-color:#ff5000}[data-v-a4813dca] .measure-label-font{word-break:break-all}[data-v-a4813dca] .mark-label-img{padding-top:5px;width:20px;height:20px}.loading-overlay[data-v-a4813dca]{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-a4813dca]{opacity:1;visibility:visible}.loading-content[data-v-a4813dca]{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-a4813dca]{width:40px;height:40px;border:4px solid #f3f3f3;border-top:4px solid #409eff;border-radius:50%;-webkit-animation:spin-a4813dca 1s linear infinite;animation:spin-a4813dca 1s linear infinite;margin:0 auto 20px}@-webkit-keyframes spin-a4813dca{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes spin-a4813dca{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.loading-text[data-v-a4813dca]{font-size:16px;font-weight:500;color:#333;margin-bottom:20px}.loading-this.progress-bar[data-v-a4813dca]{width:100%;height:8px;background-color:#f0f0f0;border-radius:4px;overflow:hidden;margin-bottom:15px}.loading-this.progress-fill[data-v-a4813dca]{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-a4813dca]{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.0",
|
|
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/",
|
|
@@ -135,8 +135,10 @@ import MeasureDistance from '@/utils/threejs/measure-distance.js';
|
|
|
135
135
|
import MeasureArea from '@/utils/threejs/measure-area.js';
|
|
136
136
|
import MeasureAngle from '@/utils/threejs/measure-angle.js';
|
|
137
137
|
import MeasureHeight from '@/utils/threejs/measure-height.js';
|
|
138
|
+
import MeasureClearDistance from '@/utils/threejs/measure-clear-distance.js';
|
|
138
139
|
import { parseData, processMeshData, processNodeData } from '@/utils/flgltf-parser';
|
|
139
140
|
import {
|
|
141
|
+
GEOM_TYPES,
|
|
140
142
|
handleInstancedMeshModel,
|
|
141
143
|
resetProcessingState,
|
|
142
144
|
PRIMITIVE_TYPE,
|
|
@@ -153,7 +155,7 @@ import { OutlinePass } from 'three/examples/jsm/postprocessing/OutlinePass.js';
|
|
|
153
155
|
import { OutputPass } from 'three/examples/jsm/postprocessing/OutputPass.js';
|
|
154
156
|
import Stats from 'three/examples/jsm/libs/stats.module.js';
|
|
155
157
|
import { OBB } from 'three/examples/jsm/math/OBB.js';
|
|
156
|
-
import boxJson from './box.json';
|
|
158
|
+
// import boxJson from './box.json';
|
|
157
159
|
import { StreamLoader } from '../../utils/StreamLoader.js';
|
|
158
160
|
import StreamLoaderParserWorker from '../../utils/StreamLoaderParser.worker.js';
|
|
159
161
|
import SceneCommandService from '@/utils/threejs/editor/scene-command-service.js';
|
|
@@ -1534,8 +1536,12 @@ export default {
|
|
|
1534
1536
|
if (isAdd && boxJson) {
|
|
1535
1537
|
const arr = boxJson ? boxJson : [];
|
|
1536
1538
|
const modelIds = new Set();
|
|
1539
|
+
const validGeomTypes = new Set(Object.values(GEOM_TYPES));
|
|
1537
1540
|
for (let i = 0; i < arr.length; i++) {
|
|
1538
1541
|
const it = arr[i];
|
|
1542
|
+
if (!validGeomTypes.has(it.geomType)) {
|
|
1543
|
+
continue;
|
|
1544
|
+
}
|
|
1539
1545
|
if (it.obb.length == 0) {
|
|
1540
1546
|
continue;
|
|
1541
1547
|
}
|
|
@@ -1547,10 +1553,22 @@ export default {
|
|
|
1547
1553
|
// 构造 AABB
|
|
1548
1554
|
const boxThree = new this.THREE.Box3(min, max);
|
|
1549
1555
|
|
|
1550
|
-
const hasMatrix = Array.isArray(it.matrix);
|
|
1551
|
-
|
|
1552
|
-
|
|
1553
|
-
|
|
1556
|
+
const hasMatrix = Array.isArray(it.matrix) && it.matrix.length >= 16;
|
|
1557
|
+
const hasMeshMatrix = Array.isArray(it.meshMatrix) && it.meshMatrix.length >= 16;
|
|
1558
|
+
let localMatrix = null;
|
|
1559
|
+
if (hasMatrix || hasMeshMatrix) {
|
|
1560
|
+
localMatrix = new this.THREE.Matrix4();
|
|
1561
|
+
if (hasMeshMatrix) {
|
|
1562
|
+
localMatrix.fromArray(it.meshMatrix);
|
|
1563
|
+
} else {
|
|
1564
|
+
localMatrix.identity();
|
|
1565
|
+
}
|
|
1566
|
+
if (hasMatrix) {
|
|
1567
|
+
const matrix = new this.THREE.Matrix4().fromArray(it.matrix);
|
|
1568
|
+
localMatrix.multiply(matrix);
|
|
1569
|
+
}
|
|
1570
|
+
|
|
1571
|
+
const worldMatrix = localMatrix.clone();
|
|
1554
1572
|
if (this.bizToThreeMatrix) {
|
|
1555
1573
|
worldMatrix.premultiply(this.bizToThreeMatrix);
|
|
1556
1574
|
}
|
|
@@ -1562,14 +1580,18 @@ export default {
|
|
|
1562
1580
|
|
|
1563
1581
|
const userData = {
|
|
1564
1582
|
flag: it.flag || 1, // 默认为 1
|
|
1583
|
+
geomType: it.geomType,
|
|
1565
1584
|
obbData: it.obb, // 存储原始 OBB 数据
|
|
1566
1585
|
transparent: it.transp > 0,
|
|
1567
1586
|
sourceVisible: it.visible === false ? false : true,
|
|
1568
1587
|
visible: it.visible === false ? false : true, // 默认显示
|
|
1588
|
+
occlusionEnabled:
|
|
1589
|
+
it.geomType === GEOM_TYPES.geom_3d || it.geomType === GEOM_TYPES.geom_3d_obj,
|
|
1569
1590
|
};
|
|
1570
1591
|
if (it.flag === 1) {
|
|
1571
1592
|
userData.indices = it.indices;
|
|
1572
|
-
userData.matrix = it.matrix;
|
|
1593
|
+
userData.matrix = localMatrix ? localMatrix.toArray() : it.matrix;
|
|
1594
|
+
userData.meshMatrix = it.meshMatrix;
|
|
1573
1595
|
// userData.matrix = new this.THREE.Matrix4().identity();
|
|
1574
1596
|
}
|
|
1575
1597
|
// 如果是 flag=3,解析并存储中心点、半轴长、旋转矩阵
|
|
@@ -1587,6 +1609,9 @@ export default {
|
|
|
1587
1609
|
center.z
|
|
1588
1610
|
);
|
|
1589
1611
|
obbMatrix.multiply(rotationMatrix4);
|
|
1612
|
+
if (localMatrix) {
|
|
1613
|
+
obbMatrix.premultiply(localMatrix);
|
|
1614
|
+
}
|
|
1590
1615
|
|
|
1591
1616
|
userData.obb = {
|
|
1592
1617
|
matrix: obbMatrix,
|
|
@@ -1631,6 +1656,9 @@ export default {
|
|
|
1631
1656
|
this.buildOctreeFromBoxIndex();
|
|
1632
1657
|
console.log('time end', Date.now());
|
|
1633
1658
|
},
|
|
1659
|
+
shouldApplyOcclusionByBox(box) {
|
|
1660
|
+
return !!(box && box.userData && box.userData.occlusionEnabled);
|
|
1661
|
+
},
|
|
1634
1662
|
tryInitialCenterAfterBoundsReady() {
|
|
1635
1663
|
if (this.hasExecutedCentering || this.userInteracting) return;
|
|
1636
1664
|
if (
|
|
@@ -2223,6 +2251,10 @@ export default {
|
|
|
2223
2251
|
for (let i = 0; i < hits.length; i++) {
|
|
2224
2252
|
if (hits[i].box && hits[i].box.userData && hits[i].box.userData.visible === false)
|
|
2225
2253
|
continue;
|
|
2254
|
+
if (!this.shouldApplyOcclusionByBox(hits[i].box)) {
|
|
2255
|
+
visibleIdSet.add(this.formatModelId(hits[i].modelId));
|
|
2256
|
+
continue;
|
|
2257
|
+
}
|
|
2226
2258
|
candidates.push(hits[i]);
|
|
2227
2259
|
}
|
|
2228
2260
|
} else if (this._boxIndex && this._boxIndex.size > 0) {
|
|
@@ -2230,6 +2262,10 @@ export default {
|
|
|
2230
2262
|
if (bypassList && bypassList.size > 0 && bypassList.has(modelId)) return;
|
|
2231
2263
|
if (box.userData && box.userData.visible === false) return;
|
|
2232
2264
|
if (this.isBoxInFrustum(box)) {
|
|
2265
|
+
if (!this.shouldApplyOcclusionByBox(box)) {
|
|
2266
|
+
visibleIdSet.add(this.formatModelId(modelId));
|
|
2267
|
+
return;
|
|
2268
|
+
}
|
|
2233
2269
|
candidates.push({ modelId, box });
|
|
2234
2270
|
}
|
|
2235
2271
|
});
|
|
@@ -2905,6 +2941,16 @@ export default {
|
|
|
2905
2941
|
instanceInfo && typeof instanceInfo.instanceIndex === 'number'
|
|
2906
2942
|
? instanceInfo.instanceIndex
|
|
2907
2943
|
: null;
|
|
2944
|
+
const box =
|
|
2945
|
+
this._boxIndex && this._boxIndex.has(String(modelId))
|
|
2946
|
+
? this._boxIndex.get(String(modelId))
|
|
2947
|
+
: this._boxIndex && this._boxIndex.has(modelId)
|
|
2948
|
+
? this._boxIndex.get(modelId)
|
|
2949
|
+
: null;
|
|
2950
|
+
if (!this.shouldApplyOcclusionByBox(box)) {
|
|
2951
|
+
allInactive = false;
|
|
2952
|
+
continue;
|
|
2953
|
+
}
|
|
2908
2954
|
|
|
2909
2955
|
const inFrustum = this.isModelInFrustum(child, instanceIndex, globalFrustum);
|
|
2910
2956
|
const modelInVisible = toLoadSet.has(modelId);
|
|
@@ -2918,6 +2964,18 @@ export default {
|
|
|
2918
2964
|
|
|
2919
2965
|
// 第二遍遍历:同步状态并决定是否卸载
|
|
2920
2966
|
for (const modelId of modelIds) {
|
|
2967
|
+
const box =
|
|
2968
|
+
this._boxIndex && this._boxIndex.has(String(modelId))
|
|
2969
|
+
? this._boxIndex.get(String(modelId))
|
|
2970
|
+
: this._boxIndex && this._boxIndex.has(modelId)
|
|
2971
|
+
? this._boxIndex.get(modelId)
|
|
2972
|
+
: null;
|
|
2973
|
+
if (!this.shouldApplyOcclusionByBox(box)) {
|
|
2974
|
+
if (toLoadSet.has(modelId)) {
|
|
2975
|
+
toLoadSet.delete(modelId);
|
|
2976
|
+
}
|
|
2977
|
+
continue;
|
|
2978
|
+
}
|
|
2921
2979
|
// 无论是否卸载,只要模型已在场景中,就从待加载集合中移除
|
|
2922
2980
|
if (toLoadSet.has(modelId)) {
|
|
2923
2981
|
toLoadSet.delete(modelId);
|
|
@@ -2939,6 +2997,18 @@ export default {
|
|
|
2939
2997
|
? child.parent.userData.instanceId
|
|
2940
2998
|
: child.uuid;
|
|
2941
2999
|
if (bypassList && bypassList.size > 0 && bypassList.has(modelId)) return;
|
|
3000
|
+
const box =
|
|
3001
|
+
this._boxIndex && this._boxIndex.has(String(modelId))
|
|
3002
|
+
? this._boxIndex.get(String(modelId))
|
|
3003
|
+
: this._boxIndex && this._boxIndex.has(modelId)
|
|
3004
|
+
? this._boxIndex.get(modelId)
|
|
3005
|
+
: null;
|
|
3006
|
+
if (!this.shouldApplyOcclusionByBox(box)) {
|
|
3007
|
+
if (toLoadSet.has(modelId)) {
|
|
3008
|
+
toLoadSet.delete(modelId);
|
|
3009
|
+
}
|
|
3010
|
+
return;
|
|
3011
|
+
}
|
|
2942
3012
|
|
|
2943
3013
|
const inFrustum = this.isModelInFrustum(child, null, globalFrustum);
|
|
2944
3014
|
let modelInVisible = toLoadSet.has(modelId);
|
|
@@ -5738,6 +5808,16 @@ export default {
|
|
|
5738
5808
|
);
|
|
5739
5809
|
this.threeMeasure.start();
|
|
5740
5810
|
break;
|
|
5811
|
+
case 'clearDistance':
|
|
5812
|
+
this.threeMeasure = new MeasureClearDistance.MeasureClearDistance(
|
|
5813
|
+
this.renderer,
|
|
5814
|
+
this.scene,
|
|
5815
|
+
this.camera,
|
|
5816
|
+
this.instructions.offsetWidth,
|
|
5817
|
+
this.instructions.offsetHeight
|
|
5818
|
+
);
|
|
5819
|
+
this.threeMeasure.start();
|
|
5820
|
+
break;
|
|
5741
5821
|
}
|
|
5742
5822
|
// 添加键盘事件监听器
|
|
5743
5823
|
document.addEventListener('keydown', this.handleMeasureKeyDown, false);
|
|
@@ -5797,7 +5877,7 @@ export default {
|
|
|
5797
5877
|
this.threeMeasure.clear();
|
|
5798
5878
|
}
|
|
5799
5879
|
this.removeMeasureObjectsFromScene();
|
|
5800
|
-
this.measureFlag = false;
|
|
5880
|
+
// this.measureFlag = false;
|
|
5801
5881
|
document.removeEventListener('keydown', this.handleMeasureKeyDown, false);
|
|
5802
5882
|
},
|
|
5803
5883
|
handleMeasureKeyDown(event) {
|
|
@@ -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
|
+
}
|