From 080700f721aa0f28238555ddccf177276c502b18 Mon Sep 17 00:00:00 2001 From: "douboer@gmail.com" Date: Thu, 22 Jan 2026 21:12:46 +0800 Subject: [PATCH] update at 2026-01-22 21:12:46 --- src/colorResolver.ts | 5 +++++ tests/colorResolver.test.ts | 25 +++++++++++++++++++++---- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/src/colorResolver.ts b/src/colorResolver.ts index e71279c..5aca46c 100644 --- a/src/colorResolver.ts +++ b/src/colorResolver.ts @@ -54,6 +54,11 @@ export class ColorResolver { } const color = this.resolveColor(layer.colorRef); + if (typeof layer.num === 'number' && layer.num > 0) { + const interval = layer.interval ?? 0; + return applyPatternColoring(layer.divisions, color, layer.num, interval); + } + for (let i = 0; i < layer.divisions; i++) { colorMap.set(i, color); } diff --git a/tests/colorResolver.test.ts b/tests/colorResolver.test.ts index aa8e2eb..eab5293 100644 --- a/tests/colorResolver.test.ts +++ b/tests/colorResolver.test.ts @@ -27,20 +27,37 @@ describe('colorResolver', () => { expect(map.has(5)).toBe(false); }); - it('resolveLayerColors 在提供 colorRef 时覆盖全部扇区', () => { + it('resolveLayerColors 在提供 colorRef 且无 num 时覆盖全部扇区', () => { const resolver = new ColorResolver(theme, '#000000'); const layer: SectorLayerConfig = { divisions: 4, rInner: 0, rOuter: 10, colorRef: '火', + }; + const map = resolver.resolveLayerColors(layer); + expect(map.size).toBe(4); + expect(map.get(0)).toBe('#E53935'); + expect(map.get(3)).toBe('#E53935'); + }); + + it('resolveLayerColors 在提供 num 时使用规律填色', () => { + const resolver = new ColorResolver(theme, '#000000'); + const layer: SectorLayerConfig = { + divisions: 6, + rInner: 0, + rOuter: 10, + colorRef: '火', num: 2, interval: 1, }; const map = resolver.resolveLayerColors(layer); - expect(map.size).toBe(4); - expect(map.get(0)).toBe('#E53935'); - expect(map.get(3)).toBe('#E53935'); + expect(map.has(0)).toBe(true); + expect(map.has(1)).toBe(true); + expect(map.has(2)).toBe(false); + expect(map.has(3)).toBe(true); + expect(map.has(4)).toBe(true); + expect(map.has(5)).toBe(false); }); it('resolveSectorColor 应遵循 sector > layer > background 优先级', () => {