Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
96 changes: 89 additions & 7 deletions client/dive-common/components/ImportButton.vue
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,18 @@ export default defineComponent({
type: Boolean,
default: false,
},
largeImageImport: { // Offer tiled GeoTIFF / TIFF alongside the other sources
type: Boolean,
default: false,
},
bulkImport: { // Single/multi camera choice for bulk folder scans
type: Boolean,
default: false,
},
stereoBatchImport: { // Batch import of stereo (left/right) datasets
type: Boolean,
default: false,
},
buttonAttrs: {
type: Object,
default: () => DefaultButtonAttrs,
Expand All @@ -45,9 +57,11 @@ export default defineComponent({
},
},
setup(props) {
const menuWidth = computed(() => (props.batchMultiCamImport ? 240 : 180));
const menuWidth = computed(() => (props.batchMultiCamImport || props.largeImageImport ? 240 : 180));
const hasDropdown = computed(() => props.multiCamImport || props.bulkImport);

return {
hasDropdown,
menuWidth,
};
},
Expand Down Expand Up @@ -110,7 +124,7 @@ export default defineComponent({
</v-icon>
</div>
<v-icon
v-if="multiCamImport"
v-if="hasDropdown"
class="button-dropdown col-1"
v-on="on"
>
Expand All @@ -119,7 +133,49 @@ export default defineComponent({
</v-btn>
</template>
<v-card outlined>
<v-list dense>
<v-list
v-if="bulkImport"
dense
>
<v-list-item
style="align-items':'center"
@click="$emit('open', openType)"
>
<v-list-item-icon>
<v-icon>mdi-folder-multiple</v-icon>
</v-list-item-icon>
<v-list-item-content>
<v-list-item-title>Single Camera</v-list-item-title>
</v-list-item-content>
</v-list-item>
<v-list-item
v-if="stereoBatchImport"
style="align-items':'center"
@click="$emit('stereo-batch')"
>
<v-list-item-icon>
<v-icon>mdi-binoculars</v-icon>
</v-list-item-icon>
<v-list-item-content>
<v-list-item-title>Stereo</v-list-item-title>
</v-list-item-content>
</v-list-item>
<v-list-item
style="align-items':'center"
@click="$emit('multi-cam-batch')"
>
<v-list-item-icon>
<v-icon>mdi-folder-multiple-image</v-icon>
</v-list-item-icon>
<v-list-item-content>
<v-list-item-title>Multi Camera</v-list-item-title>
</v-list-item-content>
</v-list-item>
</v-list>
<v-list
v-else
dense
>
<v-list-item
v-if="['image-sequence', 'large-image'].includes(openType)"
style="align-items':'center"
Expand All @@ -141,7 +197,7 @@ export default defineComponent({
<v-icon>mdi-file-video</v-icon>
</v-list-item-icon>
<v-list-item-content>
<v-list-item-title>From File</v-list-item-title>
<v-list-item-title>Single File</v-list-item-title>
</v-list-item-content>
</v-list-item>
<v-list-item
Expand All @@ -156,6 +212,32 @@ export default defineComponent({
<v-list-item-title>Image List</v-list-item-title>
</v-list-item-content>
</v-list-item>
<v-tooltip
v-if="largeImageImport"
right
max-width="360"
open-delay="50"
>
<template #activator="{ on: tooltipOn }">
<v-list-item
style="align-items':'center"
v-on="tooltipOn"
@click="$emit('open', 'large-image')"
>
<v-list-item-icon>
<v-icon>mdi-map</v-icon>
</v-list-item-icon>
<v-list-item-content>
<v-list-item-title>Tiled GeoTIFF / TIFF</v-list-item-title>
</v-list-item-content>
</v-list-item>
</template>
<span>
Open a high-resolution geospatial image for tiled viewing. Supported formats:
.tif, .tiff, .geotiff. Files should include internal pyramid overviews
(COG recommended) for best performance.
</span>
</v-tooltip>
<v-list-item
style="align-items':'center"
@click="$emit('multi-cam', { stereo: true, openType })"
Expand All @@ -164,7 +246,7 @@ export default defineComponent({
<v-icon>mdi-binoculars</v-icon>
</v-list-item-icon>
<v-list-item-content>
<v-list-item-title>Stereoscopic</v-list-item-title>
<v-list-item-title>Stereo</v-list-item-title>
</v-list-item-content>
</v-list-item>
<v-list-item
Expand All @@ -175,7 +257,7 @@ export default defineComponent({
<v-icon>mdi-camera-burst</v-icon>
</v-list-item-icon>
<v-list-item-content>
<v-list-item-title>MultiCam</v-list-item-title>
<v-list-item-title>Multi Camera</v-list-item-title>
</v-list-item-content>
</v-list-item>
<v-list-item
Expand All @@ -187,7 +269,7 @@ export default defineComponent({
<v-icon>mdi-folder-multiple-image</v-icon>
</v-list-item-icon>
<v-list-item-content>
<v-list-item-title>MultiCam Batch</v-list-item-title>
<v-list-item-title>Multi Camera Batch</v-list-item-title>
</v-list-item-content>
</v-list-item>
</v-list>
Expand Down
23 changes: 16 additions & 7 deletions client/dive-common/components/ImportMultiCamBatchDialog.vue
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,20 @@ export default defineComponent({
type: String,
default: 'Choose Root Folder',
},
title: {
type: String,
default: 'Batch Multi Camera Import',
},
description: {
type: String,
default: (
'Select a top-level folder whose subfolders are collects, each holding the same '
+ 'camera subfolders (for example EO, IR, UV). One multi camera dataset is created '
+ 'per collect. Registration .json files next to the camera folders are attached '
+ 'automatically. Flat collects of *_rgb / *_ir / *_uv images become one dataset '
+ 'with a camera per modality.'
),
},
},

setup(props) {
Expand Down Expand Up @@ -233,16 +247,11 @@ export default defineComponent({
class="import-card"
>
<v-card-title class="text-h5">
Batch Multicam Import
{{ title }}
</v-card-title>
<v-card-text>
<p class="grey--text text--lighten-1">
Select a top-level folder whose subfolders are collects, each holding
the same camera subfolders (for example EO, IR, UV). One multicam
dataset is created per collect. Registration .json files next to the
camera folders are attached automatically. Flat collects of
*_rgb / *_ir / *_uv images become one dataset with a camera per
modality.
{{ description }}
</p>
<v-row
no-gutters
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ export default defineComponent({
class="import-card px-3"
>
<v-card-title class="text-h5">
Import {{ stereo ? 'Stereo' : 'Multi-Camera' }}
Import {{ stereo ? 'Stereo' : 'Multi Camera' }}
{{ dataType === 'image-sequence' ? 'Image Sequence' : 'Videos' }}
</v-card-title>
<v-card-text>
Expand Down
4 changes: 2 additions & 2 deletions client/dive-common/components/MultiCamTools.vue
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ interface CameraTrackData {
}
export default defineComponent({
name: 'MultiCamTools',
description: 'MultiCam Tools',
description: 'Multi Camera Tools',
components: { TooltipBtn },
setup() {
const selectedCamera = useSelectedCamera();
Expand Down Expand Up @@ -127,7 +127,7 @@ export default defineComponent({
<template>
<div class="mx-4">
<span class="text-body-2">
Multicam Tools for creating tracks, linking and unlinking tracks
Multi Camera Tools for creating tracks, linking and unlinking tracks
</span>
<v-divider class="my-3" />
<v-divider class="my-3" />
Expand Down
2 changes: 1 addition & 1 deletion client/dive-common/components/TrackSettingsPanel.vue
Original file line number Diff line number Diff line change
Expand Up @@ -333,7 +333,7 @@ export default defineComponent({
</v-row>
<v-divider class="my-2" />
<div class="subheading">
Multi-Camera Settings
Multi Camera Settings
</div>
<v-row
align="end"
Expand Down
4 changes: 2 additions & 2 deletions client/dive-common/multicamDisplay.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ describe('multicamDisplay', () => {
it('returns icons and tooltips', () => {
expect(getMultiCamIcon('stereo')).toBe('mdi-binoculars');
expect(getMultiCamIcon('multicam')).toBe('mdi-camera-burst');
expect(getMultiCamTooltip('stereo')).toBe('Stereoscopic dataset');
expect(getMultiCamTooltip('multicam')).toBe('Multicamera dataset');
expect(getMultiCamTooltip('stereo')).toBe('Stereo dataset');
expect(getMultiCamTooltip('multicam')).toBe('Multi Camera dataset');
});

it('orders cameras using cameraOrder when present', () => {
Expand Down
2 changes: 1 addition & 1 deletion client/dive-common/multicamDisplay.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ export function getMultiCamIcon(subType: MultiCamSubType): string {
}

export function getMultiCamTooltip(subType: MultiCamSubType): string {
return subType === 'stereo' ? 'Stereoscopic dataset' : 'Multicamera dataset';
return subType === 'stereo' ? 'Stereo dataset' : 'Multi Camera dataset';
}

/** Camera names in display order (import / storage order). */
Expand Down
Loading
Loading