fl-web-component 2.0.19-beta.1 → 2.0.19-beta.3
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.js +307 -220
- package/dist/fl-web-component.common.js.map +1 -1
- package/dist/fl-web-component.css +1 -1
- package/package.json +1 -1
- package/packages/components/com-graphics/index.vue +25 -5
- package/packages/utils/StreamLoaderParser.worker.js +20 -20
- package/src/utils/instance-parser.js +64 -64
- package/src/utils/threejs/measure-clear-distance.js +149 -123
|
@@ -1 +1 @@
|
|
|
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}
|
|
1
|
+
@charset "UTF-8";.fl-model-containor[data-v-35050a2a]{width:100%;height:100%;position:relative;cursor:pointer}[data-v-35050a2a] .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-35050a2a] .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-35050a2a] .circle-tag{width:10px;height:10px;margin-top:5px;border-radius:50%;background-color:#ff5000}[data-v-35050a2a] .measure-label-font{word-break:break-all}[data-v-35050a2a] .mark-label-img{padding-top:5px;width:20px;height:20px}.loading-overlay[data-v-35050a2a]{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-35050a2a]{opacity:1;visibility:visible}.loading-content[data-v-35050a2a]{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-35050a2a]{width:40px;height:40px;border:4px solid #f3f3f3;border-top:4px solid #409eff;border-radius:50%;-webkit-animation:spin-35050a2a 1s linear infinite;animation:spin-35050a2a 1s linear infinite;margin:0 auto 20px}@-webkit-keyframes spin-35050a2a{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes spin-35050a2a{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.loading-text[data-v-35050a2a]{font-size:16px;font-weight:500;color:#333;margin-bottom:20px}.loading-this.progress-bar[data-v-35050a2a]{width:100%;height:8px;background-color:#f0f0f0;border-radius:4px;overflow:hidden;margin-bottom:15px}.loading-this.progress-fill[data-v-35050a2a]{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-35050a2a]{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
|
@@ -3883,6 +3883,7 @@ export default {
|
|
|
3883
3883
|
this.skipNextRenderFrame = true;
|
|
3884
3884
|
|
|
3885
3885
|
const intersects = this.getRaycasterObjects(event);
|
|
3886
|
+
console.log(intersects);
|
|
3886
3887
|
const shouldBlockCamera = intersects.some(item =>
|
|
3887
3888
|
this.isActiveTransformControlIntersection(item)
|
|
3888
3889
|
);
|
|
@@ -3917,9 +3918,11 @@ export default {
|
|
|
3917
3918
|
this.mouse.x = (x / rect.width) * 2 - 1;
|
|
3918
3919
|
this.mouse.y = -(y / rect.height) * 2 + 1;
|
|
3919
3920
|
this.raycaster.setFromCamera(this.mouse, this.camera);
|
|
3920
|
-
|
|
3921
|
-
|
|
3922
|
-
|
|
3921
|
+
if (this.scene && this.scene.children) {
|
|
3922
|
+
let intersects = this.raycaster.intersectObjects(this.scene.children, true);
|
|
3923
|
+
return intersects.filter(item => item.object.type === 'Mesh');
|
|
3924
|
+
}
|
|
3925
|
+
return [];
|
|
3923
3926
|
},
|
|
3924
3927
|
isTransformControlIntersection(intersection) {
|
|
3925
3928
|
let current = intersection && intersection.object ? intersection.object : null;
|
|
@@ -4367,6 +4370,23 @@ export default {
|
|
|
4367
4370
|
this.buildOctreeFromBoxIndex();
|
|
4368
4371
|
}
|
|
4369
4372
|
},
|
|
4373
|
+
safeTraverse(object, callback) {
|
|
4374
|
+
const stack = [object];
|
|
4375
|
+
|
|
4376
|
+
while (stack.length > 0) {
|
|
4377
|
+
const current = stack.pop();
|
|
4378
|
+
if (!current) continue;
|
|
4379
|
+
|
|
4380
|
+
callback(current);
|
|
4381
|
+
|
|
4382
|
+
const children = Array.isArray(current.children) ? current.children : [];
|
|
4383
|
+
for (let i = children.length - 1; i >= 0; i--) {
|
|
4384
|
+
if (children[i]) {
|
|
4385
|
+
stack.push(children[i]);
|
|
4386
|
+
}
|
|
4387
|
+
}
|
|
4388
|
+
}
|
|
4389
|
+
},
|
|
4370
4390
|
setAllModelVisible(visible) {
|
|
4371
4391
|
const isVisible = Boolean(visible);
|
|
4372
4392
|
const matrixCache = new this.THREE.Matrix4();
|
|
@@ -4379,7 +4399,7 @@ export default {
|
|
|
4379
4399
|
}
|
|
4380
4400
|
|
|
4381
4401
|
if (this.scene) {
|
|
4382
|
-
this.scene
|
|
4402
|
+
this.safeTraverse(this.scene, child => {
|
|
4383
4403
|
if (!child || !child.isInstancedMesh) return;
|
|
4384
4404
|
const userData = child.userData || {};
|
|
4385
4405
|
if (!(userData.instancesMap instanceof Map) || userData.instancesMap.size === 0) return;
|
|
@@ -4415,7 +4435,7 @@ export default {
|
|
|
4415
4435
|
return nodeType === 'custom-root' || rootType === 'custom-root';
|
|
4416
4436
|
});
|
|
4417
4437
|
if (customRoot) {
|
|
4418
|
-
|
|
4438
|
+
this.safeTraverse(customRoot, object => {
|
|
4419
4439
|
object.visible = isVisible;
|
|
4420
4440
|
});
|
|
4421
4441
|
}
|
|
@@ -402,26 +402,26 @@ function parsePrimitive(dataView, uint8Array, offset, isFullProps = true) {
|
|
|
402
402
|
primitive.documentId = '';
|
|
403
403
|
}
|
|
404
404
|
|
|
405
|
-
if (dataView.byteLength < offset + 4) {
|
|
406
|
-
throw new Error('Insufficient data for Material length');
|
|
407
|
-
}
|
|
408
|
-
const materialTextLen = dataView.getUint32(offset, false);
|
|
409
|
-
offset += 4;
|
|
410
|
-
if (materialTextLen === 0xffffffff) {
|
|
411
|
-
primitive.material = null;
|
|
412
|
-
} else if (materialTextLen > 0) {
|
|
413
|
-
if (dataView.byteLength < offset + materialTextLen) {
|
|
414
|
-
throw new Error('Insufficient data for Material content');
|
|
415
|
-
}
|
|
416
|
-
const textBytes = uint8Array.subarray(offset, offset + materialTextLen);
|
|
417
|
-
primitive.material = utf8Decoder.decode(textBytes);
|
|
418
|
-
offset += materialTextLen;
|
|
419
|
-
} else {
|
|
420
|
-
primitive.material = '';
|
|
421
|
-
}
|
|
422
|
-
|
|
423
|
-
if (dataView.byteLength < offset + 4) {
|
|
424
|
-
throw new Error('Insufficient data for GeomText length');
|
|
405
|
+
if (dataView.byteLength < offset + 4) {
|
|
406
|
+
throw new Error('Insufficient data for Material length');
|
|
407
|
+
}
|
|
408
|
+
const materialTextLen = dataView.getUint32(offset, false);
|
|
409
|
+
offset += 4;
|
|
410
|
+
if (materialTextLen === 0xffffffff) {
|
|
411
|
+
primitive.material = null;
|
|
412
|
+
} else if (materialTextLen > 0) {
|
|
413
|
+
if (dataView.byteLength < offset + materialTextLen) {
|
|
414
|
+
throw new Error('Insufficient data for Material content');
|
|
415
|
+
}
|
|
416
|
+
const textBytes = uint8Array.subarray(offset, offset + materialTextLen);
|
|
417
|
+
primitive.material = utf8Decoder.decode(textBytes);
|
|
418
|
+
offset += materialTextLen;
|
|
419
|
+
} else {
|
|
420
|
+
primitive.material = '';
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
if (dataView.byteLength < offset + 4) {
|
|
424
|
+
throw new Error('Insufficient data for GeomText length');
|
|
425
425
|
}
|
|
426
426
|
const geomTextLen = dataView.getUint32(offset, false);
|
|
427
427
|
offset += 4;
|
|
@@ -91,46 +91,46 @@ function requestInstancedMapping(instances, drawObjs) {
|
|
|
91
91
|
});
|
|
92
92
|
}
|
|
93
93
|
|
|
94
|
-
function getInstanceNormalSign(matrix) {
|
|
95
|
-
if (!matrix || typeof matrix.determinant !== 'function') return 1;
|
|
96
|
-
return matrix.determinant() < 0 ? -1 : 1;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
function getMatrixVal(matrix) {
|
|
100
|
-
const val = matrix && matrix.val ? matrix.val : matrix;
|
|
101
|
-
return val && val.length >= 16 ? val : null;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
function composeInstanceMatrix(instance, mesh, geometry) {
|
|
105
|
-
const resultMatrix = new THREE.Matrix4();
|
|
106
|
-
const meshMatrix = new THREE.Matrix4();
|
|
107
|
-
const primitiveMatrix = new THREE.Matrix4();
|
|
108
|
-
const meshMatrixVal = getMatrixVal(instance && instance.matrix);
|
|
109
|
-
const primitiveMatrixVal = getMatrixVal(mesh && mesh.matrix);
|
|
110
|
-
|
|
111
|
-
if (meshMatrixVal) {
|
|
112
|
-
meshMatrix.fromArray(meshMatrixVal);
|
|
113
|
-
}
|
|
114
|
-
if (primitiveMatrixVal) {
|
|
115
|
-
primitiveMatrix.fromArray(primitiveMatrixVal);
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
const { points, alignType } = mesh || {};
|
|
119
|
-
if (mesh && isTextType(mesh.type) && points && points.length >= 3) {
|
|
120
|
-
const positionMatrix = new THREE.Matrix4();
|
|
121
|
-
const alignMatrix = createAlignedText(alignType, geometry);
|
|
122
|
-
positionMatrix.identity().makeTranslation(points[0], points[1], points[2]);
|
|
123
|
-
primitiveMatrix.multiply(alignMatrix).multiply(positionMatrix);
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
resultMatrix.multiplyMatrices(meshMatrix, primitiveMatrix);
|
|
127
|
-
return resultMatrix;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
/**
|
|
131
|
-
* 重置处理状态,用于新的批量加载会话
|
|
132
|
-
*/
|
|
133
|
-
function resetProcessingState() {
|
|
94
|
+
function getInstanceNormalSign(matrix) {
|
|
95
|
+
if (!matrix || typeof matrix.determinant !== 'function') return 1;
|
|
96
|
+
return matrix.determinant() < 0 ? -1 : 1;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
function getMatrixVal(matrix) {
|
|
100
|
+
const val = matrix && matrix.val ? matrix.val : matrix;
|
|
101
|
+
return val && val.length >= 16 ? val : null;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function composeInstanceMatrix(instance, mesh, geometry) {
|
|
105
|
+
const resultMatrix = new THREE.Matrix4();
|
|
106
|
+
const meshMatrix = new THREE.Matrix4();
|
|
107
|
+
const primitiveMatrix = new THREE.Matrix4();
|
|
108
|
+
const meshMatrixVal = getMatrixVal(instance && instance.matrix);
|
|
109
|
+
const primitiveMatrixVal = getMatrixVal(mesh && mesh.matrix);
|
|
110
|
+
|
|
111
|
+
if (meshMatrixVal) {
|
|
112
|
+
meshMatrix.fromArray(meshMatrixVal);
|
|
113
|
+
}
|
|
114
|
+
if (primitiveMatrixVal) {
|
|
115
|
+
primitiveMatrix.fromArray(primitiveMatrixVal);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
const { points, alignType } = mesh || {};
|
|
119
|
+
if (mesh && isTextType(mesh.type) && points && points.length >= 3) {
|
|
120
|
+
const positionMatrix = new THREE.Matrix4();
|
|
121
|
+
const alignMatrix = createAlignedText(alignType, geometry);
|
|
122
|
+
positionMatrix.identity().makeTranslation(points[0], points[1], points[2]);
|
|
123
|
+
primitiveMatrix.multiply(alignMatrix).multiply(positionMatrix);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
resultMatrix.multiplyMatrices(meshMatrix, primitiveMatrix);
|
|
127
|
+
return resultMatrix;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* 重置处理状态,用于新的批量加载会话
|
|
132
|
+
*/
|
|
133
|
+
function resetProcessingState() {
|
|
134
134
|
drawObjMapInstance = {};
|
|
135
135
|
// instanceToInstancedMeshMap.clear();
|
|
136
136
|
// processedDrawObjects.clear();
|
|
@@ -465,27 +465,27 @@ function setInstanceMatricesAndColors(model, drawObj, mesh, meshName, customColo
|
|
|
465
465
|
|
|
466
466
|
// const instancedMesh = instanceToInstancedMeshMap.get(item.instanceId);
|
|
467
467
|
|
|
468
|
-
const m4 = composeInstanceMatrix(item, mesh, model.geometry);
|
|
469
|
-
model.setMatrixAt(index, m4);
|
|
470
|
-
|
|
471
|
-
const normalSignAttr = model.geometry && model.geometry.getAttribute('instanceNormalSign');
|
|
472
|
-
if (normalSignAttr && normalSignAttr.array && index < normalSignAttr.array.length) {
|
|
473
|
-
normalSignAttr.array[index] = getInstanceNormalSign(m4);
|
|
474
|
-
}
|
|
475
|
-
|
|
476
|
-
const copyMatrix = new THREE.Matrix4().copy(m4);
|
|
477
|
-
model.userData.copyMatrix = copyMatrix;
|
|
478
|
-
|
|
479
|
-
const temp = model.userData.instancesMap.get(item.instanceId);
|
|
480
|
-
temp.copyMatrix = copyMatrix;
|
|
481
|
-
if (sourceVisible === false) {
|
|
482
|
-
const offsetMatrix = new THREE.Matrix4()
|
|
483
|
-
.copy(copyMatrix)
|
|
484
|
-
.makeTranslation(9999999, 9999999, 9999999);
|
|
485
|
-
model.setMatrixAt(index, offsetMatrix);
|
|
486
|
-
}
|
|
487
|
-
|
|
488
|
-
// 设置颜色
|
|
468
|
+
const m4 = composeInstanceMatrix(item, mesh, model.geometry);
|
|
469
|
+
model.setMatrixAt(index, m4);
|
|
470
|
+
|
|
471
|
+
const normalSignAttr = model.geometry && model.geometry.getAttribute('instanceNormalSign');
|
|
472
|
+
if (normalSignAttr && normalSignAttr.array && index < normalSignAttr.array.length) {
|
|
473
|
+
normalSignAttr.array[index] = getInstanceNormalSign(m4);
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
const copyMatrix = new THREE.Matrix4().copy(m4);
|
|
477
|
+
model.userData.copyMatrix = copyMatrix;
|
|
478
|
+
|
|
479
|
+
const temp = model.userData.instancesMap.get(item.instanceId);
|
|
480
|
+
temp.copyMatrix = copyMatrix;
|
|
481
|
+
if (sourceVisible === false) {
|
|
482
|
+
const offsetMatrix = new THREE.Matrix4()
|
|
483
|
+
.copy(copyMatrix)
|
|
484
|
+
.makeTranslation(9999999, 9999999, 9999999);
|
|
485
|
+
model.setMatrixAt(index, offsetMatrix);
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
// 设置颜色
|
|
489
489
|
model.setColorAt(index, meshColor);
|
|
490
490
|
});
|
|
491
491
|
|
|
@@ -560,9 +560,9 @@ function appendInstanceToInstancedMesh(model, drawObj, mesh, instance, customCol
|
|
|
560
560
|
? new THREE.Color(customColor)
|
|
561
561
|
: new THREE.Color(`rgb(${colorArr[0]}, ${colorArr[1]}, ${colorArr[2]})`);
|
|
562
562
|
|
|
563
|
-
if (!mesh) return;
|
|
564
|
-
|
|
565
|
-
const m4 = composeInstanceMatrix(instance, mesh, model.geometry);
|
|
563
|
+
if (!mesh) return;
|
|
564
|
+
|
|
565
|
+
const m4 = composeInstanceMatrix(instance, mesh, model.geometry);
|
|
566
566
|
const renderMatrix =
|
|
567
567
|
sourceVisible === false
|
|
568
568
|
? new THREE.Matrix4().copy(m4).makeTranslation(9999999, 9999999, 9999999)
|