@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
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+
3
+ require("./lowaltitudefeature.css");
@@ -0,0 +1 @@
1
+ .kq-low-altitude-feature{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding:16px;font-size:13px;color:#333;overflow:hidden;padding:var(--kq-box-padding);border-radius:var(--kq-border-radius-base);background-color:var(--kq-bg-color)}.kq-low-altitude-feature .kq-box-shadow{-webkit-box-shadow:0 2px 12px rgba(0,0,0,.1);box-shadow:0 2px 12px rgba(0,0,0,.1)}.kq-low-altitude-feature-box{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%;height:100%;min-height:400px}.kq-laf-left-panel{width:280px;min-width:240px;height:800px;border-right:1px solid #e4e7ed;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.kq-laf-left-panel .kq-laf-list-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:12px 16px;border-bottom:1px solid #ebeef5}.kq-laf-left-panel .kq-laf-list-header .kq-laf-title{font-size:14px;font-weight:600;color:#303133}.kq-laf-left-panel .kq-laf-list-header .kq-laf-header-icon{color:#909399;cursor:pointer}.kq-laf-left-panel .kq-laf-list-header .kq-laf-header-icon:hover{color:#409eff}.kq-laf-left-panel .kq-laf-search{padding:8px 12px;border-bottom:1px solid #ebeef5}.kq-laf-left-panel .kq-laf-tree-scroll{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:hidden}.kq-laf-left-panel .kq-laf-tree-scroll .el-scrollbar__wrap{overflow-x:hidden}.kq-laf-left-panel .kq-tree{background:transparent;padding:4px 0}.kq-laf-left-panel .kq-tree .el-tree-node__content{height:36px;line-height:36px}.kq-laf-left-panel .kq-tree .el-tree-node__content:hover{background-color:#f5f7fa}.kq-laf-left-panel .kq-tree .el-tree-node__content:has(.kq-laf-category-name){font-weight:500}.kq-laf-left-panel .kq-laf-tree-label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%;padding-right:8px;-webkit-box-sizing:border-box;box-sizing:border-box}.kq-laf-left-panel .kq-laf-category-name{-webkit-box-flex:1;-ms-flex:1;flex:1;font-weight:500;font-size:13px;color:#303133;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding-right:6px}.kq-laf-left-panel .kq-laf-add-btn{color:#409eff;opacity:.8;cursor:pointer;-ms-flex-negative:0;flex-shrink:0}.kq-laf-left-panel .kq-laf-add-btn:hover{opacity:1;color:#337ecc}.kq-laf-left-panel .kq-laf-feature-row{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%}.kq-laf-left-panel .kq-laf-feature-row .kq-laf-feature-name{-webkit-box-flex:1;-ms-flex:1;flex:1;font-size:12px;color:#606266;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin-right:6px}.kq-laf-left-panel .kq-laf-feature-row .kq-laf-feature-actions{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:2px;opacity:0;-webkit-transition:opacity .15s;transition:opacity .15s}.kq-laf-left-panel .kq-laf-feature-row:hover .kq-laf-feature-actions{opacity:1}.kq-laf-left-panel .kq-laf-action-btn{padding:2px 3px;border-radius:3px;cursor:pointer;color:#909399;-webkit-transition:all .15s;transition:all .15s}.kq-laf-left-panel .kq-laf-action-btn:hover{background-color:rgba(64,158,255,.1);color:#409eff}.kq-laf-left-panel .kq-laf-action-btn.active,.kq-laf-left-panel .kq-laf-action-btn.kq-laf-grid-btn.active,.kq-laf-left-panel .kq-laf-action-btn.kq-laf-grid-btn:hover{color:#67c23a}.kq-laf-left-panel .kq-laf-action-btn.kq-laf-edit-btn:hover{color:#e6a23c}.kq-laf-left-panel .kq-laf-action-btn.kq-laf-zoom-btn:hover{color:#409eff}.kq-laf-left-panel .kq-laf-action-btn.kq-laf-delete-btn:hover{color:#f56c6c}.kq-laf-left-panel .kq-laf-empty{padding:16px;text-align:center;color:#c0c4cc;font-size:12px}.kq-laf-right-panel{-webkit-box-flex:1;-ms-flex:1;flex:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-width:140px;max-width:420px;width:420px}.kq-laf-right-panel .kq-laf-panel-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:12px 16px;border-bottom:1px solid #ebeef5;-ms-flex-negative:0;flex-shrink:0}.kq-laf-right-panel .kq-laf-panel-header .kq-laf-panel-title{font-size:14px;font-weight:600;color:#303133}.kq-laf-right-panel .kq-laf-panel-header .kq-laf-collapse-btn{color:#909399;cursor:pointer}.kq-laf-right-panel .kq-laf-panel-header .kq-laf-collapse-btn:hover{color:#409eff}.kq-laf-right-panel .kq-laf-panel-body{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow-y:auto;padding:16px}.kq-laf-toolbar{display:-webkit-box;display:-ms-flexbox;display:flex;gap:8px;padding:12px 0;border-bottom:1px solid #f0f0f0;margin-bottom:16px;-ms-flex-wrap:wrap;flex-wrap:wrap}.kq-laf-toolbar .el-divider--vertical,.kq-laf-toolbar .kq-divider--vertical{height:36px;margin:0 20px}.kq-laf-toolbar .kq-laf-tool-btn{width:36px!important;height:36px!important}.kq-laf-symbol-settings{border-top:1px solid #ebeef5;padding-top:12px;margin-top:8px}.kq-laf-symbol-settings .kq-laf-settings-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:8px 0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-weight:500;font-size:13px;color:#303133}.kq-laf-symbol-settings .kq-laf-settings-header:hover{color:#409eff}.kq-laf-symbol-settings .kq-laf-settings-header .kq-icon{color:#909399;-webkit-transition:-webkit-transform .2s;transition:-webkit-transform .2s;transition:transform .2s;transition:transform .2s, -webkit-transform .2s}.kq-laf-symbol-settings .kq-laf-settings-header .kq-icon.is-active{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.kq-laf-symbol-settings .kq-laf-settings-body{padding:8px 0}.kq-laf-symbol-settings .kq-laf-settings-body .kq-form-item{margin-bottom:8px}.kq-laf-symbol-settings .kq-laf-settings-body .kq-form-item:last-child{margin-bottom:0}.kq-laf-symbol-settings .kq-laf-settings-body .el-radio-group{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px 16px;min-height:32px}.kq-laf-symbol-settings .kq-laf-settings-body .el-radio-group .el-radio{margin-right:0;white-space:nowrap}.kq-laf-symbol-settings .el-slider,.kq-laf-symbol-settings .kq-slider{width:calc(100% - 18px);margin-right:var(--kq-box-padding)}.kq-laf-setting-row{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;margin-bottom:14px}.kq-laf-setting-row .kq-laf-setting-label{-ms-flex-negative:0;flex-shrink:0;width:80px;font-size:12px;color:#606266;line-height:32px;text-align:right;padding-right:8px}.kq-laf-setting-row .kq-laf-slider-wrap{-webkit-box-flex:1;-ms-flex:1;flex:1;min-width:180px;width:300px}.kq-laf-setting-row .kq-laf-slider-wrap .el-slider .el-slider__input{width:70px}.kq-laf-setting-row .kq-laf-radio-group{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:12px 20px;min-height:32px}.kq-laf-setting-row .kq-laf-radio-group .kq-radio{margin-right:0;white-space:nowrap}.kq-laf-setting-row .kq-laf-radio-group.kq-laf-buffer-types{gap:8px 16px}.kq-laf-setting-row .el-slider,.kq-laf-setting-row .kq-slider{width:calc(100% - 18px);margin-right:var(--kq-box-padding)}.kq-laf-panel-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;gap:10px;padding-top:16px;border-top:1px solid #ebeef5;margin-top:8px}@media screen and (max-width:800px){.kq-low-altitude-feature-box{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.kq-laf-left-panel{width:100%;min-width:auto;max-height:250px;border-right:none;border-bottom:1px solid #e4e7ed}.kq-laf-right-panel{max-width:none}}
package/measure/index.js CHANGED
@@ -255,19 +255,20 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
255
255
  } = (0, _useGlobalConfig.useLocale)();
