draw method
void
draw()
override
Implementation
@override
void draw(Canvas canvas, Size size, double scaleX, double scrollX,
double Function(double) getX, double Function(double) getY) {
debugPrint(
'TrendLineTool.draw: startPoint=$startPoint, endPoint=$endPoint, 完成状态=$isComplete, 状态=$state');
final paint = Paint()
..color = color.withOpacity(state == DrawingToolState.drawing ? 0.6 : 1.0)
..strokeWidth = strokeWidth
..style = PaintingStyle.stroke;
if (startPoint != null && endPoint != null) {
debugPrint('绘制完整趋势线: 从 $startPoint 到 $endPoint');
// 如果是预览状态,绘制虚线
if (state == DrawingToolState.drawing) {
_drawDashedLine(canvas, startPoint!, endPoint!, paint);
} else {
canvas.drawLine(startPoint!, endPoint!, paint);
}
// 如果需要延伸
if (extendLeft || extendRight) {
final dx = endPoint!.dx - startPoint!.dx;
final dy = endPoint!.dy - startPoint!.dy;
if (extendLeft && dx != 0) {
final extendedStart =
Offset(0, startPoint!.dy - (startPoint!.dx * dy / dx));
canvas.drawLine(startPoint!, extendedStart, paint);
}
if (extendRight && dx != 0) {
final extendedEnd = Offset(size.width,
endPoint!.dy + ((size.width - endPoint!.dx) * dy / dx));
canvas.drawLine(endPoint!, extendedEnd, paint);
}
}
} else if (startPoint != null) {
debugPrint('绘制趋势线起点: $startPoint');
// 绘制起点标记
canvas.drawCircle(startPoint!, 4.0, paint..style = PaintingStyle.fill);
// 绘制起点周围的小圆圈指示器
canvas.drawCircle(startPoint!, 6.0, paint..style = PaintingStyle.stroke);
} else {
debugPrint('TrendLineTool.draw: 没有可绘制的点');
}
}