Files
lupin-demo/src/types.ts
2026-01-22 18:43:01 +08:00

268 lines
4.6 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 罗盘类型定义
*/
/**
* 文字径向位置
*/
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;
}