fl-web-component 2.0.16 → 2.0.18

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.
@@ -1445,6 +1445,13 @@ module.exports = function (bitmap, value) {
1445
1445
 
1446
1446
  /***/ }),
1447
1447
 
1448
+ /***/ "117e":
1449
+ /***/ (function(module, exports, __webpack_require__) {
1450
+
1451
+ // extracted by mini-css-extract-plugin
1452
+
1453
+ /***/ }),
1454
+
1448
1455
  /***/ "122f":
1449
1456
  /***/ (function(module, exports, __webpack_require__) {
1450
1457
 
@@ -1935,17 +1942,6 @@ module.exports = function (it) {
1935
1942
  return it;
1936
1943
  };
1937
1944
 
1938
- /***/ }),
1939
-
1940
- /***/ "1694":
1941
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
1942
-
1943
- "use strict";
1944
- /* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_8_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_8_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_style_index_0_id_3e15de76_prod_lang_scss_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("2719");
1945
- /* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_8_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_8_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_style_index_0_id_3e15de76_prod_lang_scss_scoped_true__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_mini_css_extract_plugin_dist_loader_js_ref_8_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_8_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_style_index_0_id_3e15de76_prod_lang_scss_scoped_true__WEBPACK_IMPORTED_MODULE_0__);
1946
- /* unused harmony reexport * */
1947
-
1948
-
1949
1945
  /***/ }),
1950
1946
 
1951
1947
  /***/ "17ed":
@@ -3080,13 +3076,6 @@ module.exports = function (Constructor, NAME, next) {
3080
3076
 
3081
3077
  /***/ }),
3082
3078
 
3083
- /***/ "2719":
3084
- /***/ (function(module, exports, __webpack_require__) {
3085
-
3086
- // extracted by mini-css-extract-plugin
3087
-
3088
- /***/ }),
3089
-
3090
3079
  /***/ "273d":
3091
3080
  /***/ (function(module, __webpack_exports__, __webpack_require__) {
3092
3081
 
@@ -19684,6 +19673,17 @@ module.exports = Array.isArray || function isArray(arg) {
19684
19673
  return cof(arg) == 'Array';
19685
19674
  };
19686
19675
 
19676
+ /***/ }),
19677
+
19678
+ /***/ "4edc":
19679
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
19680
+
19681
+ "use strict";
19682
+ /* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_8_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_8_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_style_index_0_id_7fad0c6c_prod_lang_scss_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("117e");
19683
+ /* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_8_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_8_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_style_index_0_id_7fad0c6c_prod_lang_scss_scoped_true__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_mini_css_extract_plugin_dist_loader_js_ref_8_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_8_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_8_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_8_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_style_index_0_id_7fad0c6c_prod_lang_scss_scoped_true__WEBPACK_IMPORTED_MODULE_0__);
19684
+ /* unused harmony reexport * */
19685
+
19686
+
19687
19687
  /***/ }),
19688
19688
 
19689
19689
  /***/ "511f":
@@ -35679,13 +35679,6 @@ Factory_1.Factory.addGetterSetter(Rect, 'cornerRadius', 0, (0, Validators_1.getN
35679
35679
 
35680
35680
  /***/ }),
35681
35681
 
35682
- /***/ "6093":
35683
- /***/ (function(module, exports, __webpack_require__) {
35684
-
35685
- // extracted by mini-css-extract-plugin
35686
-
35687
- /***/ }),
35688
-
35689
35682
  /***/ "6167":
35690
35683
  /***/ (function(module, exports, __webpack_require__) {
35691
35684
 
@@ -56514,7 +56507,7 @@ module.exports = document && document.documentElement;
56514
56507
  /***/ "9224":
56515
56508
  /***/ (function(module) {
56516
56509
 
56517
- module.exports = JSON.parse("{\"name\":\"fl-web-component\",\"version\":\"2.0.16\",\"scripts\":{\"postinstall\":\"patch-package\",\"tip1\":\"仅调试本组件不涉及业务组件,请执行dev\",\"dev\":\"vue-cli-service serve\",\"lint\":\"eslint \\\"{src,packages}/**/*.{vue,js}\\\" --fix\",\"prettier\":\"prettier --write \\\"packages/**/*.{js,css,less,scss,vue,html}\\\"\",\"=\":\"=============================================================\",\"tip2\":\"同时调试本组件与业务组件,请执行watch\",\"watch\":\"vue-cli-service build --watch --mode production --target lib --name fl-web-component --formats commonjs ./src/main.js\",\"build\":\"npm run lint && vue-cli-service build --target lib --name fl-web-component --formats commonjs ./src/main.js\",\"build:test\":\"vue-cli-service build --target lib --name fl-web-component --formats commonjs ./src/main.js\",\"publish:base\":\"npm run build && npm publish --registry https://registry.npmjs.org/\",\"publish:beta:base\":\"npm run build && npm publish --tag beta --registry https://registry.npmjs.org/\",\"==\":\"=============================================================\",\"tip3\":\"发版注意: 【测试版执行publish:beta】【修改bug执行publish:fix】【新增功能执行publish:feat】【新特性执行publish:perf】\",\"publish:beta\":\"npm version prerelease --preid=beta && npm run publish:beta:base\",\"publish:fix\":\"npm version patch && npm run publish:base\",\"publish:feat\":\"npm version minor && npm run publish:base\",\"publish:perf\":\"npm version major && npm run publish:base\"},\"files\":[\"dist\",\"packages\",\"src\"],\"main\":\"dist/fl-web-component.common.js\",\"dependencies\":{\"camera-controls\":\"2.9.0\",\"core-js\":\"^3.42.0\",\"dxf-parser\":\"^1.1.2\",\"element-ui\":\"2.15.14\",\"fflate\":\"^0.8.2\",\"html2canvas\":\"^1.4.1\",\"jspdf\":\"^3.0.1\",\"konva\":\"^9.3.12\",\"lodash\":\"^4.17.21\",\"meshline\":\"^3.3.1\",\"regenerator-runtime\":\"^0.14.1\",\"svg-pan-zoom\":\"^3.6.2\",\"three\":\"^0.176.0\",\"three.path\":\"^1.0.1\",\"vue\":\"^2.6.11\"},\"devDependencies\":{\"@babel/core\":\"^7.12.16\",\"@babel/plugin-proposal-nullish-coalescing-operator\":\"^7.18.6\",\"@babel/plugin-proposal-optional-chaining\":\"^7.21.0\",\"@babel/preset-env\":\"^7.0.0\",\"@babel/runtime-corejs3\":\"^7.27.1\",\"@vue/cli-plugin-babel\":\"~4.4.0\",\"@vue/cli-plugin-eslint\":\"~4.4.0\",\"@vue/cli-service\":\"~4.4.0\",\"babel-eslint\":\"^10.1.0\",\"babel-loader\":\"^8.0.0\",\"copy-webpack-plugin\":\"^4.0.1\",\"eslint\":\"^6.7.2\",\"eslint-config-prettier\":\"^6.15.0\",\"eslint-plugin-prettier\":\"^3.4.1\",\"eslint-plugin-vue\":\"^6.2.2\",\"patch-package\":\"^6.4.7\",\"prettier\":\"^2.8.8\",\"sass\":\"1.32.13\",\"sass-loader\":\"10.1.1\",\"vue-template-compiler\":\"^2.6.11\",\"worker-loader\":\"^3.0.8\"},\"browserslist\":[\"> 1%\",\"last 2 versions\"]}");
56510
+ module.exports = JSON.parse("{\"name\":\"fl-web-component\",\"version\":\"2.0.18\",\"scripts\":{\"postinstall\":\"patch-package\",\"tip1\":\"仅调试本组件不涉及业务组件,请执行dev\",\"dev\":\"vue-cli-service serve\",\"lint\":\"eslint \\\"{src,packages}/**/*.{vue,js}\\\" --fix\",\"prettier\":\"prettier --write \\\"packages/**/*.{js,css,less,scss,vue,html}\\\"\",\"=\":\"=============================================================\",\"tip2\":\"同时调试本组件与业务组件,请执行watch\",\"watch\":\"vue-cli-service build --watch --mode production --target lib --name fl-web-component --formats commonjs ./src/main.js\",\"build\":\"npm run lint && vue-cli-service build --target lib --name fl-web-component --formats commonjs ./src/main.js\",\"build:test\":\"vue-cli-service build --target lib --name fl-web-component --formats commonjs ./src/main.js\",\"publish:base\":\"npm run build && npm publish --registry https://registry.npmjs.org/\",\"publish:beta:base\":\"npm run build && npm publish --tag beta --registry https://registry.npmjs.org/\",\"==\":\"=============================================================\",\"tip3\":\"发版注意: 【测试版执行publish:beta】【修改bug执行publish:fix】【新增功能执行publish:feat】【新特性执行publish:perf】\",\"publish:beta\":\"npm version prerelease --preid=beta && npm run publish:beta:base\",\"publish:fix\":\"npm version patch && npm run publish:base\",\"publish:feat\":\"npm version minor && npm run publish:base\",\"publish:perf\":\"npm version major && npm run publish:base\"},\"files\":[\"dist\",\"packages\",\"src\"],\"main\":\"dist/fl-web-component.common.js\",\"dependencies\":{\"camera-controls\":\"2.9.0\",\"core-js\":\"^3.42.0\",\"dxf-parser\":\"^1.1.2\",\"element-ui\":\"2.15.14\",\"fflate\":\"^0.8.2\",\"html2canvas\":\"^1.4.1\",\"jspdf\":\"^3.0.1\",\"konva\":\"^9.3.12\",\"lodash\":\"^4.17.21\",\"meshline\":\"^3.3.1\",\"regenerator-runtime\":\"^0.14.1\",\"svg-pan-zoom\":\"^3.6.2\",\"three\":\"^0.176.0\",\"three.path\":\"^1.0.1\",\"vue\":\"^2.6.11\"},\"devDependencies\":{\"@babel/core\":\"^7.12.16\",\"@babel/plugin-proposal-nullish-coalescing-operator\":\"^7.18.6\",\"@babel/plugin-proposal-optional-chaining\":\"^7.21.0\",\"@babel/preset-env\":\"^7.0.0\",\"@babel/runtime-corejs3\":\"^7.27.1\",\"@vue/cli-plugin-babel\":\"~4.4.0\",\"@vue/cli-plugin-eslint\":\"~4.4.0\",\"@vue/cli-service\":\"~4.4.0\",\"babel-eslint\":\"^10.1.0\",\"babel-loader\":\"^8.0.0\",\"copy-webpack-plugin\":\"^4.0.1\",\"eslint\":\"^6.7.2\",\"eslint-config-prettier\":\"^6.15.0\",\"eslint-plugin-prettier\":\"^3.4.1\",\"eslint-plugin-vue\":\"^6.2.2\",\"patch-package\":\"^6.4.7\",\"prettier\":\"^2.8.8\",\"sass\":\"1.32.13\",\"sass-loader\":\"10.1.1\",\"vue-template-compiler\":\"^2.6.11\",\"worker-loader\":\"^3.0.8\"},\"browserslist\":[\"> 1%\",\"last 2 versions\"]}");
56518
56511
 
56519
56512
  /***/ }),
56520
56513
 
@@ -56968,17 +56961,6 @@ module.exports = function (it, key) {
56968
56961
  return hasOwnProperty.call(it, key);
56969
56962
  };
56970
56963
 
56971
- /***/ }),
56972
-
56973
- /***/ "9c27":
56974
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
56975
-
56976
- "use strict";
56977
- /* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_style_index_1_id_3e15de76_prod_lang_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("6093");
56978
- /* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_style_index_1_id_3e15de76_prod_lang_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_style_index_1_id_3e15de76_prod_lang_css__WEBPACK_IMPORTED_MODULE_0__);
56979
- /* unused harmony reexport * */
56980
-
56981
-
56982
56964
  /***/ }),
56983
56965
 
56984
56966
  /***/ "9cb8":
@@ -57884,6 +57866,17 @@ var RE_NARGS = /(%|)\{([0-9a-zA-Z_]+)\}/g;
57884
57866
  * https://github.com/Matt-Esch/string-template/index.js
57885
57867
  */
57886
57868
 
57869
+ /***/ }),
57870
+
57871
+ /***/ "9f61":
57872
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
57873
+
57874
+ "use strict";
57875
+ /* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_style_index_1_id_7fad0c6c_prod_lang_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("ed7b");
57876
+ /* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_style_index_1_id_7fad0c6c_prod_lang_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_mini_css_extract_plugin_dist_loader_js_ref_6_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_style_index_1_id_7fad0c6c_prod_lang_css__WEBPACK_IMPORTED_MODULE_0__);
57877
+ /* unused harmony reexport * */
57878
+
57879
+
57887
57880
  /***/ }),
57888
57881
 
57889
57882
  /***/ "9fbb":
@@ -75700,6 +75693,13 @@ Animation.animRunning = false;
75700
75693
 
75701
75694
  /***/ }),
75702
75695
 
75696
+ /***/ "ed7b":
75697
+ /***/ (function(module, exports, __webpack_require__) {
75698
+
75699
+ // extracted by mini-css-extract-plugin
75700
+
75701
+ /***/ }),
75702
+
75703
75703
  /***/ "eedf":
