Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
ab97a91
Updated lob and sigint to handle no icon for lobs
salsajeries Jun 24, 2026
6c4bfa1
Added milsymbology for getIcon
salsajeries Jun 27, 2026
5b9d914
added pml to minimap
kalynstricklin Jun 19, 2026
903535b
create video view using video ds, and update the cesium map to be tra…
kalynstricklin Jun 26, 2026
7dbc97e
add fov slider for testing frustum culling
kalynstricklin Jun 29, 2026
5c90991
Untested initial icon request
salsajeries Jun 29, 2026
de62274
Add color changing for leaflet icons
salsajeries Jun 29, 2026
98831fa
Added new foi icon, applied leaflet icon color to foi and waypoint
salsajeries Jun 29, 2026
0730a9b
Merge pull request #310 from Botts-Innovative-Research/267-leaflet-po…
salsajeries Jun 29, 2026
24ac56c
Moved round pin to waypoints directory, updated map tools status comp…
salsajeries Jun 29, 2026
1ba0c01
Merge pull request #313 from Botts-Innovative-Research/311-simplify-a…
salsajeries Jun 29, 2026
27f6840
updated v-slot items to vuetify 4
kalynstricklin Jun 30, 2026
b6b1220
Update visualization.serialization.ts
kalynstricklin Jun 30, 2026
79fc0ff
Merge pull request #316 from Botts-Innovative-Research/314-cannot-edi…
salsajeries Jun 30, 2026
f8fef48
Merge pull request #317 from Botts-Innovative-Research/315-map-visual…
salsajeries Jun 30, 2026
fd39d9d
Merge branch 'dev' into 291-decouple-lob-and-marker
salsajeries Jun 30, 2026
7d55677
Updated with latest osh-js
salsajeries Jun 30, 2026
051724b
Merge pull request #307 from Botts-Innovative-Research/291-decouple-l…
salsajeries Jun 30, 2026
ef53e71
Removed initial icon
salsajeries Jul 1, 2026
7ec026f
Merge branch 'dev' into 308-military-symbology-for-osh-viewer
salsajeries Jul 1, 2026
15fab9e
Fixed getIcon to correct property, added to iconName in pointmarker b…
salsajeries Jul 1, 2026
2c73760
Reverted map viz panel to use a default or set icon, updated customiz…
salsajeries Jul 1, 2026
f24f074
Updated sigint with async build function
salsajeries Jul 1, 2026
7ffc89e
Removed unused functions
salsajeries Jul 1, 2026
db9fbd2
Added waypoint persistence between map toggles
salsajeries Jul 1, 2026
34deeab
Merge pull request #330 from Botts-Innovative-Research/318-persist-wa…
kalynstricklin Jul 1, 2026
982a727
Added mil icon, fixed initial mil symbol
salsajeries Jul 2, 2026
f37928a
Merge branch 'dev' into 308-military-symbology-for-osh-viewer
salsajeries Jul 2, 2026
3a57017
Merge pull request #329 from Botts-Innovative-Research/308-military-s…
salsajeries Jul 2, 2026
25d419b
reorder waypoints
kalynstricklin Jun 16, 2026
314b177
refactor missionbuilder to controller pattern like geoptz + add suppo…
kalynstricklin Jun 18, 2026
c8d600e
Added minimap as its own visualization type and updated mission build…
kalynstricklin Jun 18, 2026
d4746ac
rebased off of the refactored mission builder
kalynstricklin Jun 18, 2026
d4e98bc
added pml to minimap
kalynstricklin Jun 19, 2026
cd82d57
add HUD overlay simplified, and add a free movement button option
kalynstricklin Jun 19, 2026
8f8f415
updated geoptz icon and fixed bug where couldnt edit/delete mission b…
kalynstricklin Jun 26, 2026
a6f2cdb
added pml to minimap
kalynstricklin Jun 19, 2026
54ef029
create video view using video ds, and update the cesium map to be tra…
kalynstricklin Jun 26, 2026
bc3b32a
add fov slider for testing frustum culling
kalynstricklin Jun 29, 2026
35a72dd
Merge branch 'ar-view-minimap' of github.com:Botts-Innovative-Researc…
kalynstricklin Jul 2, 2026
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
9 changes: 8 additions & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
"leaflet": "^1.9.4",
"luxon": "^3.7.2",
"mapbox-gl": "^3.12.0",
"milsymbol": "^3.0.4",
"ol": "^6.2.1",
"ol-layerswitcher": "^3.8.1",
"osh-js": "git+ssh://git@github.com/Botts-Innovative-Research/osh-js.git",
Expand Down
Binary file added public/icons/foi/domain.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
File renamed without changes
3 changes: 3 additions & 0 deletions src/components/icons/mil.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion src/lib/icons.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ export const ICON_OPTIONS: IconItem[] = [
// Waypoint
{ id: 14, label: 'Round Pin', icon: 'round-pin', category: 'waypoint' }, // Not an mdi icon
// FOI
// { id: 15, label: 'Building', icon: 'domain', category: ['foi'] },
{ id: 15, label: 'Building', icon: 'domain', category: 'foi' },
];

