@vcmap/core 5.0.0-rc.28 → 5.0.0-rc.29

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 (191) hide show
  1. package/README.md +9 -3
  2. package/build/postinstall.js +13 -2
  3. package/index.d.ts +155 -106
  4. package/package.json +9 -4
  5. package/src/category/category.js +71 -32
  6. package/src/category/categoryCollection.js +27 -18
  7. package/src/cesium/cesiumVcsCameraPrimitive.js +13 -5
  8. package/src/cesium/entity.js +3 -1
  9. package/src/cesium/wallpaperMaterial.js +4 -2
  10. package/src/classRegistry.js +11 -4
  11. package/src/featureProvider/abstractFeatureProvider.js +43 -22
  12. package/src/featureProvider/tileProviderFeatureProvider.js +11 -5
  13. package/src/featureProvider/wmsFeatureProvider.js +37 -15
  14. package/src/interaction/abstractInteraction.js +5 -1
  15. package/src/interaction/coordinateAtPixel.js +34 -12
  16. package/src/interaction/eventHandler.js +63 -23
  17. package/src/interaction/featureAtPixelInteraction.js +96 -32
  18. package/src/interaction/featureProviderInteraction.js +23 -8
  19. package/src/interaction/interactionChain.js +19 -9
  20. package/src/interaction/interactionType.js +23 -26
  21. package/src/layer/cesium/cesiumTilesetCesiumImpl.js +45 -15
  22. package/src/layer/cesium/clusterContext.js +10 -3
  23. package/src/layer/cesium/dataSourceCesiumImpl.js +13 -4
  24. package/src/layer/cesium/openStreetMapCesiumImpl.js +7 -3
  25. package/src/layer/cesium/rasterLayerCesiumImpl.js +6 -2
  26. package/src/layer/cesium/singleImageCesiumImpl.js +14 -3
  27. package/src/layer/cesium/terrainCesiumImpl.js +3 -2
  28. package/src/layer/cesium/tmsCesiumImpl.js +15 -3
  29. package/src/layer/cesium/vectorCesiumImpl.js +69 -25
  30. package/src/layer/cesium/vectorContext.js +25 -5
  31. package/src/layer/cesium/vectorRasterTileCesiumImpl.js +15 -5
  32. package/src/layer/cesium/vectorTileImageryProvider.js +51 -13
  33. package/src/layer/cesium/wmsCesiumImpl.js +15 -3
  34. package/src/layer/cesium/wmtsCesiumImpl.js +18 -6
  35. package/src/layer/cesium/x3dmHelper.js +4 -1
  36. package/src/layer/cesiumTilesetLayer.js +55 -26
  37. package/src/layer/czmlLayer.js +11 -5
  38. package/src/layer/dataSourceLayer.js +25 -17
  39. package/src/layer/featureLayer.js +33 -18
  40. package/src/layer/featureStoreLayer.js +161 -99
  41. package/src/layer/featureStoreLayerChanges.js +57 -17
  42. package/src/layer/featureVisibility.js +89 -59
  43. package/src/layer/geojsonHelpers.js +70 -29
  44. package/src/layer/geojsonLayer.js +17 -11
  45. package/src/layer/globalHider.js +14 -4
  46. package/src/layer/layer.js +77 -44
  47. package/src/layer/layerImplementation.js +12 -4
  48. package/src/layer/oblique/layerObliqueImpl.js +3 -1
  49. package/src/layer/oblique/obliqueHelpers.js +75 -30
  50. package/src/layer/oblique/vectorObliqueImpl.js +175 -69
  51. package/src/layer/openStreetMapLayer.js +34 -20
  52. package/src/layer/openlayers/layerOpenlayersImpl.js +37 -15
  53. package/src/layer/openlayers/openStreetMapOpenlayersImpl.js +3 -1
  54. package/src/layer/openlayers/rasterLayerOpenlayersImpl.js +3 -1
  55. package/src/layer/openlayers/singleImageOpenlayersImpl.js +3 -1
  56. package/src/layer/openlayers/tileDebugOpenlayersImpl.js +3 -1
  57. package/src/layer/openlayers/tmsOpenlayersImpl.js +6 -3
  58. package/src/layer/openlayers/vectorOpenlayersImpl.js +14 -4
  59. package/src/layer/openlayers/vectorTileOpenlayersImpl.js +12 -5
  60. package/src/layer/openlayers/wmsOpenlayersImpl.js +3 -1
  61. package/src/layer/openlayers/wmtsOpenlayersImpl.js +12 -5
  62. package/src/layer/pointCloudLayer.js +21 -10
  63. package/src/layer/rasterLayer.js +73 -22
  64. package/src/layer/singleImageLayer.js +10 -7
  65. package/src/layer/terrainHelpers.js +30 -19
  66. package/src/layer/terrainLayer.js +16 -7
  67. package/src/layer/tileLoadedHelper.js +9 -4
  68. package/src/layer/tileProvider/mvtTileProvider.js +10 -4
  69. package/src/layer/tileProvider/staticGeojsonTileProvider.js +10 -4
  70. package/src/layer/tileProvider/tileProvider.js +163 -87
  71. package/src/layer/tileProvider/urlTemplateTileProvider.js +10 -4
  72. package/src/layer/tmsLayer.js +7 -6
  73. package/src/layer/vectorHelpers.js +34 -25
  74. package/src/layer/vectorLayer.js +77 -36
  75. package/src/layer/vectorProperties.js +245 -74
  76. package/src/layer/vectorSymbols.js +3 -1
  77. package/src/layer/vectorTileLayer.js +121 -70
  78. package/src/layer/wfsLayer.js +19 -8
  79. package/src/layer/wmsHelpers.js +11 -6
  80. package/src/layer/wmsLayer.js +36 -14
  81. package/src/layer/wmtsLayer.js +35 -20
  82. package/src/map/baseOLMap.js +57 -31
  83. package/src/map/cameraLimiter.js +67 -18
  84. package/src/map/cesiumMap.js +307 -95
  85. package/src/map/obliqueMap.js +84 -34
  86. package/src/map/openlayersMap.js +40 -19
  87. package/src/map/vcsMap.js +21 -8
  88. package/src/oblique/helpers.js +212 -64
  89. package/src/oblique/obliqueCollection.js +111 -48
  90. package/src/oblique/obliqueDataSet.js +53 -21
  91. package/src/oblique/obliqueImage.js +50 -17
  92. package/src/oblique/obliqueImageMeta.js +7 -6
  93. package/src/oblique/obliqueProvider.js +75 -27
  94. package/src/oblique/obliqueView.js +18 -7
  95. package/src/oblique/obliqueViewDirection.js +3 -2
  96. package/src/oblique/parseImageJson.js +57 -23
  97. package/src/ol/feature.js +8 -3
  98. package/src/ol/geom/circle.js +12 -3
  99. package/src/ol/geom/geometryCollection.js +11 -4
  100. package/src/ol/render/canvas/canvasTileRenderer.js +11 -9
  101. package/src/overrideClassRegistry.js +13 -3
  102. package/src/style/arcStyle.js +129 -36
  103. package/src/style/arrowStyle.js +57 -22
  104. package/src/style/declarativeStyleItem.js +107 -62
  105. package/src/style/shapesCategory.js +8 -6
  106. package/src/style/styleFactory.js +4 -1
  107. package/src/style/styleHelpers.js +17 -8
  108. package/src/style/styleItem.js +28 -10
  109. package/src/style/vectorStyleItem.js +160 -74
  110. package/src/style/writeStyle.js +5 -7
  111. package/src/util/clipping/clippingObject.js +72 -38
  112. package/src/util/clipping/clippingObjectManager.js +53 -19
  113. package/src/util/clipping/clippingPlaneHelper.js +120 -53
  114. package/src/util/collection.js +12 -6
  115. package/src/util/editor/createFeatureSession.js +21 -6
  116. package/src/util/editor/editFeaturesSession.js +41 -15
  117. package/src/util/editor/editGeometrySession.js +55 -30
  118. package/src/util/editor/editorHelpers.js +114 -29
  119. package/src/util/editor/editorSessionHelpers.js +8 -3
  120. package/src/util/editor/interactions/createBBoxInteraction.js +11 -3
  121. package/src/util/editor/interactions/createCircleInteraction.js +7 -2
  122. package/src/util/editor/interactions/createLineStringInteraction.js +7 -2
  123. package/src/util/editor/interactions/createPolygonInteraction.js +7 -2
  124. package/src/util/editor/interactions/editFeaturesMouseOverInteraction.js +7 -5
  125. package/src/util/editor/interactions/editGeometryMouseOverInteraction.js +8 -3
  126. package/src/util/editor/interactions/ensureHandlerSelectionInteraction.js +4 -2
  127. package/src/util/editor/interactions/insertVertexInteraction.js +17 -6
  128. package/src/util/editor/interactions/mapInteractionController.js +31 -14
  129. package/src/util/editor/interactions/removeVertexInteraction.js +4 -1
  130. package/src/util/editor/interactions/selectFeatureMouseOverInteraction.js +19 -10
  131. package/src/util/editor/interactions/selectMultiFeatureInteraction.js +33 -20
  132. package/src/util/editor/interactions/selectSingleFeatureInteraction.js +14 -8
  133. package/src/util/editor/selectFeaturesSession.js +37 -21
  134. package/src/util/editor/transformation/create2DHandlers.js +82 -37
  135. package/src/util/editor/transformation/create3DHandlers.js +187 -84
  136. package/src/util/editor/transformation/extrudeInteraction.js +20 -5
  137. package/src/util/editor/transformation/rotateInteraction.js +29 -16
  138. package/src/util/editor/transformation/scaleInteraction.js +31 -15
  139. package/src/util/editor/transformation/transformationHandler.js +23 -8
  140. package/src/util/editor/transformation/transformationTypes.js +8 -4
  141. package/src/util/editor/transformation/translateInteraction.js +86 -32
  142. package/src/util/editor/validateGeoemetry.js +3 -1
  143. package/src/util/exclusiveManager.js +6 -3
  144. package/src/util/extent.js +20 -10
  145. package/src/util/featureconverter/arcToCesium.js +46 -12
  146. package/src/util/featureconverter/circleToCesium.js +61 -27
  147. package/src/util/featureconverter/convert.js +85 -13
  148. package/src/util/featureconverter/extent3D.js +69 -28
  149. package/src/util/featureconverter/featureconverterHelper.js +232 -79
  150. package/src/util/featureconverter/lineStringToCesium.js +107 -35
  151. package/src/util/featureconverter/pointHelpers.js +117 -45
  152. package/src/util/featureconverter/pointToCesium.js +128 -31
  153. package/src/util/featureconverter/polygonToCesium.js +50 -16
  154. package/src/util/fetch.js +3 -1
  155. package/src/util/geometryHelpers.js +15 -10
  156. package/src/util/indexedCollection.js +7 -3
  157. package/src/util/isMobile.js +8 -2
  158. package/src/util/layerCollection.js +28 -12
  159. package/src/util/mapCollection.js +37 -18
  160. package/src/util/math.js +35 -19
  161. package/src/util/overrideCollection.js +57 -32
  162. package/src/util/projection.js +21 -5
  163. package/src/util/urlHelpers.js +5 -3
  164. package/src/util/viewpoint.js +66 -33
  165. package/src/vcsApp.js +133 -69
  166. package/src/vcsModule.js +3 -2
  167. package/src/vcsModuleHelpers.js +24 -9
  168. package/src/vcsObject.js +3 -2
  169. package/tests/data/dynamicPointCzml.json +24 -35
  170. package/tests/data/oblique/imageData/imagev34.json +56 -272
  171. package/tests/data/oblique/imageData/imagev35.json +272 -19
  172. package/tests/data/oblique/imageData/imagev35PerImageSize.json +299 -19
  173. package/tests/data/oblique/tiledImageData/12/2199/1342.json +11056 -1
  174. package/tests/data/oblique/tiledImageData/12/2199/1343.json +11236 -1
  175. package/tests/data/oblique/tiledImageData/12/2199/1344.json +11077 -1
  176. package/tests/data/oblique/tiledImageData/12/2200/1342.json +11036 -1
  177. package/tests/data/oblique/tiledImageData/12/2200/1343.json +11277 -1
  178. package/tests/data/oblique/tiledImageData/12/2200/1344.json +11131 -1
  179. package/tests/data/oblique/tiledImageData/12/2201/1342.json +10870 -1
  180. package/tests/data/oblique/tiledImageData/12/2201/1343.json +11492 -1
  181. package/tests/data/oblique/tiledImageData/12/2201/1344.json +10909 -1
  182. package/tests/data/oblique/tiledImageData/image.json +70 -1
  183. package/tests/data/terrain/layer.json +121 -130
  184. package/tests/data/testGeoJSON.json +4 -16
  185. package/tests/unit/helpers/cesiumHelpers.js +58 -33
  186. package/tests/unit/helpers/helpers.js +10 -2
  187. package/tests/unit/helpers/imageHelpers.js +8 -4
  188. package/tests/unit/helpers/obliqueData.js +39 -13
  189. package/tests/unit/helpers/obliqueHelpers.js +12 -9
  190. package/tests/unit/helpers/openlayersHelpers.js +4 -1
  191. package/tests/unit/helpers/terrain/terrainData.js +8 -7
