/** * 罗盘类型定义 */ /** * 文字径向位置 */ export type TextRadialPosition = 'centroid' | 'middle'; /** * 示例配置 */ export interface Example { /** 示例名称 */ name: string; /** 角度分割点(度,北为0,顺时针),必须从0开始并以360结束 */ angles: number[]; /** 圆环半径列表(从中心到外:比如 [40, 80, 120] 表示3层;第一层内半径=0) */ radii: number[]; } /** * JSON 配置根对象 */ export interface LuopanConfig { name: string; description?: string; background: string; outerRadius?: number; theme: ThemeConfig; layers: LayerConfig[]; } /** * 主题配置 */ export interface ThemeConfig { name?: string; colorPalettes: Record; } /** * 中心图标配置 */ export interface CenterIconConfig { rIcon: number; opacity: number; name: string; rotation?: number; } /** * 刻度环配置 */ export interface DegreeRingConfig { rInner: number; rOuter: number; showDegree: 0 | 1; mode: 'inner' | 'outer' | 'both'; opacity: number; tickLength: number; tickLengthStep?: number; majorTick: number; minorTick: number; microTick: number; tickColor: string; ringColor: string; } /** * 层配置(扇区层/中心图标层/刻度环层) */ export type LayerConfig = | SectorLayerConfig | CenterIconLayerConfig | DegreeRingLayerConfig; /** * 普通扇区层配置 */ export interface SectorLayerConfig { type?: 'sectors'; divisions: number; rInner: number; rOuter: number; startAngle?: number; colorRef?: string; innerFill?: 0 | 1; num?: number; interval?: number; groupSplit?: boolean; sectors?: SectorConfig[]; } /** * 中心图标层配置 */ export interface CenterIconLayerConfig { type: 'centerIcon'; centerIcon: CenterIconConfig; } /** * 刻度环层配置 */ export interface DegreeRingLayerConfig { type: 'degreeRing'; degreeRing: DegreeRingConfig; } /** * 扇区配置 */ export interface SectorConfig { content?: string; colorRef?: string; innerFill?: 0 | 1; } /** * 文本单元 */ export interface TextUnit { content: string; aStart: number; aEnd: number; isSvg: boolean; textPathId?: string; textPath?: string; svgPath?: string; fontSize?: number; isVertical?: boolean; } /** * 刻度线数据 */ export interface TickMark { angle: number; type: 'major' | 'minor' | 'micro'; length: number; startR: number; endR: number; label?: string; x1: number; y1: number; x2: number; y2: number; } /** * 刻度标签数据 */ export interface DegreeLabel { angle: number; text: string; r: number; fontSize: number; textPathId: string; textPath: string; } /** * 刻度环渲染数据 */ export interface DegreeRingData { ticks: TickMark[]; tickColor: string; ring: { rInner: number; rOuter: number; color: string; opacity: number }; labels?: DegreeLabel[]; } /** * 中心图标渲染数据 */ export interface CenterIconData { rIcon: number; opacity: number; svgPath: string; rotation: number; } /** * 扇区配置 */ export interface Sector { /** 唯一标识 */ key: string; /** 层索引 */ layerIndex: number; /** 扇区索引 */ pieIndex: number; /** 内半径 */ rInner: number; /** 外半径 */ rOuter: number; /** 起始角度(度) */ aStart: number; /** 结束角度(度) */ aEnd: number; /** 中间角度(度) */ aMidDeg: number; /** 中间角度(弧度) */ aMidRad: number; /** 形心 x 坐标 */ cx: number; /** 形心 y 坐标 */ cy: number; /** 填充颜色 */ fill: string; /** 文字颜色 */ textColor: string; /** 标签文本 */ label: string; /** SVG 路径 */ path: string; /** 内缩填色路径(可选)*/ innerFillPath?: string; /** 填色颜色(可选)*/ innerFillColor?: string; /** 文字路径 */ textPath: string; /** 文字路径ID */ textPathId: string; /** 字体大小(根据扇区尺寸动态计算) */ fontSize: number; /** 是否竖排文字 */ isVertical: boolean; /** 多文本单元 */ textUnits?: TextUnit[]; /** 是否显示与下一个扇区的分割线 */ groupSplitVisible?: boolean; /** 内容是否为 SVG */ isSvgContent?: boolean; /** SVG 文件路径 */ svgPath?: string; } /** * 极坐标点 */ export interface PolarPoint { x: number; y: number; } /** * 圆环扇形参数 */ export interface AnnularSectorParams { rInner: number; rOuter: number; aStartDeg: number; aEndDeg: number; } /** * 圆环扇形形心结果 */ export interface CentroidResult { cx: number; cy: number; rho: number; aMidDeg: number; aMidRad: number; deltaDeg: number; }