fix: enabledVessels 토글 시 모델 중심 경로 재계산

- setEnabledVessels: rawCorrelationTracks로 modelCenterTrails 재빌드
- rawCorrelationTracks 필드 추가 (원본 트랙 보존)
- 선박/어구 on/off → 폴리곤 + 중심경로 + 중심점 동시 갱신

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
htlee 2026-03-31 09:56:46 +09:00
부모 c97f964f93
커밋 bf412cc897

파일 보기

@ -58,6 +58,7 @@ interface GearReplayState {
historyFrames: HistoryFrame[]; historyFrames: HistoryFrame[];
frameTimes: number[]; frameTimes: number[];
selectedGroupKey: string | null; selectedGroupKey: string | null;
rawCorrelationTracks: CorrelationVesselTrack[];
// Pre-computed layer data // Pre-computed layer data
memberTripsData: TripsLayerDatum[]; memberTripsData: TripsLayerDatum[];
@ -134,6 +135,7 @@ export const useGearReplayStore = create<GearReplayState>()(
historyFrames: [], historyFrames: [],
frameTimes: [], frameTimes: [],
selectedGroupKey: null, selectedGroupKey: null,
rawCorrelationTracks: [],
// Pre-computed layer data // Pre-computed layer data
memberTripsData: [], memberTripsData: [],
@ -178,6 +180,7 @@ export const useGearReplayStore = create<GearReplayState>()(
startTime, startTime,
endTime, endTime,
currentTime: startTime, currentTime: startTime,
rawCorrelationTracks: corrTracks,
memberTripsData: memberTrips, memberTripsData: memberTrips,
correlationTripsData: corrTrips, correlationTripsData: corrTrips,
centerTrailSegments: segments, centerTrailSegments: segments,
@ -224,7 +227,13 @@ export const useGearReplayStore = create<GearReplayState>()(
setEnabledModels: (models) => set({ enabledModels: models }), setEnabledModels: (models) => set({ enabledModels: models }),
setEnabledVessels: (vessels) => set({ enabledVessels: vessels }), setEnabledVessels: (vessels) => {
const state = get();
const modelTrails = state.historyFrames.length > 0
? buildModelCenterTrails(state.historyFrames, state.rawCorrelationTracks, state.correlationByModel, vessels, state.startTime)
: [];
set({ enabledVessels: vessels, modelCenterTrails: modelTrails });
},
setHoveredMmsi: (mmsi) => set({ hoveredMmsi: mmsi }), setHoveredMmsi: (mmsi) => set({ hoveredMmsi: mmsi }),
setShowTrails: (show) => set({ showTrails: show }), setShowTrails: (show) => set({ showTrails: show }),
@ -250,7 +259,7 @@ export const useGearReplayStore = create<GearReplayState>()(
corrTracks: corrTracks.length, corrTracks: corrTracks.length,
}); });
const modelTrails = buildModelCenterTrails(state.historyFrames, corrTracks, byModel, state.enabledVessels, state.startTime); const modelTrails = buildModelCenterTrails(state.historyFrames, corrTracks, byModel, state.enabledVessels, state.startTime);
set({ correlationByModel: byModel, correlationTripsData: corrTrips, modelCenterTrails: modelTrails }); set({ correlationByModel: byModel, correlationTripsData: corrTrips, modelCenterTrails: modelTrails, rawCorrelationTracks: corrTracks });
}, },
reset: () => { reset: () => {
@ -268,6 +277,7 @@ export const useGearReplayStore = create<GearReplayState>()(
historyFrames: [], historyFrames: [],
frameTimes: [], frameTimes: [],
selectedGroupKey: null, selectedGroupKey: null,
rawCorrelationTracks: [],
memberTripsData: [], memberTripsData: [],
correlationTripsData: [], correlationTripsData: [],
centerTrailSegments: [], centerTrailSegments: [],