@@ -65,7 +65,10 @@ class CreateBBoxInteraction extends AbstractInteraction {
65
65
 
66
66
  this._lastCoordinate[2] = this._origin[2];
67
67
  let ringCoordinates;
68
- if ((originXHigher && originYHigher) || (!originXHigher && !originYHigher)) {
68
+ if (
69
+ (originXHigher && originYHigher) ||
70
+ (!originXHigher && !originYHigher)
71
+ ) {
69
72
  ringCoordinates = [
70
73
  this._origin,
71
74
  [this._lastCoordinate[0], this._origin[1], this._origin[2]],
@@ -91,7 +94,11 @@ class CreateBBoxInteraction extends AbstractInteraction {
91
94
  */
92
95
  async pipe(event) {
93
96
  if (event.type & EventType.CLICKMOVE && this._geometry) {
94
- this._lastCoordinate.splice(0, event.positionOrPixel.length, ...event.positionOrPixel);
97
+ this._lastCoordinate.splice(
98
+ 0,
99
+ event.positionOrPixel.length,
100
+ ...event.positionOrPixel,
101
+ );
95
102
  this._setCoordinates();
96
103
  }
97
104
 
@@ -101,7 +108,8 @@ class CreateBBoxInteraction extends AbstractInteraction {
101
108
  } else {
102
109
  this._geometry = new Polygon([[event.positionOrPixel.slice()]], 'XYZ');
103
110
  this._geometry.set('_vcsGeomType', GeometryType.BBox);
104
- this._geometry[alreadyTransformedToImage] = event.map instanceof ObliqueMap;
111
+ this._geometry[alreadyTransformedToImage] =
112
+ event.map instanceof ObliqueMap;
105
113
  this.created.raiseEvent(this._geometry);
106
114
  this._origin = event.positionOrPixel.slice();
107
115
  this._lastCoordinate = this._origin.slice();
@@ -61,7 +61,11 @@ class CreateCircleInteraction extends AbstractInteraction {
61
61
  */
62
62
  async pipe(event) {
63
63
  if (event.type & EventType.CLICKMOVE && this._geometry) {
64
- this._lastCoordinate.splice(0, event.positionOrPixel.length, ...event.positionOrPixel);
64
+ this._lastCoordinate.splice(
65
+ 0,
66
+ event.positionOrPixel.length,
67
+ ...event.positionOrPixel,
68
+ );
65
69
  this._setCoordinates();
66
70
  }
67
71
 
@@ -71,7 +75,8 @@ class CreateCircleInteraction extends AbstractInteraction {
71
75
  } else {
72
76
  this._geometry = new Circle(event.positionOrPixel, 20, 'XYZ');
73
77
  this._geometry[actuallyIsCircle] = event.map instanceof ObliqueMap;
74
- this._geometry[alreadyTransformedToImage] = event.map instanceof ObliqueMap;
78
+ this._geometry[alreadyTransformedToImage] =
79
+ event.map instanceof ObliqueMap;
75
80
  this.created.raiseEvent(this._geometry);
76
81
  this._coordinates = this._geometry.getCoordinates();
77
82
  this._lastCoordinate = this._coordinates[1];
@@ -57,14 +57,19 @@ class CreateLineStringInteraction extends AbstractInteraction {
57
57
  */
58
58
  async pipe(event) {
59
59
  if (event.type & EventType.CLICKMOVE && this._geometry) {
60
- this._lastCoordinate.splice(0, event.positionOrPixel.length, ...event.positionOrPixel);
60
+ this._lastCoordinate.splice(
61
+ 0,
62
+ event.positionOrPixel.length,
63
+ ...event.positionOrPixel,
64
+ );
61
65
  this._setCoordinates();
62
66
  }
63
67
 
64
68
  if (event.type & EventType.CLICK) {
65
69
  if (!this._geometry) {
66
70
  this._geometry = new LineString([event.positionOrPixel], 'XYZ');
67
- this._geometry[alreadyTransformedToImage] = event.map instanceof ObliqueMap;
71
+ this._geometry[alreadyTransformedToImage] =
72
+ event.map instanceof ObliqueMap;
68
73
  this.created.raiseEvent(this._geometry);
69
74
  this._coordinates = [event.positionOrPixel.slice()];
70
75
  this._lastCoordinate = this._coordinates[0].slice();
@@ -65,14 +65,19 @@ class CreatePolygonInteraction extends AbstractInteraction {
65
65
  */
66
66
  async pipe(event) {
67
67
  if (event.type & EventType.CLICKMOVE && this._geometry) {
68
- this._lastCoordinate.splice(0, event.positionOrPixel.length, ...event.positionOrPixel);
68
+ this._lastCoordinate.splice(
69
+ 0,
70
+ event.positionOrPixel.length,
71
+ ...event.positionOrPixel,
72
+ );
69
73
  this._setCoordinates();
70
74
  }
71
75
 
72
76
  if (event.type & EventType.CLICK) {
73
77
  if (!this._geometry) {
74
78
  this._geometry = new Polygon([[event.positionOrPixel.slice()]], 'XYZ');
75
- this._geometry[alreadyTransformedToImage] = event.map instanceof ObliqueMap;
79
+ this._geometry[alreadyTransformedToImage] =
80
+ event.map instanceof ObliqueMap;
76
81
  this.created.raiseEvent(this._geometry);
77
82
  this._coordinates = [event.positionOrPixel.slice()];
78
83
  this._lastCoordinate = [...event.positionOrPixel];
@@ -1,6 +1,9 @@
1
1
  import { handlerSymbol, mouseOverSymbol } from '../editorSymbols.js';
2
2
  import AbstractInteraction from '../../../interaction/abstractInteraction.js';
3
- import { ModificationKeyType, EventType } from '../../../interaction/interactionType.js';
3
+ import {
4
+ ModificationKeyType,
5
+ EventType,
6
+ } from '../../../interaction/interactionType.js';
4
7
  import { cursorMap } from './editGeometryMouseOverInteraction.js';
5
8
 
6
9
  /**
@@ -30,10 +33,9 @@ class EditFeaturesMouseOverInteraction extends AbstractInteraction {
30
33
  * @returns {Promise<InteractionEvent>}
31
34
  */
32
35
  async pipe(event) {
33
- if (
34
- event.feature && event.feature[handlerSymbol]
35
- ) {
36
- this._currentHandler = /** @type {import("ol").Feature|import("@vcmap-cesium/engine").Cesium3DTileFeature|import("@vcmap-cesium/engine").Cesium3DTilePointFeature} */
36
+ if (event.feature && event.feature[handlerSymbol]) {
37
+ this._currentHandler =
38
+ /** @type {import("ol").Feature|import("@vcmap-cesium/engine").Cesium3DTileFeature|import("@vcmap-cesium/engine").Cesium3DTilePointFeature} */
37
39
  (event.feature);
38
40
  } else {
39
41
  this._currentHandler = null;
@@ -1,11 +1,15 @@
1
1
  import { mouseOverSymbol, vertexSymbol } from '../editorSymbols.js';
2
2
  import AbstractInteraction from '../../../interaction/abstractInteraction.js';
3
- import { ModificationKeyType, EventType } from '../../../interaction/interactionType.js';
3
+ import {
4
+ ModificationKeyType,
5
+ EventType,
6
+ } from '../../../interaction/interactionType.js';
4
7
 
5
8
  /**
6
9
  * @type {Object}
7
10
  */
8
- export const cursorMap = { // TODO these can now be designed custom. IE11 no linger required
11
+ export const cursorMap = {
12
+ // TODO these can now be designed custom. IE11 no linger required
9
13
  auto: 'auto',
10
14
  scaleNESW: 'nesw-resize',
11
15
  scaleNWSE: 'nwse-resize',
@@ -48,7 +52,8 @@ class EditGeometryMouseOverInteraction extends AbstractInteraction {
48
52
  */
49
53
  async pipe(event) {
50
54
  if (event.feature && event.feature[vertexSymbol]) {
51
- this._currentVertex = /** @type {import("ol").Feature|import("@vcmap-cesium/engine").Cesium3DTileFeature|import("@vcmap-cesium/engine").Cesium3DTilePointFeature} */
55
+ this._currentVertex =
56
+ /** @type {import("ol").Feature|import("@vcmap-cesium/engine").Cesium3DTileFeature|import("@vcmap-cesium/engine").Cesium3DTilePointFeature} */
52
57
  (event.feature);
53
58
  } else {
54
59
  this._currentVertex = null;
@@ -1,6 +1,6 @@
1
1
  import AbstractInteraction from '../../../interaction/abstractInteraction.js';
2
2
  import { EventType } from '../../../interaction/interactionType.js';
3
- import { handlerSymbol } from '../../../../index.js';
3
+ import { handlerSymbol } from '../editorSymbols.js';
4
4
  import CesiumMap from '../../../map/cesiumMap.js';
5
5
 
6
6
  /**
@@ -33,7 +33,9 @@ class EnsureHandlerSelectionInteraction extends AbstractInteraction {
33
33
  !event.feature[handlerSymbol] &&
34
34
  event.map instanceof CesiumMap
35
35
  ) {
36
- const handler = event.map.getScene().drillPick(event.windowPosition, undefined, 10, 10)
36
+ const handler = event.map
37
+ .getScene()
38
+ .drillPick(event.windowPosition, undefined, 10, 10)
37
39
  .find((p) => {
38
40
  return p?.primitive?.olFeature?.[handlerSymbol];
39
41
  });
@@ -1,8 +1,15 @@
1
1
  import { LinearRing } from 'ol/geom.js';
2
2
  import AbstractInteraction from '../../../interaction/abstractInteraction.js';
3
- import { EventType, ModificationKeyType } from '../../../interaction/interactionType.js';
3
+ import {
4
+ EventType,
5
+ ModificationKeyType,
6
+ } from '../../../interaction/interactionType.js';
4
7
  import { cartesian2DDistance } from '../../math.js';
5
- import { createVertex, pointOnLine2D, pointOnLine3D } from '../editorHelpers.js';
8
+ import {
9
+ createVertex,
10
+ pointOnLine2D,
11
+ pointOnLine3D,
12
+ } from '../editorHelpers.js';
6
13
  import VcsEvent from '../../../vcsEvent.js';
7
14
 
8
15
  /**
@@ -65,9 +72,10 @@ class InsertVertexInteraction extends AbstractInteraction {
65
72
  const length = lineCoords.length - 1;
66
73
  let i = 0;
67
74
  for (i; i < length; i++) {
68
- const onLine = this._feature.get('olcs_altitudeMode') === 'clampToGround' ? // todo altitude mode
69
- pointOnLine2D(lineCoords[i], lineCoords[i + 1], closestCoord) :
70
- pointOnLine3D(lineCoords[i], lineCoords[i + 1], closestCoord);
75
+ const onLine =
76
+ this._feature.get('olcs_altitudeMode') === 'clampToGround' // todo altitude mode
77
+ ? pointOnLine2D(lineCoords[i], lineCoords[i + 1], closestCoord)
78
+ : pointOnLine3D(lineCoords[i], lineCoords[i + 1], closestCoord);
71
79
  if (onLine) {
72
80
  break;
73
81
  }
@@ -77,7 +85,10 @@ class InsertVertexInteraction extends AbstractInteraction {
77
85
  if (this._isLinearRing && index === lineCoords.length) {
78
86
  index = 0;
79
87
  }
80
- this.vertexInserted.raiseEvent({ vertex: createVertex(closestCoord), index });
88
+ this.vertexInserted.raiseEvent({
89
+ vertex: createVertex(closestCoord),
90
+ index,
91
+ });
81
92
  }
82
93
  }
83
94
  return event;
@@ -1,5 +1,8 @@
1
1
  import DragPan from 'ol/interaction/DragPan.js';
2
- import { EventType, ModificationKeyType } from '../../../interaction/interactionType.js';
2
+ import {
3
+ EventType,
4
+ ModificationKeyType,
5
+ } from '../../../interaction/interactionType.js';
3
6
  import { handlerSymbol, vertexSymbol } from '../editorSymbols.js';
4
7
  import AbstractInteraction from '../../../interaction/abstractInteraction.js';
5
8
 
@@ -8,8 +11,12 @@ import AbstractInteraction from '../../../interaction/abstractInteraction.js';
8
11
  * @returns {function():void}
9
12
  */
10
13
  function suspendOpenlayerMap(map) {
11
- const dragPan = /** @type {import("ol/interaction").DragPan} */ (map.olMap.getInteractions().getArray()
12
- .find(i => i instanceof DragPan));
14
+ const dragPan = /** @type {import("ol/interaction").DragPan} */ (
15
+ map.olMap
16
+ .getInteractions()
17
+ .getArray()
18
+ .find((i) => i instanceof DragPan)
19
+ );
13
20
 
14
21
  if (dragPan) {
15
22
  dragPan.setActive(false);
@@ -36,20 +43,26 @@ function suspendCesiumMap(map) {
36
43
 
37
44
  const originalScreenSpaceEvents = {};
38
45
  const { screenSpaceCameraController } = map.getScene();
39
- ['lookEventTypes', 'tiltEventTypes', 'rotateEventTypes'].forEach((eventTypes) => {
40
- if (screenSpaceCameraController != null) {
41
- originalScreenSpaceEvents[eventTypes] =
42
- getOriginalEventTypes(screenSpaceCameraController[eventTypes]);
43
- }
44
- });
46
+ ['lookEventTypes', 'tiltEventTypes', 'rotateEventTypes'].forEach(
47
+ (eventTypes) => {
48
+ if (screenSpaceCameraController != null) {
49
+ originalScreenSpaceEvents[eventTypes] = getOriginalEventTypes(
50
+ screenSpaceCameraController[eventTypes],
51
+ );
52
+ }
53
+ },
54
+ );
45
55
  screenSpaceCameraController.lookEventTypes = undefined;
46
56
  screenSpaceCameraController.tiltEventTypes = undefined;
47
57
  screenSpaceCameraController.rotateEventTypes = undefined;
48
58
 
49
59
  return () => {
50
- screenSpaceCameraController.lookEventTypes = originalScreenSpaceEvents.lookEventTypes;
51
- screenSpaceCameraController.tiltEventTypes = originalScreenSpaceEvents.tiltEventTypes;
52
- screenSpaceCameraController.rotateEventTypes = originalScreenSpaceEvents.rotateEventTypes;
60
+ screenSpaceCameraController.lookEventTypes =
61
+ originalScreenSpaceEvents.lookEventTypes;
62
+ screenSpaceCameraController.tiltEventTypes =
63
+ originalScreenSpaceEvents.tiltEventTypes;
64
+ screenSpaceCameraController.rotateEventTypes =
65
+ originalScreenSpaceEvents.rotateEventTypes;
53
66
  };
54
67
  }
55
68
 
@@ -80,10 +93,14 @@ class MapInteractionController extends AbstractInteraction {
80
93
  (event.feature[vertexSymbol] || event.feature[handlerSymbol])
81
94
  ) {
82
95
  if (event.map.className === 'CesiumMap') {
83
- this._clear = suspendCesiumMap(/** @type {import("@vcmap/core").CesiumMap} */ (event.map));
96
+ this._clear = suspendCesiumMap(
97
+ /** @type {import("@vcmap/core").CesiumMap} */ (event.map),
98
+ );
84
99
  } else {
85
100
  this._clear = suspendOpenlayerMap(
86
- /** @type {import("@vcmap/core").OpenlayersMap|import("@vcmap/core").ObliqueMap} */ (event.map),
101
+ /** @type {import("@vcmap/core").OpenlayersMap|import("@vcmap/core").ObliqueMap} */ (
102
+ event.map
103
+ ),
87
104
  );
88
105
  }
89
106
  }
@@ -1,5 +1,8 @@
1
1
  import AbstractInteraction from '../../../interaction/abstractInteraction.js';
2
- import { EventType, ModificationKeyType } from '../../../interaction/interactionType.js';
2
+ import {
3
+ EventType,
4
+ ModificationKeyType,
5
+ } from '../../../interaction/interactionType.js';
3
6
  import { vertexSymbol } from '../editorSymbols.js';
4
7
  import VcsEvent from '../../../vcsEvent.js';
5
8
 
@@ -1,5 +1,8 @@
1
1
  import AbstractInteraction from '../../../interaction/abstractInteraction.js';
2
- import { EventType, ModificationKeyType } from '../../../interaction/interactionType.js';
2
+ import {
3
+ EventType,
4
+ ModificationKeyType,
5
+ } from '../../../interaction/interactionType.js';
3
6
  import SelectMultiFeatureInteraction from './selectMultiFeatureInteraction.js';
4
7
  import SelectSingleFeatureInteraction from './selectSingleFeatureInteraction.js';
5
8
  import { cursorMap } from './editGeometryMouseOverInteraction.js';
@@ -33,7 +36,9 @@ class SelectFeatureMouseOverInteraction extends AbstractInteraction {
33
36
  if (selectFeatureInteraction instanceof SelectSingleFeatureInteraction) {
34
37
  modkeys = ModificationKeyType.NONE;
35
38
  selectionMode = SelectionMode.SINGLE;
36
- } else if (selectFeatureInteraction instanceof SelectMultiFeatureInteraction) {
39
+ } else if (
40
+ selectFeatureInteraction instanceof SelectMultiFeatureInteraction
41
+ ) {
37
42
  modkeys = ModificationKeyType.NONE | ModificationKeyType.CTRL;
38
43
  selectionMode = SelectionMode.MULTI;
39
44
  } else {
@@ -69,11 +74,9 @@ class SelectFeatureMouseOverInteraction extends AbstractInteraction {
69
74
  * @returns {Promise<InteractionEvent>}
70
75
  */
71
76
  async pipe(event) {
72
- if (
73
- event.feature &&
74
- (event.feature[vcsLayerName] === this.layerName)
75
- ) {
76
- this._currentFeature = /** @type {import("ol").Feature|import("@vcmap-cesium/engine").Cesium3DTileFeature|import("@vcmap-cesium/engine").Cesium3DTilePointFeature} */
77
+ if (event.feature && event.feature[vcsLayerName] === this.layerName) {
78
+ this._currentFeature =
79
+ /** @type {import("ol").Feature|import("@vcmap-cesium/engine").Cesium3DTileFeature|import("@vcmap-cesium/engine").Cesium3DTilePointFeature} */
77
80
  (event.feature);
78
81
  } else {
79
82
  this._currentFeature = null;
@@ -114,11 +117,17 @@ class SelectFeatureMouseOverInteraction extends AbstractInteraction {
114
117
  */
115
118
  _evaluate(modifier) {
116
119
  if (this._currentFeature) {
117
- const isCtrlPressed = this.selectionMode === SelectionMode.MULTI && (modifier & ModificationKeyType.CTRL);
118
- const isSelected = this._selectFeatureInteraction.hasFeatureId(this._currentFeature.getId());
120
+ const isCtrlPressed =
121
+ this.selectionMode === SelectionMode.MULTI &&
122
+ modifier & ModificationKeyType.CTRL;
123
+ const isSelected = this._selectFeatureInteraction.hasFeatureId(
124
+ this._currentFeature.getId(),
125
+ );
119
126
 
120
127
  if (isCtrlPressed) {
121
- this.cursorStyle.cursor = isSelected ? cursorMap.removeFromSelection : cursorMap.addToSelection;
128
+ this.cursorStyle.cursor = isSelected
129
+ ? cursorMap.removeFromSelection
130
+ : cursorMap.addToSelection;
122
131
  } else {
123
132
  this.cursorStyle.cursor = cursorMap.select;
124
133
  }
@@ -1,5 +1,8 @@
1
1
  import AbstractInteraction from '../../../interaction/abstractInteraction.js';
2
- import { EventType, ModificationKeyType } from '../../../interaction/interactionType.js';
2
+ import {
3
+ EventType,
4
+ ModificationKeyType,
5
+ } from '../../../interaction/interactionType.js';
3
6
  import VcsEvent from '../../../vcsEvent.js';
4
7
  import { vcsLayerName } from '../../../layer/layerSymbols.js';
5
8
  import { isTiledFeature } from '../../../layer/featureStoreLayer.js';
@@ -43,7 +46,9 @@ class SelectMultiFeatureInteraction extends AbstractInteraction {
43
46
  * @type {VcsEvent<Array<import("ol").Feature>>}
44
47
  * @readonly
45
48
  */
46
- get featuresChanged() { return this._featuresChanged; }
49
+ get featuresChanged() {
50
+ return this._featuresChanged;
51
+ }
47
52
 
48
53
  /**
49
54
  * @returns {Array<import("ol").Feature>}
@@ -67,16 +72,14 @@ class SelectMultiFeatureInteraction extends AbstractInteraction {
67
72
  * @returns {Promise<InteractionEvent>}
68
73
  */
69
74
  async pipe(event) {
70
- if (
71
- event.feature &&
72
- event.feature[vcsLayerName] === this._layer.name
73
- ) {
75
+ if (event.feature && event.feature[vcsLayerName] === this._layer.name) {
74
76
  if (event.key & ModificationKeyType.CTRL) {
75
77
  event.stopPropagation = true;
76
78
  await this._modifySelectionSet(event.feature);
77
79
  } else if (
78
80
  !this._selectedFeatures.has(event.feature.getId()) ||
79
- (this._selectedFeatures.has(event.feature.getId()) && this._selectedFeatures.size > 1)
81
+ (this._selectedFeatures.has(event.feature.getId()) &&
82
+ this._selectedFeatures.size > 1)
80
83
  ) {
81
84
  event.stopPropagation = true;
82
85
  await this.setSelected([event.feature]);
@@ -94,16 +97,21 @@ class SelectMultiFeatureInteraction extends AbstractInteraction {
94
97
  async setSelected(features) {
95
98
  this._selectedFeatures.clear();
96
99
  const featureArray = Array.isArray(features) ? features : [features];
97
- const olFeatures = await Promise.all(featureArray.map((f) => {
98
- if (f[isTiledFeature]) {
99
- return /** @type {import("@vcmap/core").FeatureStoreLayer} */ (this._layer)
100
- .switchStaticFeatureToDynamic(f.getId());
101
- }
102
- return f;
103
- }));
104
- olFeatures.forEach(/** @param {import("ol").Feature} f */ (f) => {
105
- this._selectedFeatures.set(f.getId(), f);
106
- });
100
+ const olFeatures = await Promise.all(
101
+ featureArray.map((f) => {
102
+ if (f[isTiledFeature]) {
103
+ return /** @type {import("@vcmap/core").FeatureStoreLayer} */ (
104
+ this._layer
105
+ ).switchStaticFeatureToDynamic(f.getId());
106
+ }
107
+ return f;
108
+ }),
109
+ );
110
+ olFeatures.forEach(
111
+ /** @param {import("ol").Feature} f */ (f) => {
112
+ this._selectedFeatures.set(f.getId(), f);
113
+ },
114
+ );
107
115
 
108
116
  this._featuresChanged.raiseEvent(this.selected);
109
117
  }
@@ -120,10 +128,15 @@ class SelectMultiFeatureInteraction extends AbstractInteraction {
120
128
  } else {
121
129
  let olFeature = feature;
122
130
  if (feature[isTiledFeature]) {
123
- olFeature = await /** @type {import("@vcmap/core").FeatureStoreLayer} */ (this._layer)
124
- .switchStaticFeatureToDynamic(id);
131
+ olFeature =
132
+ await /** @type {import("@vcmap/core").FeatureStoreLayer} */ (
133
+ this._layer
134
+ ).switchStaticFeatureToDynamic(id);
125
135
  }
126
- this._selectedFeatures.set(id, /** @type {import("ol").Feature} */ (olFeature));
136
+ this._selectedFeatures.set(
137
+ id,
138
+ /** @type {import("ol").Feature} */ (olFeature),
139
+ );
127
140
  }
128
141
 
129
142
  this._featuresChanged.raiseEvent(this.selected);
@@ -1,5 +1,8 @@
1
1
  import AbstractInteraction from '../../../interaction/abstractInteraction.js';
2
- import { EventType, ModificationKeyType } from '../../../interaction/interactionType.js';
2
+ import {
3
+ EventType,
4
+ ModificationKeyType,
5
+ } from '../../../interaction/interactionType.js';
3
6
  import VcsEvent from '../../../vcsEvent.js';
4
7
  import { vcsLayerName } from '../../../layer/layerSymbols.js';
5
8
  import { isTiledFeature } from '../../../layer/featureStoreLayer.js';
@@ -48,11 +51,13 @@ class SelectSingleFeatureInteraction extends AbstractInteraction {
48
51
  * @returns {Promise<InteractionEvent>}
49
52
  */
50
53
  async pipe(event) {
51
- if (
52
- event.feature &&
53
- event.feature[vcsLayerName] === this._layer.name
54
- ) {
55
- if (!(this._selectedFeature && event.feature.getId() === this._selectedFeature.getId())) {
54
+ if (event.feature && event.feature[vcsLayerName] === this._layer.name) {
55
+ if (
56
+ !(
57
+ this._selectedFeature &&
58
+ event.feature.getId() === this._selectedFeature.getId()
59
+ )
60
+ ) {
56
61
  event.stopPropagation = true;
57
62
  await this.setSelected(
58
63
  /** @type {import("ol").Feature|import("@vcmap-cesium/engine").Cesium3DTileFeature|import("@vcmap-cesium/engine").Cesium3DTilePointFeature} */
@@ -74,8 +79,9 @@ class SelectSingleFeatureInteraction extends AbstractInteraction {
74
79
  async setSelected(feature) {
75
80
  let olFeature = Array.isArray(feature) ? feature[0] : feature;
76
81
  if (feature[isTiledFeature]) {
77
- olFeature = await /** @type {import("@vcmap/core").FeatureStoreLayer} */ (this._layer)
78
- .switchStaticFeatureToDynamic(olFeature.getId());
82
+ olFeature = await /** @type {import("@vcmap/core").FeatureStoreLayer} */ (
83
+ this._layer
84
+ ).switchStaticFeatureToDynamic(olFeature.getId());
79
85
  }
80
86
 
81
87
  this._selectedFeature = /** @type {import("ol").Feature} */ (olFeature);
@@ -4,7 +4,9 @@ import { createSync } from '../../layer/vectorSymbols.js';
4
4
  import { SessionType, setupInteractionChain } from './editorSessionHelpers.js';
5
5
  import SelectSingleFeatureInteraction from './interactions/selectSingleFeatureInteraction.js';
6
6
  import SelectMultiFeatureInteraction from './interactions/selectMultiFeatureInteraction.js';
7
- import SelectFeatureMouseOverInteraction, { SelectionMode } from './interactions/selectFeatureMouseOverInteraction.js';
7
+ import SelectFeatureMouseOverInteraction, {
8
+ SelectionMode,
9
+ } from './interactions/selectFeatureMouseOverInteraction.js';
8
10
  import VcsEvent from '../../vcsEvent.js';
9
11
  import ObliqueMap from '../../map/obliqueMap.js';
10
12
  import { vcsLayerName } from '../../layer/layerSymbols.js';
@@ -30,10 +32,12 @@ function createHighlightManager(layer, highlightStyle) {
30
32
  * @param {Array<import("ol").Feature>} newFeatures Features to be highlighted.
31
33
  */
32
34
  const update = (newFeatures) => {
33
- const newIds = new Set(newFeatures.map((f) => {
34
- f[createSync] = true;
35
- return f.getId();
36
- }));
35
+ const newIds = new Set(
36
+ newFeatures.map((f) => {
37
+ f[createSync] = true;
38
+ return f.getId();
39
+ }),
40
+ );
37
41
  const idsToHighlight = [];
38
42
  newIds.forEach((id) => {
39
43
  if (!currentFeaturesMap.has(id)) {
@@ -49,11 +53,17 @@ function createHighlightManager(layer, highlightStyle) {
49
53
  });
50
54
 
51
55
  layer.featureVisibility.unHighlight(idsToUnHighlight);
52
- layer.featureVisibility.highlight(Object.fromEntries(idsToHighlight.map(id => [id, highlightStyle])));
53
- layer.getFeaturesById(idsToUnHighlight).forEach(feature => delete feature[createSync]);
56
+ layer.featureVisibility.highlight(
57
+ Object.fromEntries(idsToHighlight.map((id) => [id, highlightStyle])),
58
+ );
59
+ layer
60
+ .getFeaturesById(idsToUnHighlight)
61
+ .forEach((feature) => delete feature[createSync]);
54
62
 
55
63
  currentFeaturesMap.clear();
56
- newFeatures.forEach(feature => currentFeaturesMap.set(feature.getId(), feature));
64
+ newFeatures.forEach((feature) =>
65
+ currentFeaturesMap.set(feature.getId(), feature),
66
+ );
57
67
  };
58
68
 
59
69
  return {
@@ -61,14 +71,18 @@ function createHighlightManager(layer, highlightStyle) {
61
71
  return [...currentFeaturesMap.values()];
62
72
  },
63
73
  update(newFeatures) {
64
- const featuresOnHighlightLayer = newFeatures.filter(feature => feature[vcsLayerName] === layer.name);
74
+ const featuresOnHighlightLayer = newFeatures.filter(
75
+ (feature) => feature[vcsLayerName] === layer.name,
76
+ );
65
77
  update(featuresOnHighlightLayer);
66
78
  },
67
79
  destroy() {
68
80
  if (currentFeaturesMap.size > 0) {
69
81
  const idsToUnHighlight = [...currentFeaturesMap.keys()];
70
82
  layer.featureVisibility.unHighlight(idsToUnHighlight);
71
- layer.getFeaturesById(idsToUnHighlight).forEach(feature => delete feature[createSync]);
83
+ layer
84
+ .getFeaturesById(idsToUnHighlight)
85
+ .forEach((feature) => delete feature[createSync]);
72
86
  currentFeaturesMap.clear();
73
87
  }
74
88
  },
@@ -141,9 +155,7 @@ function startSelectFeaturesSession(
141
155
  destroy: destroyInteractionChain,
142
156
  } = setupInteractionChain(app.maps.eventHandler, interactionId);
143
157
 
144
- const highlightManager = createHighlightManager(
145
- layer, highlightStyle,
146
- );
158
+ const highlightManager = createHighlightManager(layer, highlightStyle);
147
159
 
148
160
  let interactionListeners = [];
149
161
  function destroyCurrentSelectInteraction() {
@@ -159,7 +171,9 @@ function startSelectFeaturesSession(
159
171
  mouseOverInteraction = null;
160
172
  }
161
173
  }
162
- interactionListeners.forEach((cb) => { cb(); });
174
+ interactionListeners.forEach((cb) => {
175
+ cb();
176
+ });
163
177
  interactionListeners = [];
164
178
  }
165
179
 
@@ -190,13 +204,15 @@ function startSelectFeaturesSession(
190
204
  } else if (newMode === SelectionMode.MULTI) {
191
205
  currentSelectInteraction = new SelectMultiFeatureInteraction(layer);
192
206
  interactionListeners.push(
193
- currentSelectInteraction.featuresChanged.addEventListener((features) => {
194
- highlightManager.update(features);
195
- featuresChanged.raiseEvent(features);
196
- if (obliqueMap) {
197
- obliqueMap.switchEnabled = features.length === 0;
198
- }
199
- }),
207
+ currentSelectInteraction.featuresChanged.addEventListener(
208
+ (features) => {
209
+ highlightManager.update(features);
210
+ featuresChanged.raiseEvent(features);
211
+ if (obliqueMap) {
212
+ obliqueMap.switchEnabled = features.length === 0;
213
+ }
214
+ },
215
+ ),
200
216
  );
201
217
  }
202
218
  const { highlightedFeatures } = highlightManager;