256
256
  const props = __props;
257
257
  let measureType = (0, _vue.ref)(null); // 测量类型
258
- let isActive = (0, _vue.ref)(null);
259
- let isResult = (0, _vue.ref)(false);
260
- let isTips = (0, _vue.ref)(false);
261
- let distanceValue = null;
258
+ let isActive = (0, _vue.ref)(null); // 当前激活的测量类型
259
+ let isResult = (0, _vue.ref)(false); // 是否显示测量结果面板
260
+ let isTips = (0, _vue.ref)(false); // 是否显示测量提示
261
+ let distanceValue = null; // 原始距离/面积数值(用于单位换算)
262
262
  // 默认显示距离的单位
263
263
  let distanceUnit = (0, _vue.ref)(props.settingParams && props.settingParams.distanceUnit || "");
264
264
  // 海里单位选择
265
265
  let nauticalMileUnit = props.settingParams && props.settingParams.nauticalMileUnit || "nmi";
266
266
  // 面积单位
267
267
  let areaUnit = (0, _vue.ref)(props.settingParams && props.settingParams.areaUnit || "");
268
- let result = (0, _vue.ref)(0);
269
- let mode = (0, _vue.ref)("space");
270
- let viewModel = null;
268
+ let result = (0, _vue.ref)(0); // 测量结果显示值
269
+
270
+ let mode = (0, _vue.ref)("space"); // 测量模式:space/ground/model
271
+ let viewModel = null; // 测量视图模型实例
271
272
  (0, _vue.watch)(() => lang.value, (newVal, oldVal) => {
272
273
  distanceUnits.value = setDistanceUnits();
273
274
  areaUnits.value = setAreaUnits();
@@ -483,7 +484,10 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
483
484
  }
484
485
  });
