fl-web-component 2.0.0-beta.7 → 2.0.0-beta.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +30 -1
- package/dist/fl-web-component.common.js +116 -103
- 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-flcanvas/components/entityFormatting.js +74 -48
- package/packages/components/com-graphics/index.vue +4 -1
- package/src/utils/flgltf-parser.js +245 -245
|
@@ -1 +1 @@
|
|
|
1
|
-
@charset "UTF-8";#fl-model[data-v-268ad8af]{width:100%;height:100%;cursor:pointer}[data-v-268ad8af] .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-268ad8af] .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-268ad8af] .circle-tag{width:10px;height:10px;margin-top:5px;border-radius:50%;background-color:#ff5000}[data-v-268ad8af] .measure-label-font{word-break:break-all}[data-v-268ad8af] .mark-label-img{padding-top:5px;width:20px;height:20px}.loading-overlay[data-v-268ad8af]{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-268ad8af]{opacity:1;visibility:visible}.loading-content[data-v-268ad8af]{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-268ad8af]{width:40px;height:40px;border:4px solid #f3f3f3;border-top:4px solid #409eff;border-radius:50%;-webkit-animation:spin-268ad8af 1s linear infinite;animation:spin-268ad8af 1s linear infinite;margin:0 auto 20px}@-webkit-keyframes spin-268ad8af{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes spin-268ad8af{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.loading-text[data-v-268ad8af]{font-size:16px;font-weight:500;color:#333;margin-bottom:20px}.loading-progress-bar[data-v-268ad8af]{width:100%;height:8px;background-color:#f0f0f0;border-radius:4px;overflow:hidden;margin-bottom:15px}.loading-progress-fill[data-v-268ad8af]{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-268ad8af]{font-size:12px;color:#666;line-height:1.5}.lil-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-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-gui .controller{border-bottom:1px solid #f1f3f4!important;background:transparent!important}.lil-gui .controller:last-child{border-bottom:none!important}.lil-gui .controller .name{color:#495057!important;font-weight:500!important;font-size:12px!important}.lil-gui .controller .widget{background:#f8f9fa!important;border:1px solid #ced4da!important;border-radius:4px!important;color:#495057!important}.lil-gui .controller .widget:focus,.lil-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-gui .controller .widget:focus{outline:none!important}.lil-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-gui .controller.number .fill{border-right:solid #008de9}.lil-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-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-gui .controller .option{background:#fff!important;color:#495057!important;border-bottom:1px solid #f1f3f4!important}.lil-gui .controller .option:hover{background:#f8f9fa!important}.lil-gui .controller .option:last-child{border-bottom:none!important}.lil-gui input:active{background:#e6eff4}.lil-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-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-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-gui .controller.number .slider,.lil-gui .controller.number .slider:hover{background-color:#e6eff4}.lil-gui input,.lil-gui input:hover,.lil-gui input[type=number]:focus,.lil-gui input[type=text]:focus{background:#e6eff4}.lil-gui .controller>.name{min-width:25px}.lil-gui .controller.number input{color:#2e3136}.lil-gui .controller.number .slider:active{background-color:#e6eff4}.lil-gui .folder>.title{background:linear-gradient(135deg,#f1f3f4,#e9ecef)!important;color:#495057!important;border-bottom:1px solid #dee2e6!important}.lil-gui .folder>.title:before{color:#6c757d!important}.lil-gui .folder.closed>.children{display:none!important}#konva-container[data-v-459d4d3b]{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-5f081c10]{position:relative;width:100%;height:100%;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden}.classification_title[data-v-5f081c10]{margin:0 0 10px 0;color:#fff;font-size:14px;cursor:default}.toolbar[data-v-5f081c10]{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-5f081c10],.text_toolbar[data-v-5f081c10]{float:left;width:32px;height:32px;padding:0!important;background-repeat:no-repeat;background-size:24px;background-position:50%}.icon_active[data-v-5f081c10],.icon_toolbar[data-v-5f081c10]:hover,.text_toolbar[data-v-5f081c10]:hover{background-color:#eee}[data-v-5f081c10].icon_color .el-color-picker__trigger{height:24px;margin-top:4px;width:24px!important}[data-v-5f081c10].el-color-picker--medium,[data-v-5f081c10].el-color-picker--medium .el-color-picker__trigger{width:24px!important;height:24px!important}.canvas_container[data-v-5f081c10]{position:relative;width:100%;height:100%;overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box}.canvas_container canvas[data-v-5f081c10]{position:absolute;left:0}.canvas_container #ctx_front[data-v-5f081c10]{z-index:5;background-color:transparent}.canvas_container #ctx_back[data-v-5f081c10]{z-index:3}.canvas_container #ctx_base[data-v-5f081c10]{z-index:1}#text[data-v-5f081c10]{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-5f081c10]:hover{border:1px dashed #53a8ff}#svg-component[data-v-6e1600cc],#svg-tigger[data-v-6e1600cc]{cursor:pointer;height:100%;width:100%;position:relative}#toolbar-show[data-v-6e1600cc]{z-index:20;position:absolute;top:0;left:0;background:#fff}#three-box[data-v-5504c19e],#toolbar-show[data-v-6e1600cc]{width:100%;height:100%;overflow:hidden}
|
|
1
|
+
@charset "UTF-8";#fl-model[data-v-5e18bf7c]{width:100%;height:100%;cursor:pointer}[data-v-5e18bf7c] .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-5e18bf7c] .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-5e18bf7c] .circle-tag{width:10px;height:10px;margin-top:5px;border-radius:50%;background-color:#ff5000}[data-v-5e18bf7c] .measure-label-font{word-break:break-all}[data-v-5e18bf7c] .mark-label-img{padding-top:5px;width:20px;height:20px}.loading-overlay[data-v-5e18bf7c]{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-5e18bf7c]{opacity:1;visibility:visible}.loading-content[data-v-5e18bf7c]{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-5e18bf7c]{width:40px;height:40px;border:4px solid #f3f3f3;border-top:4px solid #409eff;border-radius:50%;-webkit-animation:spin-5e18bf7c 1s linear infinite;animation:spin-5e18bf7c 1s linear infinite;margin:0 auto 20px}@-webkit-keyframes spin-5e18bf7c{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes spin-5e18bf7c{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.loading-text[data-v-5e18bf7c]{font-size:16px;font-weight:500;color:#333;margin-bottom:20px}.loading-progress-bar[data-v-5e18bf7c]{width:100%;height:8px;background-color:#f0f0f0;border-radius:4px;overflow:hidden;margin-bottom:15px}.loading-progress-fill[data-v-5e18bf7c]{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-5e18bf7c]{font-size:12px;color:#666;line-height:1.5}.lil-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-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-gui .controller{border-bottom:1px solid #f1f3f4!important;background:transparent!important}.lil-gui .controller:last-child{border-bottom:none!important}.lil-gui .controller .name{color:#495057!important;font-weight:500!important;font-size:12px!important}.lil-gui .controller .widget{background:#f8f9fa!important;border:1px solid #ced4da!important;border-radius:4px!important;color:#495057!important}.lil-gui .controller .widget:focus,.lil-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-gui .controller .widget:focus{outline:none!important}.lil-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-gui .controller.number .fill{border-right:solid #008de9}.lil-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-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-gui .controller .option{background:#fff!important;color:#495057!important;border-bottom:1px solid #f1f3f4!important}.lil-gui .controller .option:hover{background:#f8f9fa!important}.lil-gui .controller .option:last-child{border-bottom:none!important}.lil-gui input:active{background:#e6eff4}.lil-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-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-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-gui .controller.number .slider,.lil-gui .controller.number .slider:hover{background-color:#e6eff4}.lil-gui input,.lil-gui input:hover,.lil-gui input[type=number]:focus,.lil-gui input[type=text]:focus{background:#e6eff4}.lil-gui .controller>.name{min-width:25px}.lil-gui .controller.number input{color:#2e3136}.lil-gui .controller.number .slider:active{background-color:#e6eff4}.lil-gui .folder>.title{background:linear-gradient(135deg,#f1f3f4,#e9ecef)!important;color:#495057!important;border-bottom:1px solid #dee2e6!important}.lil-gui .folder>.title:before{color:#6c757d!important}.lil-gui .folder.closed>.children{display:none!important}#konva-container[data-v-459d4d3b]{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-5f081c10]{position:relative;width:100%;height:100%;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden}.classification_title[data-v-5f081c10]{margin:0 0 10px 0;color:#fff;font-size:14px;cursor:default}.toolbar[data-v-5f081c10]{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-5f081c10],.text_toolbar[data-v-5f081c10]{float:left;width:32px;height:32px;padding:0!important;background-repeat:no-repeat;background-size:24px;background-position:50%}.icon_active[data-v-5f081c10],.icon_toolbar[data-v-5f081c10]:hover,.text_toolbar[data-v-5f081c10]:hover{background-color:#eee}[data-v-5f081c10].icon_color .el-color-picker__trigger{height:24px;margin-top:4px;width:24px!important}[data-v-5f081c10].el-color-picker--medium,[data-v-5f081c10].el-color-picker--medium .el-color-picker__trigger{width:24px!important;height:24px!important}.canvas_container[data-v-5f081c10]{position:relative;width:100%;height:100%;overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box}.canvas_container canvas[data-v-5f081c10]{position:absolute;left:0}.canvas_container #ctx_front[data-v-5f081c10]{z-index:5;background-color:transparent}.canvas_container #ctx_back[data-v-5f081c10]{z-index:3}.canvas_container #ctx_base[data-v-5f081c10]{z-index:1}#text[data-v-5f081c10]{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-5f081c10]:hover{border:1px dashed #53a8ff}#svg-component[data-v-6e1600cc],#svg-tigger[data-v-6e1600cc]{cursor:pointer;height:100%;width:100%;position:relative}#toolbar-show[data-v-6e1600cc]{z-index:20;position:absolute;top:0;left:0;background:#fff}#three-box[data-v-5504c19e],#toolbar-show[data-v-6e1600cc]{width:100%;height:100%;overflow:hidden}
|
package/package.json
CHANGED
|
@@ -364,6 +364,7 @@ function drawLine(recordDxf, entity, group, key, configParams) {
|
|
|
364
364
|
|
|
365
365
|
// group.add(line);
|
|
366
366
|
}
|
|
367
|
+
|
|
367
368
|
function drawText(recordDxf, entity, group, key, configParams) {
|
|
368
369
|
|
|
369
370
|
let color=entity.color;
|
|
@@ -375,22 +376,22 @@ function drawText(recordDxf, entity, group, key, configParams) {
|
|
|
375
376
|
hex='#000';
|
|
376
377
|
}
|
|
377
378
|
let text = entity.text;
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
x: parseFloat(x),
|
|
391
|
-
y: -parseFloat(y),
|
|
379
|
+
const fontSize = entity.textHeight;
|
|
380
|
+
|
|
381
|
+
// 与 AutoCAD TEXT 一致:绕插入点对齐锚点旋转;Y 轴翻转后角度用 360°-θ
|
|
382
|
+
const insert =
|
|
383
|
+
entity.endPoint &&
|
|
384
|
+
(entity.halign !== undefined || entity.valign !== undefined)
|
|
385
|
+
? entity.endPoint
|
|
386
|
+
: entity.startPoint;
|
|
387
|
+
|
|
388
|
+
const dim = new Konva.Text({
|
|
389
|
+
x: 0,
|
|
390
|
+
y: 0,
|
|
392
391
|
text: text,
|
|
393
392
|
fontSize: fontSize,
|
|
393
|
+
align: "left",
|
|
394
|
+
verticalAlign: "top",
|
|
394
395
|
fill: hex,
|
|
395
396
|
customColor: configParams ? configParams.color : "",
|
|
396
397
|
name: key.replace(/\s*/g, ""),
|
|
@@ -400,50 +401,75 @@ function drawText(recordDxf, entity, group, key, configParams) {
|
|
|
400
401
|
stroke: hex,
|
|
401
402
|
strokeWidth:0.1,
|
|
402
403
|
});
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
404
|
+
|
|
405
|
+
if (entity.xScale) {
|
|
406
|
+
dim.scaleX(entity.xScale);
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
const tw = dim.width();
|
|
410
|
+
const th = dim.height();
|
|
411
|
+
const lh = dim.lineHeight() || 1;
|
|
412
|
+
// 用字体度量计算锚点,避免 valign=2(中线) 与 baseline 近似重合
|
|
413
|
+
let ascent = fontSize * lh * 0.8;
|
|
414
|
+
let descent = fontSize * lh * 0.2;
|
|
415
|
+
try {
|
|
416
|
+
const metrics = dim.measureSize(text || "M");
|
|
417
|
+
const mAscent =
|
|
418
|
+
metrics?.fontBoundingBoxAscent ??
|
|
419
|
+
metrics?.actualBoundingBoxAscent;
|
|
420
|
+
const mDescent =
|
|
421
|
+
metrics?.fontBoundingBoxDescent ??
|
|
422
|
+
metrics?.actualBoundingBoxDescent;
|
|
423
|
+
if (typeof mAscent === "number" && mAscent > 0) {
|
|
424
|
+
ascent = mAscent;
|
|
416
425
|
}
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
// 支持 DXF 垂直对齐(valign),仅在未旋转时按插入点对齐
|
|
420
|
-
if (entity.valign === 2) { // Middle
|
|
421
|
-
dim.attrs.y = -parseFloat(y) - fontSize / 2;
|
|
422
|
-
} else if (entity.valign === 3) { // Top
|
|
423
|
-
dim.attrs.y = -parseFloat(y);
|
|
424
|
-
} else { // Baseline / Bottom 或未设置,保持原逻辑
|
|
425
|
-
dim.attrs.y = -parseFloat(y) - fontSize;
|
|
426
|
+
if (typeof mDescent === "number" && mDescent >= 0) {
|
|
427
|
+
descent = mDescent;
|
|
426
428
|
}
|
|
429
|
+
} catch (e) {
|
|
430
|
+
// ignore
|
|
427
431
|
}
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
432
|
+
const baselineOffset = ascent;
|
|
433
|
+
|
|
434
|
+
const halign = entity.halign != null ? Number(entity.halign) : 0;
|
|
435
|
+
const valign = entity.valign != null ? Number(entity.valign) : 0;
|
|
431
436
|
|
|
432
|
-
let
|
|
433
|
-
|
|
434
|
-
|
|
437
|
+
let anchorX = 0;
|
|
438
|
+
if (halign === 1 || halign === 4) {
|
|
439
|
+
anchorX = tw / 2;
|
|
440
|
+
} else if (halign === 2) {
|
|
441
|
+
anchorX = tw;
|
|
442
|
+
}
|
|
435
443
|
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
444
|
+
let anchorY = baselineOffset;
|
|
445
|
+
if (valign === 3) {
|
|
446
|
+
anchorY = 0;
|
|
447
|
+
} else if (valign === 2) {
|
|
448
|
+
// DXF Middle: 使用字形上下边界中心,而不是 Konva 文本框中心
|
|
449
|
+
anchorY = (ascent + descent) / 2;
|
|
450
|
+
} else if (valign === 1) {
|
|
451
|
+
anchorY = ascent + descent;
|
|
439
452
|
|
|
440
|
-
}
|
|
441
453
|
}
|
|
442
454
|
|
|
443
|
-
|
|
455
|
+
dim.x(-anchorX);
|
|
456
|
+
dim.y(-anchorY);
|
|
457
|
+
|
|
458
|
+
const rotation = Number(entity.rotation || 0);
|
|
459
|
+
const g = new Konva.Group({
|
|
460
|
+
x: parseFloat(insert.x),
|
|
461
|
+
y: -parseFloat(insert.y),
|
|
462
|
+
rotation: 360 - rotation,
|
|
463
|
+
name: key.replace(/\s*/g, ""),
|
|
464
|
+
entityId: key,
|
|
465
|
+
visible: configParams ? configParams.visible : true,
|
|
466
|
+
customColor: configParams ? configParams.color : "",
|
|
467
|
+
});
|
|
468
|
+
g.add(dim);
|
|
469
|
+
|
|
444
470
|
group.push({
|
|
445
471
|
"type":'text',
|
|
446
|
-
'obj':
|
|
472
|
+
'obj': g,
|
|
447
473
|
})
|
|
448
474
|
// group.add(dim);
|
|
449
475
|
}
|
|
@@ -2294,7 +2294,9 @@ export default {
|
|
|
2294
2294
|
|
|
2295
2295
|
/**
|
|
2296
2296
|
* 初始化流式加载器(别名 init)
|
|
2297
|
-
* @param {Object} config -
|
|
2297
|
+
* @param {Object} config - 配置项
|
|
2298
|
+
* @param {Object} config.modelApi - 模型API接口
|
|
2299
|
+
* @param {string} [config.projectId] - 项目ID
|
|
2298
2300
|
*/
|
|
2299
2301
|
init(config = {}) {
|
|
2300
2302
|
this.initStreamLoader(config.modelApi, config);
|
|
@@ -2304,6 +2306,7 @@ export default {
|
|
|
2304
2306
|
* 初始化流式加载器
|
|
2305
2307
|
* @param {Object} modelApi - 模型API接口
|
|
2306
2308
|
* @param {Object} config - 其他配置
|
|
2309
|
+
* @param {string} [config.projectId] - 项目ID
|
|
2307
2310
|
*/
|
|
2308
2311
|
initStreamLoader(modelApi, config = {}) {
|
|
2309
2312
|
const { projectId, ...restConfig } = config || {};
|