export type Vec2 = [number, number]; export type LayerObjectType = 'line' | 'room' | 'curve' | 'object'; export type Vec2Box = [Vec2, Vec2]; export interface LineSegment { start?: Vec2; end: Vec2; } export interface BezierSegment extends LineSegment { startControl: Vec2; endControl: Vec2; } export interface LayerObject { id: number; databaseId?: number; name: string; visible: boolean; selected: boolean; type: LayerObjectType; } export interface Line extends LayerObject { segments: LineSegment[]; width: number; color: string; render?: Path2D; lineCap?: CanvasLineCap; lineJoin?: CanvasLineJoin; closed?: boolean; lineDash?: number[]; } export interface Layer { id: number; contents: LayerObject[]; name: string; color: string; visible: boolean; active: boolean; } export interface FloorDocument { id: number; name: string; width: number; height: number; layers: Layer[]; /** * Min, Max */ boundingBox?: [Vec2, Vec2]; }