fl-web-component 2.1.1-beta.2 → 2.1.1-beta.4
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 +596 -467
- 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 +140 -11
- package/packages/utils/StreamLoaderParser.worker.js +20 -20
- package/src/utils/instance-parser.js +80 -75
|
@@ -1 +1 @@
|
|
|
1
|
-
@charset "UTF-8";.fl-model-containor[data-v-d40d4870]{width:100%;height:100%;position:relative;cursor:pointer}[data-v-d40d4870] .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-d40d4870] .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-d40d4870] .circle-tag{width:10px;height:10px;margin-top:5px;border-radius:50%;background-color:#ff5000}[data-v-d40d4870] .measure-label-font{word-break:break-all}[data-v-d40d4870] .mark-label-img{padding-top:5px;width:20px;height:20px}.loading-overlay[data-v-d40d4870]{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-d40d4870]{opacity:1;visibility:visible}.loading-content[data-v-d40d4870]{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-d40d4870]{width:40px;height:40px;border:4px solid #f3f3f3;border-top:4px solid #409eff;border-radius:50%;-webkit-animation:spin-d40d4870 1s linear infinite;animation:spin-d40d4870 1s linear infinite;margin:0 auto 20px}@-webkit-keyframes spin-d40d4870{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes spin-d40d4870{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.loading-text[data-v-d40d4870]{font-size:16px;font-weight:500;color:#333;margin-bottom:20px}.loading-this.progress-bar[data-v-d40d4870]{width:100%;height:8px;background-color:#f0f0f0;border-radius:4px;overflow:hidden;margin-bottom:15px}.loading-this.progress-fill[data-v-d40d4870]{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-d40d4870]{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-0f76e7f4]{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-3517cf88]{width:100%;height:100%;position:relative;cursor:pointer}[data-v-3517cf88] .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-3517cf88] .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-3517cf88] .circle-tag{width:10px;height:10px;margin-top:5px;border-radius:50%;background-color:#ff5000}[data-v-3517cf88] .measure-label-font{word-break:break-all}[data-v-3517cf88] .mark-label-img{padding-top:5px;width:20px;height:20px}.loading-overlay[data-v-3517cf88]{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-3517cf88]{opacity:1;visibility:visible}.loading-content[data-v-3517cf88]{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-3517cf88]{width:40px;height:40px;border:4px solid #f3f3f3;border-top:4px solid #409eff;border-radius:50%;-webkit-animation:spin-3517cf88 1s linear infinite;animation:spin-3517cf88 1s linear infinite;margin:0 auto 20px}@-webkit-keyframes spin-3517cf88{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes spin-3517cf88{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.loading-text[data-v-3517cf88]{font-size:16px;font-weight:500;color:#333;margin-bottom:20px}.loading-this.progress-bar[data-v-3517cf88]{width:100%;height:8px;background-color:#f0f0f0;border-radius:4px;overflow:hidden;margin-bottom:15px}.loading-this.progress-fill[data-v-3517cf88]{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-3517cf88]{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-0f76e7f4]{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
|
@@ -165,7 +165,7 @@ import { onContextHandle } from './component/context';
|
|
|
165
165
|
|
|
166
166
|
const isDebug = process.env.NODE_ENV !== 'production' || process.env.VUE_APP_IS_WATCH === true;
|
|
167
167
|
// const isDebug = false;
|
|
168
|
-
const COLLISION_PENETRATION_EPSILON =
|
|
168
|
+
const COLLISION_PENETRATION_EPSILON = 1;
|
|
169
169
|
const COLLISION_OBB_AXIS_EPSILON = 1e-8;
|
|
170
170
|
const COLLISION_DEBUG_GROUP_NAME = '__collision_obb_debug_group__';
|
|
171
171
|
|
|
@@ -215,7 +215,8 @@ export default {
|
|
|
215
215
|
isPaused: false,
|
|
216
216
|
},
|
|
217
217
|
isolateMode: false,
|
|
218
|
-
collisionObbDebugEnabled: isDebug,
|
|
218
|
+
// collisionObbDebugEnabled: isDebug,
|
|
219
|
+
collisionObbDebugEnabled: false,
|
|
219
220
|
};
|
|
220
221
|
},
|
|
221
222
|
watch: {
|
|
@@ -1805,6 +1806,53 @@ export default {
|
|
|
1805
1806
|
}
|
|
1806
1807
|
node.items.push({ id, box });
|
|
1807
1808
|
},
|
|
1809
|
+
_buildCollisionOctreeFromEntries(entries) {
|
|
1810
|
+
if (!Array.isArray(entries) || entries.length === 0) {
|
|
1811
|
+
return null;
|
|
1812
|
+
}
|
|
1813
|
+
|
|
1814
|
+
let minX = Infinity;
|
|
1815
|
+
let minY = Infinity;
|
|
1816
|
+
let minZ = Infinity;
|
|
1817
|
+
let maxX = -Infinity;
|
|
1818
|
+
let maxY = -Infinity;
|
|
1819
|
+
let maxZ = -Infinity;
|
|
1820
|
+
|
|
1821
|
+
entries.forEach(item => {
|
|
1822
|
+
const box = item && item.box;
|
|
1823
|
+
if (!box || !box.isBox3) return;
|
|
1824
|
+
const mn = box.min;
|
|
1825
|
+
const mx = box.max;
|
|
1826
|
+
if (mn.x < minX) minX = mn.x;
|
|
1827
|
+
if (mn.y < minY) minY = mn.y;
|
|
1828
|
+
if (mn.z < minZ) minZ = mn.z;
|
|
1829
|
+
if (mx.x > maxX) maxX = mx.x;
|
|
1830
|
+
if (mx.y > maxY) maxY = mx.y;
|
|
1831
|
+
if (mx.z > maxZ) maxZ = mx.z;
|
|
1832
|
+
});
|
|
1833
|
+
|
|
1834
|
+
if (minX === Infinity) {
|
|
1835
|
+
return null;
|
|
1836
|
+
}
|
|
1837
|
+
|
|
1838
|
+
const rootBox = new this.THREE.Box3(
|
|
1839
|
+
new this.THREE.Vector3(minX, minY, minZ),
|
|
1840
|
+
new this.THREE.Vector3(maxX, maxY, maxZ)
|
|
1841
|
+
);
|
|
1842
|
+
const root = {
|
|
1843
|
+
box: rootBox,
|
|
1844
|
+
items: [],
|
|
1845
|
+
children: null,
|
|
1846
|
+
depth: 0,
|
|
1847
|
+
};
|
|
1848
|
+
|
|
1849
|
+
entries.forEach(item => {
|
|
1850
|
+
if (!item || !item.box) return;
|
|
1851
|
+
this._octreeInsert(root, String(item.id), item.box);
|
|
1852
|
+
});
|
|
1853
|
+
|
|
1854
|
+
return root;
|
|
1855
|
+
},
|
|
1808
1856
|
_isCollisionBoxAvailable(box) {
|
|
1809
1857
|
if (!box || !box.isBox3 || box.isEmpty()) return false;
|
|
1810
1858
|
if (box.userData && box.userData.visible === false) return false;
|
|
@@ -1935,7 +1983,8 @@ export default {
|
|
|
1935
1983
|
_buildCollisionPairMap() {
|
|
1936
1984
|
const pairMap = new Map();
|
|
1937
1985
|
const collisionPairs = this.getOctreeCollisionPairs();
|
|
1938
|
-
const pairs =
|
|
1986
|
+
const pairs =
|
|
1987
|
+
collisionPairs && Array.isArray(collisionPairs.pairs) ? collisionPairs.pairs : [];
|
|
1939
1988
|
for (let i = 0; i < pairs.length; i++) {
|
|
1940
1989
|
const pair = pairs[i];
|
|
1941
1990
|
if (!pair) continue;
|
|
@@ -2071,9 +2120,8 @@ export default {
|
|
|
2071
2120
|
}
|
|
2072
2121
|
return false;
|
|
2073
2122
|
},
|
|
2074
|
-
|
|
2123
|
+
_queryOctreeByBoxWithRoot(root, box) {
|
|
2075
2124
|
const results = [];
|
|
2076
|
-
const root = this._octree;
|
|
2077
2125
|
if (!root || !this._isCollisionBoxAvailable(box)) return results;
|
|
2078
2126
|
|
|
2079
2127
|
const stack = [root];
|
|
@@ -2099,25 +2147,88 @@ export default {
|
|
|
2099
2147
|
|
|
2100
2148
|
return results;
|
|
2101
2149
|
},
|
|
2102
|
-
|
|
2150
|
+
_queryOctreeByBox(box) {
|
|
2151
|
+
return this._queryOctreeByBoxWithRoot(this._octree, box);
|
|
2152
|
+
},
|
|
2153
|
+
getOctreeCollisionPairs(options = {}) {
|
|
2103
2154
|
const pairs = [];
|
|
2104
2155
|
if (!this._boxIndex || this._boxIndex.size === 0) return { pairs };
|
|
2105
2156
|
|
|
2106
|
-
|
|
2107
|
-
|
|
2157
|
+
const normalizeIds = value =>
|
|
2158
|
+
Array.isArray(value)
|
|
2159
|
+
? Array.from(
|
|
2160
|
+
new Set(
|
|
2161
|
+
value
|
|
2162
|
+
.map(item => (item === null || item === undefined ? '' : String(item)))
|
|
2163
|
+
.filter(item => item !== '')
|
|
2164
|
+
)
|
|
2165
|
+
)
|
|
2166
|
+
: [];
|
|
2167
|
+
|
|
2168
|
+
const getEntriesByIds = ids => {
|
|
2169
|
+
const entries = [];
|
|
2170
|
+
const idSet = new Set(ids);
|
|
2171
|
+
this._boxIndex.forEach((box, id) => {
|
|
2172
|
+
const key = String(id);
|
|
2173
|
+
if (idSet.has(key)) {
|
|
2174
|
+
entries.push({
|
|
2175
|
+
id: key,
|
|
2176
|
+
box,
|
|
2177
|
+
});
|
|
2178
|
+
}
|
|
2179
|
+
});
|
|
2180
|
+
return entries;
|
|
2181
|
+
};
|
|
2182
|
+
|
|
2183
|
+
const sourceIds = normalizeIds(options.sourceIds);
|
|
2184
|
+
const targetIds = normalizeIds(options.targetIds);
|
|
2185
|
+
const includeIds = Array.isArray(options.includeIds) ? normalizeIds(options.includeIds) : [];
|
|
2186
|
+
|
|
2187
|
+
let root = this._octree;
|
|
2188
|
+
let sourceEntries = [];
|
|
2189
|
+
let dedupePairKeySet = null;
|
|
2190
|
+
|
|
2191
|
+
if (sourceIds.length > 0 && targetIds.length > 0) {
|
|
2192
|
+
const targetEntries = getEntriesByIds(targetIds);
|
|
2193
|
+
sourceEntries = getEntriesByIds(sourceIds);
|
|
2194
|
+
if (sourceEntries.length === 0 || targetEntries.length === 0) return { pairs };
|
|
2195
|
+
root = this._buildCollisionOctreeFromEntries(targetEntries);
|
|
2196
|
+
if (!root) return { pairs };
|
|
2197
|
+
dedupePairKeySet = new Set();
|
|
2198
|
+
} else if (includeIds.length > 0) {
|
|
2199
|
+
sourceEntries = getEntriesByIds(includeIds);
|
|
2200
|
+
if (sourceEntries.length === 0) return { pairs };
|
|
2201
|
+
root = this._buildCollisionOctreeFromEntries(sourceEntries);
|
|
2202
|
+
if (!root) return { pairs };
|
|
2203
|
+
} else {
|
|
2204
|
+
if (!this._octree) {
|
|
2205
|
+
this.buildOctreeFromBoxIndex();
|
|
2206
|
+
}
|
|
2207
|
+
if (!this._octree) return { pairs };
|
|
2208
|
+
this._boxIndex.forEach((box, id) => {
|
|
2209
|
+
sourceEntries.push({
|
|
2210
|
+
id: String(id),
|
|
2211
|
+
box,
|
|
2212
|
+
});
|
|
2213
|
+
});
|
|
2108
2214
|
}
|
|
2109
|
-
if (!this._octree) return { pairs };
|
|
2110
2215
|
|
|
2111
|
-
|
|
2216
|
+
sourceEntries.forEach(({ id: idA, box: boxA }) => {
|
|
2112
2217
|
if (!this._isCollisionBoxAvailable(boxA)) return;
|
|
2113
2218
|
|
|
2114
|
-
const hits = this.
|
|
2219
|
+
const hits = this._queryOctreeByBoxWithRoot(root, boxA);
|
|
2115
2220
|
for (let i = 0; i < hits.length; i++) {
|
|
2116
2221
|
const item = hits[i];
|
|
2117
2222
|
if (!item || String(item.id) === String(idA)) continue;
|
|
2118
2223
|
const boxB = item.box;
|
|
2119
2224
|
if (!this._isCollisionBoxMatched(boxA, boxB)) continue;
|
|
2120
2225
|
|
|
2226
|
+
if (dedupePairKeySet) {
|
|
2227
|
+
const pairKey = `${String(idA)}__${String(item.id)}`;
|
|
2228
|
+
if (dedupePairKeySet.has(pairKey)) continue;
|
|
2229
|
+
dedupePairKeySet.add(pairKey);
|
|
2230
|
+
}
|
|
2231
|
+
|
|
2121
2232
|
pairs.push({
|
|
2122
2233
|
idA: this._formatCollisionPairId(idA),
|
|
2123
2234
|
idB: this._formatCollisionPairId(item.id),
|
|
@@ -4469,8 +4580,19 @@ export default {
|
|
|
4469
4580
|
if (this.threeMeasure) {
|
|
4470
4581
|
this.threeMeasure.updateParams(width, height);
|
|
4471
4582
|
}
|
|
4583
|
+
this.updateMeshLineResolution(width, height);
|
|
4472
4584
|
}
|
|
4473
4585
|
},
|
|
4586
|
+
updateMeshLineResolution(width, height) {
|
|
4587
|
+
if (!this.modelGroup || !width || !height) return;
|
|
4588
|
+
this.modelGroup.traverse(child => {
|
|
4589
|
+
const material = child && child.material;
|
|
4590
|
+
if (material && material.type === 'MeshLineMaterial' && material.resolution) {
|
|
4591
|
+
material.resolution.set(width, height);
|
|
4592
|
+
material.needsUpdate = true;
|
|
4593
|
+
}
|
|
4594
|
+
});
|
|
4595
|
+
},
|
|
4474
4596
|
setModelCenter(target, options = {}) {
|
|
4475
4597
|
// return
|
|
4476
4598
|
let box3;
|
|
@@ -6755,6 +6877,13 @@ export default {
|
|
|
6755
6877
|
const loadingState = this.noObserver
|
|
6756
6878
|
? this.noObserver.batchLoadingState
|
|
6757
6879
|
: this.batchLoadingState;
|
|
6880
|
+
const rect = this.renderer
|
|
6881
|
+
? this.renderer.domElement.getBoundingClientRect()
|
|
6882
|
+
: { width: window.innerWidth, height: window.innerHeight };
|
|
6883
|
+
options.meshLineResolution = {
|
|
6884
|
+
width: rect.width || window.innerWidth || 1,
|
|
6885
|
+
height: rect.height || window.innerHeight || 1,
|
|
6886
|
+
};
|
|
6758
6887
|
// 如果已经在加载中,先停止之前的加载
|
|
6759
6888
|
if (loadingState.isLoading) {
|
|
6760
6889
|
this.stopBatchLoading('restart');
|
|
@@ -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)
|
|
@@ -1068,10 +1068,10 @@ function draw3Dmodel(
|
|
|
1068
1068
|
* @param {String} instanceName - 模型实例的名称
|
|
1069
1069
|
* @returns {Object} - 包含所有 2D 模型的组对象
|
|
1070
1070
|
*/
|
|
1071
|
-
function draw2Dmodel(geom, instanceName, instanceCount, nColor, nOpacity, options = {}) {
|
|
1072
|
-
const points = geom.points;
|
|
1073
|
-
const normals = geom.normals;
|
|
1074
|
-
const geometry = new THREE.BufferGeometry();
|
|
1071
|
+
function draw2Dmodel(geom, instanceName, instanceCount, nColor, nOpacity, options = {}) {
|
|
1072
|
+
const points = geom.points;
|
|
1073
|
+
const normals = geom.normals;
|
|
1074
|
+
const geometry = new THREE.BufferGeometry();
|
|
1075
1075
|
|
|
1076
1076
|
if (points && points.length) {
|
|
1077
1077
|
const position = new Float32Array(points);
|
|
@@ -1082,13 +1082,18 @@ function draw2Dmodel(geom, instanceName, instanceCount, nColor, nOpacity, option
|
|
|
1082
1082
|
const normal = new Float32Array(normals);
|
|
1083
1083
|
geometry.setAttribute('normal', new THREE.BufferAttribute(normal, 3));
|
|
1084
1084
|
}
|
|
1085
|
-
|
|
1086
|
-
const { color, linewidth } = geom.prop;
|
|
1087
|
-
const formatLinewidth = (linewidth < 1 ? linewidth * 50 : linewidth) || 5;
|
|
1088
|
-
const
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1085
|
+
|
|
1086
|
+
const { color, linewidth } = geom.prop;
|
|
1087
|
+
const formatLinewidth = (linewidth < 1 ? linewidth * 50 : linewidth) || 5;
|
|
1088
|
+
const meshLineResolution = options.meshLineResolution || {};
|
|
1089
|
+
const resolutionWidth = meshLineResolution.width || window.innerWidth || 1;
|
|
1090
|
+
const resolutionHeight = meshLineResolution.height || window.innerHeight || 1;
|
|
1091
|
+
const material = new MeshLineMaterial({
|
|
1092
|
+
color: new THREE.Color(`rgb(${color[0]}, ${color[1]}, ${color[2]})`),
|
|
1093
|
+
lineWidth: formatLinewidth,
|
|
1094
|
+
resolution: new THREE.Vector2(resolutionWidth, resolutionHeight),
|
|
1095
|
+
sizeAttenuation: 0,
|
|
1096
|
+
});
|
|
1092
1097
|
|
|
1093
1098
|
const lineGeometry = new MeshLineGeometry();
|
|
1094
1099
|
lineGeometry.setPoints(geometry);
|