mirror of
https://github.com/PhotonVision/photonvision
synced 2026-07-05 03:21:40 +00:00
TypeCheck Frontend (#2394)
We recently had an error that would've been caught by type checking in the frontend (see #2393). This PR implements type checking so that future errors will be caught. Additionally, this PR contains miscellaneous frontend cleanup that's tangentially related to type-checking.
This commit is contained in:
@@ -1,5 +1,13 @@
|
||||
<script setup lang="ts">
|
||||
import { onBeforeUnmount, onMounted, ref, watch, watchEffect, type Ref } from "vue";
|
||||
import type {
|
||||
Scene as SceneType,
|
||||
PerspectiveCamera as PerspectiveCameraType,
|
||||
WebGLRenderer as WebGLRendererType,
|
||||
Group as GroupType,
|
||||
Object3D
|
||||
} from "three";
|
||||
import type { TrackballControls as TrackballControlsType } from "three/examples/jsm/controls/TrackballControls.js";
|
||||
const {
|
||||
AmbientLight,
|
||||
AxesHelper,
|
||||
@@ -16,7 +24,7 @@ const {
|
||||
SphereGeometry,
|
||||
WebGLRenderer
|
||||
} = await import("three");
|
||||
const { TrackballControls } = await import("three/examples/jsm/controls/TrackballControls");
|
||||
const { TrackballControls } = await import("three/examples/jsm/controls/TrackballControls.js");
|
||||
import type { BoardObservation, CameraCalibrationResult } from "@/types/SettingTypes";
|
||||
import axios from "axios";
|
||||
import { useCameraSettingsStore } from "@/stores/settings/CameraSettingsStore";
|
||||
@@ -31,12 +39,12 @@ const props = defineProps<{
|
||||
title: string;
|
||||
}>();
|
||||
|
||||
let scene: Scene | undefined;
|
||||
let camera: PerspectiveCamera | undefined;
|
||||
let renderer: WebGLRenderer | undefined;
|
||||
let controls: TrackballControls | undefined;
|
||||
let scene: SceneType | undefined;
|
||||
let camera: PerspectiveCameraType | undefined;
|
||||
let renderer: WebGLRendererType | undefined;
|
||||
let controls: TrackballControlsType | undefined;
|
||||
|
||||
const createChessboard = (obs: BoardObservation, cal: CameraCalibrationResult): Group => {
|
||||
const createChessboard = (obs: BoardObservation, cal: CameraCalibrationResult): GroupType => {
|
||||
const group = new Group();
|
||||
|
||||
if (obs.locationInImageSpace.length === 0) return group;
|
||||
@@ -194,9 +202,6 @@ const resetCamThirdPerson = () => {
|
||||
let animationFrameId: number | null = null;
|
||||
|
||||
onMounted(async () => {
|
||||
// Grab data first off
|
||||
fetchCalibrationData();
|
||||
|
||||
scene = new Scene();
|
||||
camera = new PerspectiveCamera(75, 800 / 800, 0.1, 1000);
|
||||
|
||||
@@ -256,6 +261,10 @@ onMounted(async () => {
|
||||
|
||||
controls.update();
|
||||
|
||||
// Fetch calibration only after the scene is ready so the initial draw
|
||||
// can happen immediately when the data arrives.
|
||||
await fetchCalibrationData();
|
||||
|
||||
const animate = () => {
|
||||
if (!scene || !camera || !renderer || !controls) {
|
||||
return;
|
||||
@@ -318,7 +327,7 @@ if (import.meta.hot) {
|
||||
}
|
||||
|
||||
watchEffect(() => {
|
||||
drawCalibration(calibrationData.value);
|
||||
void drawCalibration(calibrationData.value);
|
||||
});
|
||||
|
||||
watch(
|
||||
@@ -328,9 +337,9 @@ watch(
|
||||
props.resolution.height,
|
||||
useCameraSettingsStore().getCalibrationCoeffs(props.resolution)
|
||||
],
|
||||
() => {
|
||||
async () => {
|
||||
console.log("Camera or resolution changed, refetching calibration");
|
||||
fetchCalibrationData();
|
||||
await fetchCalibrationData();
|
||||
}
|
||||
);
|
||||
</script>
|
||||
|
||||
Reference in New Issue
Block a user