@vcmap/ui 6.2.0-rc.1 → 6.2.0-rc.3
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.
- package/build/build.js +52 -7
- package/build/postInstall.js +32 -0
- package/config/dev.config.json +40 -0
- package/config/pano.config.json +420 -0
- package/config/projects.config.json +5 -0
- package/dist/assets/cesium/Workers/{chunk-P6TRGU3S.js → chunk-2PFJ45KC.js} +2 -2
- package/dist/assets/cesium/Workers/{chunk-7ZZ5LMZY.js → chunk-35ALNMG5.js} +15 -15
- package/dist/assets/cesium/Workers/{chunk-7YIOHQWH.js → chunk-35EJBV7X.js} +13 -13
- package/dist/assets/cesium/Workers/{chunk-EJVGYGLF.js → chunk-3E3OH65K.js} +7 -7
- package/dist/assets/cesium/Workers/{chunk-JBSKHTNX.js → chunk-4FHUY275.js} +4 -4
- package/dist/assets/cesium/Workers/{chunk-Z2QP3CXW.js → chunk-565T3GIE.js} +2 -2
- package/dist/assets/cesium/Workers/{chunk-IZGUQO6Q.js → chunk-5LGDCKCZ.js} +13 -13
- package/dist/assets/cesium/Workers/{chunk-3IFRSGEY.js → chunk-6JXJYBWN.js} +9 -9
- package/dist/assets/cesium/Workers/{chunk-WGDFYAGC.js → chunk-6RAEC3AW.js} +4 -4
- package/dist/assets/cesium/Workers/{chunk-44QAAS4P.js → chunk-6Z67VIOY.js} +7 -7
- package/dist/assets/cesium/Workers/{chunk-NGZJIN5Z.js → chunk-ADDGROZ6.js} +4 -4
- package/dist/assets/cesium/Workers/{chunk-GBT7MJ6X.js → chunk-ASYGMBRG.js} +1 -1
- package/dist/assets/cesium/Workers/{chunk-C4WPMOKT.js → chunk-BABDQOWA.js} +5 -5
- package/dist/assets/cesium/Workers/{chunk-IBRIWOCM.js → chunk-BQHHGIFB.js} +13 -13
- package/dist/assets/cesium/Workers/{chunk-LLAF3CPH.js → chunk-C33B4KHN.js} +2 -2
- package/dist/assets/cesium/Workers/{chunk-JXVLNVXC.js → chunk-CMCR2ZK4.js} +7 -7
- package/dist/assets/cesium/Workers/{chunk-3HQMMUPU.js → chunk-EGGJIATZ.js} +1 -1
- package/dist/assets/cesium/Workers/{chunk-RJM36CNY.js → chunk-EWS5LXAB.js} +6 -6
- package/dist/assets/cesium/Workers/{chunk-OPP2SKMA.js → chunk-FDXPBTSX.js} +12 -12
- package/dist/assets/cesium/Workers/{chunk-QN6TBED4.js → chunk-FIFQP4YX.js} +11 -11
- package/dist/assets/cesium/Workers/{chunk-JISPSEF3.js → chunk-HOGDZ2EB.js} +4 -4
- package/dist/assets/cesium/Workers/{chunk-2PTKXHJB.js → chunk-I4NB77NH.js} +10 -10
- package/dist/assets/cesium/Workers/{chunk-QQOZO7KO.js → chunk-JX4A2BCF.js} +7 -7
- package/dist/assets/cesium/Workers/{chunk-XIUSRWL6.js → chunk-K6PDUSH6.js} +5 -5
- package/dist/assets/cesium/Workers/{chunk-KHZNBFOH.js → chunk-KFHZFU5O.js} +7 -7
- package/dist/assets/cesium/Workers/{chunk-U5HSOKPQ.js → chunk-KYGXRFA6.js} +1 -1
- package/dist/assets/cesium/Workers/{chunk-56EDBCGT.js → chunk-LNWNAP2C.js} +10 -10
- package/dist/assets/cesium/Workers/{chunk-YCDZX5LS.js → chunk-LWN2B3KW.js} +1 -1
- package/dist/assets/cesium/Workers/{chunk-TI3TRKIC.js → chunk-LXLABO2L.js} +10 -10
- package/dist/assets/cesium/Workers/{chunk-C3EQ27WF.js → chunk-MB6B2UUL.js} +6 -6
- package/dist/assets/cesium/Workers/{chunk-57H6I3SV.js → chunk-MZSRINXK.js} +5 -5
- package/dist/assets/cesium/Workers/{chunk-ZVUUPJEM.js → chunk-NBI3GZSK.js} +17 -17
- package/dist/assets/cesium/Workers/{chunk-O72GZTSE.js → chunk-NUAXNUP5.js} +2 -2
- package/dist/assets/cesium/Workers/{chunk-M24KHENR.js → chunk-PNZR4RLL.js} +2 -2
- package/dist/assets/cesium/Workers/{chunk-HJMNR3GC.js → chunk-Q4K22DSJ.js} +11 -11
- package/dist/assets/cesium/Workers/{chunk-2LOWCAMW.js → chunk-Q4OS4EFN.js} +13 -13
- package/dist/assets/cesium/Workers/{chunk-TK5IIG2F.js → chunk-QLIMO7TQ.js} +4 -4
- package/dist/assets/cesium/Workers/{chunk-EDLRS3AW.js → chunk-RQ4F6YFU.js} +6 -6
- package/dist/assets/cesium/Workers/{chunk-JSQJDZI4.js → chunk-SB67D3JL.js} +6 -6
- package/dist/assets/cesium/Workers/{chunk-RTJKHZWU.js → chunk-SS6WRJ5J.js} +6 -6
- package/dist/assets/cesium/Workers/{chunk-L5GODJAR.js → chunk-TC4NTWIJ.js} +14 -14
- package/dist/assets/cesium/Workers/{chunk-IZJ42N4W.js → chunk-TKNA6WSZ.js} +17 -17
- package/dist/assets/cesium/Workers/{chunk-HP5XLODI.js → chunk-VQYEP77L.js} +6 -6
- package/dist/assets/cesium/Workers/{chunk-YSIJTJ7N.js → chunk-WKS5H3VW.js} +5 -5
- package/dist/assets/cesium/Workers/{chunk-XWOUPGUF.js → chunk-WPGX7DEA.js} +1 -1
- package/dist/assets/cesium/Workers/{chunk-6SQMLVGV.js → chunk-X3EPFVG3.js} +7 -7
- package/dist/assets/cesium/Workers/{chunk-NDDI2LWR.js → chunk-XH7MSR3A.js} +6 -6
- package/dist/assets/cesium/Workers/{chunk-FFLMY4TE.js → chunk-YDEBBUNQ.js} +5 -5
- package/dist/assets/cesium/Workers/{chunk-YK3QIKY7.js → chunk-YSVI7YNN.js} +9 -9
- package/dist/assets/cesium/Workers/{chunk-BVKITG4N.js → chunk-YVAS5WPH.js} +7 -7
- package/dist/assets/cesium/Workers/{chunk-X7IQYYHF.js → chunk-Z4QVAZM6.js} +2 -2
- package/dist/assets/cesium/Workers/{chunk-LJ2JQHJT.js → chunk-ZXOK77EW.js} +7 -7
- package/dist/assets/cesium/Workers/combineGeometry.js +22 -22
- package/dist/assets/cesium/Workers/createBoxGeometry.js +16 -16
- package/dist/assets/cesium/Workers/createBoxOutlineGeometry.js +14 -14
- package/dist/assets/cesium/Workers/createCircleGeometry.js +24 -24
- package/dist/assets/cesium/Workers/createCircleOutlineGeometry.js +17 -17
- package/dist/assets/cesium/Workers/createCoplanarPolygonGeometry.js +31 -31
- package/dist/assets/cesium/Workers/createCoplanarPolygonOutlineGeometry.js +29 -29
- package/dist/assets/cesium/Workers/createCorridorGeometry.js +27 -27
- package/dist/assets/cesium/Workers/createCorridorOutlineGeometry.js +26 -26
- package/dist/assets/cesium/Workers/createCylinderGeometry.js +18 -18
- package/dist/assets/cesium/Workers/createCylinderOutlineGeometry.js +16 -16
- package/dist/assets/cesium/Workers/createEllipseGeometry.js +24 -24
- package/dist/assets/cesium/Workers/createEllipseOutlineGeometry.js +17 -17
- package/dist/assets/cesium/Workers/createEllipsoidGeometry.js +17 -17
- package/dist/assets/cesium/Workers/createEllipsoidOutlineGeometry.js +16 -16
- package/dist/assets/cesium/Workers/createFrustumGeometry.js +16 -16
- package/dist/assets/cesium/Workers/createFrustumOutlineGeometry.js +16 -16
- package/dist/assets/cesium/Workers/createGeometry.js +22 -22
- package/dist/assets/cesium/Workers/createGroundPolylineGeometry.js +20 -20
- package/dist/assets/cesium/Workers/createPlaneGeometry.js +14 -14
- package/dist/assets/cesium/Workers/createPlaneOutlineGeometry.js +13 -13
- package/dist/assets/cesium/Workers/createPolygonGeometry.js +30 -30
- package/dist/assets/cesium/Workers/createPolygonOutlineGeometry.js +28 -28
- package/dist/assets/cesium/Workers/createPolylineGeometry.js +23 -23
- package/dist/assets/cesium/Workers/createPolylineVolumeGeometry.js +29 -29
- package/dist/assets/cesium/Workers/createPolylineVolumeOutlineGeometry.js +25 -25
- package/dist/assets/cesium/Workers/createRectangleGeometry.js +25 -25
- package/dist/assets/cesium/Workers/createRectangleOutlineGeometry.js +18 -18
- package/dist/assets/cesium/Workers/createSimplePolylineGeometry.js +21 -21
- package/dist/assets/cesium/Workers/createSphereGeometry.js +17 -17
- package/dist/assets/cesium/Workers/createSphereOutlineGeometry.js +16 -16
- package/dist/assets/cesium/Workers/createTaskProcessorWorker.js +3 -3
- package/dist/assets/cesium/Workers/createVectorTileClampedPolylines.js +13 -13
- package/dist/assets/cesium/Workers/createVectorTileGeometries.js +22 -22
- package/dist/assets/cesium/Workers/createVectorTilePoints.js +12 -12
- package/dist/assets/cesium/Workers/createVectorTilePolygons.js +20 -20
- package/dist/assets/cesium/Workers/createVectorTilePolylines.js +13 -13
- package/dist/assets/cesium/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +20 -20
- package/dist/assets/cesium/Workers/createVerticesFromHeightmap.js +20 -20
- package/dist/assets/cesium/Workers/createVerticesFromQuantizedTerrainMesh.js +17 -17
- package/dist/assets/cesium/Workers/createWallGeometry.js +22 -22
- package/dist/assets/cesium/Workers/createWallOutlineGeometry.js +21 -21
- package/dist/assets/cesium/Workers/decodeDraco.js +11 -11
- package/dist/assets/cesium/Workers/decodeGoogleEarthEnterprisePacket.js +5 -5
- package/dist/assets/cesium/Workers/decodeI3S.js +10 -10
- package/dist/assets/cesium/Workers/transcodeKTX2.js +7 -7
- package/dist/assets/cesium/Workers/transferTypedArrayTest.js +1 -1
- package/dist/assets/cesium/Workers/upsampleQuantizedTerrainMesh.js +20 -20
- package/dist/assets/{cesium-ac6c193a.js → cesium-7d4ab914.js} +44609 -44606
- package/dist/assets/cesium.js +1 -1
- package/dist/assets/core-deeb2b8d.js +34569 -0
- package/dist/assets/core-workers/panoramaImageWorker.js +1 -0
- package/dist/assets/core-workers/panoramaImageWorker.js-f8148bc6.js +34 -0
- package/dist/assets/core.js +1 -1
- package/dist/assets/{ol-94c57f2e.js → ol-8db5c824.js} +1 -1
- package/dist/assets/ol.js +1 -1
- package/dist/assets/start.js +3 -1
- package/dist/assets/ui-62439099.css +1 -0
- package/dist/assets/{ui-4f308e45.js → ui-62439099.js} +9581 -8853
- package/dist/assets/ui.js +1 -1
- package/dist/assets/vue.js +1 -1
- package/dist/assets/{vuetify-99195777.js → vuetify-439ba6d5.js} +1 -1
- package/dist/assets/vuetify.js +1 -1
- package/index.d.ts +14 -4
- package/index.js +8 -6
- package/package.json +5 -4
- package/plugins/@vcmap-show-case/panorama-inspector/package.json +10 -0
- package/plugins/@vcmap-show-case/panorama-inspector/src/PanoramaDebugInfo.vue +86 -0
- package/plugins/@vcmap-show-case/panorama-inspector/src/PanoramaDebugTools.vue +259 -0
- package/plugins/@vcmap-show-case/panorama-inspector/src/PanoramaInspector.vue +31 -0
- package/plugins/@vcmap-show-case/panorama-inspector/src/api.js +161 -0
- package/plugins/@vcmap-show-case/panorama-inspector/src/index.js +57 -0
- package/plugins/@vcmap-show-case/panorama-inspector/src/showClickInteraction.js +20 -0
- package/plugins/package.json +1 -1
- package/src/actions/actionHelper.d.ts +16 -11
- package/src/actions/actionHelper.js +190 -87
- package/src/actions/flightActions.d.ts +10 -0
- package/src/actions/flightActions.js +109 -13
- package/src/application/VcsApp.vue +11 -0
- package/src/application/VcsApp.vue.d.ts +4 -0
- package/src/application/VcsContainer.vue.d.ts +4 -0
- package/src/application/VcsMainMap.vue +40 -2
- package/src/application/VcsMainMap.vue.d.ts +4 -0
- package/src/application/VcsMap.vue +0 -9
- package/src/application/VcsNavbar.vue +2 -1
- package/src/callback/activateMapCallback.d.ts +30 -0
- package/src/callback/activateMapCallback.js +63 -0
- package/src/callback/activateOverviewMapCallback.d.ts +7 -0
- package/src/callback/activateOverviewMapCallback.js +26 -0
- package/src/callback/deactivateOverviewMapCallback.d.ts +7 -0
- package/src/callback/deactivateOverviewMapCallback.js +20 -0
- package/src/components/flight/VcsFlightAnchorsComponent.vue +1 -0
- package/src/components/flight/VcsFlightPlayer.vue +31 -17
- package/src/components/flight/VcsFlightPlayer.vue.d.ts +1 -0
- package/src/components/lists/VcsGroupedList.vue +10 -2
- package/src/components/lists/VcsTreeNode.vue +3 -0
- package/src/components/plugins/VcsLoadingOverlay.vue +138 -0
- package/src/components/plugins/VcsLoadingOverlay.vue.d.ts +2 -0
- package/src/components/plugins/VcsWorkspaceWrapper.vue +104 -0
- package/src/components/plugins/VcsWorkspaceWrapper.vue.d.ts +82 -0
- package/src/components/section/VcsExpansionPanel.vue +13 -3
- package/src/components/vector-properties/VcsFeatureEditingWindow.vue +20 -1
- package/src/components/vector-properties/VcsFeatureEditingWindow.vue.d.ts +11 -0
- package/src/components/vector-properties/VcsFeatureInputEditor.vue +166 -0
- package/src/components/vector-properties/VcsFeatureInputEditor.vue.d.ts +17 -0
- package/src/components/vector-properties/VcsVectorPropertiesComponent.vue.d.ts +1 -1
- package/src/contentTree/LayerSwap.vue +15 -6
- package/src/contentTree/contentTreeCollection.js +2 -2
- package/src/contentTree/contentTreeItem.d.ts +2 -2
- package/src/contentTree/wmsGroupContentTreeItem.js +10 -3
- package/src/featureInfo/featureInfo.js +6 -25
- package/src/featureInfo/iframeWmsFeatureInfoView.d.ts +10 -0
- package/src/featureInfo/iframeWmsFeatureInfoView.js +42 -0
- package/src/i18n/de.d.ts +25 -7
- package/src/i18n/de.js +14 -0
- package/src/i18n/en.d.ts +25 -7
- package/src/i18n/en.js +14 -0
- package/src/legend/VcsLegend.vue +5 -1
- package/src/navigation/MapNavigation.vue +82 -45
- package/src/navigation/MapNavigation.vue.d.ts +3 -34
- package/src/navigation/TiltSlider.vue +10 -2
- package/src/navigation/TiltSlider.vue.d.ts +20 -0
- package/src/navigation/VcsCompass.vue +3 -1
- package/src/navigation/overviewMap.d.ts +23 -8
- package/src/navigation/overviewMap.js +82 -60
- package/src/search/ResultsComponent.vue +8 -1
- package/src/search/SearchComponent.vue +3 -17
- package/src/search/SearchComponent.vue.d.ts +1 -2
- package/src/search/search.d.ts +13 -0
- package/src/search/search.js +21 -1
- package/src/uiConfig.d.ts +9 -0
- package/src/uiConfig.js +1 -0
- package/dist/assets/core-de8e51b5.js +0 -26236
- package/dist/assets/ui-4f308e45.css +0 -1
- /package/dist/assets/{vue-62303c82.js → vue-1b861f55.js} +0 -0
- /package/dist/assets/{vuetify-99195777.css → vuetify-439ba6d5.css} +0 -0
|
@@ -1,16 +1,21 @@
|
|
|
1
|
-
import { reactive } from 'vue';
|
|
1
|
+
import { reactive, ref } from 'vue';
|
|
2
2
|
import { check, maybe, ofEnum } from '@vcsuite/check';
|
|
3
3
|
import { getLogger } from '@vcsuite/logger';
|
|
4
4
|
import {
|
|
5
5
|
createFlightVisualization,
|
|
6
|
+
createFlightMovie,
|
|
6
7
|
exportFlightAsGeoJson,
|
|
7
8
|
exportFlightPathAsGeoJson,
|
|
8
9
|
FlightInstance,
|
|
9
10
|
moduleIdSymbol,
|
|
10
11
|
parseFlightOptionsFromGeoJson,
|
|
12
|
+
createFlightPlayer,
|
|
13
|
+
LayerState,
|
|
11
14
|
} from '@vcmap/core';
|
|
12
15
|
import { NotificationType } from '../notifier/notifier.js';
|
|
13
|
-
import { downloadText } from '../downloadHelper.js';
|
|
16
|
+
import { downloadBlob, downloadText } from '../downloadHelper.js';
|
|
17
|
+
import { addLoadingOverlay, callSafeAction } from './actionHelper.js';
|
|
18
|
+
import { vcsAppSymbol } from '../pluginHelper.js';
|
|
14
19
|
|
|
15
20
|
/**
|
|
16
21
|
* @param {import("../vcsUiApp.js").default} app
|
|
@@ -97,10 +102,7 @@ export function createPlayAction(app, instance) {
|
|
|
97
102
|
/**
|
|
98
103
|
* @enum {string}
|
|
99
104
|
*/
|
|
100
|
-
export const PlayerDirection = {
|
|
101
|
-
Forward: 'forward',
|
|
102
|
-
Backward: 'backward',
|
|
103
|
-
};
|
|
105
|
+
export const PlayerDirection = { Forward: 'forward', Backward: 'backward' };
|
|
104
106
|
|
|
105
107
|
/**
|
|
106
108
|
* @param {import("../vcsUiApp.js").default} app
|
|
@@ -365,18 +367,32 @@ export async function createFlightVisualizationAction(
|
|
|
365
367
|
instance,
|
|
366
368
|
active = true,
|
|
367
369
|
) {
|
|
368
|
-
let flightVis
|
|
370
|
+
let flightVis;
|
|
371
|
+
let flightVisListener;
|
|
372
|
+
let flightVisStateListener;
|
|
369
373
|
|
|
370
374
|
const action = reactive({
|
|
371
375
|
name: 'components.flight.hidePath',
|
|
372
376
|
title: 'components.flight.hidePath',
|
|
373
377
|
icon: '$vcsEye',
|
|
374
|
-
active,
|
|
378
|
+
active: false,
|
|
375
379
|
async callback() {
|
|
376
380
|
if (!flightVis) {
|
|
377
381
|
flightVis = await createFlightVisualization(instance, app);
|
|
382
|
+
flightVisListener?.();
|
|
383
|
+
flightVisListener = flightVis.destroyed.addEventListener(() => {
|
|
384
|
+
flightVis = undefined;
|
|
385
|
+
flightVisListener?.();
|
|
386
|
+
flightVisStateListener?.();
|
|
387
|
+
});
|
|
388
|
+
flightVisStateListener?.();
|
|
389
|
+
flightVisStateListener = flightVis.stateChanged.addEventListener(
|
|
390
|
+
(state) => {
|
|
391
|
+
action.active = state === LayerState.ACTIVE;
|
|
392
|
+
},
|
|
393
|
+
);
|
|
378
394
|
}
|
|
379
|
-
if (
|
|
395
|
+
if (flightVis.state === LayerState.ACTIVE) {
|
|
380
396
|
flightVis.deactivate();
|
|
381
397
|
} else {
|
|
382
398
|
flightVis.activate().catch(() => {
|
|
@@ -384,22 +400,102 @@ export async function createFlightVisualizationAction(
|
|
|
384
400
|
this.active = false;
|
|
385
401
|
});
|
|
386
402
|
}
|
|
387
|
-
this.active =
|
|
403
|
+
this.active = flightVis.state === LayerState.ACTIVE;
|
|
388
404
|
},
|
|
389
405
|
});
|
|
390
406
|
|
|
391
407
|
if (active) {
|
|
392
|
-
|
|
408
|
+
callSafeAction(action);
|
|
393
409
|
}
|
|
394
410
|
|
|
395
411
|
const destroy = () => {
|
|
396
|
-
flightVis
|
|
397
|
-
flightVis
|
|
412
|
+
flightVis?.deactivate?.();
|
|
413
|
+
flightVis?.destroy?.();
|
|
398
414
|
};
|
|
399
415
|
|
|
400
416
|
return { action, destroy };
|
|
401
417
|
}
|
|
402
418
|
|
|
419
|
+
/**
|
|
420
|
+
*
|
|
421
|
+
* @param {import("../vcsUiApp.js").default} app
|
|
422
|
+
* @param {import("@vcmap/core").FlightInstance} instance
|
|
423
|
+
* @returns {{actions: import("./actionHelper.js").VcsAction[], destroy: function(): void}}
|
|
424
|
+
*/
|
|
425
|
+
export function createFlightMovieActions(app, instance) {
|
|
426
|
+
const progress = ref(0);
|
|
427
|
+
|
|
428
|
+
function updateProgress(playerClock) {
|
|
429
|
+
const duration = playerClock.endTime - playerClock.startTime;
|
|
430
|
+
const currentTime = playerClock.currentTime - playerClock.startTime;
|
|
431
|
+
progress.value = currentTime / duration;
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
async function recordFlight(options = {}) {
|
|
435
|
+
let player;
|
|
436
|
+
let flightVis;
|
|
437
|
+
let playerListener = () => {};
|
|
438
|
+
let removeLoadingOverlay = () => {};
|
|
439
|
+
try {
|
|
440
|
+
flightVis = await createFlightVisualization(instance, app);
|
|
441
|
+
if (flightVis.state === LayerState.ACTIVE) {
|
|
442
|
+
flightVis.deactivate();
|
|
443
|
+
}
|
|
444
|
+
player = await createFlightPlayer(instance, app);
|
|
445
|
+
playerListener = player.clock.changed.addEventListener(updateProgress);
|
|
446
|
+
const { start, cancel } = createFlightMovie(app, player, options);
|
|
447
|
+
removeLoadingOverlay = addLoadingOverlay(
|
|
448
|
+
app,
|
|
449
|
+
vcsAppSymbol,
|
|
450
|
+
'flight-recording',
|
|
451
|
+
{
|
|
452
|
+
progress,
|
|
453
|
+
title: 'components.flight.record.inProgress',
|
|
454
|
+
cancellable: true,
|
|
455
|
+
cancel,
|
|
456
|
+
},
|
|
457
|
+
);
|
|
458
|
+
const blob = await start();
|
|
459
|
+
removeLoadingOverlay?.();
|
|
460
|
+
app.notifier.add({
|
|
461
|
+
type: NotificationType.SUCCESS,
|
|
462
|
+
message: app.vueI18n.t('components.flight.record.success'),
|
|
463
|
+
});
|
|
464
|
+
const title = instance.properties?.title || 'flight';
|
|
465
|
+
downloadBlob(blob, `${title}.webm`);
|
|
466
|
+
} catch (e) {
|
|
467
|
+
getLogger('flightActions').error('Error while creating flight movie', e);
|
|
468
|
+
} finally {
|
|
469
|
+
player?.destroy();
|
|
470
|
+
flightVis?.destroy();
|
|
471
|
+
playerListener?.();
|
|
472
|
+
removeLoadingOverlay?.();
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
const actions = [
|
|
477
|
+
reactive({
|
|
478
|
+
name: 'components.flight.record.standard',
|
|
479
|
+
callback: recordFlight,
|
|
480
|
+
}),
|
|
481
|
+
reactive({
|
|
482
|
+
name: 'components.flight.record.high',
|
|
483
|
+
callback: recordFlight.bind(null, {
|
|
484
|
+
fps: 60,
|
|
485
|
+
highDefinition: true,
|
|
486
|
+
}),
|
|
487
|
+
}),
|
|
488
|
+
];
|
|
489
|
+
|
|
490
|
+
const destroy = instance.anchorsChanged.addEventListener(() => {
|
|
491
|
+
actions.forEach((action) => {
|
|
492
|
+
action.disabled = !instance.isValid();
|
|
493
|
+
});
|
|
494
|
+
});
|
|
495
|
+
|
|
496
|
+
return { actions, destroy };
|
|
497
|
+
}
|
|
498
|
+
|
|
403
499
|
/**
|
|
404
500
|
*
|
|
405
501
|
* @param {import("@vcmap/core").FlightInstance} instance
|
|
@@ -170,11 +170,14 @@
|
|
|
170
170
|
OpenlayersMap: '$vcs2d',
|
|
171
171
|
CesiumMap: '$vcs3d',
|
|
172
172
|
ObliqueMap: '$vcsObliqueView',
|
|
173
|
+
PanoramaMap: 'mdi-panorama-variant-outline',
|
|
173
174
|
};
|
|
175
|
+
|
|
174
176
|
const mapBtnWeight = {
|
|
175
177
|
OpenlayersMap: 3,
|
|
176
178
|
CesiumMap: 2,
|
|
177
179
|
ObliqueMap: 1,
|
|
180
|
+
PanoramaMap: 0,
|
|
178
181
|
};
|
|
179
182
|
|
|
180
183
|
const mapButtonActionDestroy = {};
|
|
@@ -322,6 +325,14 @@
|
|
|
322
325
|
vcsAppSymbol,
|
|
323
326
|
);
|
|
324
327
|
}
|
|
328
|
+
|
|
329
|
+
if (
|
|
330
|
+
app.uiConfig.config.autoCloseLegend &&
|
|
331
|
+
newValue.length === 0 &&
|
|
332
|
+
app.windowManager.has(legendComponentId)
|
|
333
|
+
) {
|
|
334
|
+
app.windowManager.remove(legendComponentId);
|
|
335
|
+
}
|
|
325
336
|
currentEntryLength = newValue.length;
|
|
326
337
|
});
|
|
327
338
|
|
|
@@ -398,6 +398,10 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
398
398
|
* - open the legend window, if new layer has a config
|
|
399
399
|
*/
|
|
400
400
|
readonly openLegendOnAdd?: boolean | undefined;
|
|
401
|
+
/**
|
|
402
|
+
* - automatically close the legend window, if no layer has a config
|
|
403
|
+
*/
|
|
404
|
+
readonly autoCloseLegend?: boolean | undefined;
|
|
401
405
|
/**
|
|
402
406
|
* - can be used to apply a scale factor to the overviewMap
|
|
403
407
|
*/
|
|
@@ -310,6 +310,10 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
310
310
|
* - open the legend window, if new layer has a config
|
|
311
311
|
*/
|
|
312
312
|
readonly openLegendOnAdd?: boolean | undefined;
|
|
313
|
+
/**
|
|
314
|
+
* - automatically close the legend window, if no layer has a config
|
|
315
|
+
*/
|
|
316
|
+
readonly autoCloseLegend?: boolean | undefined;
|
|
313
317
|
/**
|
|
314
318
|
* - can be used to apply a scale factor to the overviewMap
|
|
315
319
|
*/
|
|
@@ -2,14 +2,23 @@
|
|
|
2
2
|
<div class="vcs-main-map">
|
|
3
3
|
<VcsMap :map-id="mapId" />
|
|
4
4
|
<MapNavigation v-if="showMapNavigation" />
|
|
5
|
+
<div
|
|
6
|
+
:id="overviewMapContainerId"
|
|
7
|
+
class="overviewmap-container"
|
|
8
|
+
:class="xs || mobileLandscape ? 'mobile' : ''"
|
|
9
|
+
:style="{ display: overviewMapState ? 'block' : 'none' }"
|
|
10
|
+
/>
|
|
5
11
|
</div>
|
|
6
12
|
</template>
|
|
7
13
|
|
|
8
14
|
<script>
|
|
9
15
|
import { inject, onMounted, onUnmounted, ref, computed } from 'vue';
|
|
10
16
|
import { v4 as uuid } from 'uuid';
|
|
11
|
-
import
|
|
17
|
+
import { useDisplay } from 'vuetify';
|
|
12
18
|
import VcsMap from './VcsMap.vue';
|
|
19
|
+
import MapNavigation from '../navigation/MapNavigation.vue';
|
|
20
|
+
import { overviewMapContainerId } from '../navigation/overviewMap.js';
|
|
21
|
+
import { isMobileLandscape } from '../vuePlugins/vuetify.js';
|
|
13
22
|
|
|
14
23
|
export function setupMapNavigation(app) {
|
|
15
24
|
const mapSize = ref(app.maps.size);
|
|
@@ -48,6 +57,9 @@
|
|
|
48
57
|
const id = uuid();
|
|
49
58
|
const mapId = `mapCollection-${id}`;
|
|
50
59
|
|
|
60
|
+
const mobileLandscape = isMobileLandscape();
|
|
61
|
+
const { xs } = useDisplay();
|
|
62
|
+
|
|
51
63
|
const { showMapNavigation, destroy: destroyMapNavigationListener } =
|
|
52
64
|
setupMapNavigation(app);
|
|
53
65
|
|
|
@@ -63,9 +75,35 @@
|
|
|
63
75
|
return {
|
|
64
76
|
mapId,
|
|
65
77
|
showMapNavigation,
|
|
78
|
+
overviewMapContainerId,
|
|
79
|
+
overviewMapState: app.overviewMap.currentState,
|
|
80
|
+
mobileLandscape,
|
|
81
|
+
xs,
|
|
66
82
|
};
|
|
67
83
|
},
|
|
68
84
|
};
|
|
69
85
|
</script>
|
|
70
86
|
|
|
71
|
-
<style lang="scss" scoped
|
|
87
|
+
<style lang="scss" scoped>
|
|
88
|
+
.overviewmap-container {
|
|
89
|
+
position: absolute;
|
|
90
|
+
right: 100px;
|
|
91
|
+
bottom: 25px;
|
|
92
|
+
width: 300px;
|
|
93
|
+
height: 240px;
|
|
94
|
+
background: rgb(var(--v-theme-surface));
|
|
95
|
+
border: 3px solid rgb(var(--v-theme-surface));
|
|
96
|
+
border-radius: 3px;
|
|
97
|
+
&.mobile {
|
|
98
|
+
width: 100%;
|
|
99
|
+
right: 0px;
|
|
100
|
+
bottom: 0px;
|
|
101
|
+
border-radius: 0px;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
:deep(.overviewMapElement) {
|
|
106
|
+
width: 100%;
|
|
107
|
+
height: 100%;
|
|
108
|
+
}
|
|
109
|
+
</style>
|
|
@@ -5,5 +5,9 @@ export function setupMapNavigation(app: any): {
|
|
|
5
5
|
declare const _default: import("vue").DefineComponent<{}, {
|
|
6
6
|
mapId: string;
|
|
7
7
|
showMapNavigation: import("vue").ComputedRef<boolean>;
|
|
8
|
+
overviewMapContainerId: string;
|
|
9
|
+
overviewMapState: any;
|
|
10
|
+
mobileLandscape: import("vue").ComputedRef<boolean>;
|
|
11
|
+
xs: import("vue").Ref<boolean>;
|
|
8
12
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}, {}>;
|
|
9
13
|
export default _default;
|
|
@@ -36,15 +36,6 @@
|
|
|
36
36
|
overflow: hidden; /* Fix for iFrame content */
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
:deep(.overviewMapElement) {
|
|
40
|
-
position: absolute;
|
|
41
|
-
top: 3px;
|
|
42
|
-
bottom: 3px;
|
|
43
|
-
left: 3px;
|
|
44
|
-
right: 3px;
|
|
45
|
-
overflow: hidden; /* Fix for iFrame content */
|
|
46
|
-
}
|
|
47
|
-
|
|
48
39
|
:deep(.cesium-widget),
|
|
49
40
|
:deep(.cesium-widget canvas) {
|
|
50
41
|
width: 100%;
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
<div class="d-flex">
|
|
15
15
|
<VcsActionButtonList
|
|
16
16
|
:actions="mapActions"
|
|
17
|
-
:overflow-count="smAndDown ? 2 :
|
|
17
|
+
:overflow-count="smAndDown ? 2 : 4"
|
|
18
18
|
:force-overflow="false"
|
|
19
19
|
button="VcsToolButton"
|
|
20
20
|
/>
|
|
@@ -104,6 +104,7 @@
|
|
|
104
104
|
:tooltip="searchAction.title"
|
|
105
105
|
:icon="searchAction.icon"
|
|
106
106
|
:active="searchAction.active"
|
|
107
|
+
:background="searchAction.background"
|
|
107
108
|
@click.stop="searchAction.callback($event)"
|
|
108
109
|
v-bind="{ ...$attrs }"
|
|
109
110
|
/>
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export default ActivateMapCallback;
|
|
2
|
+
export type ActivateMapCallbackOptions = import("./vcsCallback.js").VcsCallbackOptions & {
|
|
3
|
+
mapName: string;
|
|
4
|
+
};
|
|
5
|
+
/**
|
|
6
|
+
* @typedef {import("./vcsCallback.js").VcsCallbackOptions & { mapName: string }} ActivateMapCallbackOptions
|
|
7
|
+
* @property {string} mapName
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Callback to activate a map by name using the app's map collection.
|
|
11
|
+
* @class
|
|
12
|
+
* @extends VcsCallback
|
|
13
|
+
*/
|
|
14
|
+
declare class ActivateMapCallback extends VcsCallback {
|
|
15
|
+
/**
|
|
16
|
+
* @param {ActivateMapCallbackOptions} options
|
|
17
|
+
* @param {import("@src/vcsUiApp.js").default} app
|
|
18
|
+
*/
|
|
19
|
+
constructor(options: ActivateMapCallbackOptions, app: import("@src/vcsUiApp.js").default);
|
|
20
|
+
/**
|
|
21
|
+
* @type {string}
|
|
22
|
+
* @private
|
|
23
|
+
*/
|
|
24
|
+
private _mapName;
|
|
25
|
+
/**
|
|
26
|
+
* @returns {ActivateMapCallbackOptions}
|
|
27
|
+
*/
|
|
28
|
+
toJSON(): ActivateMapCallbackOptions;
|
|
29
|
+
}
|
|
30
|
+
import VcsCallback from './vcsCallback.js';
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { getLogger } from '@vcsuite/logger';
|
|
2
|
+
import VcsCallback, { callbackClassRegistry } from './vcsCallback.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @typedef {import("./vcsCallback.js").VcsCallbackOptions & { mapName: string }} ActivateMapCallbackOptions
|
|
6
|
+
* @property {string} mapName
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Callback to activate a map by name using the app's map collection.
|
|
11
|
+
* @class
|
|
12
|
+
* @extends VcsCallback
|
|
13
|
+
*/
|
|
14
|
+
class ActivateMapCallback extends VcsCallback {
|
|
15
|
+
/**
|
|
16
|
+
* @param {ActivateMapCallbackOptions} options
|
|
17
|
+
* @param {import("@src/vcsUiApp.js").default} app
|
|
18
|
+
*/
|
|
19
|
+
constructor(options, app) {
|
|
20
|
+
super(options, app);
|
|
21
|
+
/**
|
|
22
|
+
* @type {string}
|
|
23
|
+
* @private
|
|
24
|
+
*/
|
|
25
|
+
this._mapName = options.mapName;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Activates the map with the given name.
|
|
30
|
+
*/
|
|
31
|
+
callback() {
|
|
32
|
+
if (this._mapName) {
|
|
33
|
+
this._app.maps.setActiveMap(this._mapName).catch((error) => {
|
|
34
|
+
getLogger(ActivateMapCallback.className).error(
|
|
35
|
+
`Failed to activate map "${this._mapName}":`,
|
|
36
|
+
error,
|
|
37
|
+
);
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* @returns {ActivateMapCallbackOptions}
|
|
44
|
+
*/
|
|
45
|
+
toJSON() {
|
|
46
|
+
const config = super.toJSON();
|
|
47
|
+
config.mapName = this._mapName;
|
|
48
|
+
return config;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* @type {string}
|
|
53
|
+
*/
|
|
54
|
+
static get className() {
|
|
55
|
+
return 'ActivateMapCallback';
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
callbackClassRegistry.registerClass(
|
|
60
|
+
ActivateMapCallback.className,
|
|
61
|
+
ActivateMapCallback,
|
|
62
|
+
);
|
|
63
|
+
export default ActivateMapCallback;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { getLogger } from '@vcsuite/logger';
|
|
2
|
+
import VcsCallback, { callbackClassRegistry } from './vcsCallback.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Callback to activate the overview map using its API.
|
|
6
|
+
*/
|
|
7
|
+
class ActivateOverviewMapCallback extends VcsCallback {
|
|
8
|
+
static get className() {
|
|
9
|
+
return 'ActivateOverviewMapCallback';
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
callback() {
|
|
13
|
+
this._app.overviewMap.activate().catch((error) => {
|
|
14
|
+
getLogger(ActivateOverviewMapCallback.className).error(
|
|
15
|
+
'Failed to activate overview map:',
|
|
16
|
+
error,
|
|
17
|
+
);
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
callbackClassRegistry.registerClass(
|
|
23
|
+
ActivateOverviewMapCallback.className,
|
|
24
|
+
ActivateOverviewMapCallback,
|
|
25
|
+
);
|
|
26
|
+
export default ActivateOverviewMapCallback;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import VcsCallback, { callbackClassRegistry } from './vcsCallback.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Callback to deactivate the overview map using its API.
|
|
5
|
+
*/
|
|
6
|
+
class DeactivateOverviewMapCallback extends VcsCallback {
|
|
7
|
+
static get className() {
|
|
8
|
+
return 'DeactivateOverviewMapCallback';
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
callback() {
|
|
12
|
+
this._app.overviewMap.deactivate();
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
callbackClassRegistry.registerClass(
|
|
17
|
+
DeactivateOverviewMapCallback.className,
|
|
18
|
+
DeactivateOverviewMapCallback,
|
|
19
|
+
);
|
|
20
|
+
export default DeactivateOverviewMapCallback;
|
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<v-container class="py-0 px-1 vcs-flight-player">
|
|
3
|
-
<
|
|
3
|
+
<v-row no-gutters class="d-flex align-center">
|
|
4
|
+
<VcsLabel html-for="player">{{ $t('flight.player') }}</VcsLabel>
|
|
5
|
+
<v-row class="d-flex justify-end px-1 gc-2" no-gutters>
|
|
6
|
+
<VcsActionButtonList
|
|
7
|
+
overflow-icon="$vcsShare"
|
|
8
|
+
:actions="recordingActions"
|
|
9
|
+
:disabled="!isCurrentPlayer || disabled"
|
|
10
|
+
/>
|
|
11
|
+
</v-row>
|
|
12
|
+
</v-row>
|
|
4
13
|
<VcsSlider
|
|
5
14
|
v-if="clock"
|
|
6
15
|
type="number"
|
|
@@ -32,22 +41,22 @@
|
|
|
32
41
|
</div>
|
|
33
42
|
</v-container>
|
|
34
43
|
</template>
|
|
44
|
+
|
|
35
45
|
<script>
|
|
36
46
|
import { inject, onMounted, onUnmounted, ref } from 'vue';
|
|
37
|
-
import { VContainer } from 'vuetify/components';
|
|
47
|
+
import { VContainer, VRow } from 'vuetify/components';
|
|
38
48
|
import VcsSlider from '../form-inputs-controls/VcsSlider.vue';
|
|
39
49
|
import VcsLabel from '../form-inputs-controls/VcsLabel.vue';
|
|
40
50
|
import VcsButton from '../buttons/VcsButton.vue';
|
|
41
|
-
import
|
|
51
|
+
import VcsActionButtonList from '../buttons/VcsActionButtonList.vue';
|
|
52
|
+
import {
|
|
53
|
+
createFlightMovieActions,
|
|
54
|
+
createFlightPlayerActions,
|
|
55
|
+
} from '../../actions/flightActions.js';
|
|
42
56
|
import { getProvidedFlightInstance } from './composables.js';
|
|
43
57
|
|
|
44
58
|
function getDefaultClock() {
|
|
45
|
-
return {
|
|
46
|
-
startTime: 0,
|
|
47
|
-
endTime: 0,
|
|
48
|
-
currentTime: 0,
|
|
49
|
-
times: [],
|
|
50
|
-
};
|
|
59
|
+
return { startTime: 0, endTime: 0, currentTime: 0, times: [] };
|
|
51
60
|
}
|
|
52
61
|
|
|
53
62
|
/**
|
|
@@ -70,18 +79,18 @@
|
|
|
70
79
|
export default {
|
|
71
80
|
name: 'VcsFlightPlayer',
|
|
72
81
|
components: {
|
|
73
|
-
VcsLabel,
|
|
74
|
-
VcsButton,
|
|
75
82
|
VContainer,
|
|
83
|
+
VRow,
|
|
84
|
+
VcsActionButtonList,
|
|
85
|
+
VcsButton,
|
|
86
|
+
VcsLabel,
|
|
76
87
|
VcsSlider,
|
|
77
88
|
},
|
|
78
|
-
props: {
|
|
79
|
-
disabled: {
|
|
80
|
-
type: Boolean,
|
|
81
|
-
default: false,
|
|
82
|
-
},
|
|
83
|
-
},
|
|
89
|
+
props: { disabled: { type: Boolean, default: false } },
|
|
84
90
|
setup() {
|
|
91
|
+
/**
|
|
92
|
+
* @type {import("../../vcsUiApp.js").default}
|
|
93
|
+
*/
|
|
85
94
|
const app = inject('vcsApp');
|
|
86
95
|
const flightInstance = getProvidedFlightInstance();
|
|
87
96
|
const clock = ref(getDefaultClock());
|
|
@@ -113,6 +122,9 @@
|
|
|
113
122
|
}
|
|
114
123
|
}
|
|
115
124
|
|
|
125
|
+
const { actions: recordingActions, destroy: destroyRecordingActions } =
|
|
126
|
+
createFlightMovieActions(app, flightInstance);
|
|
127
|
+
|
|
116
128
|
onMounted(async () => {
|
|
117
129
|
flightInstancePlayer =
|
|
118
130
|
await app.flights.setPlayerForFlight(flightInstance);
|
|
@@ -129,12 +141,14 @@
|
|
|
129
141
|
onUnmounted(() => {
|
|
130
142
|
destroy();
|
|
131
143
|
playerChangedListener();
|
|
144
|
+
destroyRecordingActions();
|
|
132
145
|
});
|
|
133
146
|
|
|
134
147
|
return {
|
|
135
148
|
clock,
|
|
136
149
|
actions,
|
|
137
150
|
isCurrentPlayer,
|
|
151
|
+
recordingActions,
|
|
138
152
|
clockTime(seconds) {
|
|
139
153
|
const mins = Math.floor(seconds / 60);
|
|
140
154
|
const secs = Math.floor(seconds % 60);
|
|
@@ -12,6 +12,7 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
12
12
|
}>;
|
|
13
13
|
actions: import("../../actions/actionHelper.js", { with: { "resolution-mode": "import" } }).VcsAction[];
|
|
14
14
|
isCurrentPlayer: import("vue").Ref<boolean>;
|
|
15
|
+
recordingActions: import("../../actions/actionHelper.js", { with: { "resolution-mode": "import" } }).VcsAction[];
|
|
15
16
|
clockTime(seconds: any): string;
|
|
16
17
|
setTime(seconds: any): void;
|
|
17
18
|
}, any, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
@@ -150,9 +150,10 @@
|
|
|
150
150
|
/>
|
|
151
151
|
<v-expansion-panels
|
|
152
152
|
variant="accordion"
|
|
153
|
+
flat
|
|
153
154
|
multiple
|
|
154
155
|
v-model="localOpenedGroups"
|
|
155
|
-
class="rounded-0"
|
|
156
|
+
class="rounded-0 panels"
|
|
156
157
|
>
|
|
157
158
|
<vcs-expansion-panel
|
|
158
159
|
v-for="(group, i) in groups"
|
|
@@ -176,4 +177,11 @@
|
|
|
176
177
|
</div>
|
|
177
178
|
</template>
|
|
178
179
|
|
|
179
|
-
<style scoped lang="scss"
|
|
180
|
+
<style scoped lang="scss">
|
|
181
|
+
.panels .vcs-expansion-panel:not(:last-child) {
|
|
182
|
+
border-bottom: 1px solid rgb(var(--v-theme-base-lighten-2));
|
|
183
|
+
}
|
|
184
|
+
:deep(.v-list-item-title) > span {
|
|
185
|
+
font-weight: bold;
|
|
186
|
+
}
|
|
187
|
+
</style>
|