@kq_npm/client3d_webgl_vue 4.5.55 → 4.5.57

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.
Files changed (82) hide show
  1. package/adddata/index.js +189 -21
  2. package/airspacegridoccupancyquery/index.js +1977 -0
  3. package/airspacegridoccupancyquery/style/airspacegridoccupancyquery.css +1 -0
  4. package/airspacegridoccupancyquery/style/index.js +3 -0
  5. package/airspaceprofileanalysis/index.js +1870 -0
  6. package/airspaceprofileanalysis/style/airspaceprofileanalysis.css +1 -0
  7. package/airspaceprofileanalysis/style/index.js +3 -0
  8. package/aspectanalysis/index.js +25 -7
  9. package/baseterraingallery/index.js +16 -4
  10. package/boxclip/index.js +58 -16
  11. package/buildpointmodel/index.js +3207 -230
  12. package/buildpointmodel/style/buildpointmodel.css +1 -1
  13. package/buildpolygonmodel/index.js +205 -81
  14. package/buildpolylinemodel/index.js +346 -70
  15. package/clientPrint/index.js +32440 -2337
  16. package/comparemap/index.js +132 -60
  17. package/compass/index.js +16 -6
  18. package/excavatefillanalysis/index.js +51 -7
  19. package/fixedzoomin/index.js +24 -7
  20. package/fixedzoomout/index.js +25 -7
  21. package/flight/index.js +113 -26
  22. package/floodanalysis/index.js +79 -14
  23. package/geologicalbodyanalysis/index.js +41 -5
  24. package/gpuspatialquery/index.js +127 -19
  25. package/gridoccupancyquery/index.js +627 -0
  26. package/gridoccupancyquery/style/gridoccupancyquery.css +1 -0
  27. package/gridoccupancyquery/style/index.js +3 -0
  28. package/hawkeye/index.js +20 -2
  29. package/headertemp/index.js +7 -2
  30. package/heatmap3d/index.js +282 -158
  31. package/index.js +32440 -2337
  32. package/isolineanalysis/index.js +113 -38
  33. package/light/index.js +80 -22
  34. package/limitheightanalysis/index.js +30 -10
  35. package/lowaltitudefeature/index.js +5027 -0
  36. package/lowaltitudefeature/style/index.js +3 -0
  37. package/lowaltitudefeature/style/lowaltitudefeature.css +1 -0
  38. package/measure/index.js +60 -19
  39. package/modelFlat/index.js +48 -8
  40. package/modeledit/index.js +38 -4
  41. package/modelexcavate/index.js +48 -7
  42. package/modelfilter/index.js +51 -8
  43. package/modelmaterialedit/index.js +127 -25
  44. package/modelprofileanalysis/index.js +51 -14
  45. package/modelselect/index.js +34 -3
  46. package/modelstyleedit/index.js +39 -3
  47. package/modeltransform/index.js +79 -14
  48. package/package.json +1 -1
  49. package/particleeffect/index.js +83 -17
  50. package/planeclip/index.js +66 -17
  51. package/pointcloudrender/index.js +134 -15
  52. package/radarscananalysis/index.js +35 -3
  53. package/resetview/index.js +14 -6
  54. package/roller/index.js +55 -18
  55. package/scaneffect/index.js +98 -29
  56. package/sceneadvancedtoimage/index.js +32 -6
  57. package/sceneapp/index.js +32440 -2337
  58. package/sceneset/index.js +141 -71
  59. package/scenetohdimage/index.js +23 -3
  60. package/sceneview/index.js +32440 -2337
  61. package/sceneview/style/sceneview.css +1 -1
  62. package/screenshot/index.js +44 -11
  63. package/shadowanalysis/index.js +79 -19
  64. package/sightlineanalysis/index.js +66 -15
  65. package/skylineanalysis/index.js +20 -4
  66. package/slopeanalysis/index.js +75 -16
  67. package/slopeaspectanalysis/index.js +128 -26
  68. package/statusbar/index.js +80 -67
  69. package/style.css +1 -1
  70. package/terrainoperation/index.js +39 -7
  71. package/terrainprofileanalysis/index.js +43 -5
  72. package/toolbarapp/index.js +32440 -2337
  73. package/toolboxapp/index.js +32440 -2337
  74. package/typhoontrac/index.js +134 -16
  75. package/underground/index.js +8 -2
  76. package/videofusion/index.js +164 -79
  77. package/videoproject/index.js +77 -23
  78. package/viewshedanalysis/index.js +61 -14
  79. package/weathereffect/index.js +73 -18
  80. package/webgl.es.js +866 -16
  81. package/windyslicing/index.js +258 -54
  82. package/wireframesketch/index.js +25 -8
package/flight/index.js CHANGED
@@ -450,19 +450,28 @@ exports["default"] = void 0;
450
450
  */
451
451
  //飞行操作类
