fl-web-component 2.0.9 → 2.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- @charset "UTF-8";.fl-model-containor[data-v-a7768a4e]{width:100%;height:100%;position:relative;cursor:pointer}[data-v-a7768a4e] .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-a7768a4e] .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-a7768a4e] .circle-tag{width:10px;height:10px;margin-top:5px;border-radius:50%;background-color:#ff5000}[data-v-a7768a4e] .measure-label-font{word-break:break-all}[data-v-a7768a4e] .mark-label-img{padding-top:5px;width:20px;height:20px}.loading-overlay[data-v-a7768a4e]{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-a7768a4e]{opacity:1;visibility:visible}.loading-content[data-v-a7768a4e]{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-a7768a4e]{width:40px;height:40px;border:4px solid #f3f3f3;border-top:4px solid #409eff;border-radius:50%;-webkit-animation:spin-a7768a4e 1s linear infinite;animation:spin-a7768a4e 1s linear infinite;margin:0 auto 20px}@-webkit-keyframes spin-a7768a4e{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes spin-a7768a4e{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.loading-text[data-v-a7768a4e]{font-size:16px;font-weight:500;color:#333;margin-bottom:20px}.loading-this.progress-bar[data-v-a7768a4e]{width:100%;height:8px;background-color:#f0f0f0;border-radius:4px;overflow:hidden;margin-bottom:15px}.loading-this.progress-fill[data-v-a7768a4e]{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-a7768a4e]{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-21bcf2d9]{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-bfae141c]{width:100%;height:100%;position:relative;cursor:pointer}[data-v-bfae141c] .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-bfae141c] .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-bfae141c] .circle-tag{width:10px;height:10px;margin-top:5px;border-radius:50%;background-color:#ff5000}[data-v-bfae141c] .measure-label-font{word-break:break-all}[data-v-bfae141c] .mark-label-img{padding-top:5px;width:20px;height:20px}.loading-overlay[data-v-bfae141c]{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-bfae141c]{opacity:1;visibility:visible}.loading-content[data-v-bfae141c]{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-bfae141c]{width:40px;height:40px;border:4px solid #f3f3f3;border-top:4px solid #409eff;border-radius:50%;-webkit-animation:spin-bfae141c 1s linear infinite;animation:spin-bfae141c 1s linear infinite;margin:0 auto 20px}@-webkit-keyframes spin-bfae141c{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes spin-bfae141c{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.loading-text[data-v-bfae141c]{font-size:16px;font-weight:500;color:#333;margin-bottom:20px}.loading-this.progress-bar[data-v-bfae141c]{width:100%;height:8px;background-color:#f0f0f0;border-radius:4px;overflow:hidden;margin-bottom:15px}.loading-this.progress-fill[data-v-bfae141c]{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-bfae141c]{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-21bcf2d9]{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.9",
3
+ "version": "2.0.11",
4
4
  "scripts": {
5
5
  "postinstall": "patch-package",
6
6
  "tip1": "仅调试本组件不涉及业务组件,请执行dev",
@@ -4126,7 +4126,9 @@ export default {
4126
4126
  case 'color':
4127
4127
  targetObj.forEach(children => {
4128
4128
  if (children.isMesh) {
4129
- const { instanceIndex } = children.userData.instancesMap.get(instanceId);
4129
+ const instanceInfo = children.userData?.instancesMap?.get(instanceId);
4130
+ if (!instanceInfo) return;
4131
+ const { instanceIndex } = instanceInfo;
4130
4132
  children.setColorAt(instanceIndex, new this.THREE.Color(ele.attr[key]));
4131
4133
  children.instanceColor.needsUpdate = true;
4132
4134
  if (!this.isCurrentVisible(instanceId, children)) {
@@ -4164,6 +4166,7 @@ export default {
4164
4166
  }
4165
4167
  targetObj.forEach(children => {
4166
4168
  const instanceInfo = children.userData.instancesMap.get(instanceId);
4169
+ if (!instanceInfo) return;
4167
4170
  const { instanceIndex, copyMatrix } = instanceInfo;
4168
4171
  const nextVisible = requestedVisible && this.isSourceVisible(instanceId, children);
4169
4172
  instanceInfo.visible = nextVisible;
@@ -4190,7 +4193,9 @@ export default {
4190
4193
  targetObj.forEach(children => {
4191
4194
  if (children.isMesh) {
4192
4195
  const opacity = children.geometry.attributes.opacity.array;
4193
- const { instanceIndex } = children.userData.instancesMap.get(instanceId);
4196
+ const instanceInfo = children.userData?.instancesMap?.get(instanceId);
4197
+ if (!instanceInfo) return;
4198
+ const { instanceIndex } = instanceInfo;
4194
4199
  opacity[instanceIndex] = ele.attr[key];
4195
4200
  children.geometry.attributes.opacity.needsUpdate = true;
4196
4201
  }
@@ -4260,7 +4265,9 @@ export default {
4260
4265
  let targetObj = this.getObjectByName(instanceId);
4261
4266
  targetObj.forEach(children => {
4262
4267
  if (children.isMesh) {
4263
- const { instanceIndex } = children.userData.instancesMap.get(instanceId);
4268
+ const instanceInfo = children.userData?.instancesMap?.get(instanceId);
4269
+ if (!instanceInfo) return;
4270
+ const { instanceIndex } = instanceInfo;
4264
4271
  if (!this.isSourceVisible(instanceId, children)) {
4265
4272
  this.removeOutlineObject(children, instanceIndex);
4266
4273
  return;
@@ -4284,7 +4291,9 @@ export default {
4284
4291
  let targetObj = this.getObjectByName(instanceId);
4285
4292
  targetObj.forEach(children => {
4286
4293
  if (children.isMesh) {
4287
- const { instanceIndex } = children.userData.instancesMap.get(instanceId);
4294
+ const instanceInfo = children.userData?.instancesMap?.get(instanceId);
4295
+ if (!instanceInfo) return;
4296
+ const { instanceIndex } = instanceInfo;
4288
4297
  this.removeOutlineObject(children, instanceIndex);
4289
4298
  }
4290
4299
  });
@@ -4337,7 +4346,9 @@ export default {
4337
4346
  case 'nColor':
4338
4347
  targetObj.forEach(children => {
4339
4348
  if (children.isMesh) {
4340
- const { instanceIndex } = children.userData.instancesMap.get(instanceId);
4349
+ const instanceInfo = children.userData?.instancesMap?.get(instanceId);
4350
+ if (!instanceInfo) return;
4351
+ const { instanceIndex } = instanceInfo;
4341
4352
  children.setColorAt(instanceIndex, children.material.userData['oColor']);
4342
4353
  children.instanceColor.needsUpdate = true;
4343
4354
  children.material.userData[key] = children.material.userData['oColor'];
@@ -4360,7 +4371,9 @@ export default {
4360
4371
  case 'color':
4361
4372
  obj.forEach(children => {
4362
4373
  if (children.isMesh) {
4363
- const { instanceIndex } = children.userData.instancesMap.get(instanceId);
4374
+ const instanceInfo = children.userData?.instancesMap?.get(instanceId);
4375
+ if (!instanceInfo) return;
4376
+ const { instanceIndex } = instanceInfo;
4364
4377
  children.setColorAt(instanceIndex, children.material.userData.nColor);
4365
4378
  children.instanceColor.needsUpdate = true;
4366
4379
  if (this.outlinePass) {
@@ -4377,6 +4390,7 @@ export default {
4377
4390
  case 'visible': {
4378
4391
  obj.forEach(children => {
4379
4392
  const instanceInfo = children.userData.instancesMap.get(instanceId);
4393
+ if (!instanceInfo) return;
4380
4394
  const { instanceIndex, copyMatrix } = instanceInfo;
4381
4395
  if (this.isSourceVisible(instanceId, children)) {
4382
4396
  instanceInfo.visible = true;
@@ -4397,7 +4411,9 @@ export default {
4397
4411
  case 'opacity':
4398
4412
  obj.forEach(children => {
4399
4413
  if (children.isMesh) {
4400
- const { instanceIndex } = children.userData.instancesMap.get(instanceId);
4414
+ const instanceInfo = children.userData?.instancesMap?.get(instanceId);
4415
+ if (!instanceInfo) return;
4416
+ const { instanceIndex } = instanceInfo;
4401
4417
  const opacity = children.geometry.attributes.opacity.array;
4402
4418
  opacity[instanceIndex] = children.material.userData.nOpacity;
4403
4419
  children.geometry.attributes.opacity.needsUpdate = true;
@@ -4590,11 +4606,31 @@ export default {
4590
4606
  */
4591
4607
  getObjectByName(name, passType = 'group') {
4592
4608
  if (!this.scene) return [];
4609
+ if (Array.isArray(name)) {
4610
+ const result = [];
4611
+ const exist = new Set();
4612
+ name.forEach(item => {
4613
+ this.getObjectByName(item, passType).forEach(obj => {
4614
+ if (!obj || exist.has(obj.uuid)) return;
4615
+ exist.add(obj.uuid);
4616
+ result.push(obj);
4617
+ });
4618
+ });
4619
+ return result;
4620
+ }
4593
4621
  let object = [];
4622
+ const added = new Set();
4594
4623
  const instancedMeshProps = instanceToInstancedMeshMap.get(name);
4595
4624
  this.scene.traverse(item => {
4596
4625
  const tempName = instancedMeshProps ? instancedMeshProps.drawObjectId : name;
4597
- if (item.name == tempName && item.type.toLowerCase() != passType.toLowerCase()) {
4626
+ const itemType = item.type ? item.type.toLowerCase() : '';
4627
+ const isPassType = itemType == passType.toLowerCase();
4628
+ const hasTargetInstance =
4629
+ item.userData &&
4630
+ item.userData.instancesMap instanceof Map &&
4631
+ item.userData.instancesMap.has(name);
4632
+ if (!isPassType && (item.name == tempName || hasTargetInstance) && !added.has(item.uuid)) {
4633
+ added.add(item.uuid);
4598
4634
  object.push(item);
4599
4635
  }
4600
4636
  });
@@ -5315,11 +5351,71 @@ export default {
5315
5351
  objClipp2 && (objClipp2[4].constant = -d);
5316
5352
  });
5317
5353
  },
5354
+ getFirstPersonMoveSpeed(customMoveSpeed) {
5355
+ const defaultMoveSpeed = 800;
5356
+ const optionMoveSpeed =
5357
+ Number.isFinite(customMoveSpeed) && customMoveSpeed > 0
5358
+ ? customMoveSpeed
5359
+ : defaultMoveSpeed;
5360
+ const minMoveSpeed = Math.max(450, optionMoveSpeed * 0.1);
5361
+ const maxMoveSpeed = Math.max(16000, optionMoveSpeed * 2);
5362
+ let nextMoveSpeed = optionMoveSpeed;
5363
+
5364
+ if (
5365
+ this.sceneBoundingBox &&
5366
+ this.sceneBoundingBox.isBox3 &&
5367
+ !this.sceneBoundingBox.isEmpty()
5368
+ ) {
5369
+ const size = this.sceneBoundingBox.getSize(new this.THREE.Vector3());
5370
+ const horizontalSpan = Math.max(size.x, size.z);
5371
+ if (Number.isFinite(horizontalSpan) && horizontalSpan > 0) {
5372
+ const moveScale = Math.sqrt(horizontalSpan / 2500);
5373
+ // 使用平方根缩放,避免小场景过快,同时让大场景提升更明显
5374
+ nextMoveSpeed = optionMoveSpeed * Math.min(Math.max(moveScale, 0.1), 2);
5375
+ }
5376
+ }
5377
+
5378
+ return Math.min(Math.max(nextMoveSpeed, minMoveSpeed), maxMoveSpeed);
5379
+ },
5380
+ getFirstPersonJumpConfig(customJumpSpeed) {
5381
+ const defaultJumpSpeed = 350;
5382
+ const optionJumpSpeed =
5383
+ Number.isFinite(customJumpSpeed) && customJumpSpeed > 0 ? customJumpSpeed : defaultJumpSpeed;
5384
+ const minJumpSpeed = Math.max(220, optionJumpSpeed * 0.45);
5385
+ const maxJumpSpeed = Math.max(1800, optionJumpSpeed * 3.6);
5386
+ const defaultGravity = 980;
5387
+ let nextJumpSpeed = optionJumpSpeed;
5388
+
5389
+ if (
5390
+ this.sceneBoundingBox &&
5391
+ this.sceneBoundingBox.isBox3 &&
5392
+ !this.sceneBoundingBox.isEmpty()
5393
+ ) {
5394
+ const size = this.sceneBoundingBox.getSize(new this.THREE.Vector3());
5395
+ const verticalSpan = size.y;
5396
+ const horizontalSpan = Math.max(size.x, size.z);
5397
+ const dominantSpan = Math.max(verticalSpan, horizontalSpan * 0.5);
5398
+ if (Number.isFinite(dominantSpan) && dominantSpan > 0) {
5399
+ const jumpScale = Math.sqrt(dominantSpan / 1000);
5400
+ // 跳跃也按场景尺寸平滑缩放,避免小场景过高、大场景过低
5401
+ nextJumpSpeed = optionJumpSpeed * Math.min(Math.max(jumpScale, 0.45), 3.6);
5402
+ }
5403
+ }
5404
+
5405
+ nextJumpSpeed = Math.min(Math.max(nextJumpSpeed, minJumpSpeed), maxJumpSpeed);
5406
+
5407
+ return {
5408
+ jumpSpeed: nextJumpSpeed,
5409
+ gravity: Math.max(nextJumpSpeed * 2.2, defaultGravity),
5410
+ };
5411
+ },
5318
5412
  // 开启第一视角
5319
5413
  startFirstPer(options) {
5320
5414
  let { moveSpeed = 200, jumpSpeed = 200 } = options || {};
5321
- this.removeSpeed = moveSpeed;
5322
- this.upSpeed = jumpSpeed;
5415
+ this.removeSpeed = this.getFirstPersonMoveSpeed(moveSpeed);
5416
+ const jumpConfig = this.getFirstPersonJumpConfig(jumpSpeed);
5417
+ this.upSpeed = jumpConfig.jumpSpeed;
5418
+ this.firstPersonGravity = jumpConfig.gravity;
5323
5419
 
5324
5420
  this.clock = new this.THREE.Clock();
5325
5421
  this.downRaycaster = new this.THREE.Raycaster(
@@ -5356,7 +5452,9 @@ export default {
5356
5452
  // 锁定
5357
5453
  this.pointControls.addEventListener('lock', () => {
5358
5454
  this.detachTransformControls();
5359
- this.cameraControls.enabled = false;
5455
+ if (this.cameraControls) {
5456
+ this.cameraControls.enabled = false;
5457
+ }
5360
5458
  window.addEventListener('keydown', this.onKeyDown, false);
5361
5459
  window.addEventListener('keyup', this.onKeyUp, false);
5362
5460
  this.unbindScenePointerEvents();
@@ -5367,9 +5465,13 @@ export default {
5367
5465
  // 解锁
5368
5466
  this.pointControls.addEventListener('unlock', () => {
5369
5467
  this.firstPerSign = false;
5370
- this.cameraControls.enabled = true;
5468
+ if (this.cameraControls) {
5469
+ this.cameraControls.enabled = true;
5470
+ }
5371
5471
  // 返回初始视角
5372
- this.home();
5472
+ if (this.cameraControls && this.camera && this.sceneBoundingBox) {
5473
+ this.home();
5474
+ }
5373
5475
  try {
5374
5476
  if (this._onFirstPersonChange && this.pointControls) {
5375
5477
  this.pointControls.removeEventListener('change', this._onFirstPersonChange);
@@ -5381,8 +5483,12 @@ export default {
5381
5483
  setTimeout(() => {
5382
5484
  window.removeEventListener('keydown', this.onKeyDown);
5383
5485
  window.removeEventListener('keyup', this.onKeyUp);
5384
- this.bindScenePointerEvents();
5385
- this.ensureTransformSelectionValid();
5486
+ if (this.renderer && this.renderer.domElement) {
5487
+ this.bindScenePointerEvents();
5488
+ }
5489
+ if (this.scene) {
5490
+ this.ensureTransformSelectionValid();
5491
+ }
5386
5492
  // this.timeRender()
5387
5493
  }, 0);
5388
5494
  if (typeof this._cameraChangeObserver === 'function') {
@@ -5399,17 +5505,18 @@ export default {
5399
5505
  let control = this.pointControls.object;
5400
5506
  // 获取刷新时间
5401
5507
  let delta = this.clock.getDelta();
5508
+ const forwardMoveScale = 0.35;
5402
5509
  // velocity每次的速度,为了保证有过渡
5403
5510
  this.velocity.x -= this.velocity.x * 10.0 * delta;
5404
5511
  this.velocity.z -= this.velocity.z * 10.0 * delta;
5405
- this.velocity.y -= 9.8 * 100.0 * delta; // 默认下降的速度
5512
+ this.velocity.y -= (this.firstPersonGravity || 9.8 * 100.0) * delta; // 默认下降的速度
5406
5513
  // 获取当前按键的方向并获取朝哪个方向移动
5407
5514
  this.direction.z = Number(this.moveForward) - Number(this.moveBackward);
5408
5515
  this.direction.x = Number(this.moveRight) - Number(this.moveLeft);
5409
5516
  // 将法向量的值归一化
5410
5517
  this.direction.normalize();
5411
5518
  if (this.moveForward || this.moveBackward)
5412
- this.velocity.z -= this.direction.z * this.removeSpeed * delta;
5519
+ this.velocity.z -= this.direction.z * this.removeSpeed * forwardMoveScale * delta;
5413
5520
  if (this.moveLeft || this.moveRight)
5414
5521
  this.velocity.x -= this.direction.x * this.removeSpeed * delta;
5415
5522
  // }
@@ -5428,8 +5535,8 @@ export default {
5428
5535
  this.canJump = true;
5429
5536
  }
5430
5537
  // 根据速度值移动控制器
5431
- this.pointControls.this.moveRight(-this.velocity.x * delta);
5432
- this.pointControls.this.moveForward(-this.velocity.z * delta);
5538
+ this.pointControls.moveRight(-this.velocity.x * delta);
5539
+ this.pointControls.moveForward(-this.velocity.z * delta);
5433
5540
  control.position.y += this.velocity.y * delta;
5434
5541
  // 保证控制器的y轴在平面上
5435
5542
  if (control.position.y < 3 - 0 / 10) {
@@ -5480,9 +5587,9 @@ export default {
5480
5587
  break;
5481
5588
  // 跳跃
5482
5589
  case 32:
5483
- if (this.canJump && spaceUp) this.velocity.y += this.upSpeed;
5590
+ if (this.canJump && this.spaceUp) this.velocity.y += this.upSpeed;
5484
5591
  this.canJump = false;
5485
- spaceUp = false;
5592
+ this.spaceUp = false;
5486
5593
  break;
5487
5594
  }
5488
5595
  },
@@ -5512,7 +5619,7 @@ export default {
5512
5619
  break;
5513
5620
  // 跳跃
5514
5621
  case 32:
5515
- spaceUp = true;
5622
+ this.spaceUp = true;
5516
5623
  break;
5517
5624
  }
5518
5625
  },
@@ -5545,9 +5652,9 @@ export default {
5545
5652
  /*
5546
5653
  参数: type: '', distance、area、angle、height, 暂时只提供距离、面积、角度、高度这四种方式
5547
5654
  */
5548
- openMeasure(type) {
5655
+ openMeasure(type, isClear = false) {
5549
5656
  if (this.threeMeasure) {
5550
- this.threeMeasure.close(false);
5657
+ this.threeMeasure.close(isClear);
5551
5658
  this.threeMeasure = null;
5552
5659
  }
5553
5660
  this.measureFlag = true;
@@ -5608,6 +5715,20 @@ export default {
5608
5715
  // 移除键盘事件监听器
5609
5716
  document.removeEventListener('keydown', this.handleMeasureKeyDown, false);
5610
5717
  },
5718
+ // 增加一个清除所有测量结果的方法 使用统一名字的
5719
+ clearMeasureByName() {
5720
+ let list = this.getObjectByName('measureObj')
5721
+ list.forEach(item => {
5722
+ if (item.geometry) {
5723
+ item.geometry.dispose();
5724
+ item.material.dispose();
5725
+ }
5726
+ if (this.scene) this.scene.remove(item);
5727
+ })
5728
+ if (this.threeMeasure) {
5729
+ this.threeMeasure.clear();
5730
+ }
5731
+ },
5611
5732
  handleMeasureKeyDown(event) {
5612
5733
  // 检查是否按下了ESC键
5613
5734
  const keyParam = {
@@ -24,7 +24,7 @@ var MeasureAngle = function (renderer, scene, camera, width, height) {
24
24
  this.firstTime = 0;
25
25
  // 创建一个辅助平面来捕获鼠标事件
26
26
  this.plane = new THREE.Plane(new THREE.Vector3(0, 0, 1), 0);
27
-
27
+ this.measureName = 'measureObj'
28
28
  // this.POINT_MATERIAL = new THREE.PointsMaterial({ color: 0xff5000, size: 1, opacity: 0.6, transparent: true, depthWrite: false, depthTest: false })
29
29
  // this.LINE_MATERIAL = new THREE.LineBasicMaterial({ color: 0xff0000, linewidth: 3, opacity: 0.8, transparent: true, side: THREE.DoubleSide, depthWrite: false, depthTest: false })
30
30
  };
@@ -89,6 +89,7 @@ MeasureAngle.prototype = {
89
89
  const geom = new THREE.SphereGeometry(config.size || 0.3, 28, 28);
90
90
  const sphere = new THREE.Mesh(geom, mesh);
91
91
  sphere.frustumCulled = false;
92
+ sphere.name = this.measureName
92
93
  sphere.position.set(pos.x, pos.y, pos.z);
93
94
  return sphere;
94
95
  },
@@ -98,10 +99,11 @@ MeasureAngle.prototype = {
98
99
  linewidth: 10,
99
100
  depthTest: false,
100
101
  depthWrite: false,
101
- transparent: true,
102
+ transparent: true
102
103
  });
103
104
  const lineGeometry = new THREE.BufferGeometry().setFromPoints([p1, p2]);
104
105
  const line = new THREE.Line(lineGeometry, lineMaterial);
106
+ line.name = this.measureName;
105
107
  line.renderOrder = 999;
106
108
  line.frustumCulled = false;
107
109
  return line;
@@ -111,6 +113,7 @@ MeasureAngle.prototype = {
111
113
  div.className = name;
112
114
  div.textContent = text;
113
115
  const divLabel = new CSS2DObject(div);
116
+ divLabel.name = this.measureName
114
117
  divLabel.position.set(position.x, position.y, position.z);
115
118
  return divLabel;
116
119
  },
@@ -171,6 +174,7 @@ MeasureAngle.prototype = {
171
174
  div.className = 'tips-label';
172
175
  div.textContent = label;
173
176
  const tipsLabel = new CSS2DObject(div);
177
+ tipsLabel.name = this.measureName
174
178
  tipsLabel.position.set(position.x + 0.1, position.y, position.z + 0.05);
175
179
  return tipsLabel;
176
180
  },
@@ -254,6 +258,22 @@ MeasureAngle.prototype = {
254
258
  }
255
259
  this.renderer.domElement.style.cursor = 'pointer';
256
260
  },
261
+ clear() {
262
+ this.remove(this.points);
263
+ this.remove(this.polyline);
264
+ this.remove(this.labels);
265
+ this.remove(this.curves);
266
+ this.pointArray.splice(0);
267
+ this.points.splice(0);
268
+ this.polyline.splice(0);
269
+ this.labels.splice(0);
270
+ this.curves.splice(0);
271
+ this.tempPoints = undefined;
272
+ this.tempLabel = undefined;
273
+ this.tempLine = undefined;
274
+ this.scene.remove(this.tipsLabel);
275
+ this.tipsLabel = undefined;
276
+ },
257
277
  remove(array) {
258
278
  for (let index = 0; index < array.length; index++) {
259
279
  const element = array[index];
@@ -22,7 +22,7 @@ var MeasureArea = function (renderer, scene, camera, width, height) {
22
22
  this.width = width;
23
23
  this.height = height;
24
24
  this.firstTime = 0;
25
-
25
+ this.measureName = 'measureObj'
26
26
  // 创建一个辅助平面来捕获鼠标事件
27
27
  this.plane = new THREE.Plane(new THREE.Vector3(0, 0, 1), 0);
28
28
  };
@@ -88,10 +88,11 @@ MeasureArea.prototype = {
88
88
  linewidth: 20,
89
89
  depthTest: false,
90
90
  depthWrite: false,
91
- transparent: true,
91
+ transparent: true
92
92
  });
93
93
  const lineGeometry = new THREE.BufferGeometry().setFromPoints([p1, p2]);
94
94
  const line = new THREE.Line(lineGeometry, lineMaterial);
95
+ line.name = this.measureName;
95
96
  line.renderOrder = 999;
96
97
  line.frustumCulled = false;
97
98
  return line;
@@ -101,6 +102,7 @@ MeasureArea.prototype = {
101
102
  div.className = name;
102
103
  div.textContent = text;
103
104
  const divLabel = new CSS2DObject(div);
105
+ divLabel.name = this.measureName
104
106
  divLabel.position.set(position.x, position.y, position.z);
105
107
  return divLabel;
106
108
  },
@@ -163,6 +165,7 @@ MeasureArea.prototype = {
163
165
  div.className = 'tips-label';
164
166
  div.textContent = label;
165
167
  const tipsLabel = new CSS2DObject(div);
168
+ tipsLabel.name = this.measureName
166
169
  tipsLabel.position.set(position.x + 0.1, position.y, position.z + 0.05);
167
170
  return tipsLabel;
168
171
  },
@@ -250,6 +253,21 @@ MeasureArea.prototype = {
250
253
 
251
254
  this.renderer.domElement.style.cursor = 'pointer';
252
255
  },
256
+ clear() {
257
+ this.remove(this.points);
258
+ this.remove(this.polyline);
259
+ this.remove(this.labels);
260
+ this.remove(this.polygons);
261
+ this.pointArray.splice(0);
262
+ this.points.splice(0);
263
+ this.polyline.splice(0);
264
+ this.labels.splice(0);
265
+ this.tempPoints = undefined;
266
+ this.tempLabel = undefined;
267
+ this.tempLine = undefined;
268
+ this.scene.remove(this.tipsLabel);
269
+ this.tipsLabel = undefined;
270
+ },
253
271
  remove(array) {
254
272
  for (let index = 0; index < array.length; index++) {
255
273
  const element = array[index];
@@ -304,10 +322,12 @@ MeasureArea.prototype = {
304
322
  transparent: true,
305
323
  opacity: 0.5,
306
324
  side: THREE.DoubleSide,
325
+ name: this.measureName
307
326
  });
308
327
  const mesh = new THREE.Mesh(geom, material);
309
328
  mesh.frustumCulled = false;
310
- mesh.name = 'polygonMesh';
329
+ // mesh.name = 'polygonMesh';
330
+ mesh.name = _this.measureName;
311
331
  _this.polygonMesh = mesh;
312
332
  _this.scene.add(mesh);
313
333
  _this.polygons.push(mesh);
@@ -20,7 +20,7 @@ var MeasureDistance = function (renderer, scene, camera, width, height) {
20
20
  this.width = width;
21
21
  this.height = height;
22
22
  this.firstTime = 0;
23
-
23
+ this.measureName = 'measureObj'
24
24
  // 创建一个辅助平面来捕获鼠标事件
25
25
  this.plane = new THREE.Plane(new THREE.Vector3(0, 0, 1), 0);
26
26
  };
@@ -91,6 +91,7 @@ MeasureDistance.prototype = {
91
91
  });
92
92
  const lineGeometry = new THREE.BufferGeometry().setFromPoints([p1, p2]);
93
93
  const line = new THREE.Line(lineGeometry, lineMaterial);
94
+ line.name = this.measureName;
94
95
  line.renderOrder = 999;
95
96
  line.frustumCulled = false;
96
97
  return line;
@@ -100,6 +101,7 @@ MeasureDistance.prototype = {
100
101
  div.className = name;
101
102
  div.textContent = text;
102
103
  const divLabel = new CSS2DObject(div);
104
+ divLabel.name = this.measureName
103
105
  divLabel.position.set(position.x, position.y, position.z);
104
106
  return divLabel;
105
107
  },
@@ -147,6 +149,7 @@ MeasureDistance.prototype = {
147
149
  div.className = 'tips-label';
148
150
  div.textContent = label;
149
151
  const tipsLabel = new CSS2DObject(div);
152
+ tipsLabel.name = this.measureName
150
153
  tipsLabel.position.set(position.x + 0.1, position.y, position.z + 0.05);
151
154
  return tipsLabel;
152
155
  },
@@ -154,6 +157,7 @@ MeasureDistance.prototype = {
154
157
  this.firstTime = new Date().getTime();
155
158
  },
156
159
  click(e) {
160
+ console.log(_this.points)
157
161
  let lastTime = new Date().getTime();
158
162
  if (lastTime - this.firstTime < 300) {
159
163
  if (_this.isCompleted) {
@@ -230,6 +234,21 @@ MeasureDistance.prototype = {
230
234
  }
231
235
  this.renderer.domElement.style.cursor = 'pointer';
232
236
  },
237
+ clear() {
238
+ this.remove(this.points);
239
+ this.remove(this.polyline);
240
+ this.remove(this.labels);
241
+ this.pointArray.splice(0);
242
+ this.points.splice(0);
243
+ this.polyline.splice(0);
244
+ this.labels.splice(0);
245
+ this.tempPoints = undefined;
246
+ this.tempLabel = undefined;
247
+ this.tempLine = undefined;
248
+ this.scene.remove(this.tipsLabel);
249
+ this.tipsLabel = undefined;
250
+ this.firstTime = 0;
251
+ },
233
252
  remove(array) {
234
253
  for (let index = 0; index < array.length; index++) {
235
254
  const element = array[index];
@@ -22,6 +22,7 @@ var MeasureHeight = function (renderer, scene, camera, width, height) {
22
22
  this.height = height;
23
23
  this.firstTime = 0;
24
24
  this.plane = new THREE.Plane(new THREE.Vector3(0, 0, 1), 0);
25
+ this.measureName = 'measureObj'
25
26
  };
26
27
 
27
28
  MeasureHeight.prototype = {
@@ -82,10 +83,11 @@ MeasureHeight.prototype = {
82
83
  linewidth: 15,
83
84
  depthTest: false,
84
85
  depthWrite: false,
85
- transparent: true,
86
+ transparent: true
86
87
  });
87
88
  const lineGeometry = new THREE.BufferGeometry().setFromPoints([p1, p2]);
88
89
  const line = new THREE.Line(lineGeometry, lineMaterial);
90
+ line.name = this.measureName;
89
91
  line.renderOrder = 999;
90
92
  line.frustumCulled = false;
91
93
  return line;
@@ -95,6 +97,7 @@ MeasureHeight.prototype = {
95
97
  div.className = name;
96
98
  div.textContent = text;
97
99
  const divLabel = new CSS2DObject(div);
100
+ divLabel.name = this.measureName
98
101
  divLabel.position.set(position.x, position.y, position.z);
99
102
  return divLabel;
100
103
  },
@@ -125,6 +128,7 @@ MeasureHeight.prototype = {
125
128
  div.className = 'tips-label';
126
129
  div.textContent = label;
127
130
  const tipsLabel = new CSS2DObject(div);
131
+ tipsLabel.name = this.measureName
128
132
  tipsLabel.position.set(position.x + 0.1, position.y, position.z + 0.05);
129
133
  return tipsLabel;
130
134
  },
@@ -184,6 +188,18 @@ MeasureHeight.prototype = {
184
188
  this.renderer.domElement.style.cursor = 'pointer';
185
189
  this.firstTime = 0;
186
190
  }
191
+
192
+ },
193
+ clear() {
194
+ this.remove(this.points);
195
+ this.remove(this.polyline);
196
+ this.remove(this.labels);
197
+ this.pointArray.splice(0);
198
+ this.points.splice(0);
199
+ this.polyline.splice(0);
200
+ this.labels.splice(0);
201
+ this.scene.remove(this.tipsLabel);
202
+ this.tipsLabel = undefined;
187
203
  },
188
204
  remove(array) {
189
205
  for (let index = 0; index < array.length; index++) {