@vcmap/ui 6.0.0-rc.6 → 6.0.0-rc.7

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 (153) hide show
  1. package/config/base.config.json +8 -2
  2. package/dist/assets/cesium/Workers/{chunk-LUYI3XCB.js → chunk-2LOWCAMW.js} +13 -13
  3. package/dist/assets/cesium/Workers/{chunk-V7WJDCPA.js → chunk-2PTKXHJB.js} +10 -10
  4. package/dist/assets/cesium/Workers/{chunk-YFVI4SQI.js → chunk-3HQMMUPU.js} +1 -1
  5. package/dist/assets/cesium/Workers/{chunk-XGI4FRXF.js → chunk-3IFRSGEY.js} +9 -9
  6. package/dist/assets/cesium/Workers/{chunk-4RJH3H6D.js → chunk-44QAAS4P.js} +7 -7
  7. package/dist/assets/cesium/Workers/{chunk-4EW3HFFI.js → chunk-56EDBCGT.js} +10 -10
  8. package/dist/assets/cesium/Workers/{chunk-PRKEY4QK.js → chunk-57H6I3SV.js} +5 -5
  9. package/dist/assets/cesium/Workers/{chunk-X67EJ6X6.js → chunk-6SQMLVGV.js} +54 -7
  10. package/dist/assets/cesium/Workers/{chunk-RRLGJV3Q.js → chunk-7YIOHQWH.js} +13 -13
  11. package/dist/assets/cesium/Workers/{chunk-G6346EDR.js → chunk-7ZZ5LMZY.js} +16 -15
  12. package/dist/assets/cesium/Workers/{chunk-YFYPR4MW.js → chunk-BVKITG4N.js} +7 -7
  13. package/dist/assets/cesium/Workers/{chunk-N5MIFVXJ.js → chunk-C3EQ27WF.js} +6 -6
  14. package/dist/assets/cesium/Workers/{chunk-TLGODPEV.js → chunk-C4WPMOKT.js} +6 -5
  15. package/dist/assets/cesium/Workers/{chunk-DTACCQDR.js → chunk-EDLRS3AW.js} +6 -6
  16. package/dist/assets/cesium/Workers/{chunk-EVU2UNBD.js → chunk-EJVGYGLF.js} +7 -7
  17. package/dist/assets/cesium/Workers/{chunk-FYYT5EVH.js → chunk-FFLMY4TE.js} +5 -5
  18. package/dist/assets/cesium/Workers/{chunk-5OUTANXX.js → chunk-GBT7MJ6X.js} +1 -1
  19. package/dist/assets/cesium/Workers/{chunk-3DRPXHZ4.js → chunk-HJMNR3GC.js} +11 -11
  20. package/dist/assets/cesium/Workers/{chunk-IALQGTA2.js → chunk-HP5XLODI.js} +6 -6
  21. package/dist/assets/cesium/Workers/{chunk-DR7LK6PG.js → chunk-IBRIWOCM.js} +13 -13
  22. package/dist/assets/cesium/Workers/{chunk-WMVCLETM.js → chunk-IZGUQO6Q.js} +13 -13
  23. package/dist/assets/cesium/Workers/{chunk-T6TZXGG5.js → chunk-IZJ42N4W.js} +17 -17
  24. package/dist/assets/cesium/Workers/{chunk-FZDKIUDT.js → chunk-JBSKHTNX.js} +4 -4
  25. package/dist/assets/cesium/Workers/{chunk-S4VTLNAJ.js → chunk-JISPSEF3.js} +4 -4
  26. package/dist/assets/cesium/Workers/{chunk-KNMGSIIN.js → chunk-JSQJDZI4.js} +6 -6
  27. package/dist/assets/cesium/Workers/{chunk-LMTN7R7M.js → chunk-JXVLNVXC.js} +7 -7
  28. package/dist/assets/cesium/Workers/{chunk-A5C2A5O5.js → chunk-KHZNBFOH.js} +7 -7
  29. package/dist/assets/cesium/Workers/{chunk-PIOKSAZH.js → chunk-L5GODJAR.js} +14 -14
  30. package/dist/assets/cesium/Workers/{chunk-Q7PM4W34.js → chunk-LJ2JQHJT.js} +12 -7
  31. package/dist/assets/cesium/Workers/{chunk-D6PDWQXW.js → chunk-LLAF3CPH.js} +2 -2
  32. package/dist/assets/cesium/Workers/{chunk-H7PSTL64.js → chunk-M24KHENR.js} +2 -2
  33. package/dist/assets/cesium/Workers/{chunk-I67V66MN.js → chunk-NDDI2LWR.js} +6 -6
  34. package/dist/assets/cesium/Workers/{chunk-FSXNF76Y.js → chunk-NGZJIN5Z.js} +4 -4
  35. package/dist/assets/cesium/Workers/{chunk-UMX265HW.js → chunk-O72GZTSE.js} +2 -2
  36. package/dist/assets/cesium/Workers/{chunk-WOA6WSHH.js → chunk-OPP2SKMA.js} +12 -12
  37. package/dist/assets/cesium/Workers/{chunk-VD6G7UPU.js → chunk-P6TRGU3S.js} +2 -2
  38. package/dist/assets/cesium/Workers/{chunk-QLC66ZRL.js → chunk-QN6TBED4.js} +11 -11
  39. package/dist/assets/cesium/Workers/{chunk-O7OUBDMZ.js → chunk-QQOZO7KO.js} +7 -7
  40. package/dist/assets/cesium/Workers/{chunk-AGTH5JMJ.js → chunk-RJM36CNY.js} +6 -6
  41. package/dist/assets/cesium/Workers/{chunk-UC566ISB.js → chunk-RTJKHZWU.js} +6 -6
  42. package/dist/assets/cesium/Workers/{chunk-L4XQPD6P.js → chunk-TI3TRKIC.js} +423 -448
  43. package/dist/assets/cesium/Workers/{chunk-3GI7DWF7.js → chunk-TK5IIG2F.js} +4 -4
  44. package/dist/assets/cesium/Workers/{chunk-6DH5PLFD.js → chunk-U5HSOKPQ.js} +1 -1
  45. package/dist/assets/cesium/Workers/{chunk-BPY4HDAK.js → chunk-WGDFYAGC.js} +4 -4
  46. package/dist/assets/cesium/Workers/{chunk-SJC5PRDX.js → chunk-X7IQYYHF.js} +2 -2
  47. package/dist/assets/cesium/Workers/{chunk-4OX4RYLB.js → chunk-XIUSRWL6.js} +9 -5
  48. package/dist/assets/cesium/Workers/{chunk-S2UEXF6T.js → chunk-XWOUPGUF.js} +1 -1
  49. package/dist/assets/cesium/Workers/{chunk-F7IEM66T.js → chunk-YCDZX5LS.js} +1 -1
  50. package/dist/assets/cesium/Workers/{chunk-AVFIYUKX.js → chunk-YK3QIKY7.js} +9 -9
  51. package/dist/assets/cesium/Workers/{chunk-BAJAVGUF.js → chunk-YSIJTJ7N.js} +5 -5
  52. package/dist/assets/cesium/Workers/{chunk-6DXIYFX3.js → chunk-Z2QP3CXW.js} +2 -2
  53. package/dist/assets/cesium/Workers/{chunk-P24I5VUS.js → chunk-ZVUUPJEM.js} +17 -17
  54. package/dist/assets/cesium/Workers/combineGeometry.js +22 -22
  55. package/dist/assets/cesium/Workers/createBoxGeometry.js +16 -16
  56. package/dist/assets/cesium/Workers/createBoxOutlineGeometry.js +14 -14
  57. package/dist/assets/cesium/Workers/createCircleGeometry.js +24 -24
  58. package/dist/assets/cesium/Workers/createCircleOutlineGeometry.js +17 -17
  59. package/dist/assets/cesium/Workers/createCoplanarPolygonGeometry.js +31 -31
  60. package/dist/assets/cesium/Workers/createCoplanarPolygonOutlineGeometry.js +29 -29
  61. package/dist/assets/cesium/Workers/createCorridorGeometry.js +27 -27
  62. package/dist/assets/cesium/Workers/createCorridorOutlineGeometry.js +26 -26
  63. package/dist/assets/cesium/Workers/createCylinderGeometry.js +18 -18
  64. package/dist/assets/cesium/Workers/createCylinderOutlineGeometry.js +16 -16
  65. package/dist/assets/cesium/Workers/createEllipseGeometry.js +24 -24
  66. package/dist/assets/cesium/Workers/createEllipseOutlineGeometry.js +17 -17
  67. package/dist/assets/cesium/Workers/createEllipsoidGeometry.js +17 -17
  68. package/dist/assets/cesium/Workers/createEllipsoidOutlineGeometry.js +16 -16
  69. package/dist/assets/cesium/Workers/createFrustumGeometry.js +16 -16
  70. package/dist/assets/cesium/Workers/createFrustumOutlineGeometry.js +16 -16
  71. package/dist/assets/cesium/Workers/createGeometry.js +22 -22
  72. package/dist/assets/cesium/Workers/createGroundPolylineGeometry.js +20 -20
  73. package/dist/assets/cesium/Workers/createPlaneGeometry.js +14 -14
  74. package/dist/assets/cesium/Workers/createPlaneOutlineGeometry.js +13 -13
  75. package/dist/assets/cesium/Workers/createPolygonGeometry.js +30 -30
  76. package/dist/assets/cesium/Workers/createPolygonOutlineGeometry.js +28 -28
  77. package/dist/assets/cesium/Workers/createPolylineGeometry.js +23 -23
  78. package/dist/assets/cesium/Workers/createPolylineVolumeGeometry.js +29 -29
  79. package/dist/assets/cesium/Workers/createPolylineVolumeOutlineGeometry.js +25 -25
  80. package/dist/assets/cesium/Workers/createRectangleGeometry.js +25 -25
  81. package/dist/assets/cesium/Workers/createRectangleOutlineGeometry.js +18 -18
  82. package/dist/assets/cesium/Workers/createSimplePolylineGeometry.js +21 -21
  83. package/dist/assets/cesium/Workers/createSphereGeometry.js +17 -17
  84. package/dist/assets/cesium/Workers/createSphereOutlineGeometry.js +16 -16
  85. package/dist/assets/cesium/Workers/createTaskProcessorWorker.js +3 -3
  86. package/dist/assets/cesium/Workers/createVectorTileClampedPolylines.js +13 -13
  87. package/dist/assets/cesium/Workers/createVectorTileGeometries.js +22 -22
  88. package/dist/assets/cesium/Workers/createVectorTilePoints.js +12 -12
  89. package/dist/assets/cesium/Workers/createVectorTilePolygons.js +20 -20
  90. package/dist/assets/cesium/Workers/createVectorTilePolylines.js +13 -13
  91. package/dist/assets/cesium/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +20 -20
  92. package/dist/assets/cesium/Workers/createVerticesFromHeightmap.js +24 -20
  93. package/dist/assets/cesium/Workers/createVerticesFromQuantizedTerrainMesh.js +17 -17
  94. package/dist/assets/cesium/Workers/createWallGeometry.js +22 -22
  95. package/dist/assets/cesium/Workers/createWallOutlineGeometry.js +21 -21
  96. package/dist/assets/cesium/Workers/decodeDraco.js +11 -11
  97. package/dist/assets/cesium/Workers/decodeGoogleEarthEnterprisePacket.js +28 -5
  98. package/dist/assets/cesium/Workers/decodeI3S.js +10 -10
  99. package/dist/assets/cesium/Workers/transcodeKTX2.js +19 -18
  100. package/dist/assets/cesium/Workers/transferTypedArrayTest.js +1 -1
  101. package/dist/assets/cesium/Workers/upsampleQuantizedTerrainMesh.js +20 -20
  102. package/dist/assets/{cesium-ccb4cc30.js → cesium-2afc3568.js} +136600 -136700
  103. package/dist/assets/cesium.js +1 -1
  104. package/dist/assets/{core-e06aa7a6.js → core-3fd82bc2.js} +8348 -7546
  105. package/dist/assets/core.js +1 -1
  106. package/dist/assets/{ol-e7981d5c.js → ol-edf7bfb3.js} +2246 -2248
  107. package/dist/assets/ol.js +1 -1
  108. package/dist/assets/ui-c6eb55a5.css +1 -0
  109. package/dist/assets/{ui-5dda32d2.js → ui-c6eb55a5.js} +2071 -1979
  110. package/dist/assets/ui.js +1 -1
  111. package/dist/assets/vue.js +1 -1
  112. package/dist/assets/{vuetify-4c4e4217.js → vuetify-c3b6c9b3.js} +1 -1
  113. package/dist/assets/vuetify.js +1 -1
  114. package/package.json +3 -3
  115. package/plugins/@vcmap-show-case/form-inputs-example/src/FormInputsExample.vue +2 -2
  116. package/plugins/@vcmap-show-case/project-selector/src/ModulesListComponent.vue +1 -1
  117. package/plugins/@vcmap-show-case/vector-properties-example/src/GeometrySettings.vue +420 -0
  118. package/plugins/@vcmap-show-case/vector-properties-example/src/LayoutHandler.vue +97 -0
  119. package/plugins/@vcmap-show-case/vector-properties-example/src/TerrainSettings.vue +90 -0
  120. package/plugins/@vcmap-show-case/vector-properties-example/src/VectorPropertiesExample.vue +61 -70
  121. package/plugins/@vcmap-show-case/vector-properties-example/src/index.js +34 -1
  122. package/plugins/@vcmap-show-case/vector-properties-example/src/lib.js +294 -0
  123. package/src/actions/StyleSelector.vue +35 -19
  124. package/src/actions/StyleSelector.vue.d.ts +5 -5
  125. package/src/application/VcsApp.vue +3 -7
  126. package/src/application/VcsAttributionsFooter.vue +20 -11
  127. package/src/application/VcsTextPageFooter.vue +4 -4
  128. package/src/components/form-inputs-controls/VcsLabel.vue +31 -8
  129. package/src/components/form-inputs-controls/VcsLabel.vue.d.ts +2 -0
  130. package/src/components/form-inputs-controls/VcsSelect.vue +1 -1
  131. package/src/components/form-inputs-controls/VcsSelect.vue.d.ts +2 -2
  132. package/src/components/lists/VcsTreeview.vue +22 -0
  133. package/src/components/lists/VcsTreeview.vue.d.ts +10 -0
  134. package/src/components/lists/VcsTreeviewTitle.vue +5 -1
  135. package/src/components/vector-properties/VcsFeatureEditingWindow.vue +17 -34
  136. package/src/components/vector-properties/VcsFeatureEditingWindow.vue.d.ts +5 -3
  137. package/src/components/vector-properties/VcsVectorPropertiesComponent.vue +36 -12
  138. package/src/components/vector-properties/VcsVectorPropertiesComponent.vue.d.ts +3 -2
  139. package/src/contentTree/layerContentTreeItem.d.ts +8 -5
  140. package/src/contentTree/layerContentTreeItem.js +48 -34
  141. package/src/contentTree/layerGroupContentTreeItem.d.ts +7 -1
  142. package/src/contentTree/layerGroupContentTreeItem.js +22 -3
  143. package/src/featureInfo/balloonHelper.js +1 -1
  144. package/src/i18n/de.d.ts +5 -0
  145. package/src/i18n/de.js +7 -2
  146. package/src/i18n/en.d.ts +5 -0
  147. package/src/i18n/en.js +6 -1
  148. package/src/navigation/locatorHelper.js +3 -21
  149. package/src/vcsUiApp.d.ts +22 -21
  150. package/src/vcsUiApp.js +19 -19
  151. package/dist/assets/ui-5dda32d2.css +0 -1
  152. /package/dist/assets/{vue-87bc6efe.js → vue-aefad438.js} +0 -0
  153. /package/dist/assets/{vuetify-4c4e4217.css → vuetify-c3b6c9b3.css} +0 -0