452
452
  class FlightViewModel {
453
+ //是否处于暂停状态
454
+
455
+ /** @description 构造函数,根据是否远景创建对应的动画路径对象
456
+ * @param {Object} viewer 三维viewer对象
457
+ * @param {boolean} isLongShot 是否远景模式
458
+ */
453
459
  constructor(viewer, isLongShot) {
454
460
  this._animationPath = null;
455
461
  //飞行三维对象
456
462
  this.stopEvent = null;
457
463
  //停止事件
458
464
  this._currentKey = -1;
465
+ //当前播放关键帧索引
459
466
  this._isPause = false;
467
+ // 远景模式使用Kq3dAnimationPath,否则使用Kq3dAnimationPath2
460
468
  if (isLongShot) {
461
469
  this._animationPath = new Cesium.Kq3dAnimationPath(viewer);
462
470
  } else {
463
471
  this._animationPath = new Cesium.Kq3dAnimationPath2(viewer);
464
472
  }
465
473
  this.stopEvent = this._animationPath.stoped;
474
+ // 监听停止事件,重置暂停状态
466
475
  this.stopEvent.addEventListener(() => {
467
476
  this._isPause = false;
468
477
  });
@@ -470,9 +479,10 @@ class FlightViewModel {
470
479
 
471
480
  //播放动画导航路径
472
481
  play() {
482
+ // 非暂停状态时定位到下一关键帧视角
473
483
  if (!this._isPause) {
474
484
  this._animationPath.currentKey = this._currentKey;
475
- let keyPoint = this._animationPath.getKeyPoint(this._currentKey + 1);
485
+ const keyPoint = this._animationPath.getKeyPoint(this._currentKey + 1);
476
486
  this._animationPath.viewer.camera.setView({
477
487
  destination: keyPoint.position,
478
488
  orientation: keyPoint.orientation
@@ -498,48 +508,70 @@ class FlightViewModel {
498
508
  return this._animationPath.getAutoRepeat();
499
509
  }
500
510
 
501
- //设置动画导航是否循环播放
511
+ /** @description 设置动画导航是否循环播放
512
+ * @param {boolean} autoRepeat 是否循环播放
513
+ */
502
514
  setAutoRepeat(autoRepeat) {
503
515
  this._animationPath.setAutoRepeat(autoRepeat);
504
516
  }
505
517
 
506
- //将当前相机位置添加到动画导航路径中
518
+ /** @description 将当前相机位置添加到动画导航路径中
519
+ * @param {number} duration 当前关键帧耗时
520
+ */
507
521
  addKeyPointByCurrentView(duration) {
508
522
  this._animationPath.addKeyPointByCurrentView(duration);
509
523
  }
510
524
 
511
- //使用当前视角修改指定索引位置的路径节点
525
+ /** @description 使用当前视角修改指定索引位置的路径节点
526
+ * @param {number} index 路径节点索引
527
+ * @param {number} duration 关键帧耗时
528
+ */
512
529
  modifyKeyPointByCurrentView(index, duration) {
513
530
  this._animationPath.modifyKeyPointByCurrentView(index, duration);
514
531
  }
515
532
 
516
- //获取指定索引位置处的路径节点
533
+ /** @description 获取指定索引位置处的路径节点
534
+ * @param {number} index 路径节点索引
535
+ * @returns {Object} 路径节点对象
536
+ */
517
537
  getKeyPoint(index) {
518
538
  return this._animationPath.getKeyPoint(index);
519
539
  }
520
540
 
521
- //定位到关键帧
541
+ /** @description 定位到关键帧
542
+ * @param {number} index 关键帧索引
543
+ */
522
544
  locationKey(index) {
523
545
  this.stop();
524
546
  this._currentKey = index - 1;
525
- let keyPoint = this._animationPath.getKeyPoint(index);
547
+ const keyPoint = this._animationPath.getKeyPoint(index);
526
548
  this._animationPath.viewer.camera.setView({
527
549
  destination: keyPoint.position,
528
550
  orientation: keyPoint.orientation
529
551
  });
530
552
  }
531
553
 
532
- //获取指定索引位置的路径节点的耗时信息
554
+ /** @description 获取指定索引位置的路径节点的耗时信息
555
+ * @param {number} index 路径节点索引
556
+ * @returns {number} 耗时(秒)
557
+ */
533
558
  getKeyPointDur(index) {
534
559
  return this._animationPath.getKeyPointDur(index);
535
560
  }
536
561
 
537
- //修改指定索引位置的路径节点
562
+ /** @description 修改指定索引位置的路径节点
563
+ * @param {number} index 路径节点索引
564
+ * @param {Object} position 节点位置
565
+ * @param {Object} orientation 节点朝向
566
+ * @param {number} duration 关键帧耗时
567
+ */
538
568
  modifyKeyPoint(index, position, orientation, duration) {
539
569
  this._animationPath.modifyKeyPoint(index, position, orientation, duration);
540
570
  }
541
571
 
542
- //删除动画导航中指定索引位置的路径节点
572
+ /** @description 删除动画导航中指定索引位置的路径节点
573
+ * @param {number} index 路径节点索引
574
+ */
543
575
  deleteKeyPoint(index) {
544
576
  this._animationPath.deleteKeyPoint(index);
545
577
  }
@@ -555,7 +587,9 @@ class FlightViewModel {
555
587
  this._animationPath.clearKeyPoints();
556
588
  }
557
589
 
558
- //从xml字符串获取动画导航
590
+ /** @description 从xml字符串获取动画导航
591
+ * @param {string} xmlString xml字符串
592
+ */
559
593
  fromXmlString(xmlString) {
560
594
  this._animationPath.fromXmlString(xmlString);
561
595
  }
@@ -566,12 +600,17 @@ class FlightViewModel {
566
600
  return this._animationPath.asXmlString();
567
601
  }
568
602
 
569
- //从xml文件获取动画导航
603
+ /** @description 从xml文件获取动画导航
604
+ * @param {Object} xmlFile xml文件对象
605
+ * @returns {Promise} 加载完成的Promise
606
+ */
570
607
  fromXmlFile(xmlFile) {
571
608
  return this._animationPath.fromXmlFile(xmlFile);
572
609
  }
573
610
 
574
- //动画导航导出为xml文件
611
+ /** @description 动画导航导出为xml文件
612
+ * @param {string} xmlFileName 导出文件名
613
+ */
575
614
  asXmlFile(xmlFileName) {
576
615
  this._animationPath.asXmlFile(xmlFileName);
577
616
  }
@@ -985,21 +1024,39 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
985
1024
  locale
986
1025
  } = (0, _useGlobalConfig.useLocale)();
987
1026
  const props = __props;
1027
+
1028
+ // 是否处于新增/编辑路径界面
988
1029
  let isAdd = (0, _vue.ref)(false);
1030
+ // 是否为编辑路径模式
989
1031
  let isEdit = (0, _vue.ref)(false);
1032
+ // 飞行路径列表
990
1033
  let pathList = (0, _vue.reactive)([]);
1034
+ // 是否显示更多功能下拉菜单
991
1035
  let showMoreMenu = (0, _vue.ref)(false);
1036
+ // 下拉菜单组件Ref
992
1037
  let dropDownMenu = (0, _vue.ref)(null);
1038
+ // 当前路径名称
993
1039
  let pathName = (0, _vue.ref)("");
1040
+ // 关键帧表格数据
994
1041
  let tableData = (0, _vue.reactive)([]);
1042
+ // 是否处于预播放状态
995
1043
  let isPrePlaying = (0, _vue.ref)(false);
1044
+ // 三维viewer对象
996
1045
  let viewer = null;
1046
+ // 当前播放路径索引
997
1047
  let pathPlayIndex = -1;
1048
+ // 当前下拉菜单对应的路径对象
998
1049
  let dropDownPath = null;
1050
+ // 表格组件Ref
999
1051
  let tableRef = (0, _vue.ref)();
1052
+
1053
+ // 飞行视图模型实例
1000
1054
  let viewModel = null;
1001
1055
 
1002
- // 表格头样式
1056
+ /** @description 表格头样式
1057
+ * @param {Object} args 表格头参数对象
1058
+ * @returns {Object} 样式对象
1059
+ */
1003
1060
  let headClass = args => {
1004
1061
  return {
1005
1062
  "background-color": "var(--kq-fill-color-light)",
@@ -1013,6 +1070,7 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
1013
1070
 
1014
1071
  // 生成组件默认header
1015
1072
  let headerTemp = (0, _vue.ref)();
1073
+ // header组件引用Ref
1016
1074
  let headerTempRef = (0, _vue.ref)();
1017
1075
  (0, _vue.onMounted)(() => {
1018
1076
  (0, _util.updatePosition)(boxRef.value, props);
@@ -1120,8 +1178,12 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
1120
1178
  }
1121
1179
  }
1122
1180
 
1123
- //路径播放
1181
+ /** @description 路径播放
1182
+ * @param {Object} item 路径对象
1183
+ * @param {number} index 路径索引
1184
+ */
1124
1185
  function play(item, index) {
1186
+ // 切换播放路径时重新加载路径数据
1125
1187
  if (index !== pathPlayIndex) {
1126
1188
  viewModel.fromXmlString(item.xmlString);
1127
1189
  pathPlayIndex = index;
@@ -1132,28 +1194,39 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
1132
1194
  viewModel.setAutoRepeat(item.isRepeat);
1133
1195
  }
1134
1196
 
1135
- //路径播放暂停
1197
+ /** @description 路径播放暂停
1198
+ * @param {Object} item 路径对象
1199
+ */
1136
1200
  function pause(item) {
1137
1201
  item.isPlaying = false;
1138
1202
  viewModel.pause();
1139
1203
  }
1140
1204
 
1141
- //路径播放停止
1205
+ /** @description 路径播放停止
1206
+ * @param {Object} item 路径对象
1207
+ */
1142
1208
  function stop(item) {
1143
1209
  item.isPlaying = false;
1144
1210
  viewModel.stop();
1145
1211
  }
1146
1212
 
1147
- //循环播放
1213
+ /** @description 循环播放切换
1214
+ * @param {Object} item 路径对象
1215
+ */
1148
1216
  function repeat(item) {
1149
1217
  item.isRepeat = !item.isRepeat;
1218
+ // 仅在播放中切换循环状态
1150
1219
  if (item.isPlaying) {
1151
1220
  viewModel.setAutoRepeat(item.isRepeat);
1152
1221
  }
1153
1222
  }
1154
1223
 
1155
- //显示更多功能菜单
1224
+ /** @description 显示更多功能菜单
1225
+ * @param {Object} item 路径对象
1226
+ * @param {number} index 路径索引
1227
+ */
1156
1228
  function showDropDownMenu(item, index) {
1229
+ // 同一路径再次点击则关闭菜单
1157
1230
  if (showMoreMenu.value === true && index === dropDownPath.index) {
1158
1231
  showMoreMenu.value = false;
1159
1232
  document.addEventListener("click", hideDropDownMenu);
@@ -1161,6 +1234,7 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
1161
1234
  }
1162
1235
  showMoreMenu.value = true;
1163
1236
  let _menuDropdown = dropDownMenu.value.$el;
1237
+ // 根据鼠标点击位置定位下拉菜单
1164
1238
  _menuDropdown.style.left = window.event.clientX - 70 + "px";
1165
1239
  _menuDropdown.style.top = window.event.clientY + 15 + "px";
1166
1240
  dropDownPath = {
@@ -1181,7 +1255,9 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
1181
1255
  showMoreMenu.value = false;
1182
1256
  }
1183
1257
 
1184
- // 定位到关键帧
1258
+ /** @description 定位到关键帧
1259
+ * @param {number} index 关键帧索引
1260
+ */
1185
1261
  function locationKey(index) {
1186
1262
  viewModel.locationKey(index);
1187
1263
  }
@@ -1204,7 +1280,10 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
1204
1280
  viewModel.addKeyPointByCurrentView(duration);
1205
1281
  }
1206
1282
 
1207
- //替换关键帧
1283
+ /** @description 替换关键帧
1284
+ * @param {number} index 关键帧索引
1285
+ * @param {Object} row 表格行数据
1286
+ */
1208
1287
  function replaceKey(index, row) {
1209
1288
  var lonlat = viewer.getCurrentView();
1210
1289
  var positionArr = [lonlat.longitude.toFixed(4) * 1, lonlat.latitude.toFixed(4) * 1, lonlat.height.toFixed(2) * 1];
@@ -1214,7 +1293,9 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
1214
1293
  viewModel.modifyKeyPointByCurrentView(index, row.interval);
1215
1294
  }
1216
1295
 
1217
- //删除关键帧
1296
+ /** @description 删除关键帧
1297
+ * @param {number} index 关键帧索引
1298
+ */
1218
1299
  function deleteKey(index) {
1219
1300
  viewModel.deleteKeyPoint(index);
1220
1301
  tableData.splice(index, 1);
@@ -1226,6 +1307,7 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
1226
1307
  var duration = tableData[index].interval;
1227
1308
  var key = viewModel.getKeyPoint(index);
1228
1309
  var dur = viewModel.getKeyPointDur(index);
1310
+ // 关键帧时长不一致时同步更新
1229
1311
  if (dur !== duration) {
1230
1312
  viewModel.modifyKeyPoint(index, key.position, key.orientation, duration);
1231
1313
  }
@@ -1248,12 +1330,14 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
1248
1330
 
1249
1331
  //保存
1250
1332
  function save() {
1333
+ // 路径名为空则提示
1251
1334
  if (pathName.value === "") {
1252
1335
  (0, _message.default)({
1253
1336
  message: locale.value.webgl["enterPathName"] + "!",
1254
1337
  type: "warning"
1255
1338
  });
1256
1339
  } else {
1340
+ // 保存前同步关键帧时长
1257
1341
  for (let index = 0; index < tableData.length; index++) {
1258
1342
  var duration = tableData[index].interval;
1259
1343
  var key = viewModel.getKeyPoint(index);
@@ -1263,6 +1347,7 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
1263
1347
  }
1264
1348
  }
1265
1349
  var xmlString = viewModel.asXmlString();
1350
+ // 编辑已有路径
1266
1351
  if (isEdit.value) {
1267
1352
  //编辑路径
1268
1353
  if (dropDownPath) {
@@ -1310,7 +1395,9 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
1310
1395
  isEdit.value = false;
1311
1396
  }
1312
1397
 
1313
- //导入文件
1398
+ /** @description 导入文件
1399
+ * @param {Object} file 导入的文件对象
1400
+ */
1314
1401
  function importFile(file) {
1315
1402
  var name = file.name.split(".")[0];
1316
1403
  viewModel.fromXmlFile(file.raw).then(() => {
@@ -2157,11 +2244,11 @@ Object.defineProperty(exports, "__esModule", ({
2157
2244
  value: true
2158
2245
  }));
2159
2246
  exports.kq_npm_client_leaflet_vue = exports.kq_npm_client_common_vue = exports.kq_npm_client3d_webgl_vue = void 0;
2160
- let kq_npm_client_common_vue = exports.kq_npm_client_common_vue = window.kq_npm_client_common_vue = window.kq_npm_client_common_vue || {};
2247
+ const kq_npm_client_common_vue = exports.kq_npm_client_common_vue = window.kq_npm_client_common_vue = window.kq_npm_client_common_vue || {};
2161
2248
  __webpack_require__.g.kq_npm_client_common_vue = kq_npm_client_common_vue;
2162
- let kq_npm_client_leaflet_vue = exports.kq_npm_client_leaflet_vue = window.kq_npm_client_leaflet_vue = window.kq_npm_client_leaflet_vue || {};
2249
+ const kq_npm_client_leaflet_vue = exports.kq_npm_client_leaflet_vue = window.kq_npm_client_leaflet_vue = window.kq_npm_client_leaflet_vue || {};
2163
2250
  __webpack_require__.g.kq_npm_client_leaflet_vue = kq_npm_client_leaflet_vue;
2164
- let kq_npm_client3d_webgl_vue = exports.kq_npm_client3d_webgl_vue = window.kq_npm_client3d_webgl_vue = window.kq_npm_client3d_webgl_vue || {};
2251
+ const kq_npm_client3d_webgl_vue = exports.kq_npm_client3d_webgl_vue = window.kq_npm_client3d_webgl_vue = window.kq_npm_client3d_webgl_vue || {};
2165
2252
  __webpack_require__.g.kq_npm_client3d_webgl_vue = kq_npm_client3d_webgl_vue;
2166
2253
 
2167
2254
  /***/ })
@@ -1529,6 +1529,8 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
1529
1529
  // 淹没最大高度范围的最大值
1530
1530
  floodColorImage: props.settingParams?.floodColorImage ?? "0" // 淹没纹理色带值
1531
1531
  });
1532
+
1533
+ // 淹没分析视图模型实例
1532
1534
  let viewModel = null;
1533
1535
 
1534
1536
  // 组件容器Ref
@@ -1536,6 +1538,7 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
1536
1538
 
1537
1539
  // 生成组件默认header
1538
1540
  let headerTemp = (0, _vue.ref)();
1541
+ // header组件引用Ref
1539
1542
  let headerTempRef = (0, _vue.ref)();
1540
1543
  (0, _vue.onMounted)(() => {
1541
1544
  (0, _util.updatePosition)(boxRef.value, props);
@@ -1573,7 +1576,10 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
1573
1576
  }
1574
1577
  };
1575
1578
 
1576
- //获取图片路径
1579
+ /** @description 获取图片路径,根据色带值匹配对应的淹没色调图片
1580
+ * @param {string} value 色带值
1581
+ * @returns {string} 图片路径
1582
+ */
1577
1583
  function getImagePath(value) {
1578
1584
  var imagePath = "";
1579
1585
  var image = colorImages.find(item => item.value === value);
@@ -1592,22 +1598,29 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
1592
1598
  function clearResult() {
1593
1599
  viewModel && viewModel.clear();
1594
1600
  }
1595
- // 参数切换
1601
+ /** @description 参数切换处理,根据参数类型更新淹没分析状态
1602
+ * @param {string} key 变化的参数类型(mode/moveMode/speed/alpha/minHeight/maxHeight/colorImage)
1603
+ */
1596
1604
  function paramsChanged(key) {
1597
1605
  if (!viewModel) return;
1598
1606
  switch (key) {
1607
+ // 淹没模式变化
1599
1608
  case "mode":
1600
1609
  viewModel.setMoveMode(formItem.floodMode);
1601
1610
  break;
1611
+ // 淹没方向变化
1602
1612
  case "moveMode":
1603
1613
  viewModel.setMoveDirection(formItem.floodDirection);
1604
1614
  break;
1615
+ // 淹没速度变化
1605
1616
  case "speed":
1606
1617
  viewModel.setMoveSpeed(formItem.floodSpeed);
1607
1618
  break;
1619
+ // 透明度变化
1608
1620
  case "alpha":
1609
1621
  viewModel.setMoveAlpha(formItem.floodAlpha);
1610
1622
  break;
1623
+ // 最小高度变化:保证不超过最大高度
1611
1624
  case "minHeight":
1612
1625
  if (formItem.floodMinHeight > formItem.floodMaxHeight) {
1613
1626
  formItem.floodMaxHeight = formItem.floodMinHeight;
@@ -1615,6 +1628,7 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
1615
1628
  }
1616
1629
  viewModel.setMoveMinHeight(formItem.floodMinHeight);
1617
1630
  break;
1631
+ // 最大高度变化:保证不小于最小高度
1618
1632
  case "maxHeight":
1619
1633
  if (formItem.floodMinHeight > formItem.floodMaxHeight) {
1620
1634
  formItem.floodMinHeight = formItem.floodMaxHeight;
@@ -1622,6 +1636,7 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
1622
1636
  }
1623
1637
  viewModel.setMoveMaxHeight(formItem.floodMaxHeight);
1624
1638
  break;
1639
+ // 色带图片变化
1625
1640
  case "colorImage":
1626
1641
  var imageUrl = getImagePath(formItem.floodColorImage);
1627
1642
  viewModel.setMoveImage(imageUrl);
@@ -1630,15 +1645,23 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
1630
1645
  break;
1631
1646
  }
1632
1647
  }
1648
+
1649
+ /** @description 设置参数值,根据参数类型更新淹没范围或绘制面
1650
+ * @param {string} key 参数类型(polygon/minHeight/maxHeight)
1651
+ * @param {*} value 参数值
1652
+ */
1633
1653
  function setValue(key, value) {
1634
1654
  switch (key) {
1655
+ // 设置淹没分析多边形
1635
1656
  case "polygon":
1636
1657
  viewModel.setMovePolygon(value);
1637
1658
  break;
1659
+ // 设置最小高度并触发参数变化
1638
1660
  case "minHeight":
1639
1661
  formItem.floodMinHeight = value;
1640
1662
  paramsChanged(key);
1641
1663
  break;
1664
+ // 设置最大高度并触发参数变化
1642
1665
  case "maxHeight":
1643
1666
  formItem.floodMaxHeight = value;
1644
1667
  paramsChanged(key);
@@ -2137,8 +2160,13 @@ var _useGlobalConfig = __webpack_require__(22686);
2137
2160
  //地形淹没分析逻辑类
2138
2161
 
2139
2162
  class FloodAnalysisViewModel {
2163
+ /** @description 构造函数,初始化淹没分析视图模型并绑定测量事件
2164
+ * @param {Object} scenceView 三维场景视图对象
2165
+ * @param {Object} options 淹没分析配置参数
2166
+ */
2140
2167
  constructor(scenceView, options) {
2141
2168
  this._options = {};
2169
+ //淹没分析配置参数对象
2142
2170
  this._floodTerrainAnalysis = null;
2143
2171
  //地形淹没三维对象
2144
2172
  this._floodModelAnalysis = null;
@@ -2152,6 +2180,7 @@ class FloodAnalysisViewModel {
2152
2180
  this._polygon = null;
2153
2181
  //淹没范围
2154
2182
  this._language = {};
2183
+ //多语言资源对象
2155
2184
  this._colorImages = [
2156
2185
  //淹没纹理图片集合
2157
2186
  {
@@ -2173,6 +2202,7 @@ class FloodAnalysisViewModel {
2173
2202
  options.viewer.scene.globe.depthTestAgainstTerrain = true;
2174
2203
  options.colorImage = this.getImagePath(options.colorImage);
2175
2204
  this._options = options;
2205
+ // 复用场景已存在的模型淹没对象,避免重复创建
2176
2206
  if (scenceView._floodModelAnalysis) {
2177
2207
  this._floodModelAnalysis = scenceView._floodModelAnalysis;
2178
2208
  } else {
@@ -2188,6 +2218,7 @@ class FloodAnalysisViewModel {
2188
2218
  // this._floodModelAnalysis.colorImage = options.colorImage;
2189
2219
  var that = this;
2190
2220
  this._measureHandler = new Cesium.Kq3dMeasureHandler(scenceView._viewer);
2221
+ // 自定义绘制提示样式
2191
2222
  if (scenceView._props.showDrawTipsStyle) {
2192
2223
  this._measureHandler.showDrawTips = scenceView._props.showDrawTipsStyle;
2193
2224
  this._measureHandler.drawTipsStyle = {
@@ -2198,13 +2229,16 @@ class FloodAnalysisViewModel {
2198
2229
  }
2199
2230
  };
2200
2231
  }
2232
+ // 测量完成事件:记录结果并隐藏标签
2201
2233
  this._measureHandler.measureEvent.addEventListener(function (result) {
2202
2234
  that._measureResult = result;
2203
2235
  result.measureResult.label.show = false;
2204
2236
  });
2237
+ // 测量激活状态事件:测量结束(ret==false)时根据模式启动淹没分析
2205
2238
  this._measureHandler.activeEvent.addEventListener(function (ret) {
2206
2239
  if (ret == false) {
2207
2240
  if (that._measureResult) {
2241
+ // 地形淹没模式
2208
2242
  if (that._mode === 0) {
2209
2243
  that._options.positions = that._measureResult.positions;
2210
2244
  if (!that._floodTerrainAnalysis) {
@@ -2214,6 +2248,7 @@ class FloodAnalysisViewModel {
2214
2248
  }
2215
2249
  that._floodTerrainAnalysis.start();
2216
2250
  } else if (that._mode === 1) {
2251
+ // 模型淹没模式
2217
2252
  if (that._measureResult.positions && that._measureResult.positions.length > 0) {
2218
2253
  that._floodModelAnalysis.center = that._measureResult.positions[0];
2219
2254
  }
@@ -2229,7 +2264,10 @@ class FloodAnalysisViewModel {
2229
2264
  });
2230
2265
  }
2231
2266
 
2232
- //获取图片路径
2267
+ /** @description 获取图片路径,根据色带值匹配对应的淹没纹理图片
2268
+ * @param {string} value 色带值
2269
+ * @returns {string} 图片路径
2270
+ */
2233
2271
  getImagePath(value) {
2234
2272
  var imagePath = '';
2235
2273
  var image = this._colorImages.find(item => item.value === value);
@@ -2243,9 +2281,12 @@ class FloodAnalysisViewModel {
2243
2281
  start() {
2244
2282
  // 判断是否添加了地形
2245
2283
  if (this._mode === 0) {
2284
+ // 地形淹没模式:检查地形可用性
2246
2285
  if (this._floodModelAnalysis.viewer.terrainProvider.availability) {
2286
+ // 判断地形是否为非 heightmap 结构
2247
2287
  if (this._floodModelAnalysis.viewer.terrainProvider && !this._floodModelAnalysis.viewer.terrainProvider._heightmapStructure) {
2248
2288
  this.clear();
2289
+ // 已有淹没范围直接启动,否则启动测量绘制
2249
2290
  if (this._polygon) {
2250
2291
  this._options.positions = this._polygon;
2251
2292
  if (!this._floodTerrainAnalysis) {
@@ -2258,18 +2299,21 @@ class FloodAnalysisViewModel {
2258
2299
  this._measureHandler.startMeasure(Cesium.Kq3dMeasureMode.HorizontalArea);
2259
2300
  }
2260
2301
  } else {
2302
+ // heightmap 地形不支持该分析
2261
2303
  (0, _message.default)({
2262
2304
  message: this._language.value.webgl["stkTerrainAnalysisTips"],
2263
2305
  type: "warning"
2264
2306
  });
2265
2307
  }
2266
2308
  } else {
2309
+ // 未加载地形则提示
2267
2310
  (0, _message.default)({
2268
2311
  message: this._language.value.webgl["terrainAnalysisTips"],
2269
2312
  type: "warning"
2270
2313
  });
2271
2314
  }
2272
2315
  } else if (this._mode === 1) {
2316
+ // 模型淹没模式:检查场景是否存在3DTileset模型
2273
2317
  var modelFlag = false;
2274
2318
  var models = this._floodModelAnalysis.viewer.scene.primitives._primitives;
2275
2319
  for (let i = 0; i < models.length; i++) {
@@ -2281,6 +2325,7 @@ class FloodAnalysisViewModel {
2281
2325
  }
2282
2326
  if (modelFlag) {
2283
2327
  this.clear();
2328
+ // 已有淹没范围直接启动,否则启动测量绘制
2284
2329
  if (this._polygon) {
2285
2330
  this._floodModelAnalysis.center = this._polygon[0];
2286
2331
  let polygon = Cesium.PolygonGeometry.fromPositions({
@@ -2292,6 +2337,7 @@ class FloodAnalysisViewModel {
2292
2337
  this._measureHandler.startMeasure(Cesium.Kq3dMeasureMode.HorizontalArea);
2293
2338
  }
2294
2339
  } else {
2340
+ // 场景中无模型则提示
2295
2341
  (0, _message.default)({
2296
2342
  message: this._language.value.webgl["addModelAnalysisTips"],
2297
2343
  type: "warning"
@@ -2304,6 +2350,7 @@ class FloodAnalysisViewModel {
2304
2350
  clear() {
2305
2351
  this._measureHandler.stopMeasure();
2306
2352
  if (this._floodTerrainAnalysis) {
2353
+ // 保留当前地形淹没配置后销毁重建,以清除分析结果
2307
2354
  var options = {
2308
2355
  viewer: this._floodTerrainAnalysis.viewer,
2309
2356
  moveMode: this._floodTerrainAnalysis.moveMode,
@@ -2332,58 +2379,76 @@ class FloodAnalysisViewModel {
2332
2379
  this._measureHandler = null;
2333
2380
  }
2334
2381
 
2335
- //设置淹没模式
2382
+ /** @description 设置淹没模式
2383
+ * @param {number} mode 淹没模式(0:地形淹没 1:模型淹没)
2384
+ */
2336
2385
  setMoveMode(mode) {
2337
2386
  this._mode = Number(mode);
2338
2387
  }
2339
- //设置淹没方向
2388
+ /** @description 设置淹没方向
2389
+ * @param {number} direction 淹没方向(0:单向 1:双向)
2390
+ */
2340
2391
  setMoveDirection(direction) {
2341
2392
  direction = Number(direction);
2342
2393
  this._options.moveMode = direction;
2343
2394
  if (this._floodTerrainAnalysis) this._floodTerrainAnalysis.moveMode = direction;
2344
2395
  if (this._floodModelAnalysis) this._floodModelAnalysis.moveMode = direction;
2345
2396
  }
2346
- //设置淹没速度
2397
+ /** @description 设置淹没速度
2398
+ * @param {number} speed 淹没速度
2399
+ */
2347
2400
  setMoveSpeed(speed) {
2348
2401
  speed = Number(speed);
2349
2402
  this._options.speed = speed;
2350
2403
  if (this._floodTerrainAnalysis) this._floodTerrainAnalysis.speed = speed;
2351
2404
  if (this._floodModelAnalysis) this._floodModelAnalysis.speed = speed;
2352
2405
  }
2353
- //设置淹没纹理透明度
2406
+ /** @description 设置淹没纹理透明度
2407
+ * @param {number} alpha 透明度(0-1)
2408
+ */
2354
2409
  setMoveAlpha(alpha) {
2355
2410
  alpha = Number(alpha);
2356
2411
  this._options.alpha = alpha;
2357
2412
  if (this._floodTerrainAnalysis) this._floodTerrainAnalysis.alpha = alpha;
2358
2413
  if (this._floodModelAnalysis) this._floodModelAnalysis.alpha = alpha;
2359
2414
  }
2360
- //设置最小淹没高度
2415
+ /** @description 设置最小淹没高度
2416
+ * @param {number} minHeight 最小淹没高度
2417
+ */
2361
2418
  setMoveMinHeight(minHeight) {
2362
2419
  minHeight = Number(minHeight);
2363
2420
  this._options.minHeight = minHeight;
2364
2421
  if (this._floodTerrainAnalysis) this._floodTerrainAnalysis.minHeight = minHeight;
2365
2422
  if (this._floodModelAnalysis) this._floodModelAnalysis.minHeight = minHeight;
2366
2423
  }
2367
- //设置最大淹没高度
2424
+ /** @description 设置最大淹没高度
2425
+ * @param {number} maxHeight 最大淹没高度
2426
+ */
2368
2427
  setMoveMaxHeight(maxHeight) {
2369
2428
  maxHeight = Number(maxHeight);
2370
2429
  this._options.maxHeight = maxHeight;
2371
2430
  if (this._floodTerrainAnalysis) this._floodTerrainAnalysis.maxHeight = maxHeight;
2372
2431
  if (this._floodModelAnalysis) this._floodModelAnalysis.maxHeight = maxHeight;
2373
2432
  }
2374
- //设置淹没填充纹理
2433
+ /** @description 设置淹没填充纹理
2434
+ * @param {string} image 纹理图片路径
2435
+ */
2375
2436
  setMoveImage(image) {
2376
2437
  this._options.colorImage = image;
2377
2438
  if (this._floodTerrainAnalysis) this._floodTerrainAnalysis.colorImage = image;
2378
2439
  if (this._floodModelAnalysis) this._floodModelAnalysis.colorImage = image;
2379
2440
  }
2380
- //设置淹没范围
2441
+ /** @description 设置淹没范围,根据点维度自动选择构造方式
2442
+ * @param {Array} points 淹没范围点集合(二维或三维坐标)
2443
+ */
2381
2444
  setMovePolygon(points) {
2382
2445
  if (Array.isArray(points) && points.length > 0) {
2383
2446
  if (Array.isArray(points[0])) {
2447
+ // 二维坐标(经纬度)
2384
2448
  if (points[0].length == 2) {
2385
2449
  this._polygon = Cesium.Cartesian3.fromDegreesArray(points.flat());
2386
2450
  } else if (points[0].length == 3) {
2451
+ // 三维坐标(经纬度高)
2387
2452
  this._polygon = Cesium.Cartesian3.fromDegreesArrayHeights(points.flat());
2388
2453
  }
2389
2454
  }
@@ -2674,11 +2739,11 @@ Object.defineProperty(exports, "__esModule", ({
2674
2739
  value: true
2675
2740
  }));
2676
2741
  exports.kq_npm_client_leaflet_vue = exports.kq_npm_client_common_vue = exports.kq_npm_client3d_webgl_vue = void 0;
2677
- let kq_npm_client_common_vue = exports.kq_npm_client_common_vue = window.kq_npm_client_common_vue = window.kq_npm_client_common_vue || {};
2742
+ const kq_npm_client_common_vue = exports.kq_npm_client_common_vue = window.kq_npm_client_common_vue = window.kq_npm_client_common_vue || {};
2678
2743
  __webpack_require__.g.kq_npm_client_common_vue = kq_npm_client_common_vue;
2679
- let kq_npm_client_leaflet_vue = exports.kq_npm_client_leaflet_vue = window.kq_npm_client_leaflet_vue = window.kq_npm_client_leaflet_vue || {};
2744
+ const kq_npm_client_leaflet_vue = exports.kq_npm_client_leaflet_vue = window.kq_npm_client_leaflet_vue = window.kq_npm_client_leaflet_vue || {};
2680
2745
  __webpack_require__.g.kq_npm_client_leaflet_vue = kq_npm_client_leaflet_vue;
2681
- let kq_npm_client3d_webgl_vue = exports.kq_npm_client3d_webgl_vue = window.kq_npm_client3d_webgl_vue = window.kq_npm_client3d_webgl_vue || {};
2746
+ const kq_npm_client3d_webgl_vue = exports.kq_npm_client3d_webgl_vue = window.kq_npm_client3d_webgl_vue = window.kq_npm_client3d_webgl_vue || {};
2682
2747
  __webpack_require__.g.kq_npm_client3d_webgl_vue = kq_npm_client3d_webgl_vue;
2683
2748
 
2684
2749
  /***/ })