485
486
  });
486
- // 经纬度转度分秒
487
+ /** @description 经纬度转度分秒
488
+ * @param {Number} val 经纬度数值
489
+ * @returns {String} 度分秒格式字符串
490
+ */
487
491
  function convertXY(val) {
488
492
  if (!val) {
489
493
  return "";
@@ -511,6 +515,11 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
511
515
  });
512
516
  }
513
517
  };
518
+
519
+ /** @description 格式化距离数值,自动选择 m/km 单位
520
+ * @param {Number} dis 距离数值(米)
521
+ * @returns {String} 带单位的距离字符串
522
+ */
514
523
  function formatDistance(dis) {
515
524
  if (dis > 5000) {
516
525
  dis = dis / 1000;
@@ -520,6 +529,11 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
520
529
  }
521
530
  return dis.toFixed(2) + " " + distanceUnit.value;
522
531
  }
532
+
533
+ /** @description 格式化面积数值,自动选择 m²/km² 单位
534
+ * @param {Number} area 面积数值(平方米)
535
+ * @returns {String} 带单位的面积字符串
536
+ */
523
537
  function formatArea(area) {
524
538
  areaUnit.value = "m²";
525
539
  if (area > 1000000) {
@@ -640,6 +654,8 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
640
654
  break;
641
655
  }
642
656
  }