@@ -1,42 +1,46 @@
1
1
  <template>
2
2
  <v-sheet>
3
- <v-container>
4
- <v-row>
5
- <v-col>
6
- <VcsList
7
- :items="propertiesToSelectFrom"
8
- :selectable="true"
9
- v-model="propertiesSelected"
10
- title="Select all"
11
- />
12
- </v-col>
13
- </v-row>
14
- <v-row no-gutters>
15
- <v-col>
16
- <VcsCheckbox v-model="hideDividers" label="Hide dividers" />
17
- </v-col>
18
- </v-row>
19
- <v-row no-gutters>
20
- <v-col>
21
- <VcsCheckbox v-model="expandable" label="Expandable" />
22
- </v-col>
23
- </v-row>
24
- <v-row no-gutters>
25
- <v-col>
26
- <VcsCheckbox
27
- v-model="showReset"
28
- label="Show reset vector properties"
29
- />
30
- </v-col>
31
- </v-row>
32
- <v-row no-gutters>
33
- <v-col>
34
- <VcsFormButton @click="() => console.log({ ...featureProperties })"
35
- >Log VectorProperties</VcsFormButton
36
- >
37
- </v-col>
38
- </v-row>
39
- </v-container>
3
+ <VcsFormSection heading="Input Settings" expandable>
4
+ <v-container>
5
+ <v-row>
6
+ <v-col>
7
+ <VcsList
8
+ :items="propertiesToSelectFrom"
9
+ :selectable="true"
10
+ v-model="propertiesSelected"
11
+ title="Select all"
12
+ />
13
+ </v-col>
14
+ </v-row>
15
+ <v-row no-gutters>
16
+ <v-col>
17
+ <VcsCheckbox v-model="hideDividers" label="Hide dividers" />
18
+ </v-col>
19
+ </v-row>
20
+ <v-row no-gutters>
21
+ <v-col>
22
+ <VcsCheckbox v-model="expandable" label="Expandable" />
23
+ </v-col>
24
+ </v-row>
25
+ <v-row no-gutters>
26
+ <v-col>
27
+ <VcsCheckbox
28
+ v-model="showReset"
29
+ label="Show reset vector properties"
30
+ />
31
+ </v-col>
32
+ </v-row>
33
+ <v-row no-gutters>
34
+ <v-col>
35
+ <VcsFormButton @click="() => console.log({ ...featureProperties })"
36
+ >Log VectorProperties</VcsFormButton
37
+ >
38
+ </v-col>
39
+ </v-row>
40
+ </v-container>
41
+ </VcsFormSection>
42
+ <terrain-settings />
43
+ <geometry-settings :feature-properties="featureProperties" />
40
44
  <VcsVectorPropertiesComponent