75704
75704
  /***/ (function(module, exports, __webpack_require__) {
75705
75705
 
@@ -78641,8 +78641,8 @@ if (typeof window !== 'undefined') {
78641
78641
  // Indicate to webpack that this file can be concatenated
78642
78642
  /* harmony default export */ var setPublicPath = (null);
78643
78643
 
78644
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"370de1b5-vue-loader-template"}!./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--6!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./packages/components/com-graphics/index.vue?vue&type=template&id=3e15de76&scoped=true
78645
- var com_graphicsvue_type_template_id_3e15de76_scoped_true_render = function render() {
78644
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"e203256c-vue-loader-template"}!./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--6!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./packages/components/com-graphics/index.vue?vue&type=template&id=7fad0c6c&scoped=true
78645
+ var com_graphicsvue_type_template_id_7fad0c6c_scoped_true_render = function render() {
78646
78646
  var _vm = this,
78647
78647
  _c = _vm._self._c;
78648
78648
  return _c('div', {
@@ -78654,7 +78654,7 @@ var com_graphicsvue_type_template_id_3e15de76_scoped_true_render = function rend
78654
78654
  };
78655
78655
  var staticRenderFns = [];
78656
78656
 
78657
- // CONCATENATED MODULE: ./packages/components/com-graphics/index.vue?vue&type=template&id=3e15de76&scoped=true
78657
+ // CONCATENATED MODULE: ./packages/components/com-graphics/index.vue?vue&type=template&id=7fad0c6c&scoped=true
78658
78658
 
78659
78659
  // CONCATENATED MODULE: ./node_modules/camera-controls/dist/camera-controls.module.js
78660
78660
  function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
@@ -107038,9 +107038,11 @@ var element_ui_common = __webpack_require__("5c96");
107038
107038
 
107039
107039
  var measure_distance_this = null;
107040
107040
  var measure_distance_MeasureDistance = function MeasureDistance(renderer, scene, camera, width, height) {
107041
+ var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};
107041
107042
  this.renderer = renderer;
107042
107043
  this.scene = scene;
107043
107044
  this.camera = camera;
107045
+ this.pickRoots = options.pickRoots || null;
107044
107046
  this.pointArray = []; // 保存当前操作所添加的点
107045
107047
  this.raycaster = new Raycaster();
107046
107048
  this.points = []; // 保存页面中所添加的点
@@ -107051,6 +107053,7 @@ var measure_distance_MeasureDistance = function MeasureDistance(renderer, scene,
107051
107053
  this.tempLabel = undefined;
107052
107054
  this.tipsLabel = undefined;
107053
107055
  this.isCompleted = false;
107056
+ this.hasTempPoint = false;
107054
107057
  this.timer = null;
107055
107058
  this.width = width;
107056
107059
  this.height = height;
@@ -107075,7 +107078,74 @@ measure_distance_MeasureDistance.prototype = {
107075
107078
  this.width = width;
107076
107079
  this.height = height;
107077
107080
  },
107081
+ getPickRoots: function getPickRoots() {
107082
+ var roots = typeof measure_distance_this.pickRoots === 'function' ? measure_distance_this.pickRoots() : measure_distance_this.pickRoots;
107083
+ if (Array.isArray(roots) && roots.length > 0) {
107084
+ return roots.filter(Boolean);
107085
+ }
107086
+ if (roots) {
107087
+ return [roots];
107088
+ }
107089
+ return measure_distance_this.scene && measure_distance_this.scene.children ? measure_distance_this.scene.children : [];
107090
+ },
107091
+ isExcludedIntersection: function isExcludedIntersection(object) {
107092
+ var current = object;
107093
+ while (current) {
107094
+ var userData = current.userData || {};
107095
+ if (current.visible === false) return true;
107096
+ if (current.name === measure_distance_this.measureName || userData.isMeasureObject === true) return true;
107097
+ if (userData.transformControlHelper === true || userData.outlineProxy === true) return true;
107098
+ if (current.isCamera || current.isLight) return true;
107099
+ if (typeof current.type === 'string' && (/Helper$/i.test(current.type) || current.type === 'CSS2DObject' || current.type === 'TransformControlsRoot')) {
107100
+ return true;
107101
+ }
107102
+ current = current.parent;
107103
+ }
107104
+ return false;
107105
+ },
107106
+ markMeasureObject: function markMeasureObject(object) {
107107
+ object.name = this.measureName;
107108
+ if (!object.userData) {
107109
+ object.userData = {};
107110
+ }
107111
+ object.userData.isMeasureObject = true;
107112
+ return object;
107113
+ },
107114
+ disposeObject: function disposeObject(object) {
107115
+ if (!object) return;
107116
+ if (object.geometry) {
107117
+ object.geometry.dispose();
107118
+ }
107119
+ if (object.material) {
107120
+ object.material.dispose();
107121
+ }
107122
+ this.scene.remove(object);
107123
+ },
107124
+ removeArrayItem: function removeArrayItem(array, item) {
107125
+ if (!item) return;
107126
+ var index = array.indexOf(item);
107127
+ if (index !== -1) {
107128
+ array.splice(index, 1);
107129
+ }
107130
+ },
107131
+ clearTempMeasure: function clearTempMeasure() {
107132
+ // 清理未确认的预览点,避免空点位残留在回退平面上。
107133
+ if (this.hasTempPoint && this.pointArray.length > 0) {
107134
+ this.pointArray.pop();
107135
+ }
107136
+ this.removeArrayItem(this.points, this.tempPoints);
107137
+ this.removeArrayItem(this.polyline, this.tempLine);
107138
+ this.removeArrayItem(this.labels, this.tempLabel);
107139
+ this.disposeObject(this.tempPoints);
107140
+ this.disposeObject(this.tempLine);
107141
+ this.disposeObject(this.tempLabel);
107142
+ this.tempPoints = undefined;
107143
+ this.tempLine = undefined;
107144
+ this.tempLabel = undefined;
107145
+ this.hasTempPoint = false;
107146
+ },
107078
107147
  getPosition: function getPosition(e) {
107148
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
107079
107149
  var mouse = new Vector2();
107080
107150
  var elRect = this.renderer.domElement.getBoundingClientRect();
107081
107151
  var canvasX = e.clientX - elRect.left;
@@ -107083,13 +107153,18 @@ measure_distance_MeasureDistance.prototype = {
107083
107153
  mouse.x = canvasX / elRect.width * 2.0 - 1.0;
107084
107154
  mouse.y = -(canvasY / elRect.height) * 2.0 + 1.0;
107085
107155
  measure_distance_this.raycaster.setFromCamera(mouse, this.camera);
107086
- var intersects = measure_distance_this.raycaster.intersectObjects(measure_distance_this.scene.children, true);
107156
+ var intersects = measure_distance_this.raycaster.intersectObjects(measure_distance_this.getPickRoots(), true).filter(function (item) {
107157
+ return item && item.object && !measure_distance_this.isExcludedIntersection(item.object);
107158
+ });
107087
107159
  if (intersects.length > 0) {
107088
107160
  return {
107089
107161
  point: intersects[0].point,
107090
107162
  isModel: true
107091
107163
  };
107092
107164
  }
107165
+ if (options.allowPlaneFallback === false) {
107166
+ return null;
107167
+ }
107093
107168
 
107094
107169
  // 如果没有交点,构建一个基于最后一个确认点且面向相机的平面
107095
107170
  if (measure_distance_this.pointArray && measure_distance_this.pointArray.length > 0) {
@@ -107131,7 +107206,7 @@ measure_distance_MeasureDistance.prototype = {
107131
107206
  });
107132
107207
  var lineGeometry = new BufferGeometry().setFromPoints([p1, p2]);
107133
107208
  var line = new three_core_Line(lineGeometry, lineMaterial);
107134
- line.name = this.measureName;
107209
+ this.markMeasureObject(line);
107135
107210
  line.renderOrder = 999;
107136
107211
  line.frustumCulled = false;
107137
107212
  return line;
@@ -107141,7 +107216,7 @@ measure_distance_MeasureDistance.prototype = {
107141
107216
  div.className = name;
107142
107217
  div.textContent = text;
107143
107218
  var divLabel = new CSS2DRenderer_CSS2DObject(div);
107144
- divLabel.name = this.measureName;
107219
+ this.markMeasureObject(divLabel);
107145
107220
  divLabel.position.set(position.x, position.y, position.z);
107146
107221
  return divLabel;
107147
107222
  },
@@ -107150,7 +107225,12 @@ measure_distance_MeasureDistance.prototype = {
107150
107225
  var positionResult = measure_distance_this.getPosition(e);
107151
107226
  if (positionResult) {
107152
107227
  var point = positionResult.point;
107153
- measure_distance_this.pointArray.length === 1 ? measure_distance_this.pointArray.push(point) : measure_distance_this.pointArray.splice(measure_distance_this.pointArray.length - 1, 1, point);
107228
+ if (measure_distance_this.hasTempPoint) {
107229
+ measure_distance_this.pointArray.splice(measure_distance_this.pointArray.length - 1, 1, point);
107230
+ } else {
107231
+ measure_distance_this.pointArray.push(point);
107232
+ measure_distance_this.hasTempPoint = true;
107233
+ }
107154
107234
  var length = measure_distance_this.pointArray.length;
107155
107235
  if (measure_distance_this.tempPoints) {
107156
107236
  measure_distance_this.tempPoints.position.set(point.x, point.y, point.z);
@@ -107187,7 +107267,7 @@ measure_distance_MeasureDistance.prototype = {
107187
107267
  div.className = 'tips-label';
107188
107268
  div.textContent = label;
107189
107269
  var tipsLabel = new CSS2DRenderer_CSS2DObject(div);
107190
- tipsLabel.name = this.measureName;
107270
+ this.markMeasureObject(tipsLabel);
107191
107271
  tipsLabel.position.set(position.x + 0.1, position.y, position.z + 0.05);
107192
107272
  return tipsLabel;
107193
107273
  },
@@ -107195,7 +107275,6 @@ measure_distance_MeasureDistance.prototype = {
107195
107275
  this.firstTime = new Date().getTime();
107196
107276
  },
107197
107277
  click: function click(e) {
107198
- console.log(measure_distance_this.points);
107199
107278
  var lastTime = new Date().getTime();
107200
107279
  if (lastTime - this.firstTime < 300) {
107201
107280
  if (measure_distance_this.isCompleted) {
@@ -107204,15 +107283,22 @@ measure_distance_MeasureDistance.prototype = {
107204
107283
  clearTimeout(measure_distance_this.timer);
107205
107284
  measure_distance_this.timer = setTimeout(function () {
107206
107285
  measure_distance_this.isCompleted = false;
107207
- var positionResult = measure_distance_this.getPosition(e);
107286
+ var positionResult = measure_distance_this.getPosition(e, {
107287
+ allowPlaneFallback: false
107288
+ });
107289
+ if (!positionResult || !positionResult.isModel) {
107290
+ measure_distance_this.clearTempMeasure();
107291
+ element_ui_common["Message"].warning('请点击模型进行测量');
107292
+ return;
107293
+ }
107208
107294
  if (positionResult) {
107209
- var point = positionResult.point,
107210
- isModel = positionResult.isModel;
107211
- if (!isModel) {
107212
- // 提示请点击模型
107213
- element_ui_common["Message"].warning('请点击模型进行测量');
107214
- return;
107295
+ var point = positionResult.point;
107296
+ if (measure_distance_this.hasTempPoint && measure_distance_this.pointArray.length > 0) {
107297
+ measure_distance_this.pointArray.splice(measure_distance_this.pointArray.length - 1, 1, point);
107298
+ } else {
107299
+ measure_distance_this.pointArray.push(point);
107215
107300
  }
107301
+ measure_distance_this.hasTempPoint = false;
107216
107302
  if (measure_distance_this.tipsLabel) {
107217
107303
  measure_distance_this.tipsLabel.position.set(point.x + 0.1, point.y, point.z + 0.05);
107218
107304
  } else {
@@ -107227,9 +107313,31 @@ measure_distance_MeasureDistance.prototype = {
107227
107313
  measure_distance_this.points.push(geom);
107228
107314
  measure_distance_this.scene.add(geom);
107229
107315
  }
107316
+ var length = measure_distance_this.pointArray.length;
107317
+ if (length > 1) {
107318
+ var p1 = measure_distance_this.pointArray[length - 2];
107319
+ var p2 = measure_distance_this.pointArray[length - 1];
107320
+ var dist = p1.distanceTo(p2);
107321
+ var label = "".concat(measure_distance_this.numberToString(dist));
107322
+ var position = new Vector3((p1.x + p2.x) / 2, (p1.y + p2.y) / 2, (p1.z + p2.z) / 2);
107323
+ if (measure_distance_this.tempLine) {
107324
+ measure_distance_this.tempLine.geometry.setFromPoints([p1, p2]);
107325
+ } else {
107326
+ measure_distance_this.tempLine = measure_distance_this.createLine(p1, p2);
107327
+ measure_distance_this.polyline.push(measure_distance_this.tempLine);
107328
+ measure_distance_this.scene.add(measure_distance_this.tempLine);
107329
+ }
107330
+ if (measure_distance_this.tempLabel) {
107331
+ measure_distance_this.tempLabel.element.textContent = label;
107332
+ measure_distance_this.tempLabel.position.set(position.x, position.y, position.z);
107333
+ } else {
107334
+ measure_distance_this.tempLabel = measure_distance_this.createLabel('measure-label', label, position);
107335
+ measure_distance_this.labels.push(measure_distance_this.tempLabel);
107336
+ measure_distance_this.scene.add(measure_distance_this.tempLabel);
107337
+ }
107338
+ }
107230
107339
  measure_distance_this.tempLine = undefined;
107231
107340
  measure_distance_this.tempLabel = undefined;
107232
- measure_distance_this.pointArray.push(point);
107233
107341
  }
107234
107342
  });
107235
107343
  }
@@ -107243,11 +107351,13 @@ measure_distance_MeasureDistance.prototype = {
107243
107351
  clearTimeout(measure_distance_this.timer);
107244
107352
  var positionResult = measure_distance_this.getPosition(e);
107245
107353
  if (positionResult) {
107354
+ measure_distance_this.clearTempMeasure();
107246
107355
  measure_distance_this.isCompleted = true;
107247
107356
  measure_distance_this.tempPoints = undefined;
107248
107357
  measure_distance_this.tempLine = undefined;
107249
107358
  measure_distance_this.tempLabel = undefined;
107250
107359
  measure_distance_this.pointArray.splice(0);
107360
+ measure_distance_this.hasTempPoint = false;
107251
107361
  measure_distance_this.renderer.domElement.removeEventListener('mousemove', measure_distance_this.mousemove);
107252
107362
  }
107253
107363
  },
@@ -107267,6 +107377,7 @@ measure_distance_MeasureDistance.prototype = {
107267
107377
  this.tempPoints = undefined;
107268
107378
  this.tempLabel = undefined;
107269
107379
  this.tempLine = undefined;
107380
+ this.hasTempPoint = false;
107270
107381
  this.scene.remove(this.tipsLabel);
107271
107382
  this.tipsLabel = undefined;
107272
107383
  this.firstTime = 0;
@@ -107284,6 +107395,7 @@ measure_distance_MeasureDistance.prototype = {
107284
107395
  this.tempPoints = undefined;
107285
107396
  this.tempLabel = undefined;
107286
107397
  this.tempLine = undefined;
107398
+ this.hasTempPoint = false;
107287
107399
  this.scene.remove(this.tipsLabel);
107288
107400
  this.tipsLabel = undefined;
107289
107401
  this.firstTime = 0;
@@ -107322,9 +107434,11 @@ measure_distance_MeasureDistance.prototype = {
107322
107434
 
107323
107435
  var measure_area_this = null;
107324
107436
  var measure_area_MeasureArea = function MeasureArea(renderer, scene, camera, width, height) {
107437
+ var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};
107325
107438
  this.renderer = renderer;
107326
107439
  this.scene = scene;
107327
107440
  this.camera = camera;
107441
+ this.pickRoots = options.pickRoots || null;
107328
107442
  this.pointArray = []; // 保存当前操作所添加的点
107329
107443
  this.raycaster = new Raycaster();
107330
107444
  this.points = []; // 保存页面中所添加的点
@@ -107335,6 +107449,7 @@ var measure_area_MeasureArea = function MeasureArea(renderer, scene, camera, wid
107335
107449
  this.tempLabel = undefined;
107336
107450
  this.tipsLabel = undefined;
107337
107451
  this.isCompleted = false;
107452
+ this.hasTempPoint = false;
107338
107453
  this.timer = null;
107339
107454
  this.polygonMesh = undefined;
107340
107455
  this.polygons = [];
@@ -107361,7 +107476,95 @@ measure_area_MeasureArea.prototype = {
107361
107476
  this.width = width;
107362
107477
  this.height = height;
107363
107478
  },
107479
+ getPickRoots: function getPickRoots() {
107480
+ var roots = typeof measure_area_this.pickRoots === 'function' ? measure_area_this.pickRoots() : measure_area_this.pickRoots;
107481
+ if (Array.isArray(roots) && roots.length > 0) {
107482
+ return roots.filter(Boolean);
107483
+ }
107484
+ if (roots) {
107485
+ return [roots];
107486
+ }
107487
+ return measure_area_this.scene && measure_area_this.scene.children ? measure_area_this.scene.children : [];
107488
+ },
107489
+ isExcludedIntersection: function isExcludedIntersection(object) {
107490
+ var current = object;
107491
+ while (current) {
107492
+ var userData = current.userData || {};
107493
+ if (current.visible === false) return true;
107494
+ if (current.name === measure_area_this.measureName || userData.isMeasureObject === true) return true;
107495
+ if (userData.transformControlHelper === true || userData.outlineProxy === true) return true;
107496
+ if (current.isCamera || current.isLight) return true;
107497
+ if (typeof current.type === 'string' && (/Helper$/i.test(current.type) || current.type === 'CSS2DObject' || current.type === 'TransformControlsRoot')) {
107498
+ return true;
107499
+ }
107500
+ current = current.parent;
107501
+ }
107502
+ return false;
107503
+ },
107504
+ markMeasureObject: function markMeasureObject(object) {
107505
+ object.name = this.measureName;
107506
+ if (!object.userData) {
107507
+ object.userData = {};
107508
+ }
107509
+ object.userData.isMeasureObject = true;
107510
+ return object;
107511
+ },
107512
+ disposeObject: function disposeObject(object) {
107513
+ if (!object) return;
107514
+ if (object.geometry) {
107515
+ object.geometry.dispose();
107516
+ }
107517
+ if (object.material) {
107518
+ object.material.dispose();
107519
+ }
107520
+ this.scene.remove(object);
107521
+ },
107522
+ removeArrayItem: function removeArrayItem(array, item) {
107523
+ if (!item) return;
107524
+ var index = array.indexOf(item);
107525
+ if (index !== -1) {
107526
+ array.splice(index, 1);
107527
+ }
107528
+ },
107529
+ clearTempMeasure: function clearTempMeasure() {
107530
+ if (this.hasTempPoint && this.pointArray.length > 0) {
107531
+ this.pointArray.pop();
107532
+ }
107533
+ this.removeArrayItem(this.points, this.tempPoints);
107534
+ this.removeArrayItem(this.polyline, this.tempLine);
107535
+ this.disposeObject(this.tempPoints);
107536
+ this.disposeObject(this.tempLine);
107537
+ this.tempPoints = undefined;
107538
+ this.tempLine = undefined;
107539
+ this.hasTempPoint = false;
107540
+ this.updateAreaMeasure();
107541
+ },
107542
+ updateAreaMeasure: function updateAreaMeasure() {
107543
+ if (this.pointArray.length <= 2) {
107544
+ this.removeArrayItem(this.polygons, this.polygonMesh);
107545
+ this.removeArrayItem(this.labels, this.tempLabel);
107546
+ this.disposeObject(this.polygonMesh);
107547
+ this.disposeObject(this.tempLabel);
107548
+ this.polygonMesh = undefined;
107549
+ this.tempLabel = undefined;
107550
+ return;
107551
+ }
107552
+ var area = this.calculateArea(this.pointArray);
107553
+ this.createPolygon(this.pointArray);
107554
+ if (!this.polygonMesh) return;
107555
+ this.polygonMesh.geometry.computeBoundingSphere();
107556
+ var center = this.polygonMesh.geometry.boundingSphere.center;
107557
+ if (this.tempLabel) {
107558
+ this.tempLabel.element.textContent = this.numberToString(area);
107559
+ this.tempLabel.position.set(center.x, center.y, center.z);
107560
+ } else {
107561
+ this.tempLabel = this.createLabel('measure-label', this.numberToString(area), center);
107562
+ this.labels.push(this.tempLabel);
107563
+ this.scene.add(this.tempLabel);
107564
+ }
107565
+ },
107364
107566
  getPosition: function getPosition(e) {
107567
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
107365
107568
  var mouse = new Vector2();
107366
107569
  var elRect = this.renderer.domElement.getBoundingClientRect();
107367
107570
  var canvasX = e.clientX - elRect.left;
@@ -107369,13 +107572,18 @@ measure_area_MeasureArea.prototype = {
107369
107572
  mouse.x = canvasX / elRect.width * 2.0 - 1.0;
107370
107573
  mouse.y = -(canvasY / elRect.height) * 2.0 + 1.0;
107371
107574
  measure_area_this.raycaster.setFromCamera(mouse, measure_area_this.camera);
107372
- var intersects = measure_area_this.raycaster.intersectObjects(measure_area_this.scene.children, true);
107575
+ var intersects = measure_area_this.raycaster.intersectObjects(measure_area_this.getPickRoots(), true).filter(function (item) {
107576
+ return item && item.object && !measure_area_this.isExcludedIntersection(item.object);
107577
+ });
107373
107578
  if (intersects.length > 0) {
107374
107579
  return {
107375
107580
  point: intersects[0].point,
107376
107581
  isModel: true
107377
107582
  };
107378
107583
  }
107584
+ if (options.allowPlaneFallback === false) {
107585
+ return null;
107586
+ }
107379
107587
 
107380
107588
  // 如果没有交点,构建一个基于最后一个确认点且面向相机的平面
107381
107589
  if (measure_area_this.pointArray && measure_area_this.pointArray.length > 0) {
@@ -107417,7 +107625,7 @@ measure_area_MeasureArea.prototype = {
107417
107625
  });
107418
107626
  var lineGeometry = new BufferGeometry().setFromPoints([p1, p2]);
107419
107627
  var line = new three_core_Line(lineGeometry, lineMaterial);
107420
- line.name = this.measureName;
107628
+ this.markMeasureObject(line);
107421
107629
  line.renderOrder = 999;
107422
107630
  line.frustumCulled = false;
107423
107631
  return line;
@@ -107427,7 +107635,7 @@ measure_area_MeasureArea.prototype = {
107427
107635
  div.className = name;
107428
107636
  div.textContent = text;
107429
107637
  var divLabel = new CSS2DRenderer_CSS2DObject(div);
107430
- divLabel.name = this.measureName;
107638
+ this.markMeasureObject(divLabel);
107431
107639
  divLabel.position.set(position.x, position.y, position.z);
107432
107640
  return divLabel;
107433
107641
  },
@@ -107436,7 +107644,12 @@ measure_area_MeasureArea.prototype = {
107436
107644
  var positionResult = measure_area_this.getPosition(e);
107437
107645
  if (positionResult) {
107438
107646
  var point = positionResult.point;
107439
- measure_area_this.pointArray.length === 1 ? measure_area_this.pointArray.push(point) : measure_area_this.pointArray.splice(measure_area_this.pointArray.length - 1, 1, point);
107647
+ if (measure_area_this.hasTempPoint) {
107648
+ measure_area_this.pointArray.splice(measure_area_this.pointArray.length - 1, 1, point);
107649
+ } else {
107650
+ measure_area_this.pointArray.push(point);
107651
+ measure_area_this.hasTempPoint = true;
107652
+ }
107440
107653
  var length = measure_area_this.pointArray.length;
107441
107654
  if (measure_area_this.tempPoints) {
107442
107655
  measure_area_this.tempPoints.position.set(point.x, point.y, point.z);
@@ -107455,21 +107668,7 @@ measure_area_MeasureArea.prototype = {
107455
107668
  measure_area_this.polyline.push(measure_area_this.tempLine);
107456
107669
  measure_area_this.scene.add(measure_area_this.tempLine);
107457
107670
  }
107458
- if (measure_area_this.pointArray.length > 2) {
107459
- var area = measure_area_this.calculateArea(measure_area_this.pointArray);
107460
- measure_area_this.createPolygon(measure_area_this.pointArray);
107461
- if (measure_area_this.tempLabel) {
107462
- measure_area_this.polygonMesh.geometry.computeBoundingSphere();
107463
- measure_area_this.tempLabel.element.textContent = measure_area_this.numberToString(area); // + '㎡'
107464
- measure_area_this.tempLabel.position.set(measure_area_this.polygonMesh.geometry.boundingSphere.center.x, measure_area_this.polygonMesh.geometry.boundingSphere.center.y, measure_area_this.polygonMesh.geometry.boundingSphere.center.z);
107465
- } else {
107466
- measure_area_this.polygonMesh.geometry.computeBoundingSphere();
107467
- console.log(measure_area_this.polygonMesh.geometry);
107468
- measure_area_this.tempLabel = measure_area_this.createLabel('measure-label', area, measure_area_this.polygonMesh.geometry.boundingSphere.center);
107469
- measure_area_this.labels.push(measure_area_this.tempLabel);
107470
- measure_area_this.scene.add(measure_area_this.tempLabel);
107471
- }
107472
- }
107671
+ measure_area_this.updateAreaMeasure();
107473
107672
  if (measure_area_this.tipsLabel) {
107474
107673
  measure_area_this.tipsLabel.position.set(point.x + 0.1, point.y, point.z + 0.05);
107475
107674
  }
@@ -107480,7 +107679,7 @@ measure_area_MeasureArea.prototype = {
107480
107679
  div.className = 'tips-label';
107481
107680
  div.textContent = label;
107482
107681
  var tipsLabel = new CSS2DRenderer_CSS2DObject(div);
107483
- tipsLabel.name = this.measureName;
107682
+ this.markMeasureObject(tipsLabel);
107484
107683
  tipsLabel.position.set(position.x + 0.1, position.y, position.z + 0.05);
107485
107684
  return tipsLabel;
107486
107685
  },
@@ -107496,14 +107695,22 @@ measure_area_MeasureArea.prototype = {
107496
107695
  clearTimeout(measure_area_this.timer);
107497
107696
  measure_area_this.timer = setTimeout(function () {
107498
107697
  measure_area_this.isCompleted = false;
107499
- var positionResult = measure_area_this.getPosition(e);
107698
+ var positionResult = measure_area_this.getPosition(e, {
107699
+ allowPlaneFallback: false
107700
+ });
107701
+ if (!positionResult || !positionResult.isModel) {
107702
+ measure_area_this.clearTempMeasure();
107703
+ element_ui_common["Message"].warning('请点击模型进行测量');
107704
+ return;
107705
+ }
107500
107706
  if (positionResult) {
107501
- var point = positionResult.point,
107502
- isModel = positionResult.isModel;
107503
- if (!isModel) {
107504
- element_ui_common["Message"].warning('请点击模型进行测量');
107505
- return;
107707
+ var point = positionResult.point;
107708
+ if (measure_area_this.hasTempPoint && measure_area_this.pointArray.length > 0) {
107709
+ measure_area_this.pointArray.splice(measure_area_this.pointArray.length - 1, 1, point);
107710
+ } else {
107711
+ measure_area_this.pointArray.push(point);
107506
107712
  }
107713
+ measure_area_this.hasTempPoint = false;
107507
107714
  if (measure_area_this.tipsLabel) {
107508
107715
  measure_area_this.tipsLabel.position.set(point.x + 0.01, point.y, point.z + 0.05);
107509
107716
  } else {
@@ -107518,8 +107725,20 @@ measure_area_MeasureArea.prototype = {
107518
107725
  measure_area_this.points.push(geom);
107519
107726
  measure_area_this.scene.add(geom);
107520
107727
  }
107728
+ var length = measure_area_this.pointArray.length;
107729
+ if (length > 1) {
107730
+ var p1 = measure_area_this.pointArray[length - 2];
107731
+ var p2 = measure_area_this.pointArray[length - 1];
107732
+ if (measure_area_this.tempLine) {
107733
+ measure_area_this.tempLine.geometry.setFromPoints([p1, p2]);
107734
+ } else {
107735
+ measure_area_this.tempLine = measure_area_this.createLine(p1, p2);
107736
+ measure_area_this.polyline.push(measure_area_this.tempLine);
107737
+ measure_area_this.scene.add(measure_area_this.tempLine);
107738
+ }
107739
+ }
107521
107740
  measure_area_this.tempLine = undefined;
107522
- measure_area_this.pointArray.push(point);
107741
+ measure_area_this.updateAreaMeasure();
107523
107742
  }
107524
107743
  }, 0);
107525
107744
  }
@@ -107533,16 +107752,13 @@ measure_area_MeasureArea.prototype = {
107533
107752
  clearTimeout(measure_area_this.timer);
107534
107753
  var positionResult = measure_area_this.getPosition(e);
107535
107754
  if (positionResult) {
107536
- var point = positionResult.point;
107755
+ measure_area_this.clearTempMeasure();
107537
107756
  measure_area_this.isCompleted = true;
107538
- if (measure_area_this.tempPoints) {
107539
- measure_area_this.tempPoints.position.set(point.x, point.y, point.z);
107540
- measure_area_this.tempPoints = undefined;
107541
- }
107542
107757
  measure_area_this.tempLine = undefined;
107543
107758
  measure_area_this.tempLabel = undefined;
107544
107759
  measure_area_this.polygonMesh = undefined;
107545
107760
  measure_area_this.pointArray.splice(0);
107761
+ measure_area_this.hasTempPoint = false;
107546
107762
  measure_area_this.renderer.domElement.removeEventListener('mousemove', measure_area_this.mousemove);
107547
107763
  }
107548
107764
  },
@@ -107563,6 +107779,7 @@ measure_area_MeasureArea.prototype = {
107563
107779
  this.tempPoints = undefined;
107564
107780
  this.tempLabel = undefined;
107565
107781
  this.tempLine = undefined;
107782
+ this.hasTempPoint = false;
107566
107783
  this.scene.remove(this.tipsLabel);
107567
107784
  this.tipsLabel = undefined;
107568
107785
  }
@@ -107580,6 +107797,7 @@ measure_area_MeasureArea.prototype = {
107580
107797
  this.tempPoints = undefined;
107581
107798
  this.tempLabel = undefined;
107582
107799
  this.tempLine = undefined;
107800
+ this.hasTempPoint = false;
107583
107801
  this.scene.remove(this.tipsLabel);
107584
107802
  this.tipsLabel = undefined;
107585
107803
  },
@@ -107638,8 +107856,7 @@ measure_area_MeasureArea.prototype = {
107638
107856
  });
107639
107857
  var mesh = new Mesh(geom, material);
107640
107858
  mesh.frustumCulled = false;
107641
- // mesh.name = 'polygonMesh';
107642
- mesh.name = measure_area_this.measureName;
107859
+ measure_area_this.markMeasureObject(mesh);
107643
107860
  measure_area_this.polygonMesh = mesh;
107644
107861
  measure_area_this.scene.add(mesh);
107645
107862
  measure_area_this.polygons.push(mesh);
@@ -107659,9 +107876,11 @@ measure_area_MeasureArea.prototype = {
107659
107876
 
107660
107877
  var measure_angle_this = null;
107661
107878
  var measure_angle_MeasureAngle = function MeasureAngle(renderer, scene, camera, width, height) {
107879
+ var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};
107662
107880
  this.renderer = renderer;
107663
107881
  this.scene = scene;
107664
107882
  this.camera = camera;
107883
+ this.pickRoots = options.pickRoots || null;
107665
107884
  this.pointArray = []; // 保存当前操作所添加的点
107666
107885
  this.raycaster = new Raycaster();
107667
107886
  this.points = []; // 保存页面中所添加的点
@@ -107673,6 +107892,7 @@ var measure_angle_MeasureAngle = function MeasureAngle(renderer, scene, camera,
107673
107892
  this.tempLabel = undefined;
107674
107893
  this.tipsLabel = undefined;
107675
107894
  this.isCompleted = false;
107895
+ this.hasTempPoint = false;
107676
107896
  this.curveLine = undefined;
107677
107897
  this.timer = null;
107678
107898
  this.width = width;
@@ -107700,7 +107920,103 @@ measure_angle_MeasureAngle.prototype = {
107700
107920
  this.width = width;
107701
107921
  this.height = height;
107702
107922
  },
107923
+ getPickRoots: function getPickRoots() {
107924
+ var roots = typeof measure_angle_this.pickRoots === 'function' ? measure_angle_this.pickRoots() : measure_angle_this.pickRoots;
107925
+ if (Array.isArray(roots) && roots.length > 0) {
107926
+ return roots.filter(Boolean);
107927
+ }
107928
+ if (roots) {
107929
+ return [roots];
107930
+ }
107931
+ return measure_angle_this.scene && measure_angle_this.scene.children ? measure_angle_this.scene.children : [];
107932
+ },
107933
+ isExcludedIntersection: function isExcludedIntersection(object) {
107934
+ var current = object;
107935
+ while (current) {
107936
+ var userData = current.userData || {};
107937
+ if (current.visible === false) return true;
107938
+ if (current.name === measure_angle_this.measureName || userData.isMeasureObject === true) return true;
107939
+ if (userData.transformControlHelper === true || userData.outlineProxy === true) return true;
107940
+ if (current.isCamera || current.isLight) return true;
107941
+ if (typeof current.type === 'string' && (/Helper$/i.test(current.type) || current.type === 'CSS2DObject' || current.type === 'TransformControlsRoot')) {
107942
+ return true;
107943
+ }
107944
+ current = current.parent;
107945
+ }
107946
+ return false;
107947
+ },
107948
+ markMeasureObject: function markMeasureObject(object) {
107949
+ object.name = this.measureName;
107950
+ if (!object.userData) {
107951
+ object.userData = {};
107952
+ }
107953
+ object.userData.isMeasureObject = true;
107954
+ return object;
107955
+ },
107956
+ disposeObject: function disposeObject(object) {
107957
+ if (!object) return;
107958
+ if (object.geometry) {
107959
+ object.geometry.dispose();
107960
+ }
107961
+ if (object.material) {
107962
+ object.material.dispose();
107963
+ }
107964
+ this.scene.remove(object);
107965
+ },
107966
+ removeArrayItem: function removeArrayItem(array, item) {
107967
+ if (!item) return;
107968
+ var index = array.indexOf(item);
107969
+ if (index !== -1) {
107970
+ array.splice(index, 1);
107971
+ }
107972
+ },
107973
+ clearTempMeasure: function clearTempMeasure() {
107974
+ if (this.hasTempPoint && this.pointArray.length > 0) {
107975
+ this.pointArray.pop();
107976
+ }
107977
+ this.removeArrayItem(this.points, this.tempPoints);
107978
+ this.removeArrayItem(this.polyline, this.tempLine);
107979
+ this.disposeObject(this.tempPoints);
107980
+ this.disposeObject(this.tempLine);
107981
+ this.tempPoints = undefined;
107982
+ this.tempLine = undefined;
107983
+ this.hasTempPoint = false;
107984
+ this.updateAngleMeasure();
107985
+ },
107986
+ updateAngleMeasure: function updateAngleMeasure() {
107987
+ if (this.pointArray.length !== 3) {
107988
+ this.removeArrayItem(this.labels, this.tempLabel);
107989
+ this.removeArrayItem(this.curves, this.curveLine);
107990
+ this.disposeObject(this.tempLabel);
107991
+ this.disposeObject(this.curveLine);
107992
+ this.tempLabel = undefined;
107993
+ this.curveLine = undefined;
107994
+ return;
107995
+ }
107996
+ var angle = this.calculateAngle().toFixed(2) + '°';
107997
+ var p0 = this.pointArray[0];
107998
+ var p1 = this.pointArray[1];
107999
+ var p2 = this.pointArray[2];
108000
+ var v1 = new Vector3((p0.x + p1.x) / 2, (p0.y + p1.y) / 2, (p0.z + p1.z) / 2);
108001
+ var v2 = new Vector3((p1.x + p2.x) / 2, (p1.y + p2.y) / 2, (p1.z + p2.z) / 2);
108002
+ var curve = new CatmullRomCurve3([v1, v2]);
108003
+ var points = curve.getPoints(50);
108004
+ if (this.tempLabel) {
108005
+ this.tempLabel.element.textContent = angle;
108006
+ this.tempLabel.position.set(p1.x, p1.y, p1.z);
108007
+ } else {
108008
+ this.tempLabel = this.createLabel('measure-label', angle, p1);
108009
+ this.labels.push(this.tempLabel);
108010
+ this.scene.add(this.tempLabel);
108011
+ }
108012
+ if (this.curveLine) {
108013
+ this.curveLine.geometry.setFromPoints(points);
108014
+ } else {
108015
+ this.createCurve(points);
108016
+ }
108017
+ },
107703
108018
  getPosition: function getPosition(e) {
108019
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
107704
108020
  var mouse = new Vector2();
107705
108021
  var elRect = this.renderer.domElement.getBoundingClientRect();
107706
108022
  var canvasX = e.clientX - elRect.left;
@@ -107708,13 +108024,18 @@ measure_angle_MeasureAngle.prototype = {
107708
108024
  mouse.x = canvasX / elRect.width * 2.0 - 1.0;
107709
108025
  mouse.y = -(canvasY / elRect.height) * 2.0 + 1.0;
107710
108026
  measure_angle_this.raycaster.setFromCamera(mouse, this.camera);
107711
- var intersects = measure_angle_this.raycaster.intersectObjects(measure_angle_this.scene.children, true);
108027
+ var intersects = measure_angle_this.raycaster.intersectObjects(measure_angle_this.getPickRoots(), true).filter(function (item) {
108028
+ return item && item.object && !measure_angle_this.isExcludedIntersection(item.object);
108029
+ });
107712
108030
  if (intersects.length > 0) {
107713
108031
  return {
107714
108032
  point: intersects[0].point,
107715
108033
  isModel: true
107716
108034
  };
107717
108035
  }
108036
+ if (options.allowPlaneFallback === false) {
108037
+ return null;
108038
+ }
107718
108039
 
107719
108040
  // 如果没有交点,构建一个基于最后一个确认点且面向相机的平面
107720
108041
  if (measure_angle_this.pointArray && measure_angle_this.pointArray.length > 0) {
@@ -107754,7 +108075,7 @@ measure_angle_MeasureAngle.prototype = {
107754
108075
  var geom = new SphereGeometry(config.size || 0.3, 28, 28);
107755
108076
  var sphere = new Mesh(geom, mesh);
107756
108077
  sphere.frustumCulled = false;
107757
- sphere.name = this.measureName;
108078
+ this.markMeasureObject(sphere);
107758
108079
  sphere.position.set(pos.x, pos.y, pos.z);
107759
108080
  return sphere;
107760
108081
  },
@@ -107771,7 +108092,7 @@ measure_angle_MeasureAngle.prototype = {
107771
108092
  });
107772
108093
  var lineGeometry = new BufferGeometry().setFromPoints([p1, p2]);
107773
108094
  var line = new three_core_Line(lineGeometry, lineMaterial);
107774
- line.name = this.measureName;
108095
+ this.markMeasureObject(line);
107775
108096
  line.renderOrder = 999;
107776
108097
  line.frustumCulled = false;
107777
108098
  return line;
@@ -107781,16 +108102,28 @@ measure_angle_MeasureAngle.prototype = {
107781
108102
  div.className = name;
107782
108103
  div.textContent = text;
107783
108104
  var divLabel = new CSS2DRenderer_CSS2DObject(div);
107784
- divLabel.name = this.measureName;
108105
+ this.markMeasureObject(divLabel);
107785
108106
  divLabel.position.set(position.x, position.y, position.z);
107786
108107
  return divLabel;
107787
108108
  },
107788
108109
  mousemove: function mousemove(e) {
107789
- if (measure_angle_this.isCompleted || measure_angle_this.pointArray.length === 0) return;
108110
+ if (measure_angle_this.isCompleted || measure_angle_this.pointArray.length === 0) {
108111
+ var _positionResult = measure_angle_this.getPosition(e);
108112
+ if (_positionResult && measure_angle_this.tipsLabel) {
108113
+ measure_angle_this.updateTipsLabelPosition(_positionResult.point);
108114
+ }
108115
+ return;
108116
+ }
108117
+ if (measure_angle_this.pointArray.length >= 3 && !measure_angle_this.hasTempPoint) return;
107790
108118
  var positionResult = measure_angle_this.getPosition(e);
107791
108119
  if (positionResult) {
107792
108120
  var point = positionResult.point;
107793
- measure_angle_this.pointArray.length === 1 ? measure_angle_this.pointArray.push(point) : measure_angle_this.pointArray.splice(measure_angle_this.pointArray.length - 1, 1, point);
108121
+ if (measure_angle_this.hasTempPoint) {
108122
+ measure_angle_this.pointArray.splice(measure_angle_this.pointArray.length - 1, 1, point);
108123
+ } else {
108124
+ measure_angle_this.pointArray.push(point);
108125
+ measure_angle_this.hasTempPoint = true;
108126
+ }
107794
108127
  var length = measure_angle_this.pointArray.length;
107795
108128
  var p1 = measure_angle_this.pointArray[length - 2];
107796
108129
  var p2 = measure_angle_this.pointArray[length - 1];
@@ -107809,38 +108142,21 @@ measure_angle_MeasureAngle.prototype = {
107809
108142
  measure_angle_this.polyline.push(measure_angle_this.tempLine);
107810
108143
  measure_angle_this.scene.add(measure_angle_this.tempLine);
107811
108144
  }
107812
- // 三点构成一个角
107813
- if (measure_angle_this.pointArray.length === 3) {
107814
- var angle = measure_angle_this.calculateAngle().toFixed(2) + '°';
107815
- var p0 = measure_angle_this.pointArray[0];
107816
- var _p = measure_angle_this.pointArray[1];
107817
- var _p2 = measure_angle_this.pointArray[2];
107818
- var v1 = new Vector3((p0.x + _p.x) / 2, (p0.y + _p.y) / 2, (p0.z + _p.z) / 2);
107819
- var v2 = new Vector3((_p.x + _p2.x) / 2, (_p.y + _p2.y) / 2, (_p.z + _p2.z) / 2);
107820
- var curve = new CatmullRomCurve3([v1, v2]);
107821
- var points = curve.getPoints(50);
107822
- if (measure_angle_this.tempLabel) {
107823
- measure_angle_this.tempLabel.element.textContent = angle;
107824
- measure_angle_this.tempLabel.position.set(_p.x, _p.y, _p.z);
107825
- measure_angle_this.curveLine.geometry.setFromPoints(points);
107826
- } else {
107827
- measure_angle_this.tempLabel = measure_angle_this.createLabel('measure-label', angle, _p);
107828
- measure_angle_this.labels.push(measure_angle_this.tempLabel);
107829
- measure_angle_this.scene.add(measure_angle_this.tempLabel);
107830
- measure_angle_this.createCurve(points);
107831
- }
107832
- }
108145
+ measure_angle_this.updateAngleMeasure();
107833
108146
  if (measure_angle_this.tipsLabel) {
107834
- measure_angle_this.tipsLabel.position.set(point.x + 0.1, point.y, point.z + 0.05);
108147
+ measure_angle_this.updateTipsLabelPosition(point);
107835
108148
  }
107836
108149
  }
107837
108150
  },
108151
+ updateTipsLabelPosition: function updateTipsLabelPosition(position) {
108152
+ this.tipsLabel.position.set(position.x + 0.1, position.y, position.z + 0.05);
108153
+ },
107838
108154
  createTipsLabel: function createTipsLabel(label, position) {
107839
108155
  var div = document.createElement('div');
107840
108156
  div.className = 'tips-label';
107841
108157
  div.textContent = label;
107842
108158
  var tipsLabel = new CSS2DRenderer_CSS2DObject(div);
107843
- tipsLabel.name = this.measureName;
108159
+ this.markMeasureObject(tipsLabel);
107844
108160
  tipsLabel.position.set(position.x + 0.1, position.y, position.z + 0.05);
107845
108161
  return tipsLabel;
107846
108162
  },
@@ -107856,16 +108172,24 @@ measure_angle_MeasureAngle.prototype = {
107856
108172
  clearTimeout(measure_angle_this.timer);
107857
108173
  measure_angle_this.timer = setTimeout(function () {
107858
108174
  measure_angle_this.isCompleted = false;
107859
- var positionResult = measure_angle_this.getPosition(e);
108175
+ var positionResult = measure_angle_this.getPosition(e, {
108176
+ allowPlaneFallback: false
108177
+ });
108178
+ if (!positionResult || !positionResult.isModel) {
108179
+ measure_angle_this.clearTempMeasure();
108180
+ element_ui_common["Message"].warning('请点击模型进行测量');
108181
+ return;
108182
+ }
107860
108183
  if (positionResult) {
107861
- var point = positionResult.point,
107862
- isModel = positionResult.isModel;
107863
- if (!isModel) {
107864
- element_ui_common["Message"].warning('请点击模型进行测量');
107865
- return;
108184
+ var point = positionResult.point;
108185
+ if (measure_angle_this.hasTempPoint && measure_angle_this.pointArray.length > 0) {
108186
+ measure_angle_this.pointArray.splice(measure_angle_this.pointArray.length - 1, 1, point);
108187
+ } else {
108188
+ measure_angle_this.pointArray.push(point);
107866
108189
  }
108190
+ measure_angle_this.hasTempPoint = false;
107867
108191
  if (measure_angle_this.tipsLabel) {
107868
- measure_angle_this.tipsLabel.position.set(point.x + 0.1, point.y, point.z + 0.05);
108192
+ measure_angle_this.updateTipsLabelPosition(point);
107869
108193
  } else {
107870
108194
  measure_angle_this.tipsLabel = measure_angle_this.createTipsLabel('左击绘制右击结束', point);
107871
108195
  measure_angle_this.scene.add(measure_angle_this.tipsLabel);
@@ -107878,9 +108202,27 @@ measure_angle_MeasureAngle.prototype = {
107878
108202
  measure_angle_this.points.push(geom);
107879
108203
  measure_angle_this.scene.add(geom);
107880
108204
  }
108205
+ var length = measure_angle_this.pointArray.length;
108206
+ if (length > 1) {
108207
+ var p1 = measure_angle_this.pointArray[length - 2];
108208
+ var p2 = measure_angle_this.pointArray[length - 1];
108209
+ if (measure_angle_this.tempLine) {
108210
+ measure_angle_this.tempLine.geometry.setFromPoints([p1, p2]);
108211
+ } else {
108212
+ measure_angle_this.tempLine = measure_angle_this.createLine(p1, p2);
108213
+ measure_angle_this.polyline.push(measure_angle_this.tempLine);
108214
+ measure_angle_this.scene.add(measure_angle_this.tempLine);
108215
+ }
108216
+ }
108217
+ measure_angle_this.updateAngleMeasure();
108218
+ if (measure_angle_this.pointArray.length >= 3) {
108219
+ measure_angle_this.isCompleted = true;
108220
+ measure_angle_this.pointArray.splice(0);
108221
+ measure_angle_this.hasTempPoint = false;
108222
+ measure_angle_this.curveLine = undefined;
108223
+ }
107881
108224
  measure_angle_this.tempLine = undefined;
107882
108225
  measure_angle_this.tempLabel = undefined;
107883
- measure_angle_this.pointArray.push(point);
107884
108226
  }
107885
108227
  });
107886
108228
  }
@@ -107894,11 +108236,13 @@ measure_angle_MeasureAngle.prototype = {
107894
108236
  clearTimeout(measure_angle_this.timer);
107895
108237
  var positionResult = measure_angle_this.getPosition(e);
107896
108238
  if (positionResult) {
108239
+ measure_angle_this.clearTempMeasure();
107897
108240
  measure_angle_this.isCompleted = true;
107898
108241
  measure_angle_this.tempPoints = undefined;
107899
108242
  measure_angle_this.tempLine = undefined;
107900
108243
  measure_angle_this.tempLabel = undefined;
107901
108244
  measure_angle_this.pointArray.splice(0);
108245
+ measure_angle_this.hasTempPoint = false;
107902
108246
  measure_angle_this.renderer.domElement.removeEventListener('mousemove', measure_angle_this.mousemove);
107903
108247
  }
107904
108248
  },
@@ -107920,6 +108264,7 @@ measure_angle_MeasureAngle.prototype = {
107920
108264
  this.tempPoints = undefined;
107921
108265
  this.tempLabel = undefined;
107922
108266
  this.tempLine = undefined;
108267
+ this.hasTempPoint = false;
107923
108268
  this.scene.remove(this.tipsLabel);
107924
108269
  this.tipsLabel = undefined;
107925
108270
  }
@@ -107938,6 +108283,7 @@ measure_angle_MeasureAngle.prototype = {
107938
108283
  this.tempPoints = undefined;
107939
108284
  this.tempLabel = undefined;
107940
108285
  this.tempLine = undefined;
108286
+ this.hasTempPoint = false;
107941
108287
  this.scene.remove(this.tipsLabel);
107942
108288
  this.tipsLabel = undefined;
107943
108289
  },
@@ -107968,6 +108314,7 @@ measure_angle_MeasureAngle.prototype = {
107968
108314
  transparent: true
107969
108315
  });
107970
108316
  measure_angle_this.curveLine = new three_core_Line(geom, material);
108317
+ measure_angle_this.markMeasureObject(measure_angle_this.curveLine);
107971
108318
  measure_angle_this.curveLine.renderOrder = 999;
107972
108319
  measure_angle_this.curveLine.frustumCulled = false;
107973
108320
  measure_angle_this.curves.push(measure_angle_this.curveLine);
@@ -107998,9 +108345,11 @@ measure_angle_MeasureAngle.prototype = {
107998
108345
 
107999
108346
  var measure_height_this = null;
108000
108347
  var measure_height_MeasureHeight = function MeasureHeight(renderer, scene, camera, width, height) {
108348
+ var options = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};
108001
108349
  this.renderer = renderer;
108002
108350
  this.scene = scene;
108003
108351
  this.camera = camera;
108352
+ this.pickRoots = options.pickRoots || null;
108004
108353
  this.pointArray = [];
108005
108354
  this.raycaster = new Raycaster();
108006
108355
  this.points = [];
@@ -108033,7 +108382,41 @@ measure_height_MeasureHeight.prototype = {
108033
108382
  this.width = width;
108034
108383
  this.height = height;
108035
108384
  },
108385
+ getPickRoots: function getPickRoots() {
108386
+ var roots = typeof measure_height_this.pickRoots === 'function' ? measure_height_this.pickRoots() : measure_height_this.pickRoots;
108387
+ if (Array.isArray(roots) && roots.length > 0) {
108388
+ return roots.filter(Boolean);
108389
+ }
108390
+ if (roots) {
108391
+ return [roots];
108392
+ }
108393
+ return measure_height_this.scene && measure_height_this.scene.children ? measure_height_this.scene.children : [];
108394
+ },
108395
+ isExcludedIntersection: function isExcludedIntersection(object) {
108396
+ var current = object;
108397
+ while (current) {
108398
+ var userData = current.userData || {};
108399
+ if (current.visible === false) return true;
108400
+ if (current.name === measure_height_this.measureName || userData.isMeasureObject === true) return true;
108401
+ if (userData.transformControlHelper === true || userData.outlineProxy === true) return true;
108402
+ if (current.isCamera || current.isLight) return true;
108403
+ if (typeof current.type === 'string' && (/Helper$/i.test(current.type) || current.type === 'CSS2DObject' || current.type === 'TransformControlsRoot')) {
108404
+ return true;
108405
+ }
108406
+ current = current.parent;
108407
+ }
108408
+ return false;
108409
+ },
108410
+ markMeasureObject: function markMeasureObject(object) {
108411
+ object.name = this.measureName;
108412
+ if (!object.userData) {
108413
+ object.userData = {};
108414
+ }
108415
+ object.userData.isMeasureObject = true;
108416
+ return object;
108417
+ },
108036
108418
  getPosition: function getPosition(e) {
108419
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
108037
108420
  var mouse = new Vector2();
108038
108421
  var elRect = this.renderer.domElement.getBoundingClientRect();
108039
108422
  var canvasX = e.clientX - elRect.left;
@@ -108041,13 +108424,18 @@ measure_height_MeasureHeight.prototype = {
108041
108424
  mouse.x = canvasX / elRect.width * 2.0 - 1.0;
108042
108425
  mouse.y = -(canvasY / elRect.height) * 2.0 + 1.0;
108043
108426
  measure_height_this.raycaster.setFromCamera(mouse, this.camera);
108044
- var intersects = measure_height_this.raycaster.intersectObjects(measure_height_this.scene.children, true);
108427
+ var intersects = measure_height_this.raycaster.intersectObjects(measure_height_this.getPickRoots(), true).filter(function (item) {
108428
+ return item && item.object && !measure_height_this.isExcludedIntersection(item.object);
108429
+ });
108045
108430
  if (intersects.length > 0) {
108046
108431
  return {
108047
108432
  point: intersects[0].point,
108048
108433
  isModel: true
108049
108434
  };
108050
108435
  }
108436
+ if (options.allowPlaneFallback === false) {
108437
+ return null;
108438
+ }
108051
108439
  if (measure_height_this.pointArray && measure_height_this.pointArray.length > 0) {
108052
108440
  var lastPoint = measure_height_this.pointArray.length === 1 ? measure_height_this.pointArray[0] : measure_height_this.pointArray[measure_height_this.pointArray.length - 2];
108053
108441
  var cameraDir = new Vector3();
@@ -108085,7 +108473,7 @@ measure_height_MeasureHeight.prototype = {
108085
108473
  });
108086
108474
  var lineGeometry = new BufferGeometry().setFromPoints([p1, p2]);
108087
108475
  var line = new three_core_Line(lineGeometry, lineMaterial);
108088
- line.name = this.measureName;
108476
+ this.markMeasureObject(line);
108089
108477
  line.renderOrder = 999;
108090
108478
  line.frustumCulled = false;
108091
108479
  return line;
@@ -108095,7 +108483,7 @@ measure_height_MeasureHeight.prototype = {
108095
108483
  div.className = name;
108096
108484
  div.textContent = text;
108097
108485
  var divLabel = new CSS2DRenderer_CSS2DObject(div);
108098
- divLabel.name = this.measureName;
108486
+ this.markMeasureObject(divLabel);
108099
108487
  divLabel.position.set(position.x, position.y, position.z);
108100
108488
  return divLabel;
108101
108489
  },
@@ -108121,7 +108509,7 @@ measure_height_MeasureHeight.prototype = {
108121
108509
  div.className = 'tips-label';
108122
108510
  div.textContent = label;
108123
108511
  var tipsLabel = new CSS2DRenderer_CSS2DObject(div);
108124
- tipsLabel.name = this.measureName;
108512
+ this.markMeasureObject(tipsLabel);
108125
108513
  tipsLabel.position.set(position.x + 0.1, position.y, position.z + 0.05);
108126
108514
  return tipsLabel;
108127
108515
  },
@@ -108134,14 +108522,15 @@ measure_height_MeasureHeight.prototype = {
108134
108522
  clearTimeout(measure_height_this.timer);
108135
108523
  measure_height_this.timer = setTimeout(function () {
108136
108524
  measure_height_this.isCompleted = false;
108137
- var positionResult = measure_height_this.getPosition(e);
108525
+ var positionResult = measure_height_this.getPosition(e, {
108526
+ allowPlaneFallback: false
108527
+ });
108528
+ if (!positionResult || !positionResult.isModel) {
108529
+ element_ui_common["Message"].warning('请点击模型进行测量');
108530
+ return;
108531
+ }
108138
108532
  if (positionResult) {
108139
- var point = positionResult.point,
108140
- isModel = positionResult.isModel;
108141
- if (!isModel) {
108142
- element_ui_common["Message"].warning('请点击模型进行测量');
108143
- return;
108144
- }
108533
+ var point = positionResult.point;
108145
108534
  // if (_this.tipsLabel) {
108146
108535
  // _this.tipsLabel.position.set(point.x + 0.1, point.y, point.z + 0.05);
108147
108536
  // } else {
@@ -108222,6 +108611,386 @@ measure_height_MeasureHeight.prototype = {
108222
108611
  /* harmony default export */ var measure_height = ({
108223
108612
  MeasureHeight: measure_height_MeasureHeight
108224
108613
  });
108614
+ // CONCATENATED MODULE: ./src/utils/threejs/measure-clear-distance.js
108615
+ function measure_clear_distance_createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = measure_clear_distance_unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
108616
+ function measure_clear_distance_slicedToArray(r, e) { return measure_clear_distance_arrayWithHoles(r) || measure_clear_distance_iterableToArrayLimit(r, e) || measure_clear_distance_unsupportedIterableToArray(r, e) || measure_clear_distance_nonIterableRest(); }
108617
+ function measure_clear_distance_nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
108618
+ function measure_clear_distance_unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return measure_clear_distance_arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? measure_clear_distance_arrayLikeToArray(r, a) : void 0; } }
108619
+ function measure_clear_distance_arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
108620
+ function measure_clear_distance_iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
108621
+ function measure_clear_distance_arrayWithHoles(r) { if (Array.isArray(r)) return r; }
108622
+
108623
+
108624
+
108625
+ var measure_clear_distance_this = null;
108626
+ var measure_clear_distance_MeasureClearDistance = function MeasureClearDistance(renderer, scene, camera, width, height) {
108627
+ this.renderer = renderer;
108628
+ this.scene = scene;
108629
+ this.camera = camera;
108630
+ this.pointArray = []; // 保存当前操作所添加的点
108631
+ this.raycaster = new Raycaster();
108632
+ this.points = []; // 保存页面中所添加的点
108633
+ this.polyline = []; //保存页面中所添加的直线
108634
+ this.labels = []; // 保存页面中所添加的文本
108635
+ this.timer = null;
108636
+ this.width = width;
108637
+ this.height = height;
108638
+ this.firstTime = 0;
108639
+ this.measureName = 'measureObj';
108640
+ this.selectedObjects = [];
108641
+ };
108642
+ measure_clear_distance_MeasureClearDistance.prototype = {
108643
+ start: function start() {
108644
+ measure_clear_distance_this = this;
108645
+ this.renderer.domElement.style.cursor = 'crosshair';
108646
+ this.renderer.domElement.addEventListener('mouseup', this.click, false);
108647
+ this.renderer.domElement.addEventListener('mousedown', this.mousedown, false);
108648
+ },
108649
+ updateParams: function updateParams(width, height) {
108650
+ this.camera.aspect = width / height;
108651
+ this.camera.updateProjectionMatrix();
108652
+ this.renderer.setSize(width, height, true);
108653
+ this.width = width;
108654
+ this.height = height;
108655
+ },
108656
+ getPosition: function getPosition(e) {
108657
+ var mouse = new Vector2();
108658
+ var elRect = this.renderer.domElement.getBoundingClientRect();
108659
+ var canvasX = e.clientX - elRect.left;
108660
+ var canvasY = e.clientY - elRect.top;
108661
+ mouse.x = canvasX / elRect.width * 2.0 - 1.0;
108662
+ mouse.y = -(canvasY / elRect.height) * 2.0 + 1.0;
108663
+ measure_clear_distance_this.raycaster.setFromCamera(mouse, this.camera);
108664
+ var intersects = measure_clear_distance_this.raycaster.intersectObjects(measure_clear_distance_this.scene.children, true);
108665
+ if (intersects.length > 0) {
108666
+ return intersects[0];
108667
+ }
108668
+ return null;
108669
+ },
108670
+ createLine: function createLine(p1, p2) {
108671
+ var config = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
108672
+ color: 0xff0000
108673
+ };
108674
+ var lineMaterial = new LineBasicMaterial({
108675
+ color: config.color,
108676
+ linewidth: 15,
108677
+ depthTest: false,
108678
+ depthWrite: false,
108679
+ transparent: true
108680
+ });
108681
+ var lineGeometry = new BufferGeometry().setFromPoints([p1, p2]);
108682
+ var line = new three_core_Line(lineGeometry, lineMaterial);
108683
+ line.name = this.measureName;
108684
+ line.renderOrder = 999;
108685
+ line.frustumCulled = false;
108686
+ return line;
108687
+ },
108688
+ createLabel: function createLabel(name, text, position) {
108689
+ var div = document.createElement('div');
108690
+ div.className = name;
108691
+ div.textContent = text;
108692
+ var divLabel = new CSS2DRenderer_CSS2DObject(div);
108693
+ divLabel.name = this.measureName;
108694
+ divLabel.position.set(position.x, position.y, position.z);
108695
+ return divLabel;
108696
+ },
108697
+ createTipsLabel: function createTipsLabel(label, position) {
108698
+ var div = document.createElement('div');
108699
+ div.className = 'tips-label';
108700
+ div.textContent = label;
108701
+ var tipsLabel = new CSS2DRenderer_CSS2DObject(div);
108702
+ tipsLabel.name = this.measureName;
108703
+ tipsLabel.position.set(position.x + 0.1, position.y, position.z + 0.05);
108704
+ return tipsLabel;
108705
+ },
108706
+ mousedown: function mousedown() {
108707
+ this.firstTime = new Date().getTime();
108708
+ },
108709
+ click: function click(e) {
108710
+ var lastTime = new Date().getTime();
108711
+ if (lastTime - this.firstTime < 300) {
108712
+ var measureObj = measure_clear_distance_this.getPosition(e);
108713
+ if (measureObj) {
108714
+ measure_clear_distance_this.selectedObjects.push(measureObj);
108715
+ if (measure_clear_distance_this.selectedObjects.length % 2 === 0) {
108716
+ measure_clear_distance_this.calculateClearDistance();
108717
+ }
108718
+ } else {
108719
+ element_ui_common["Message"].warning('请点击模型进行测量');
108720
+ }
108721
+ }
108722
+ },
108723
+ calculateClearDistance: function calculateClearDistance() {
108724
+ var l = this.selectedObjects.length;
108725
+ // 每次都取最后两个
108726
+ var obj1 = this.selectedObjects[l - 2];
108727
+ var obj2 = this.selectedObjects[l - 1];
108728
+ var isParallel = this.checkParallelism(obj1.object, obj1.instanceId, obj2.object, obj2.instanceId);
108729
+ console.log(isParallel);
108730
+ var pts1 = this.getInstanceSurfacePoints(obj1.object, obj1.instanceId, 600);
108731
+ var pts2 = this.getInstanceSurfacePoints(obj2.object, obj2.instanceId, 600);
108732
+ if (pts1.length === 0 || pts2.length === 0) {
108733
+ return;
108734
+ }
108735
+ var closestPair = this.findClosestPair(pts1, pts2);
108736
+ var position = new Vector3((closestPair.point1.x + closestPair.point2.x) / 2, (closestPair.point1.y + closestPair.point2.y) / 2, (closestPair.point1.z + closestPair.point2.z) / 2);
108737
+ // 将测量结果显示在页面中
108738
+ var circleTag1 = this.createLabel('circle-tag', '', closestPair.point1);
108739
+ var circleTag2 = this.createLabel('circle-tag', '', closestPair.point2);
108740
+ var line = this.createLine(closestPair.point1, closestPair.point2);
108741
+ var label = this.createLabel('measure-label', "".concat(this.numberToString(closestPair.distance)), position);
108742
+ this.points.push(circleTag1);
108743
+ this.points.push(circleTag1);
108744
+ this.polyline.push(line);
108745
+ this.labels.push(label);
108746
+ this.scene.add(circleTag1);
108747
+ this.scene.add(circleTag2);
108748
+ this.scene.add(line);
108749
+ this.scene.add(label);
108750
+ },
108751
+ getInstanceSurfacePoints: function getInstanceSurfacePoints(instancedMesh, instanceId) {
108752
+ var maxPoints = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1000;
108753
+ var geometry = instancedMesh.geometry;
108754
+ // let localPoints = this.generateGenericLocalPoints(geometry, maxPoints);
108755
+ var localPoints = this.sampleGeometrySurface(geometry, maxPoints);
108756
+ var worldMatrix = this.getInstanceWorldMatrix(instancedMesh, instanceId);
108757
+ var worldPoints = localPoints.map(function (p) {
108758
+ return p.clone().applyMatrix4(worldMatrix);
108759
+ });
108760
+ return worldPoints.slice(0, maxPoints);
108761
+ },
108762
+ sampleGeometrySurface: function sampleGeometrySurface(geometry) {
108763
+ var maxPoints = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 600;
108764
+ var positions = geometry.getAttribute('position');
108765
+ if (!positions) return [];
108766
+
108767
+ // 获取三角形(优先使用索引)
108768
+ var triangles = [];
108769
+ if (geometry.index) {
108770
+ var index = geometry.index.array;
108771
+ for (var i = 0; i < index.length; i += 3) {
108772
+ var a = new Vector3(positions.getX(index[i]), positions.getY(index[i]), positions.getZ(index[i]));
108773
+ var b = new Vector3(positions.getX(index[i + 1]), positions.getY(index[i + 1]), positions.getZ(index[i + 1]));
108774
+ var c = new Vector3(positions.getX(index[i + 2]), positions.getY(index[i + 2]), positions.getZ(index[i + 2]));
108775
+ triangles.push([a, b, c]);
108776
+ }
108777
+ } else {
108778
+ // 无索引时,每三个顶点组成一个三角形
108779
+ for (var _i = 0; _i < positions.count; _i += 3) {
108780
+ var _a = new Vector3(positions.getX(_i), positions.getY(_i), positions.getZ(_i));
108781
+ var _b = new Vector3(positions.getX(_i + 1), positions.getY(_i + 1), positions.getZ(_i + 1));
108782
+ var _c = new Vector3(positions.getX(_i + 2), positions.getY(_i + 2), positions.getZ(_i + 2));
108783
+ triangles.push([_a, _b, _c]);
108784
+ }
108785
+ }
108786
+ if (triangles.length === 0) return [];
108787
+
108788
+ // 计算每个三角形的面积
108789
+ var areas = triangles.map(function (_ref) {
108790
+ var _ref2 = measure_clear_distance_slicedToArray(_ref, 3),
108791
+ a = _ref2[0],
108792
+ b = _ref2[1],
108793
+ c = _ref2[2];
108794
+ var ab = new Vector3().subVectors(b, a);
108795
+ var ac = new Vector3().subVectors(c, a);
108796
+ return new Vector3().crossVectors(ab, ac).length() * 0.5;
108797
+ });
108798
+ var totalArea = areas.reduce(function (sum, a) {
108799
+ return sum + a;
108800
+ }, 0);
108801
+
108802
+ // 按面积比例分配采样点数
108803
+ var points = [];
108804
+ for (var _i2 = 0; _i2 < triangles.length; _i2++) {
108805
+ var _triangles$_i = measure_clear_distance_slicedToArray(triangles[_i2], 3),
108806
+ _a2 = _triangles$_i[0],
108807
+ _b2 = _triangles$_i[1],
108808
+ _c2 = _triangles$_i[2];
108809
+ var area = areas[_i2];
108810
+ var samplesForFace = Math.round(area / totalArea * maxPoints);
108811
+ if (samplesForFace < 1 && points.length < maxPoints) samplesForFace = 1; // 确保每个面至少一个点
108812
+
108813
+ for (var j = 0; j < samplesForFace; j++) {
108814
+ // 重心坐标随机采样
108815
+ var u = Math.random();
108816
+ var v = Math.random() * (1 - u);
108817
+ var w = 1 - u - v;
108818
+ var point = new Vector3().addScaledVector(_a2, u).addScaledVector(_b2, v).addScaledVector(_c2, w);
108819
+ points.push(point);
108820
+ }
108821
+ }
108822
+
108823
+ // 如果点数不够,随机补充
108824
+ while (points.length < maxPoints) {
108825
+ var triIdx = Math.floor(Math.random() * triangles.length);
108826
+ var _triangles$triIdx = measure_clear_distance_slicedToArray(triangles[triIdx], 3),
108827
+ _a3 = _triangles$triIdx[0],
108828
+ _b3 = _triangles$triIdx[1],
108829
+ _c3 = _triangles$triIdx[2];
108830
+ var _u = Math.random();
108831
+ var _v = Math.random() * (1 - _u);
108832
+ var _w = 1 - _u - _v;
108833
+ points.push(new Vector3().addScaledVector(_a3, _u).addScaledVector(_b3, _v).addScaledVector(_c3, _w));
108834
+ }
108835
+ return points.slice(0, maxPoints);
108836
+ },
108837
+ generateGenericLocalPoints: function generateGenericLocalPoints(geometry) {
108838
+ var maxPoints = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000;
108839
+ var pos = geometry.getAttribute('position');
108840
+ if (!pos) return [];
108841
+ var allVerts = [];
108842
+ for (var i = 0; i < pos.count; i++) {
108843
+ allVerts.push(new Vector3(pos.getX(i), pos.getY(i), pos.getZ(i)));
108844
+ }
108845
+ var sourceVerts = allVerts;
108846
+ if (geometry.index) {
108847
+ var indexArr = geometry.index.array;
108848
+ var seen = new Set();
108849
+ sourceVerts = [];
108850
+ for (var _i3 = 0; _i3 < indexArr.length; _i3++) {
108851
+ var v = allVerts[indexArr[_i3]];
108852
+ var key = "".concat(v.x.toFixed(4), ",").concat(v.y.toFixed(4), ",").concat(v.z.toFixed(4));
108853
+ if (!seen.has(key)) {
108854
+ seen.add(key);
108855
+ sourceVerts.push(v.clone());
108856
+ }
108857
+ }
108858
+ }
108859
+ if (sourceVerts.length > maxPoints) {
108860
+ var step = Math.ceil(sourceVerts.length / maxPoints);
108861
+ var sampled = [];
108862
+ for (var _i4 = 0; _i4 < sourceVerts.length; _i4 += step) sampled.push(sourceVerts[_i4]);
108863
+ sourceVerts = sampled;
108864
+ }
108865
+ return sourceVerts;
108866
+ },
108867
+ findClosestPair: function findClosestPair(points1, points2) {
108868
+ var minDist = Infinity;
108869
+ var c1 = new Vector3();
108870
+ var c2 = new Vector3();
108871
+ var _iterator = measure_clear_distance_createForOfIteratorHelper(points1),
108872
+ _step;
108873
+ try {
108874
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
108875
+ var p1 = _step.value;
108876
+ var _iterator2 = measure_clear_distance_createForOfIteratorHelper(points2),
108877
+ _step2;
108878
+ try {
108879
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
108880
+ var p2 = _step2.value;
108881
+ var d = p1.distanceTo(p2);
108882
+ if (d < minDist) {
108883
+ minDist = d;
108884
+ c1.copy(p1);
108885
+ c2.copy(p2);
108886
+ }
108887
+ }
108888
+ } catch (err) {
108889
+ _iterator2.e(err);
108890
+ } finally {
108891
+ _iterator2.f();
108892
+ }
108893
+ }
108894
+ } catch (err) {
108895
+ _iterator.e(err);
108896
+ } finally {
108897
+ _iterator.f();
108898
+ }
108899
+ return {
108900
+ point1: c1,
108901
+ point2: c2,
108902
+ distance: minDist
108903
+ };
108904
+ },
108905
+ // 平行判断 (基于包围盒主轴方向)
108906
+ checkParallelism: function checkParallelism(inst1, id1, inst2, id2) {
108907
+ var mat1 = this.getInstanceWorldMatrix(inst1, id1);
108908
+ var mat2 = this.getInstanceWorldMatrix(inst2, id2);
108909
+ var box1 = new Box3();
108910
+ var box2 = new Box3();
108911
+
108912
+ // 确保包围盒存在
108913
+ if (!inst1.geometry.boundingBox) inst1.geometry.computeBoundingBox();
108914
+ if (!inst2.geometry.boundingBox) inst2.geometry.computeBoundingBox();
108915
+ box1.copy(inst1.geometry.boundingBox).applyMatrix4(mat1);
108916
+ box2.copy(inst2.geometry.boundingBox).applyMatrix4(mat2);
108917
+ var size1 = new Vector3();
108918
+ box1.getSize(size1);
108919
+ var size2 = new Vector3();
108920
+ box2.getSize(size2);
108921
+ var getMainDir = function getMainDir(s) {
108922
+ if (s.x >= s.y && s.x >= s.z) return new Vector3(1, 0, 0);
108923
+ if (s.y >= s.x && s.y >= s.z) return new Vector3(0, 1, 0);
108924
+ return new Vector3(0, 0, 1);
108925
+ };
108926
+ var d1 = getMainDir(size1);
108927
+ var d2 = getMainDir(size2);
108928
+ var rot1 = new Quaternion().setFromRotationMatrix(new Matrix4().extractRotation(mat1));
108929
+ var rot2 = new Quaternion().setFromRotationMatrix(new Matrix4().extractRotation(mat2));
108930
+ d1.applyQuaternion(rot1);
108931
+ d2.applyQuaternion(rot2);
108932
+ return Math.abs(d1.dot(d2)) > 0.95;
108933
+ },
108934
+ getInstanceWorldMatrix: function getInstanceWorldMatrix(instancedMesh, instanceId) {
108935
+ var matrix = new Matrix4();
108936
+ var instanceMatrix = new Matrix4();
108937
+ instancedMesh.getMatrixAt(instanceId, instanceMatrix);
108938
+ matrix.multiplyMatrices(instancedMesh.matrixWorld, instanceMatrix);
108939
+ return matrix;
108940
+ },
108941
+ close: function close(isClear) {
108942
+ this.renderer.domElement.removeEventListener('mousedown', this.mousedown);
108943
+ this.renderer.domElement.removeEventListener('mouseup', this.click);
108944
+ if (!isClear) {
108945
+ this.remove(this.points);
108946
+ this.remove(this.polyline);
108947
+ this.remove(this.labels);
108948
+ this.pointArray.splice(0);
108949
+ this.points.splice(0);
108950
+ this.polyline.splice(0);
108951
+ this.labels.splice(0);
108952
+ this.firstTime = 0;
108953
+ }
108954
+ this.renderer.domElement.style.cursor = 'pointer';
108955
+ },
108956
+ clear: function clear() {
108957
+ this.remove(this.points);
108958
+ this.remove(this.polyline);
108959
+ this.remove(this.labels);
108960
+ this.pointArray.splice(0);
108961
+ this.points.splice(0);
108962
+ this.polyline.splice(0);
108963
+ this.labels.splice(0);
108964
+ this.firstTime = 0;
108965
+ },
108966
+ remove: function remove(array) {
108967
+ for (var index = 0; index < array.length; index++) {
108968
+ var element = array[index];
108969
+ if (element.geometry) {
108970
+ element.geometry.dispose();
108971
+ }
108972
+ this.scene.remove(element);
108973
+ }
108974
+ },
108975
+ numberToString: function numberToString(num) {
108976
+ if (num < 0.0001) {
108977
+ return num.toString();
108978
+ }
108979
+ var fractionDigits = 2;
108980
+ if (num < 0.01) {
108981
+ fractionDigits = 4;
108982
+ } else if (num < 0.1) {
108983
+ fractionDigits = 3;
108984
+ }
108985
+ return num.toFixed(fractionDigits);
108986
+ },
108987
+ preventContextMenu: function preventContextMenu(event) {
108988
+ event.preventDefault();
108989
+ }
108990
+ };
108991
+ /* harmony default export */ var measure_clear_distance = ({
108992
+ MeasureClearDistance: measure_clear_distance_MeasureClearDistance
108993
+ });
108225
108994
  // CONCATENATED MODULE: ./src/utils/flgltf-parser.js
108226
108995
  function flgltf_parser_createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = flgltf_parser_unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
108227
108996
  function flgltf_parser_unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return flgltf_parser_arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? flgltf_parser_arrayLikeToArray(r, a) : void 0; } }
@@ -120029,6 +120798,7 @@ var LOG_INTERVAL = 30;
120029
120798
 
120030
120799
 
120031
120800
 
120801
+
120032
120802
 
120033
120803
 
120034
120804
  var isDebug = false || false === true;
@@ -125347,7 +126117,14 @@ var isDebug = false || false === true;
125347
126117
  /*
125348
126118
  参数: type: '', distance、area、angle、height, 暂时只提供距离、面积、角度、高度这四种方式
125349
126119
  */
126120
+ getMeasurePickRoots: function getMeasurePickRoots() {
126121
+ if (this.modelGroup && this.modelGroup.children && this.modelGroup.children.length > 0) {
126122
+ return [this.modelGroup];
126123
+ }
126124
+ return this.scene && this.scene.children ? this.scene.children : [];
126125
+ },
125350
126126
  openMeasure: function openMeasure(type) {
126127
+ var _this47 = this;
125351
126128
  var isClear = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
125352
126129
  if (this.threeMeasure) {
125353
126130
  this.threeMeasure.close(isClear);
@@ -125357,19 +126134,39 @@ var isDebug = false || false === true;
125357
126134
  // renderEnabled = true
125358
126135
  switch (type) {
125359
126136
  case 'distance':
125360
- this.threeMeasure = new measure_distance.MeasureDistance(this.renderer, this.scene, this.camera, this.instructions.offsetWidth, this.instructions.offsetHeight);
126137
+ this.threeMeasure = new measure_distance.MeasureDistance(this.renderer, this.scene, this.camera, this.instructions.offsetWidth, this.instructions.offsetHeight, {
126138
+ pickRoots: function pickRoots() {
126139
+ return _this47.getMeasurePickRoots();
126140
+ }
126141
+ });
125361
126142
  this.threeMeasure.start();
125362
126143
  break;
125363
126144
  case 'area':
125364
- this.threeMeasure = new measure_area.MeasureArea(this.renderer, this.scene, this.camera, this.instructions.offsetWidth, this.instructions.offsetHeight);
126145
+ this.threeMeasure = new measure_area.MeasureArea(this.renderer, this.scene, this.camera, this.instructions.offsetWidth, this.instructions.offsetHeight, {
126146
+ pickRoots: function pickRoots() {
126147
+ return _this47.getMeasurePickRoots();
126148
+ }
126149
+ });
125365
126150
  this.threeMeasure.start();
125366
126151
  break;
125367
126152
  case 'angle':
125368
- this.threeMeasure = new measure_angle.MeasureAngle(this.renderer, this.scene, this.camera, this.instructions.offsetWidth, this.instructions.offsetHeight);
126153
+ this.threeMeasure = new measure_angle.MeasureAngle(this.renderer, this.scene, this.camera, this.instructions.offsetWidth, this.instructions.offsetHeight, {
126154
+ pickRoots: function pickRoots() {
126155
+ return _this47.getMeasurePickRoots();
126156
+ }
126157
+ });
125369
126158
  this.threeMeasure.start();
125370
126159
  break;
125371
126160
  case 'height':
125372
- this.threeMeasure = new measure_height.MeasureHeight(this.renderer, this.scene, this.camera, this.instructions.offsetWidth, this.instructions.offsetHeight);
126161
+ this.threeMeasure = new measure_height.MeasureHeight(this.renderer, this.scene, this.camera, this.instructions.offsetWidth, this.instructions.offsetHeight, {
126162
+ pickRoots: function pickRoots() {
126163
+ return _this47.getMeasurePickRoots();
126164
+ }
126165
+ });
126166
+ this.threeMeasure.start();
126167
+ break;
126168
+ case 'clearDistance':
126169
+ this.threeMeasure = new measure_clear_distance.MeasureClearDistance(this.renderer, this.scene, this.camera, this.instructions.offsetWidth, this.instructions.offsetHeight);
125373
126170
  this.threeMeasure.start();
125374
126171
  break;
125375
126172
  }
@@ -125387,20 +126184,53 @@ var isDebug = false || false === true;
125387
126184
  // 移除键盘事件监听器
125388
126185
  document.removeEventListener('keydown', this.handleMeasureKeyDown, false);
125389
126186
  },
125390
- // 增加一个清除所有测量结果的方法 使用统一名字的
125391
- clearMeasureByName: function clearMeasureByName() {
125392
- var _this47 = this;
125393
- var list = this.getObjectByName('measureObj');
125394
- list.forEach(function (item) {
125395
- if (item.geometry) {
125396
- item.geometry.dispose();
125397
- item.material.dispose();
126187
+ disposeMeasureObject: function disposeMeasureObject(object) {
126188
+ if (!object) return;
126189
+ if (object.geometry) {
126190
+ object.geometry.dispose();
126191
+ }
126192
+ if (Array.isArray(object.material)) {
126193
+ object.material.forEach(function (material) {
126194
+ material && material.dispose && material.dispose();
126195
+ });
126196
+ } else if (object.material && object.material.dispose) {
126197
+ object.material.dispose();
126198
+ }
126199
+ if (object.element && object.element.parentNode) {
126200
+ object.element.parentNode.removeChild(object.element);
126201
+ }
126202
+ },
126203
+ isMeasureObject: function isMeasureObject(object) {
126204
+ if (!object) return false;
126205
+ var userData = object.userData || {};
126206
+ return object.name === 'measureObj' || userData.isMeasureObject === true;
126207
+ },
126208
+ removeMeasureObjectsFromScene: function removeMeasureObjectsFromScene() {
126209
+ var _this48 = this;
126210
+ if (!this.scene) return;
126211
+ var measureObjects = [];
126212
+ this.scene.traverse(function (object) {
126213
+ if (_this48.isMeasureObject(object)) {
126214
+ measureObjects.push(object);
126215
+ }
126216
+ });
126217
+ measureObjects.forEach(function (object) {
126218
+ if (object.parent) {
126219
+ object.parent.remove(object);
126220
+ } else {
126221
+ _this48.scene.remove(object);
125398
126222
  }
125399
- if (_this47.scene) _this47.scene.remove(item);
126223
+ _this48.disposeMeasureObject(object);
125400
126224
  });
126225
+ },
126226
+ // 增加一个清除所有测量结果的方法,清理历史测量实例遗留的对象
126227
+ clearMeasureByName: function clearMeasureByName() {
125401
126228
  if (this.threeMeasure) {
125402
126229
  this.threeMeasure.clear();
125403
126230
  }
126231
+ this.removeMeasureObjectsFromScene();
126232
+ // this.measureFlag = false;
126233
+ document.removeEventListener('keydown', this.handleMeasureKeyDown, false);
125404
126234
  },
125405
126235
  handleMeasureKeyDown: function handleMeasureKeyDown(event) {
125406
126236
  // 检查是否按下了ESC键
@@ -125463,12 +126293,12 @@ var isDebug = false || false === true;
125463
126293
  参数: object, 目标实体,
125464
126294
  */
125465
126295
  isolate: function isolate(object) {
125466
- var _this48 = this;
126296
+ var _this49 = this;
125467
126297
  if (!this.scene) return;
125468
126298
  // 隔离 将目标实体以外的实体隐藏掉
125469
126299
  this.scene.traverse(function (item) {
125470
126300
  if (item.isMesh && item.name !== object.name) {
125471
- var offsetMatrix = new _this48.THREE.Matrix4().copy(item.userData.copyMatrix).makeTranslation(9999999, 9999999, 9999999);
126301
+ var offsetMatrix = new _this49.THREE.Matrix4().copy(item.userData.copyMatrix).makeTranslation(9999999, 9999999, 9999999);
125472
126302
  item.setMatrixAt(item.userData.instanceIndex, offsetMatrix);
125473
126303
  item.instanceMatrix.needsUpdate = true;
125474
126304
  }
@@ -125476,7 +126306,7 @@ var isDebug = false || false === true;
125476
126306
  },
125477
126307
  // 还原操作 将修改过的实体进行恢复
125478
126308
  restore: function restore() {
125479
- var _this49 = this;
126309
+ var _this50 = this;
125480
126310
  if (!this.scene) return;
125481
126311
  this.scene.traverse(function (item) {
125482
126312
  if (item.isMesh) {
@@ -125498,20 +126328,20 @@ var isDebug = false || false === true;
125498
126328
  item.userData.translateMatrixInvert = null;
125499
126329
  }
125500
126330
  if (item.userData.combineMatrixInvert) {
125501
- _this49.rotateMesh(item, {
126331
+ _this50.rotateMesh(item, {
125502
126332
  x: 0,
125503
126333
  y: 0,
125504
126334
  z: 0
125505
126335
  });
125506
126336
  item.userData.combineMatrixInvert = null;
125507
126337
  }
125508
- var copyMatrix = _this49.getInstanceCopyMatrix(item, instanceId);
126338
+ var copyMatrix = _this50.getInstanceCopyMatrix(item, instanceId);
125509
126339
  if (!copyMatrix) return;
125510
- var sourceHidden = _this49.isSourceHiddenInstance(item, instanceId);
125511
- var offsetMatrix = new _this49.THREE.Matrix4().copy(copyMatrix);
126340
+ var sourceHidden = _this50.isSourceHiddenInstance(item, instanceId);
126341
+ var offsetMatrix = new _this50.THREE.Matrix4().copy(copyMatrix);
125512
126342
  if (sourceHidden) {
125513
126343
  offsetMatrix.makeTranslation(9999999, 9999999, 9999999);
125514
- _this49.removeOutlineInstanceProxy(item, item.userData.instanceIndex);
126344
+ _this50.removeOutlineInstanceProxy(item, item.userData.instanceIndex);
125515
126345
  }
125516
126346
  item.setMatrixAt(item.userData.instanceIndex, offsetMatrix);
125517
126347
  item.instanceMatrix.needsUpdate = true;
@@ -125520,7 +126350,7 @@ var isDebug = false || false === true;
125520
126350
  },
125521
126351
  // 添加自定义模型, 暂时只支持glb、gltf格式
125522
126352
  addCustomModel: function addCustomModel(name, position, url) {
125523
- var _this50 = this;
126353
+ var _this51 = this;
125524
126354
  var scale = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1;
125525
126355
  var immediately = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
125526
126356
  var callback = arguments.length > 5 ? arguments[5] : undefined;
@@ -125531,41 +126361,41 @@ var isDebug = false || false === true;
125531
126361
  locationModel.scale.set(scale, scale, scale);
125532
126362
  locationModel.updateMatrixWorld();
125533
126363
  if (immediately) {
125534
- _this50.cameraControls.fitToSphere(gltf.this.scene, true);
126364
+ _this51.cameraControls.fitToSphere(gltf.this.scene, true);
125535
126365
  }
125536
126366
  // 动画混合器
125537
126367
  // 不参与裁剪
125538
126368
  locationModel.userData.cull = false;
125539
126369
  locationModel.name = name;
125540
- if (_this50.scene) _this50.scene.add(locationModel);
125541
- locationModel.position.copy(new _this50.THREE.Vector3(position.x, position.y, position.z));
126370
+ if (_this51.scene) _this51.scene.add(locationModel);
126371
+ locationModel.position.copy(new _this51.THREE.Vector3(position.x, position.y, position.z));
125542
126372
  if (gltf.animations.length > 0) {
125543
- var actionMixer = new _this50.THREE.AnimationMixer(gltf.this.scene);
126373
+ var actionMixer = new _this51.THREE.AnimationMixer(gltf.this.scene);
125544
126374
  var walkActive = actionMixer.clipAction(gltf.animations[0]);
125545
126375
  walkActive.play();
125546
- _this50.modelActive.push(walkActive);
125547
- _this50.modelActions.push(actionMixer);
126376
+ _this51.modelActive.push(walkActive);
126377
+ _this51.modelActions.push(actionMixer);
125548
126378
  }
125549
126379
  callback && callback();
125550
126380
  });
125551
126381
  },
125552
126382
  // 删除添加的自定义模型
125553
126383
  removeCustomModel: function removeCustomModel(name) {
125554
- var _this51 = this;
126384
+ var _this52 = this;
125555
126385
  var obj = this.getObjectByName(name);
125556
126386
  obj.forEach(function (item, index) {
125557
126387
  if (item.animations > 0) {
125558
126388
  item.removeFromParent();
125559
- _this51.modelActions[index].uncacheRoot(item);
125560
- _this51.modelActions[index].uncacheRoot(_this51.modelActive[index]);
126389
+ _this52.modelActions[index].uncacheRoot(item);
126390
+ _this52.modelActions[index].uncacheRoot(_this52.modelActive[index]);
125561
126391
  }
125562
126392
  item.traverse(function (child) {
125563
- if (child instanceof _this51.THREE.Mesh) {
126393
+ if (child instanceof _this52.THREE.Mesh) {
125564
126394
  child.geometry.dispose();
125565
126395
  child.material.dispose();
125566
126396
  }
125567
126397
  });
125568
- if (_this51.scene) _this51.scene.remove(item);
126398
+ if (_this52.scene) _this52.scene.remove(item);
125569
126399
  });
125570
126400
  this.modelActions.splice(0);
125571
126401
  this.modelActive.splice(0);
@@ -125627,7 +126457,7 @@ var isDebug = false || false === true;
125627
126457
  return size;
125628
126458
  },
125629
126459
  animate: function animate() {
125630
- var _this52 = this;
126460
+ var _this53 = this;
125631
126461
  if (isDebug) {
125632
126462
  this.stats && this.stats.begin(); // 开始帧率统计
125633
126463
  }
@@ -125641,7 +126471,7 @@ var isDebug = false || false === true;
125641
126471
  if (this.timeStamp > singleFrameTime) {
125642
126472
  if (this.modelActions.length > 0) {
125643
126473
  this.modelActions.forEach(function (item) {
125644
- item.update(_this52.timeStamp);
126474
+ item.update(_this53.timeStamp);
125645
126475
  });
125646
126476
  }
125647
126477
  this.cameraControls.enabled && this.cameraControls.update(this.timeStamp);
@@ -125999,25 +126829,25 @@ var isDebug = false || false === true;
125999
126829
  * 加载下一批数据
126000
126830
  */
126001
126831
  loadNextBatch: function loadNextBatch() {
126002
- var _this53 = this;
126832
+ var _this54 = this;
126003
126833
  return com_graphicsvue_type_script_lang_js_asyncToGenerator(/*#__PURE__*/com_graphicsvue_type_script_lang_js_regenerator().m(function _callee1() {
126004
126834
  var loadingState, batch, _t3;
126005
126835
  return com_graphicsvue_type_script_lang_js_regenerator().w(function (_context1) {
126006
126836
  while (1) switch (_context1.p = _context1.n) {
126007
126837
  case 0:
126008
- loadingState = _this53.noObserver ? _this53.noObserver.batchLoadingState : _this53.batchLoadingState;
126009
- if (_this53.isBatchLoadingSceneReady()) {
126838
+ loadingState = _this54.noObserver ? _this54.noObserver.batchLoadingState : _this54.batchLoadingState;
126839
+ if (_this54.isBatchLoadingSceneReady()) {
126010
126840
  _context1.n = 1;
126011
126841
  break;
126012
126842
  }
126013
- _this53.stopBatchLoading('scene_unavailable');
126843
+ _this54.stopBatchLoading('scene_unavailable');
126014
126844
  return _context1.a(2);
126015
126845
  case 1:
126016
126846
  if (!(!loadingState.isLoading || loadingState.currentBatch >= loadingState.pendingData.length)) {
126017
126847
  _context1.n = 2;
126018
126848
  break;
126019
126849
  }
126020
- _this53.completeBatchLoading();
126850
+ _this54.completeBatchLoading();
126021
126851
  return _context1.a(2);
126022
126852
  case 2:
126023
126853
  if (!loadingState.isPaused) {
@@ -126026,7 +126856,7 @@ var isDebug = false || false === true;
126026
126856
  }
126027
126857
  // 如果暂停,延迟一段时间后再次检查
126028
126858
  loadingState.animationFrameId = requestAnimationFrame(function () {
126029
- _this53.loadNextBatch();
126859
+ _this54.loadNextBatch();
126030
126860
  });
126031
126861
  return _context1.a(2);
126032
126862
  case 3:
@@ -126036,7 +126866,7 @@ var isDebug = false || false === true;
126036
126866
  }
126037
126867
  // 如果正在交互,延迟一段时间后再次检查
126038
126868
  loadingState.animationFrameId = requestAnimationFrame(function () {
126039
- _this53.loadNextBatch();
126869
+ _this54.loadNextBatch();
126040
126870
  });
126041
126871
  return _context1.a(2);
126042
126872
  case 4:
@@ -126045,13 +126875,13 @@ var isDebug = false || false === true;
126045
126875
  _context1.n = 5;
126046
126876
  break;
126047
126877
  }
126048
- _this53.completeBatchLoading();
126878
+ _this54.completeBatchLoading();
126049
126879
  return _context1.a(2);
126050
126880
  case 5:
126051
126881
  _context1.p = 5;
126052
126882
  console.log('加载批次:', loadingState.currentBatch);
126053
126883
  _context1.n = 6;
126054
- return _this53.processWithMainThread(batch);
126884
+ return _this54.processWithMainThread(batch);
126055
126885
  case 6:
126056
126886
  if (loadingState.isLoading) {
126057
126887
  _context1.n = 7;
@@ -126059,11 +126889,11 @@ var isDebug = false || false === true;
126059
126889
  }
126060
126890
  return _context1.a(2);
126061
126891
  case 7:
126062
- if (_this53.isBatchLoadingSceneReady()) {
126892
+ if (_this54.isBatchLoadingSceneReady()) {
126063
126893
  _context1.n = 8;
126064
126894
  break;
126065
126895
  }
126066
- _this53.stopBatchLoading('scene_unavailable');
126896
+ _this54.stopBatchLoading('scene_unavailable');
126067
126897
  return _context1.a(2);
126068
126898
  case 8:
126069
126899
  // 更新进度
@@ -126071,8 +126901,8 @@ var isDebug = false || false === true;
126071
126901
  loadingState.currentBatch++;
126072
126902
 
126073
126903
  // 同步到响应式状态
126074
- _this53.batchLoadingState.loadedCount = loadingState.loadedCount;
126075
- _this53.batchLoadingState.currentBatch = loadingState.currentBatch;
126904
+ _this54.batchLoadingState.loadedCount = loadingState.loadedCount;
126905
+ _this54.batchLoadingState.currentBatch = loadingState.currentBatch;
126076
126906
 
126077
126907
  // 调用进度回调
126078
126908
  if (loadingState.onProgress) {
@@ -126086,7 +126916,7 @@ var isDebug = false || false === true;
126086
126916
 
126087
126917
  // 使用 requestAnimationFrame 在下一帧继续加载
126088
126918
  loadingState.animationFrameId = requestAnimationFrame(function () {
126089
- _this53.loadNextBatch();
126919
+ _this54.loadNextBatch();
126090
126920
  });
126091
126921
  _context1.n = 10;
126092
126922
  break;
@@ -126097,7 +126927,7 @@ var isDebug = false || false === true;
126097
126927
 
126098
126928
  // 继续下一批次
126099
126929
  loadingState.animationFrameId = requestAnimationFrame(function () {
126100
- _this53.loadNextBatch();
126930
+ _this54.loadNextBatch();
126101
126931
  });
126102
126932
  case 10:
126103
126933
  return _context1.a(2);
@@ -126109,20 +126939,20 @@ var isDebug = false || false === true;
126109
126939
  * 使用主线程处理批次数据
126110
126940
  */
126111
126941
  processWithMainThread: function processWithMainThread(batch) {
126112
- var _this54 = this;
126942
+ var _this55 = this;
126113
126943
  return com_graphicsvue_type_script_lang_js_asyncToGenerator(/*#__PURE__*/com_graphicsvue_type_script_lang_js_regenerator().m(function _callee10() {
126114
126944
  var loadingState;
126115
126945
  return com_graphicsvue_type_script_lang_js_regenerator().w(function (_context10) {
126116
126946
  while (1) switch (_context10.n) {
126117
126947
  case 0:
126118
- loadingState = _this54.noObserver ? _this54.noObserver.batchLoadingState : _this54.batchLoadingState;
126948
+ loadingState = _this55.noObserver ? _this55.noObserver.batchLoadingState : _this55.batchLoadingState;
126119
126949
  loadingState.options.batchSize = loadingState.batchSize;
126120
126950
  loadingState.options.resetState = loadingState.currentBatch === 0;
126121
126951
  // 使用原始的handleInstancedMeshModel方法
126122
126952
 
126123
126953
  isDebug && performance.mark('handleInstancedMeshModel-start');
126124
126954
  _context10.n = 1;
126125
- return handleInstancedMeshModel(_this54.modelGroup, batch.instances, batch.drawObjs, '', _this54.scene, loadingState.color, loadingState.meshNameConfig, '', loadingState.options);
126955
+ return handleInstancedMeshModel(_this55.modelGroup, batch.instances, batch.drawObjs, '', _this55.scene, loadingState.color, loadingState.meshNameConfig, '', loadingState.options);
126126
126956
  case 1:
126127
126957
  isDebug && performance.mark('handleInstancedMeshModel-end');
126128
126958
  isDebug && performance.measure('handleInstancedMeshModel', 'handleInstancedMeshModel-start', 'handleInstancedMeshModel-end');
@@ -126136,7 +126966,7 @@ var isDebug = false || false === true;
126136
126966
  * 完成批量加载
126137
126967
  */
126138
126968
  completeBatchLoading: function completeBatchLoading() {
126139
- var _this55 = this;
126969
+ var _this56 = this;
126140
126970
  var loadingState = this.noObserver ? this.noObserver.batchLoadingState : this.batchLoadingState;
126141
126971
  if (!loadingState.isLoading) return;
126142
126972
  if (!this.isBatchLoadingSceneReady()) {
@@ -126169,17 +126999,17 @@ var isDebug = false || false === true;
126169
126999
  this.modelGroup.traverse(function (child) {
126170
127000
  if (child.isMesh && !child.userData.batchInitDone) {
126171
127001
  markRendered(child);
126172
- var json = _this55.getMeshCenterAndVolume(child);
126173
- var meshBox3 = new _this55.THREE.Box3();
127002
+ var json = _this56.getMeshCenterAndVolume(child);
127003
+ var meshBox3 = new _this56.THREE.Box3();
126174
127004
  meshBox3.setFromObject(child);
126175
- var worldPs = new _this55.THREE.Vector3().addVectors(meshBox3.max, meshBox3.min).multiplyScalar(0.5);
127005
+ var worldPs = new _this56.THREE.Vector3().addVectors(meshBox3.max, meshBox3.min).multiplyScalar(0.5);
126176
127006
  if (isNaN(worldPs.x)) return;
126177
- child.worldDir = new _this55.THREE.Vector3().subVectors(worldPs, modelWorldPs).normalize();
127007
+ child.worldDir = new _this56.THREE.Vector3().subVectors(worldPs, modelWorldPs).normalize();
126178
127008
  child.userData.center = json.center;
126179
127009
  child.userData.worldPs = worldPs;
126180
- child.userData.oldPs = child.getWorldPosition(new _this55.THREE.Vector3());
127010
+ child.userData.oldPs = child.getWorldPosition(new _this56.THREE.Vector3());
126181
127011
  child.userData.box = json.box;
126182
- child.userData.position = new _this55.THREE.Vector3().copy(child.position);
127012
+ child.userData.position = new _this56.THREE.Vector3().copy(child.position);
126183
127013
  child.userData.translate = {
126184
127014
  x: 0,
126185
127015
  y: 0,
@@ -126271,7 +127101,7 @@ var isDebug = false || false === true;
126271
127101
  * @param {Object} options - 配置项 { immediate: boolean }
126272
127102
  */
126273
127103
  setSystemInterruption: function setSystemInterruption(active) {
126274
- var _this56 = this;
127104
+ var _this57 = this;
126275
127105
  var reason = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'user_interaction';
126276
127106
  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
126277
127107
  var loadingState = this.noObserver ? this.noObserver.batchLoadingState : this.batchLoadingState;
@@ -126337,7 +127167,7 @@ var isDebug = false || false === true;
126337
127167
  if (loadingState.interactionState.wheelTimeout) return;
126338
127168
 
126339
127169
  // 2. 如果是 wheel 结束,但 this.userInteracting (this.camera) 还在进行,则不恢复
126340
- if (reason === 'wheel' && _this56.userInteracting) return;
127170
+ if (reason === 'wheel' && _this57.userInteracting) return;
126341
127171
 
126342
127172
  // 3. 检查是否有强制跳过标记 (可能由其他逻辑触发)
126343
127173
  // if (this.forceSkipRendering && reason !== 'user_interaction') return; // 视情况而定
@@ -126348,15 +127178,15 @@ var isDebug = false || false === true;
126348
127178
  loadingState.pauseReason = '';
126349
127179
  loadingState.interactionState.isInteracting = false;
126350
127180
  loadingState.interactionState.interactionType = '';
126351
- _this56.forceSkipRendering = false;
127181
+ _this57.forceSkipRendering = false;
126352
127182
 
126353
127183
  // 恢复本地批量加载 (如果未完成)
126354
127184
  if (loadingState.isLoading && loadingState.currentBatch < loadingState.totalBatches) {
126355
- _this56.loadNextBatch();
127185
+ _this57.loadNextBatch();
126356
127186
  }
126357
127187
 
126358
127188
  // 恢复 StreamLoader
126359
- var streamLoader = _this56.noObserver.streamLoader;
127189
+ var streamLoader = _this57.noObserver.streamLoader;
126360
127190
  if (streamLoader && typeof streamLoader.handleControlEnd === 'function') {
126361
127191
  // StreamLoader 内部通常有防抖或延迟,这里直接通知结束即可
126362
127192
  streamLoader.handleControlEnd();
@@ -126409,7 +127239,7 @@ var isDebug = false || false === true;
126409
127239
  * 滚轮交互结束的定时检测
126410
127240
  */
126411
127241
  scheduleWheelInteractionEnd: function scheduleWheelInteractionEnd(event) {
126412
- var _this57 = this;
127242
+ var _this58 = this;
126413
127243
  var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 100;
126414
127244
  var loadingState = this.noObserver ? this.noObserver.batchLoadingState : this.batchLoadingState;
126415
127245
  if (loadingState.interactionState.wheelTimeout) {
@@ -126417,8 +127247,8 @@ var isDebug = false || false === true;
126417
127247
  loadingState.interactionState.wheelTimeout = null;
126418
127248
  }
126419
127249
  loadingState.interactionState.wheelTimeout = setTimeout(function () {
126420
- _this57.$emit('wheelEnd', event);
126421
- _this57.endInteraction('wheel', event, {
127250
+ _this58.$emit('wheelEnd', event);
127251
+ _this58.endInteraction('wheel', event, {
126422
127252
  immediateResume: false
126423
127253
  });
126424
127254
  loadingState.interactionState.wheelTimeout = null;
@@ -126471,11 +127301,11 @@ var isDebug = false || false === true;
126471
127301
  });
126472
127302
  // CONCATENATED MODULE: ./packages/components/com-graphics/index.vue?vue&type=script&lang=js
126473
127303
  /* harmony default export */ var components_com_graphicsvue_type_script_lang_js = (com_graphicsvue_type_script_lang_js);
126474
- // EXTERNAL MODULE: ./packages/components/com-graphics/index.vue?vue&type=style&index=0&id=3e15de76&prod&lang=scss&scoped=true
126475
- var com_graphicsvue_type_style_index_0_id_3e15de76_prod_lang_scss_scoped_true = __webpack_require__("1694");
127304
+ // EXTERNAL MODULE: ./packages/components/com-graphics/index.vue?vue&type=style&index=0&id=7fad0c6c&prod&lang=scss&scoped=true
127305
+ var com_graphicsvue_type_style_index_0_id_7fad0c6c_prod_lang_scss_scoped_true = __webpack_require__("4edc");
126476
127306
 
126477
- // EXTERNAL MODULE: ./packages/components/com-graphics/index.vue?vue&type=style&index=1&id=3e15de76&prod&lang=css
126478
- var com_graphicsvue_type_style_index_1_id_3e15de76_prod_lang_css = __webpack_require__("9c27");
127307
+ // EXTERNAL MODULE: ./packages/components/com-graphics/index.vue?vue&type=style&index=1&id=7fad0c6c&prod&lang=css
127308
+ var com_graphicsvue_type_style_index_1_id_7fad0c6c_prod_lang_css = __webpack_require__("9f61");
126479
127309
 
126480
127310
  // CONCATENATED MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js
126481
127311
  /* globals __VUE_SSR_CONTEXT__ */
@@ -126587,17 +127417,17 @@ function normalizeComponent(
126587
127417
 
126588
127418
  var component = normalizeComponent(
126589
127419
  components_com_graphicsvue_type_script_lang_js,
126590
- com_graphicsvue_type_template_id_3e15de76_scoped_true_render,
127420
+ com_graphicsvue_type_template_id_7fad0c6c_scoped_true_render,
126591
127421
  staticRenderFns,
126592
127422
  false,
126593
127423
  null,
126594
- "3e15de76",
127424
+ "7fad0c6c",
126595
127425
  null
126596
127426
 
126597
127427
  )
126598
127428
 
126599
127429
  /* harmony default export */ var com_graphics = (component.exports);
126600
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"370de1b5-vue-loader-template"}!./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--6!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./packages/components/com-flcanvas/index.vue?vue&type=template&id=b313ab6c&scoped=true
127430
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"e203256c-vue-loader-template"}!./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--6!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./packages/components/com-flcanvas/index.vue?vue&type=template&id=b313ab6c&scoped=true
126601
127431
  var com_flcanvasvue_type_template_id_b313ab6c_scoped_true_render = function render() {
126602
127432
  var _vm = this,
126603
127433
  _c = _vm._self._c;
@@ -130650,7 +131480,7 @@ var com_flcanvas_component = normalizeComponent(
130650
131480
  )
130651
131481
 
130652
131482
  /* harmony default export */ var com_flcanvas = (com_flcanvas_component.exports);
130653
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"370de1b5-vue-loader-template"}!./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--6!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./packages/components/com-graphics/per-control.vue?vue&type=template&id=f547d5c6&scoped=true
131483
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"e203256c-vue-loader-template"}!./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--6!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./packages/components/com-graphics/per-control.vue?vue&type=template&id=f547d5c6&scoped=true
130654
131484
  var per_controlvue_type_template_id_f547d5c6_scoped_true_render = function render() {
130655
131485
  var _vm = this,
130656
131486
  _c = _vm._self._c;
@@ -130758,7 +131588,7 @@ var per_control_component = normalizeComponent(
130758
131588
  )
130759
131589
 
130760
131590
  /* harmony default export */ var per_control = (per_control_component.exports);
130761
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"370de1b5-vue-loader-template"}!./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--6!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./packages/components/com-graphics/pid.vue?vue&type=template&id=2572c0e2&scoped=true
131591
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"e203256c-vue-loader-template"}!./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--6!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./packages/components/com-graphics/pid.vue?vue&type=template&id=2572c0e2&scoped=true
130762
131592
  var pidvue_type_template_id_2572c0e2_scoped_true_render = function render() {
130763
131593
  var _vm = this,
130764
131594
  _c = _vm._self._c;
@@ -130805,7 +131635,7 @@ var browserify_default = /*#__PURE__*/__webpack_require__.n(browserify);
130805
131635
  var html2canvas = __webpack_require__("c0e9");
130806
131636
  var html2canvas_default = /*#__PURE__*/__webpack_require__.n(html2canvas);
130807
131637
 
130808
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"370de1b5-vue-loader-template"}!./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--6!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./packages/components/com-graphics/component/ann-tool.vue?vue&type=template&id=4b17bce0&scoped=true
131638
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"e203256c-vue-loader-template"}!./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/babel-loader/lib!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--6!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./packages/components/com-graphics/component/ann-tool.vue?vue&type=template&id=4b17bce0&scoped=true
130809
131639
  var ann_toolvue_type_template_id_4b17bce0_scoped_true_render = function render() {
130810
131640
  var _vm = this,
130811
131641
  _c = _vm._self._c;