657
+
658
+ // 继续连续测量
643
659
  function continueMeasure() {
644
660
  setTimeout(() => {
645
661
  switch (measureType.value) {
@@ -1451,8 +1467,14 @@ var _useGlobalConfig = __webpack_require__(22686);
1451
1467
  //测量操作类
1452
1468
 
1453
1469
  class MeasureViewModel {
1470
+ // 当前语言包
1471
+ /** @description 构造函数,初始化测量视图模型
1472
+ * @param {Object} scenceView 场景视图对象
1473
+ * @param {Boolean} exaggerateCompute 是否启用夸张计算
1474
+ */
1454
1475
  constructor(scenceView, exaggerateCompute) {
1455
1476
  this._viewer = null;
1477
+ // Cesium Viewer 实例
1456
1478
  this._measureHandler = null;
1457
1479
  //测量三维对象
1458
1480
  this.measureEvent = null;
@@ -1460,7 +1482,9 @@ class MeasureViewModel {
1460
1482
  this.activeEvent = null;
1461
1483
  //活动事件
1462
1484
  this.nauticalMileUnit = "nmi";
1485
+ // 海里单位标识
1463
1486
  this.drawTipsStyle = null;
1487
+ // 绘制提示样式
1464
1488
  this._language = null;
1465
1489
  const {
1466
1490
  locale
@@ -1478,9 +1502,12 @@ class MeasureViewModel {
1478
1502
  this._measureHandler.showDrawTips = scenceView._props.showDrawTipsStyle;
1479
1503
  }
1480
1504
  }
1481
- // 设置绘制鼠标提示
1505
+ /** @description 设置绘制鼠标提示
1506
+ * @param {Object} params 提示样式参数
1507
+ */
1482
1508
  setDrawTipsStyle(params = {}) {
1483
1509
  if (!this._measureHandler) return;
1510
+ // 空字符串转为 null,避免显示空提示
1484
1511
  const processedParams = Object.entries(params).reduce((acc, [key, value]) => {
1485
1512
  acc[key] = value === '' ? null : value;
1486
1513
  return acc;
@@ -1490,13 +1517,16 @@ class MeasureViewModel {
1490
1517
  ...processedParams
1491
1518
  };
1492
1519
  }
1493
- //距离测量
1520
+ /** @description 距离测量
1521
+ * @param {String} mode 测量模式:ground/model/空
1522
+ */
1494
1523
  distanceMeasure(mode) {
1495
1524
  this.setDrawTipsStyle({
1496
1525
  beforeDrawText: this._language.value.webgl.measureBeforeDrawText,
1497
1526
  duringDrawText: this._language.value.webgl.measureDuringDrawText
1498
1527
  });
1499
1528
  this._viewer.scene.globe.depthTestAgainstTerrain = true;
1529
+ // 根据模式选择对应测量方式
1500
1530
  if (mode === "ground") {
1501
1531
  this._measureHandler.startMeasure(Cesium.Kq3dMeasureMode.TerrainDistance);
1502
1532
  } else if (mode === "model") {
@@ -1516,13 +1546,16 @@ class MeasureViewModel {
1516
1546
  this._measureHandler.startMeasure(Cesium.Kq3dMeasureMode.ComplexDistance);
1517
1547
  }
1518
1548
 
1519
- //面积测量
1549
+ /** @description 面积测量
1550
+ * @param {String} mode 测量模式:ground/model/空
1551
+ */
1520
1552
  areaMeasure(mode) {
1521
1553
  this.setDrawTipsStyle({
1522
1554
  beforeDrawText: this._language.value.webgl.measureBeforeDrawText,
1523
1555
  duringDrawText: this._language.value.webgl.measureDuringDrawText
1524
1556
  });
1525
1557
  this._viewer.scene.globe.depthTestAgainstTerrain = true;
1558
+ // 根据模式选择对应测量方式
1526
1559
  if (mode === "ground") {
1527
1560
  this._measureHandler.startMeasure(Cesium.Kq3dMeasureMode.TerrainArea);
1528
1561
  } else if (mode === "model") {
@@ -1578,7 +1611,10 @@ class MeasureViewModel {
1578
1611
  this._viewer.scene.globe.depthTestAgainstTerrain = false;
1579
1612
  }
1580
1613
 
1581
- //更新距离测量单位
1614
+ /** @description 更新距离测量单位
1615
+ * @param {Object|Number} distanceTotal 距离测量结果,可能是数值或包含 verticalDistance/horizontalDistance 等字段的对象
1616
+ * @param {String} unit 单位标识
1617
+ */
1582
1618
  updateDistanceUnit(distanceTotal, unit) {
1583
1619
  if (this._measureHandler.measureResults) {
1584
1620
  this._measureHandler.measureResults.forEach(measureResult => {
@@ -1595,8 +1631,8 @@ class MeasureViewModel {
1595
1631
  measureResult.label.text = this.convertValueUnit(distanceTotal, unit);
1596
1632
  } else if (measureResult.polyline) {
1597
1633
  // 距离测量结果
1598
- let labels = measureResult.labels._labels;
1599
- let positions = measureResult.polyline.positions;
1634
+ const labels = measureResult.labels._labels;
1635
+ const positions = measureResult.polyline.positions;
1600
1636
  let dist = 0;
1601
1637
  if (!Cesium.Color.equals(measureResult.label.fillColor, Cesium.Color.RED)) {
1602
1638
  // 测量过程中实时切换单位
@@ -1625,7 +1661,11 @@ class MeasureViewModel {
1625
1661
  }
1626
1662
  }
1627
1663
 
1628
- //测量距离数值单位换算
1664
+ /** @description 测量距离数值单位换算
1665
+ * @param {Number} value 数值
1666
+ * @param {String} unit 单位标识
1667
+ * @returns {String} 换算后的带单位字符串
1668
+ */
1629
1669
  convertValueUnit(value, unit) {
1630
1670
  let newValue = "";
1631
1671
  switch (unit) {
@@ -1664,7 +1704,8 @@ class MeasureViewModel {
1664
1704
  // 判断是否加载模型
1665
1705
  checkModelAdded() {
1666
1706
  let isAdd = false;
1667
- let models = this._viewer.scene.primitives._primitives;
1707
+ const models = this._viewer.scene.primitives._primitives;
1708
+ // 遍历场景图元查找 3D Tileset 模型
1668
1709
  for (let i = 0; i < models.length; i++) {
1669
1710
  if (models[i] instanceof Cesium.Cesium3DTileset) {
1670
1711
  isAdd = true;
@@ -1698,11 +1739,11 @@ Object.defineProperty(exports, "__esModule", ({
1698
1739
  value: true
1699
1740
  }));
1700
1741
  exports.kq_npm_client_leaflet_vue = exports.kq_npm_client_common_vue = exports.kq_npm_client3d_webgl_vue = void 0;
1701
- let kq_npm_client_common_vue = exports.kq_npm_client_common_vue = window.kq_npm_client_common_vue = window.kq_npm_client_common_vue || {};
1742
+ const kq_npm_client_common_vue = exports.kq_npm_client_common_vue = window.kq_npm_client_common_vue = window.kq_npm_client_common_vue || {};
1702
1743
  __webpack_require__.g.kq_npm_client_common_vue = kq_npm_client_common_vue;
1703
- let kq_npm_client_leaflet_vue = exports.kq_npm_client_leaflet_vue = window.kq_npm_client_leaflet_vue = window.kq_npm_client_leaflet_vue || {};
1744
+ const kq_npm_client_leaflet_vue = exports.kq_npm_client_leaflet_vue = window.kq_npm_client_leaflet_vue = window.kq_npm_client_leaflet_vue || {};
1704
1745
  __webpack_require__.g.kq_npm_client_leaflet_vue = kq_npm_client_leaflet_vue;
1705
- let kq_npm_client3d_webgl_vue = exports.kq_npm_client3d_webgl_vue = window.kq_npm_client3d_webgl_vue = window.kq_npm_client3d_webgl_vue || {};
1746
+ const kq_npm_client3d_webgl_vue = exports.kq_npm_client3d_webgl_vue = window.kq_npm_client3d_webgl_vue = window.kq_npm_client3d_webgl_vue || {};
1706
1747
  __webpack_require__.g.kq_npm_client3d_webgl_vue = kq_npm_client3d_webgl_vue;
1707
1748
 
1708
1749
  /***/ })
@@ -79,6 +79,12 @@ var _gisUtils = __webpack_require__(20064);
79
79
  //模型平整逻辑类
80
80
 
81
81
  class ModelFlatViewModel {
82
+ /**
83
+ * @description 构造函数,初始化viewer、绘制管理器、平整纹理对象、测量处理器及图层监听
84
+ * @param {Object} scenceView 三维场景视图对象
85
+ * @param {Object} viewModel 表单参数对象
86
+ * @param {Function} callbackParams 回调函数,用于通知外部状态变化
87
+ */
82
88
  constructor(scenceView, viewModel, callbackParams) {
83
89
  this._viewer = null;
84
90
  //三维viewer对象
@@ -97,6 +103,7 @@ class ModelFlatViewModel {
97
103
  this._assistPolygons = [];
98
104
  //平整辅助面数组
99
105
  this.currentFlatPolygonIndex = -1;
106
+ //当前操作的平整实例索引
100
107
  this._language = {};
101
108
  this.tiles = [];
102
109
  this.callbackParams = null;
@@ -110,8 +117,10 @@ class ModelFlatViewModel {
110
117
  this._drawManager = scenceView._drawManager;
111
118
  //Create flattenning controller
112
119
  var that = this;
120
+ // 创建平整多边形纹理对象
113
121
  let kq3dFlattenning = new window.Cesium.Kq3dFlattenning(this._viewer, {});
114
122
  this._flatteningPolygonTex = kq3dFlattenning.createFlattenedPolygonTexture();
123
+ // 实例化测量处理器
115
124
  this._measureHandler = new Cesium.Kq3dMeasureHandler(this._viewer);
116
125
  if (scenceView._props.showDrawTipsStyle) {
117
126
  this._measureHandler.showDrawTips = scenceView._props.showDrawTipsStyle;
@@ -123,10 +132,12 @@ class ModelFlatViewModel {
123
132
  }
124
133
  };
125
134
  }
135
+ // 测量完成事件:保存测量结果并隐藏标签
126
136
  this._measureHandler.measureEvent.addEventListener(function (result) {
127
137
  that._measureResult = result;
128
138
  result.measureResult.label.show = false;
129
139
  });
140
+ // 测量激活状态变化事件:测量结束时创建平整,并按需连续绘制多个平整
130
141
  this._measureHandler.activeEvent.addEventListener(function (ret) {
131
142
  if (ret == false) {
132
143
  if (that._measureResult) {
@@ -196,6 +207,7 @@ class ModelFlatViewModel {
196
207
  var flag = false;
197
208
  this.remove();
198
209
  var models = this._viewer.scene.primitives._primitives;
210
+ // 遍历所有3dtiles,对选中模型启用平整并附加纹理
199
211
  for (let i = 0; i < models.length; i++) {
200
212
  if (models[i] instanceof Cesium.Cesium3DTileset && models[i]._url) {
201
213
  if (this.tiles.includes(models[i].guid)) {
@@ -209,8 +221,10 @@ class ModelFlatViewModel {
209
221
  }
210
222
  }
211
223
  if (flag) {
224
+ // 存在模型时启动水平面积测量,触发后续平整创建
212
225
  this._measureHandler.startMeasure(Cesium.Kq3dMeasureMode.HorizontalArea);
213
226
  } else {
227
+ // 未添加模型时给出警告
214
228
  (0, _message.default)({
215
229
  message: this._language.value.webgl["addModelTips"],
216
230
  type: "warning"
@@ -224,16 +238,23 @@ class ModelFlatViewModel {
224
238
  if (model.refresh) model.refresh(tileset, tile.content);
225
239
  }
226
240
  }
227
- // 切换高度重新计算
241
+ /**
242
+ * @description 切换平整深度并同步到对应平整实例
243
+ * @param {Number} val 平整深度值
244
+ */
228
245
  setHeight(val) {
229
246
  this._options.flatHeight = Number(val);
247
+ // 索引为-1时表示作用于全部平整实例
230
248
  if (this.currentFlatPolygonIndex == -1) {
231
249
  this._flatteningPolygonTex.setFlattenedPolygonHeight(-1, Number(val));
232
250
  } else {
233
251
  this._flatteningPolygonTex.setFlattenedPolygonHeight(this.currentFlatPolygonIndex, Number(val));
234
252
  }
235
253
  }
236
- // 切换辅助面显示
254
+ /**
255
+ * @description 切换辅助面显示状态
256
+ * @param {Boolean} val 是否显示
257
+ */
237
258
  setFlatteningShow(val) {
238
259
  this._options.flatteningShow = val;
239
260
  if (val) {
@@ -246,7 +267,10 @@ class ModelFlatViewModel {
246
267
  });
247
268
  }
248
269
  }
249
- // 设置平整实例
270
+ /**
271
+ * @description 设置当前操作的平整实例索引
272
+ * @param {Number} val 平整实例索引
273
+ */
250
274
  setCurrentFlatPolygonIndex(val) {
251
275
  this.currentFlatPolygonIndex = val;
252
276
  }
@@ -258,11 +282,13 @@ class ModelFlatViewModel {
258
282
  remove() {
259
283
  this._flatteningPolygonTex && this._flatteningPolygonTex.removeAllFlattenedPolygon();
260
284
  this._flatteningPolygonTex && this._flatteningPolygonTex.detachAllTileset();
285
+ // 移除所有辅助面
261
286
  for (var i = 0; i < this._assistPolygons.length; i++) {
262
287
  this._viewer.entities.remove(this._assistPolygons[i]);
263
288
  }
264
289
  this._assistPolygons = [];
265
290
  var models = this._viewer.scene.primitives._primitives;
291
+ // 遍历所有3dtiles,取消平整并移除tileVisible监听
266
292
  for (let i = 0; i < models.length; i++) {
267
293
  if (models[i] instanceof Cesium.Cesium3DTileset && models[i]._url) {
268
294
  if (!models[i].refresh) models[i]?.tileVisible?.removeEventListener(this.tileVisible);
@@ -345,6 +371,7 @@ const __default__ = {
345
371
  };
346
372
  var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
347
373
  props: {
374
+ // 指定组件绑定的viewer对象的div的id
348
375
  mapTarget: {
349
376
  type: String
350
377
  },
@@ -397,6 +424,8 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
397
424
 
398
425
  // 获取组件传参
399
426
  const props = __props;
427
+
428
+ // 表单数据对象
400
429
  let formItem = (0, _vue.reactive)({
401
430
  isFilterTilset: props?.settingParams?.isFilterTilset ?? true,
402
431
  isCheckTilset: props?.settingParams?.isCheckTilset ?? false,
@@ -418,6 +447,7 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
418
447
  // 生成组件默认header
419
448
  let headerTemp = (0, _vue.ref)();
420
449
  let headerTempRef = (0, _vue.ref)();
450
+ // 可选的3dtiles图层列表
421
451
  let tiles = (0, _vue.ref)([]);
422
452
  (0, _vue.onMounted)(() => {
423
453
  (0, _util.updatePosition)(boxRef.value, props);
@@ -441,6 +471,9 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
441
471
  callbackParams();
442
472
  }, 500);
443
473
  });
474
+ /**
475
+ * @description 回调函数:刷新可选图层列表,按需默认全选并同步给逻辑类
476
+ */
444
477
  function callbackParams() {
445
478
  if (viewModel) {
446
479
  tiles.value = viewModel?.findLayers?.() ?? []; // 获取所有tileset对象
@@ -448,7 +481,10 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
448
481
  changeTilset(formItem.tileset);
449
482
  }
450
483
  }
451
- // 切换模型
484
+ /**
485
+ * @description 切换平整目标模型图层
486
+ * @param {Array} val 选中的tileset guid数组
487
+ */
452
488
  function changeTilset(val) {
453
489
  viewModel.tiles = formItem?.tileset ?? [];
454
490
  }
@@ -473,7 +509,10 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
473
509
  function getFlatCount() {
474
510
  return viewModel && viewModel.getFlatCount();
475
511
  }
476
- // 设置操作平整实例
512
+ /**
513
+ * @description 设置当前操作的平整实例索引
514
+ * @param {Number} val 平整实例索引
515
+ */
477
516
  function setCurrentFlatPolygonIndex(val) {
478
517
  viewModel && viewModel.setCurrentFlatPolygonIndex(val);
479
518
  }
@@ -481,6 +520,7 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
481
520
  function startOperation() {
482
521
  viewModel && viewModel.start();
483
522
  }
523
+ // 取消绘制
484
524
  function cancel() {
485
525
  viewModel && viewModel.cancel();
486
526
  }
@@ -701,11 +741,11 @@ Object.defineProperty(exports, "__esModule", ({
701
741
  value: true
702
742
  }));
703
743
  exports.kq_npm_client_leaflet_vue = exports.kq_npm_client_common_vue = exports.kq_npm_client3d_webgl_vue = void 0;
704
- let kq_npm_client_common_vue = exports.kq_npm_client_common_vue = window.kq_npm_client_common_vue = window.kq_npm_client_common_vue || {};
744
+ const kq_npm_client_common_vue = exports.kq_npm_client_common_vue = window.kq_npm_client_common_vue = window.kq_npm_client_common_vue || {};
705
745
  __webpack_require__.g.kq_npm_client_common_vue = kq_npm_client_common_vue;
706
- let kq_npm_client_leaflet_vue = exports.kq_npm_client_leaflet_vue = window.kq_npm_client_leaflet_vue = window.kq_npm_client_leaflet_vue || {};
746
+ const kq_npm_client_leaflet_vue = exports.kq_npm_client_leaflet_vue = window.kq_npm_client_leaflet_vue = window.kq_npm_client_leaflet_vue || {};
707
747
  __webpack_require__.g.kq_npm_client_leaflet_vue = kq_npm_client_leaflet_vue;
708
- let kq_npm_client3d_webgl_vue = exports.kq_npm_client3d_webgl_vue = window.kq_npm_client3d_webgl_vue = window.kq_npm_client3d_webgl_vue || {};
748
+ const kq_npm_client3d_webgl_vue = exports.kq_npm_client3d_webgl_vue = window.kq_npm_client3d_webgl_vue = window.kq_npm_client3d_webgl_vue || {};
709
749
  __webpack_require__.g.kq_npm_client3d_webgl_vue = kq_npm_client3d_webgl_vue;
710
750
 
711
751
  /***/ })
@@ -31,16 +31,25 @@ var _useGlobalConfig = __webpack_require__(22686);
31
31
  //模型平整逻辑类
32
32
 
33
33
  class ModelEditViewModel {
34
+ //语言对象
35
+ /**
36
+ * @description 构造函数,初始化viewer、绘制管理对象及表单参数
37
+ * @param {Object} scenceView 三维场景视图对象
38
+ * @param {Object} formItem 表单参数对象
39
+ */
34
40
  constructor(scenceView, formItem) {
35
41
  this._viewer = null;
36
42
  //三维viewer对象
37
43
  this._drawManager = null;
38
44
  //绘制管理对象
39
45
  this._modelEdit = null;
46
+ //当前编辑的模型对象
40
47
  this._customAxis = null;
41
48
  // 编辑类
42
49
  this._option = null;
50
+ //表单参数对象
43
51
  this._modelEdits = [];
52
+ //已加载的模型集合
44
53
  this._language = {};
45
54
  const {
46
55
  locale
@@ -51,7 +60,10 @@ class ModelEditViewModel {
51
60
  this._viewer.scene.globe.depthTestAgainstTerrain = true;
52
61
  this._option = formItem;
53
62
  }
54
- // 开始分析
63
+ /**
64
+ * @description 开始分析:根据传入的模型URL通过绘制点选择位置加载gltf模型并挂载自定义编辑轴
65
+ * @param {String} url 模型文件路径
66
+ */
55
67
  start(url) {
56
68
  let that = this;
57
69
  // this.clear();
@@ -61,6 +73,7 @@ class ModelEditViewModel {
61
73
  }, (feature, {
62
74
  shape
63
75
  }) => {
76
+ // 过滤非本组件绘制的图形
64
77
  if (!shape.groupName || shape.groupName !== "ModelEditDraw") return;
65
78
  that._drawManager.clearDrawGroup("ModelEditDraw");
66
79
  if (shape._position) {
@@ -76,10 +89,12 @@ class ModelEditViewModel {
76
89
  scale: that?._option?.modelScale ?? 80
77
90
  }));
78
91
  that._modelEdits.push(that._modelEdit);
92
+ // 若已存在编辑轴,先移除监听并销毁
79
93
  if (that._customAxis) {
80
94
  that._customAxis?.removeListener?.(); //移除监听
81
95
  that._customAxis?.destroy?.();
82
96
  }
97
+ // 模型加载完成后创建自定义编辑轴并添加监听
83
98
  that._modelEdit.readyPromise.then(function (model) {
84
99
  that._customAxis = new Cesium.Kq3dCustomAxis(that._viewer, model);
85
100
  that._customAxis.addListener(); //添加监听
@@ -88,20 +103,27 @@ class ModelEditViewModel {
88
103
  }
89
104
  }, "ModelEditDraw");
90
105
  } else {
106
+ // 未传入模型路径时给出提示
91
107
  (0, _message.default)({
92
108
  message: that._language.value.webgl["modelPathTips"],
93
109
  type: "info"
94
110
  });
95
111
  }
96
112
  }
113
+ /**
114
+ * @description 设置当前可编辑的模型对象并为其挂载自定义编辑轴
115
+ * @param {Object} val 模型对象
116
+ */
97
117
  setEditModel(val) {
98
118
  let that = this;
99
119
  that._modelEdit = val;
100
120
  that._modelEdits.push(that._modelEdit);
121
+ // 若已存在编辑轴,先移除监听并销毁
101
122
  if (that._customAxis) {
102
123
  that._customAxis?.removeListener?.(); //移除监听
103
124
  that._customAxis?.destroy?.();
104
125
  }
126
+ // 模型加载完成后创建自定义编辑轴并添加监听
105
127
  that._modelEdit?.readyPromise?.then?.(function (model) {
106
128
  that._customAxis = new Cesium.Kq3dCustomAxis(that._viewer, model);
107
129
  that._customAxis.addListener(); //添加监听
@@ -122,6 +144,7 @@ class ModelEditViewModel {
122
144
  }
123
145
  // 清除
124
146
  clear() {
147
+ // 遍历移除所有已加载的模型
125
148
  for (let i = 0; i < this._modelEdits.length; i++) {
126
149
  if (this._modelEdits[i]) {
127
150
  this._viewer.scene.primitives.remove(this._modelEdits[i]);
@@ -285,6 +308,7 @@ const __default__ = {
285
308
  };
286
309
  var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
287
310
  props: {
311
+ // 指定组件绑定的viewer对象的div的id
288
312
  mapTarget: {
289
313
  type: String
290
314
  },
@@ -338,6 +362,8 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
338
362
 
339
363
  // 获取组件传参
340
364
  const props = __props;
365
+
366
+ // 表单数据对象
341
367
  let formItem = (0, _vue.reactive)({
342
368
  modelPath: props?.settingParams?.modelPath ?? "",
343
369
  isScaleFile: props?.settingParams?.isScaleFile ?? false,
@@ -383,6 +409,10 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
383
409
  headerTemp.value = (0, _util.createHeaderTemp)(boxRef.value, (0, _vue.toRefs)(props), headerTempRef, "webgl.modelEditTitle");
384
410
  }
385
411
  };
412
+ /**
413
+ * @description 选择本地模型文件并生成可访问的本地路径
414
+ * @param {Object} file 上传文件对象
415
+ */
386
416
  function selectModel(file) {
387
417
  formItem.modelPath = URL.createObjectURL(file.raw);
388
418
  }
@@ -416,6 +446,10 @@ var _default = exports.A = /*@__PURE__*/Object.assign(__default__, {
416
446
  Object.assign(viewModel._option, formItem);
417
447
  }
418
448
  }
449
+ /**
450
+ * @description 设置当前可编辑的模型对象
451
+ * @param {Object} val 模型对象
452
+ */
419
453
  function setEditModel(val) {
420
454
  viewModel && viewModel.setEditModel(val);
421
455
  }
@@ -620,11 +654,11 @@ Object.defineProperty(exports, "__esModule", ({
620
654
  value: true
621
655
  }));
622
656
  exports.kq_npm_client_leaflet_vue = exports.kq_npm_client_common_vue = exports.kq_npm_client3d_webgl_vue = void 0;
623
- let kq_npm_client_common_vue = exports.kq_npm_client_common_vue = window.kq_npm_client_common_vue = window.kq_npm_client_common_vue || {};
657
+ const kq_npm_client_common_vue = exports.kq_npm_client_common_vue = window.kq_npm_client_common_vue = window.kq_npm_client_common_vue || {};
624
658
  __webpack_require__.g.kq_npm_client_common_vue = kq_npm_client_common_vue;
625
- let kq_npm_client_leaflet_vue = exports.kq_npm_client_leaflet_vue = window.kq_npm_client_leaflet_vue = window.kq_npm_client_leaflet_vue || {};
659
+ const kq_npm_client_leaflet_vue = exports.kq_npm_client_leaflet_vue = window.kq_npm_client_leaflet_vue = window.kq_npm_client_leaflet_vue || {};
626
660
  __webpack_require__.g.kq_npm_client_leaflet_vue = kq_npm_client_leaflet_vue;
627
- let kq_npm_client3d_webgl_vue = exports.kq_npm_client3d_webgl_vue = window.kq_npm_client3d_webgl_vue = window.kq_npm_client3d_webgl_vue || {};
661
+ const kq_npm_client3d_webgl_vue = exports.kq_npm_client3d_webgl_vue = window.kq_npm_client3d_webgl_vue = window.kq_npm_client3d_webgl_vue || {};
628
662
  __webpack_require__.g.kq_npm_client3d_webgl_vue = kq_npm_client3d_webgl_vue;
629
663
 
630
664
  /***/ })