feat:添加按数字涂颜色

This commit is contained in:
R524809
2025-12-02 11:34:08 +08:00
parent 698109e6f5
commit 425eccea21
52 changed files with 1446 additions and 65 deletions
@@ -1,15 +1,14 @@
import { BaseMathDrawService } from './baseMathDraw';
import { drawNumberPreview } from './numberPreviewDraw';
import { drawNumberContent } from './numberContentDraw';
import { drawNumberWriteContent } from './numberWriteDraw';
import { drawNumberColorContent } from './numberColorContentDraw';
/**
* 数字涂色绘制服务
* 组合使用基础绘制服务、预览区域绘制服务和内容区域绘制服务
* 数字涂色绘制服务
* 组合使用基础绘制服务和内容区域绘制服务
*/
class NumberColorDraw extends BaseMathDrawService {
selectedNumber: number;
functionId: string; // 功能ID,用于判断绘制类型
colorData: {
numbers: number[];
} | null;
constructor(
canvas: Canvas,
@@ -17,17 +16,19 @@ class NumberColorDraw extends BaseMathDrawService {
options?: Record<string, any>,
) {
super(canvas, ctx, options);
this.selectedNumber = 0;
this.functionId = options?.functionId || 'number-find';
this.colorData = null;
}
async draw(selectedNumber: number) {
if (selectedNumber <= 0 || selectedNumber > 10) {
async draw(
colorData: { numbers: number[] },
patternType: string = 'circle', // 'circle' 或 'caterpillar'
) {
if (!colorData || !colorData.numbers) {
return;
}
this.setPrintConfig();
this.selectedNumber = selectedNumber;
this.colorData = colorData;
this.clear();
this.setPaper();
@@ -38,38 +39,16 @@ class NumberColorDraw extends BaseMathDrawService {
this.drawMiniHeader();
}
// 绘制预览区域
// 绘制内容区域(按数字涂颜色)
this.drawDivider();
await drawNumberPreview({
await drawNumberColorContent({
canvas: this.canvas,
ctx: this.ctx,
selectedNumber: this.selectedNumber,
colorData: this.colorData,
canvasWidth: this.canvasWidth,
startY: this.currentY,
onDrawn: (currentY) => {
this.currentY = currentY;
},
patternType,
});
// 绘制内容区域(根据 functionId 选择不同的绘制方法)
this.drawDivider();
if (this.functionId === 'number-write') {
// 书写类型:绘制书写行
drawNumberWriteContent({
ctx: this.ctx,
selectedNumber: this.selectedNumber,
canvasWidth: this.canvasWidth,
startY: this.currentY,
});
} else {
// 默认类型(number-find):绘制数字涂色内容
drawNumberContent({
ctx: this.ctx,
selectedNumber: this.selectedNumber,
canvasWidth: this.canvasWidth,
startY: this.currentY,
});
}
}
}