268 lines
4.6 KiB
TypeScript
268 lines
4.6 KiB
TypeScript
/**
|
||
* 罗盘类型定义
|
||
*/
|
||
|
||
/**
|
||
* 文字径向位置
|
||
*/
|
||
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<string, string>;
|
||
}
|
||
|
||
/**
|
||
* 中心图标配置
|
||
*/
|
||
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;
|
||
}
|