/**
Expand Down
119 changes: 62 additions & 57 deletions src/modules/map/components/MapToolStatus.vue
Original file line number Diff line number Diff line change
@@ -1,74 +1,79 @@
<script setup lang="ts">
import { ref } from 'vue';
import { computed, ref, watchEffect } from 'vue';
import { useMapStore } from '@/stores/mapstore';
import { useSettingsStore } from '@/stores/settingsstore';
import { ICON_BASE, ICON_OPTIONS, iconPathBuilder } from '@/lib/icons';
import { getColoredIconUrl } from '../services/colorId.service';

const mapStore = useMapStore();
const settingsStore = useSettingsStore();

const isActive = computed(() => {
return !!mapStore.isGeoPTZSelected || !!mapStore.selectedWaypoints;
});

const isHovered = ref(false);
</script>

<template>
<v-card
class="pa-2 elevation-10"
:style="{
position: 'absolute',
zIndex: 2000,
marginTop: '1%',
marginLeft: '1%',
}"
@mouseenter="isHovered = true"
@mouseleave="isHovered = false"
>
<v-card-text class="d-flex flex-column ga-2">
<!-- GeoPTZ -->
<div class="d-flex align-center ga-2">
<v-fade-transition>
<v-card
class="ma-0 elevation-10"
:style="{
position: 'absolute',
zIndex: 2000,
marginTop: '1%',
marginLeft: '1%',
}"
@mouseenter="isHovered = true"
@mouseleave="isHovered = false"
v-show="isActive"
>
<v-card-text class="d-flex flex-column ga-2 pa-2">
<!-- GeoPTZ -->
<div
class="status-dot"
:class="mapStore.isGeoPTZSelected ? 'bg-green' : 'bg-grey'"
/>

<span>GeoPTZ</span>

<transition name="fade-slide-x">
<span
v-if="isHovered"
class="ml-1 text-grey"
>
{{ mapStore.isGeoPTZSelected ? 'selected' : 'not selected' }}
</span>
</transition>
</div>

<!-- Mission Builder -->
<div class="d-flex align-center ga-2">
class="d-flex align-center ga-2"
v-show="mapStore.isGeoPTZSelected"
>
<v-icon
icon="mdi-crosshairs-gps"
color="green"
/>
<span>GeoPTZ</span>
<transition name="fade-slide-x">
<span
v-if="isHovered"
class="ml-1 text-grey"
>
cursor active
</span>
</transition>
</div>
<!-- Mission Builder -->
<div
class="status-dot"
:class="mapStore.selectedWaypoints ? 'bg-green' : 'bg-grey'"
/>

<span>Mission Builder</span>

<transition name="fade-slide-x">
<span
v-if="isHovered"
class="ml-1 text-grey"
>
{{ mapStore.selectedWaypoints ? 'selected' : 'not selected' }}
</span>
</transition>
</div>
</v-card-text>
</v-card>
class="d-flex align-center ga-2"
v-show="!!mapStore.selectedWaypoints"
>
<v-icon
icon="mdi-crosshairs-gps"
color="green"
/>
<span>Mission Builder</span>
<transition name="fade-slide-x">
<span
v-if="isHovered"
class="ml-1 text-grey"
>
cursor active
</span>
</transition>
</div>
</v-card-text>
</v-card>
</v-fade-transition>
</template>

<style scoped>
.status-dot {
width: 10px;
height: 10px;
border-radius: 50%;
flex-shrink: 0;
}

.fade-slide-x-enter-active,
.fade-slide-x-leave-active {
transition: all 0.2s ease;
Expand Down
43 changes: 31 additions & 12 deletions src/modules/map/composables/useMap.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import { Geometry, OSHVisualization } from '@/lib/OSHConnectDataStructs';
import ConSysApi from 'osh-js/source/core/datasource/consysapi/ConSysApi.datasource.js';
import { createCesiumAdapter } from '../adapters/cesium.adapter';
import { taskGeoPTZ } from '../services/geoPTZ.service';
import { MapAdapter } from '../adapters/types';
import { MapAdapter, MapPoint } from '../adapters/types';
import { createLeafletAdapter } from '../adapters/leaflet.adapter';
import { useSettingsStore } from '@/stores/settingsstore';
import { isMapLayerCompatible, SupportedMapLayer } from '../supportedMapLayers';
Expand Down Expand Up @@ -108,6 +108,15 @@ export function useMap() {
mapAdapter.value?.addLayer(foi.layer);
mapAdapter.value?.updateMarker(foi.props);
});

// Rebuild all waypoints
waypointLayers.value = [];
await Promise.all(
mapStore.missionWaypoints.map(async (waypoint: MapPoint, index: number) => {
await addWaypointLayer(waypoint, index);
})
);
drawMissionPath(mapStore.missionWaypoints);
}
watch(mapType, async () => {
await switchMap();
Expand Down Expand Up @@ -359,20 +368,30 @@ export function useMap() {

// Add waypoints
for (const [index, waypoint] of waypoints.entries()) {
const result = await createWaypointLayer(waypoint, index.toString());
if (result) {
mapAdapter.value?.addLayer(result.layer);
waypointLayers.value.push(result.layer);
if (result.props) mapAdapter.value?.updateMarker(result.props);
}
}

// Handle polyline if waypoints >= 2
if (waypoints.length >= 2) {
mapAdapter.value.drawMissionPath(waypoints);
await addWaypointLayer(waypoint, index);
}
// Draw mission path
drawMissionPath(waypoints);
}
);
async function addWaypointLayer(waypoint: MapPoint, index: number) {
if (!mapAdapter.value) return;

const result = await createWaypointLayer(waypoint, index.toString());
if (result) {
mapAdapter.value?.addLayer(result.layer);
waypointLayers.value.push(result.layer);
if (result.props) mapAdapter.value?.updateMarker(result.props);
}
}
function drawMissionPath(waypoints: MapPoint[]) {
if (!mapAdapter.value) return;

// Handle polyline if waypoints >= 2
if (waypoints.length >= 2) {
mapAdapter.value.drawMissionPath(waypoints);
}
}
function clearMission() {
for (const layer of waypointLayers.value) {
mapAdapter.value?.removeLayer(layer);
Expand Down
Loading