igurielidze 1f46c89479 Remove all vertical (_v) symbol variants from codebase
Users can rotate any symbol manually — the pre-rotated _v variants
were redundant. Removed from SYMBOLS array, PRIORITY_TYPES,
SPACING_EXEMPT, RECT_CONVEYANCE, OVERLAY_IDS, OUTDATED_SIZES,
and all type-check functions.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 18:47:26 +04:00

80 lines
2.0 KiB
TypeScript

import type { PlacedSymbol, EpcWaypoint } from './types.js';
import { SYMBOLS } from './symbols.js';
/** Map of symbolId → current default {w, h} for migration */
const DEFAULT_SIZES = new Map(SYMBOLS.map(s => [s.id, { w: s.w, h: s.h }]));
/** Known outdated defaults: symbolId → [{oldW, oldH}] */
const OUTDATED_SIZES: Record<string, { w: number; h: number }[]> = {
photoeye: [{ w: 56, h: 20 }, { w: 30, h: 14 }],
};
/** JSON shape stored in localStorage / exported JSON files */
export interface SerializedSymbol {
symbolId: string;
name: string;
label?: string;
file: string;
x: number;
y: number;
w: number;
h: number;
w2?: number;
rotation?: number;
mirrored?: boolean;
curveAngle?: number;
epcWaypoints?: EpcWaypoint[];
pdpCBs?: number[];
}
export function serializeSymbol(sym: PlacedSymbol): SerializedSymbol {
return {
symbolId: sym.symbolId,
name: sym.name,
label: sym.label || undefined,
file: sym.file,
x: sym.x,
y: sym.y,
w: sym.w,
h: sym.h,
w2: sym.w2,
rotation: sym.rotation || undefined,
mirrored: sym.mirrored || undefined,
curveAngle: sym.curveAngle,
epcWaypoints: sym.epcWaypoints,
pdpCBs: sym.pdpCBs,
};
}
export function deserializeSymbol(data: SerializedSymbol, id: number): PlacedSymbol {
let { w, h } = data;
// Migrate outdated default sizes to current defaults
const outdated = OUTDATED_SIZES[data.symbolId];
if (outdated) {
const current = DEFAULT_SIZES.get(data.symbolId);
if (current && outdated.some(o => o.w === w && o.h === h)) {
w = current.w;
h = current.h;
}
}
return {
id,
symbolId: data.symbolId,
name: data.name,
label: data.label || '',
file: data.file?.replace('_no_comm.svg', '.svg') || data.file,
x: data.x,
y: data.y,
w,
h,
w2: data.w2,
rotation: data.rotation || 0,
mirrored: data.mirrored || false,
curveAngle: data.curveAngle,
epcWaypoints: data.epcWaypoints,
pdpCBs: data.pdpCBs,
};
}