41
45
  v-model="featureProperties"
42
46
  :value-default="defaultOptions"
@@ -60,40 +64,36 @@
60
64
  shallowRef,
61
65
  watch,
62
66
  } from 'vue';
63
- import { CesiumMap, VectorLayer, VectorProperties } from '@vcmap/core';
67
+ import { CesiumMap, VectorProperties } from '@vcmap/core';
64
68
  import {
65
69
  VcsVectorPropertiesComponent,
66
70
  VcsList,
67
71
  VcsCheckbox,
68
72
  VcsFormButton,
73
+ VcsFormSection,
69
74
  } from '@vcmap/ui';
70
75
  import { VSheet, VContainer, VRow, VCol } from 'vuetify/components';
71
- import { Feature } from 'ol';
72
- import { Polygon } from 'ol/geom.js';
73
-
74
- export const polygonCoords = [
75
- [
76
- [13.37302869387225, 52.515969833848686, 34.5146781549614],
77
- [13.374380945328324, 52.51418689937603, 33.692166432214975],
78
- [13.376569529360477, 52.516925129014055, 34.36842554294618],
79
- [13.37302869387225, 52.515969833848686, 34.5146781549614],
80
- ],
81
- ];
76
+ import { name } from '../package.json';
77
+ import GeometrySettings from './GeometrySettings.vue';
78
+ import TerrainSettings from './TerrainSettings.vue';
82
79
 
