This commit is contained in:
gpt-engineer-app[bot]
2026-02-27 01:13:10 +00:00
parent 1709a8e9e4
commit 379f3f96e6
5 changed files with 235 additions and 14 deletions
+48
View File
@@ -17,6 +17,19 @@ type AnchorMode = 'tracking' | 'manual' | 'fine-tuning';
type InspectionResult = 'pending' | 'approved' | 'rejected';
type RenderMode = 'solid' | 'wireframe';
export interface MeasurePoint {
x: number;
y: number;
z: number;
}
export interface Measurement {
id: string;
pointA: MeasurePoint;
pointB: MeasurePoint;
distanceMM: number;
}
export interface ChecklistItem {
id: string;
label: string;
@@ -60,6 +73,14 @@ interface ModelStore {
setChecklistItemNote: (id: string, note: string) => void;
setChecklistItemAudio: (id: string, audioUrl: string | null) => void;
resetChecklist: () => void;
measureMode: boolean;
setMeasureMode: (on: boolean) => void;
measurePoints: MeasurePoint[];
addMeasurePoint: (p: MeasurePoint) => void;
measurements: Measurement[];
clearMeasurements: () => void;
removeMeasurement: (id: string) => void;
}
const defaultFineTuning: FineTuning = { posX: 0, posY: 0, posZ: 0, rotY: 0 };
@@ -104,4 +125,31 @@ export const useModelStore = create<ModelStore>((set) => ({
),
})),
resetChecklist: () => set({ checklist: defaultChecklist.map(i => ({ ...i })) }),
measureMode: false,
setMeasureMode: (measureMode) => set({ measureMode, measurePoints: [] }),
measurePoints: [],
addMeasurePoint: (p) => set((state) => {
const points = [...state.measurePoints, p];
if (points.length === 2) {
const [a, b] = points;
const dx = (a.x - b.x) * 1000;
const dy = (a.y - b.y) * 1000;
const dz = (a.z - b.z) * 1000;
const distanceMM = Math.sqrt(dx * dx + dy * dy + dz * dz);
const measurement: Measurement = {
id: `m_${Date.now()}`,
pointA: a,
pointB: b,
distanceMM,
};
return { measurePoints: [], measurements: [...state.measurements, measurement] };
}
return { measurePoints: points };
}),
measurements: [],
clearMeasurements: () => set({ measurements: [], measurePoints: [] }),
removeMeasurement: (id) => set((state) => ({
measurements: state.measurements.filter(m => m.id !== id),
})),
}));