83
80
  export default {
84
81
  name: 'VectorPropertiesExample',
85
82
  components: {
83
+ TerrainSettings,
84
+ GeometrySettings,
86
85
  VcsVectorPropertiesComponent,
87
86
  VcsList,
88
87
  VcsCheckbox,
89
88
  VcsFormButton,
89
+ VcsFormSection,
90
90
  VSheet,
91
91
  VContainer,
92
92
  VRow,
93
93
  VCol,
94
94
  },
95
95
  setup() {
96
- /** @type {import('@vcmap/core').VcsApp} */
96
+ /** @type {import('@vcmap/ui').VcsUiApp} */
97
97
  const vcsApp = inject('vcsApp');
98
98
  const is3D = ref(false);
99
99
 
@@ -104,24 +104,18 @@
104
104
  vcsApp.maps.mapActivated.addEventListener(updateIs3D);
105
105
  updateIs3D();
106
106
 
107
- const feature = new Feature({
108
- geometry: new Polygon(polygonCoords),
109
- });
110
- const layer = new VectorLayer({
111
- name: 'vectorPropertiesExampleLayer',
112
- projection: {
113
- epsg: 'EPSG:4326',
114
- },
115
- });
107
+ const { layer } = vcsApp.plugins.getByKey(name);
116
108
 
117
109
  const featureProperties = shallowRef(
118
- layer.vectorProperties.getValuesForFeatures([feature]),
110
+ layer.vectorProperties.getValuesForFeatures(layer.getFeatures()),
119
111
  );
120
- featureProperties.value.scaleByDistance = [0, 1, 100, 0];
112
+
113
+ featureProperties.value.scaleByDistance = [0, 0.5, 1000, 1];
121
114
  watch(featureProperties, () => {
122
- layer.vectorProperties.setValuesForFeatures(featureProperties.value, [
123
- feature,
124
- ]);
115
+ layer.vectorProperties.setValuesForFeatures(
116
+ featureProperties.value,
117
+ layer.getFeatures(),
118
+ );
125
119
  });
126
120
 
127
121
  const defaultOptions = VectorProperties.getDefaultOptions();
@@ -134,17 +128,14 @@
134
128
  const propertiesSelected = shallowRef([...propertiesToSelectFrom]);
135
129
 
136
130
  onMounted(() => {
137
- vcsApp.layers.add(layer);
138
- layer.addFeatures([feature]);
139
131
  layer.activate();
140
132
  });
141
133
 
142
134
  onUnmounted(() => {
143
135
  layer.deactivate();
144
- vcsApp.layers.remove(layer);
145
- layer.destroy();
146
136
  mapActivatedListener();
147
137
  });
138
+
148
139
  return {
149
140
  featureProperties,
150
141
  defaultOptions,
@@ -152,10 +143,10 @@
152
143
  propertiesToSelectFrom,
153
144
  propertiesSelected,
154
145
  properties: computed(() =>
155
- propertiesSelected.value.map(({ name }) => name),
146
+ propertiesSelected.value.map(({ name: n }) => n),
156
147
  ),
157
148
  hideDividers: ref(false),
158
- expandable: ref(false),
149
+ expandable: ref(true),
159
150
  showReset: ref(true),
160
151
  };
161
152
  },
@@ -1,8 +1,24 @@
1
+ import { markVolatile, VectorLayer, wgs84Projection } from '@vcmap/core';
1
2
  import { WindowSlot, createToggleAction, ButtonLocation } from '@vcmap/ui';
2
3
  import packageJSON from '../package.json';
3
4
  import component from './VectorPropertiesExample.vue';
5
+ import {
6
+ getCircleFeature,
7
+ getLineStringFeature,
8
+ getModelFeature,
9
+ getPointFeature,
10
+ getPolygonFeature,
11
+ getPrimitiveFeature,
12
+ } from './lib.js';
4
13
 
5
14
  export default function createVectorPropertiesExamplePlugin() {
15
+ const layer = new VectorLayer({
16
+ zIndex: 10,
17
+ name: 'vectorPropertiesExampleLayer',
18
+ projection: wgs84Projection.toJSON(),
19
+ });
20
+ markVolatile(layer);
21
+
6
22
  return {
7
23
  get name() {
8
24
  return packageJSON.name;
@@ -13,6 +29,9 @@ export default function createVectorPropertiesExamplePlugin() {
13
29
  get mapVersion() {
14
30
  return packageJSON.mapVersion;
15
31
  },
32
+ get layer() {
33
+ return layer;
34
+ },
16
35
  initialize(vcsApp) {
17
36
  const { action, destroy } = createToggleAction(
18
37
  {
@@ -34,7 +53,21 @@ export default function createVectorPropertiesExamplePlugin() {
34
53
  packageJSON.name,
35
54
  ButtonLocation.TOOL,
36
55
  );
37
- this.destroy = destroy;
56
+ vcsApp.layers.add(layer);
57
+ layer.addFeatures([
58
+ getPrimitiveFeature(),
59
+ getModelFeature(),
60
+ getCircleFeature(),
61
+ getPointFeature(),
62
+ getLineStringFeature(),
63
+ getPolygonFeature(),
64
+ ]);
65
+ this.destroy = () => {
66
+ destroy();
67
+ layer.deactivate();
68
+ vcsApp.layers.remove(layer);
69
+ layer.destroy();
70
+ };
38
71
  },
39
72
  };
40
73
  }
@@ -0,0 +1,294 @@
1
+ import {
2
+ ArcStyle,
3
+ from3Dto2DLayout,
4
+ PrimitiveOptionsType,
5
+ alreadyTransformedToMercator,
6
+ } from '@vcmap/core';
7
+ import { Feature } from 'ol';
8
+ import {
9
+ Circle,
10
+ GeometryCollection,
11
+ LineString,
12
+ MultiLineString,
13
+ MultiPoint,
14
+ MultiPolygon,
15
+ Point,
16
+ Polygon,
17
+ } from 'ol/geom';
18
+ import { Stroke, Style, Text as OLText } from 'ol/style';
19
+
20
+ function layoutHelper(feature, layout = 'XYZ') {
21
+ if (layout !== 'XYZ') {
22
+ from3Dto2DLayout(feature.getGeometry());
23
+ }
24
+ }
25
+
26
+ export function getPrimitiveFeature(layout) {
27
+ const feature = new Feature({
28
+ geometry: new Point([
29
+ 13.36218118875039, 52.515822422115036, 33.38730595560257,
30
+ ]),
31
+ isDefault: true,
32
+ olcs_primitiveOptions: {
33
+ type: PrimitiveOptionsType.CYLINDER,
34
+ geometryOptions: {
35
+ length: 80,
36
+ topRadius: 20,
37
+ bottomRadius: 40,
38
+ },
39
+ depthFailColor: 'rgba(0, 0, 255, 0.2)',
40
+ offset: [0, 0, 40],
41
+ },
42
+ });
43
+ feature.setId('Primitive');
44
+ layoutHelper(feature, layout);
45
+ return feature;
46
+ }
47
+
48
+ export function getModelFeature(layout) {
49
+ const feature = new Feature({
50
+ geometry: new Point([
51
+ 13.363859221598505, 52.515967046541505, 32.59208264613772,
52
+ ]),
53
+ isDefault: true,
54
+ olcs_modelUrl: '/exampleData/CesiumMan.gltf',
55
+ olcs_modelScaleX: 20,
56
+ olcs_modelScaleY: 20,
57
+ olcs_modelScaleZ: 40,
58
+ });
59
+ feature.setId('Model');
60
+ layoutHelper(feature, layout);
61
+ return feature;
62
+ }
63
+
64
+ export function getLabelFeature(layout) {
65
+ const feature = new Feature({
66
+ geometry: new Point([
67
+ 1488435.7314223575, 6894028.960149737, 33.5208502571338,
68
+ ]),
69
+ isDefault: true,
70
+ });
71
+ feature.setStyle(
72
+ new Style({
73
+ text: new OLText({
74
+ text: 'Label',
75
+ }),
76
+ stroke: new Stroke({
77
+ color: '#FF00FF',
78
+ width: 2,
79
+ }),
80
+ }),
81
+ );
82
+ feature.setId('Label');
83
+ feature.getGeometry()[alreadyTransformedToMercator] = true;
84
+
85
+ layoutHelper(feature, layout);
86
+ return feature;
87
+ }
88
+
89
+ export function getArrowFeature(layout) {
90
+ const feature = new Feature({
91
+ geometry: new LineString([
92
+ [13.366858637514758, 52.51621074844718, 32.72847998624475],
93
+ [13.368622504013356, 52.51631428269934, 33.23048941465071],
94
+ ]),
95
+ isDefault: true,
96
+ });
97
+ feature.setStyle(new ArcStyle());
98
+ feature.setId('Arrow');
99
+ layoutHelper(feature, layout);
100
+ return feature;
101
+ }
102
+
103
+ export function getCircleFeature(layout) {
104
+ const feature = new Feature({
105
+ geometry: new Circle(
106
+ [13.360899224141466, 52.51506455406184, 34.09269200786326],
107
+ 0.001,
108
+ ),
109
+ isDefault: true,
110
+ });
111
+ feature.setId('Circle');
112
+ layoutHelper(feature, layout);
113
+ return feature;
114
+ }
115
+
116
+ export function getPointFeature(layout) {
117
+ const feature = new Feature({
118
+ geometry: new Point([
119
+ 13.373567615611728, 52.51548029456612, 34.11213951937436,
120
+ ]),
121
+ isDefault: true,
122
+ });
123
+ feature.setId('Point');
124
+ layoutHelper(feature, layout);
125
+ return feature;
126
+ }
127
+
128
+ export function getPointsFeature(layout) {
129
+ const feature = new Feature({
130
+ geometry: new MultiPoint([
131
+ [13.374358275687154, 52.513855119983305, 33.91001731696976],
132
+ [13.37461329953504, 52.51415068687956, 34.032218848302364],
133
+ [13.375878007044882, 52.51409378032608, 33.88938096529403],
134
+ ]),
135
+ isDefault: true,
136
+ });
137
+ feature.setId('Points');
138
+ layoutHelper(feature, layout);
139
+ return feature;
140
+ }
141
+
142
+ export function getLineStringFeature(layout) {
143
+ const feature = new Feature({
144
+ geometry: new LineString([
145
+ [13.363844747632609, 52.515470473709854, 33.550534598980725],
146
+ [13.366720318943523, 52.515665401253045, 33.76881006458447],
147
+ [13.367412538305256, 52.51508187630654, 32.55462654508183],
148
+ ]),
149
+ isDefault: true,
150
+ });
151
+ feature.setId('LineString');
152
+ layoutHelper(feature, layout);
153
+ return feature;
154
+ }
155
+
156
+ export function getLineStringsFeature(layout) {
157
+ const feature = new Feature({
158
+ geometry: new MultiLineString([
159
+ [
160
+ [13.36352639114729, 52.513266460999546, 33.26824957279316],
161
+ [13.363353059492573, 52.51410122358479, 33.16223998562612],
162
+ [13.364131850580959, 52.51463043952424, 33.20317208734183],
163
+ ],
164
+ [
165
+ [13.365850262457908, 52.51444203087061, 32.61805259641959],
166
+ [13.36656566684233, 52.513951194203, 32.78073146380907],
167
+ [13.36627639442513, 52.513405317141604, 32.528679428301025],
168
+ ],
169
+ [
170
+ [13.366290652223967, 52.51284093005012, 33.293564901315726],
171
+ [13.36528194828741, 52.512304426371344, 32.5181043954614],
172
+ [13.363954256366572, 52.512483274042154, 33.1318583891006],
173
+ ],
174
+ ]),
175
+ isDefault: true,
176
+ });
177
+ feature.setId('LineStrings');
178
+ layoutHelper(feature, layout);
179
+ return feature;
180
+ }
181
+
182
+ export function getPolygonFeature(layout) {
183
+ const feature = new Feature({
184
+ geometry: new Polygon([
185
+ [
186
+ [13.368703252048375, 52.51483723086997, 33.49978802690113],
187
+ [13.372125570630947, 52.514467042453646, 34.17881387564488],
188
+ [13.372623878945069, 52.515336736733786, 33.587916392132065],
189
+ [13.36979246350535, 52.51572336567955, 34.14276491983953],
190
+ [13.368703252048375, 52.51483723086997, 33.49978802690113],
191
+ ],
192
+ ]),
193
+ isDefault: true,
194
+ });
195
+ feature.setId('Polygon');
196
+ layoutHelper(feature, layout);
197
+ return feature;
198
+ }
199
+
200
+ export function getPolygonsFeature(layout) {
201
+ const feature = new Feature({
202
+ geometry: new MultiPolygon([
203
+ [
204
+ [
205
+ [13.368147753366285, 52.51388845623393, 33.326494025516986],
206
+ [13.369439957644493, 52.513806731544804, 33.71837045675961],
207
+ [13.369864824031266, 52.514204470721836, 33.90427477452053],
208
+ [13.368652956316716, 52.51427909116808, 33.30150542013474],
209
+ [13.368147753366285, 52.51388845623393, 33.326494025516986],
210
+ ],
211
+ ],
212
+ [
213
+ [
214
+ [13.36908568340443, 52.513311470038445, 33.85600764188562],
215
+ [13.370317227246808, 52.51266712675607, 33.942184554520324],
216
+ [13.371726440088764, 52.513200118366456, 34.236263759862865],
217
+ [13.371140661493031, 52.513403217334314, 33.836968802532446],
218
+ [13.37025051092128, 52.51344597065966, 33.624748083503455],
219
+ [13.369756747764669, 52.51346696101908, 33.71480053535501],
220
+ [13.369289999321657, 52.51352152843859, 33.88720729210199],
221
+ [13.369962684700711, 52.51365226834122, 33.50994865926776],
222
+ [13.368960039632277, 52.51367751984219, 33.67689581665479],
223
+ [13.36908568340443, 52.513311470038445, 33.85600764188562],
224
+ ],
225
+ ],
226
+ [
227
+ [
228
+ [13.370951855771859, 52.514053649625225, 33.9281685013164],
229
+ [13.371537851762398, 52.513614671407254, 34.450093341276464],
230
+ [13.372435604984698, 52.513881261092365, 33.77611564016416],
231
+ [13.372231219003348, 52.514139481519635, 34.244097450954634],
232
+ [13.370951855771859, 52.514053649625225, 33.9281685013164],
233
+ ],
234
+ ],
235
+ ]),
236
+ isDefault: true,
237
+ });
238
+ feature.setId('Polygons');
239
+ layoutHelper(feature, layout);
240
+ return feature;
241
+ }
242
+
243
+ export function getGeometryCollectionFeature(layout) {
244
+ const geometries = [
245
+ getCircleFeature().getGeometry(),
246
+ getPointFeature().getGeometry(),
247
+ getLineStringFeature().getGeometry(),
248
+ getPolygonFeature().getGeometry(),
249
+ ];
250
+
251
+ const geometry = new GeometryCollection(geometries);
252
+ geometry.translate(0, -0.002);
253
+ const feature = new Feature({
254
+ geometry,
255
+ isDefault: true,
256
+ });
257
+ feature.setId('GeometryCollection');
258
+ layoutHelper(feature, layout);
259
+ return feature;
260
+ }
261
+
262
+ export function getTiltedPolygonFeature(layout) {
263
+ const feature = new Feature({
264
+ geometry: new Polygon([
265
+ [
266
+ [13.368703252048375, 52.51483723086997, 33.49978802690113],
267
+ [13.372125570630947, 52.514467042453646, 50.17881387564488],
268
+ [13.372623878945069, 52.515336736733786, 120.58791639213206],
269
+ [13.36979246350535, 52.51572336567955, 50.14276491983953],
270
+ [13.368703252048375, 52.51483723086997, 33.49978802690113],
271
+ ],
272
+ ]),
273
+ isDefault: true,
274
+ });
275
+ feature.getGeometry().translate(0.002, -0.002);
276
+ feature.setId('TiltedPolygon');
277
+ layoutHelper(feature, layout);
278
+ return feature;
279
+ }
280
+
281
+ export function getTiltedLineStringFeature(layout) {
282
+ const feature = new Feature({
283
+ geometry: new LineString([
284
+ [13.363844747632609, 52.515470473709854, 33.550534598980725],
285
+ [13.366720318943523, 52.515665401253045, 50.76881006458447],
286
+ [13.367412538305256, 52.51508187630654, 120.55462654508183],
287
+ ]),
288
+ isDefault: true,
289
+ });
290
+ feature.getGeometry().translate(0.002, -0.002);
291
+ feature.setId('TiltedLineString');
292
+ layoutHelper(feature, layout);
293
+ return feature;
294
+ }
@@ -19,12 +19,13 @@
19
19
  <script>
20
20
  import { computed, inject, onUnmounted, ref } from 'vue';
21
21
  import { VList, VListItem, VListItemTitle, VSheet } from 'vuetify/components';
22
+ import { FeatureLayer } from '@vcmap/core';
22
23
 
23
24
  /**
24
25
  * @description Modal listing available styles.
25
26
  * On selection style is set to provided layer.
26
27
  * @vue-prop {Array<string>} availableStyles - Name of available styles
27
- * @vue-prop {string} layerName - Name of a layer, the style shall be applied to on selection
28
+ * @vue-prop {Array<string>} layerNames - Name of layers, the style shall be applied to on selection
28
29
  */
29
30
  export default {
30
31
  name: 'StyleSelector',
@@ -39,28 +40,43 @@
39
40
  type: Array,
40
41
  default: () => [],
41
42
  },
42
- layerName: {
43
- type: String,
43
+ layerNames: {
44
+ type: Array,
44
45
  required: true,
45
46
  },
46
47
  },
47
48
  setup(props, { attrs }) {
48
49
  /** @type {import("@src/vcsUiApp.js").default} */
49
50
  const app = inject('vcsApp');
50
- /** @type {import("@vcmap/core").FeatureLayer} */
51
- const layer = app.layers.getByKey(props.layerName);
52
- const currentStyleName = ref(layer.style.name || layer.defaultStyle.name);
53
- const defaultStyle = layer.defaultStyle.name;
51
+ /** @type {import("@vcmap/core").FeatureLayer[]} */
52
+ const layers = props.layerNames
53
+ .map((name) => app.layers.getByKey(name))
54
+ .filter((layer) => layer instanceof FeatureLayer);
54
55
 
55
- function setStyle() {
56
- currentStyleName.value = layer.style.name;
57
- }
58
- setStyle();
59
- // TODO error handling if layer is missing or not a feature layer
60
- const styleChangedListener =
61
- layer.styleChanged.addEventListener(setStyle);
56
+ const currentStyleName = ref();
57
+ const setCurrentStyle = () => {
58
+ let styleName = null;
59
+ layers.forEach((layer) => {
60
+ const layerStyle = layer?.style?.name || layer?.defaultStyle?.name;
61
+ if (styleName === null) {
62
+ styleName = layerStyle;
63
+ }
64
+ if (styleName !== layerStyle) {
65
+ styleName = '';
66
+ }
67
+ });
68
+ currentStyleName.value = styleName;
69
+ };
70
+
71
+ setCurrentStyle();
72
+ const defaultStyle =
73
+ layers.length === 1 ? layers[0]?.defaultStyle?.name : null;
74
+
75
+ const styleChangedListener = layers.map((layer) =>
76
+ layer.styleChanged.addEventListener(setCurrentStyle),
77
+ );
62
78
  onUnmounted(() => {
63
- styleChangedListener();
79
+ styleChangedListener.forEach((cb) => cb());
64
80
  });
65
81
 
66
82
  const items = computed(() => {
@@ -88,10 +104,10 @@
88
104
  });
89
105
 
90
106
  function select(styleName) {
91
- const style = app.styles.hasKey(styleName)
92
- ? app.styles.getByKey(styleName)
93
- : layer.defaultStyle;
94
- layer.setStyle(style);
107
+ const style = app.styles.getByKey(styleName);
108
+ layers.forEach((layer) => {
109
+ layer.setStyle(style || layer.defaultStyle);
110
+ });
95
111
  app.windowManager.remove(attrs['window-state'].id);
96
112
  }
97
113
 
@@ -3,12 +3,12 @@ declare const _default: import("vue").DefineComponent<{
3
3
  type: ArrayConstructor;
4
4
  default: () => never[];
5
5
  };
6
- layerName: {
7
- type: StringConstructor;
6
+ layerNames: {
7
+ type: ArrayConstructor;
8
8
  required: true;
9
9
  };
10
10
  }, {
11
- currentStyleName: import("vue").Ref<string>;
11
+ currentStyleName: import("vue").Ref<any>;
12
12
  items: import("vue").ComputedRef<{
13
13
  text: unknown;
14
14
  value: unknown;
@@ -19,8 +19,8 @@ declare const _default: import("vue").DefineComponent<{
19
19
  type: ArrayConstructor;
20
20
  default: () => never[];
21
21
  };
22
- layerName: {
23
- type: StringConstructor;
22
+ layerNames: {
23
+ type: ArrayConstructor;
24
24
  required: true;
25
25
  };
26
26
  }>>, {