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(
'TrendAngleTool.draw: startPoint=$startPoint, endPoint=$endPoint, 状态=$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);
// 绘制水平线(从起点画一条水平线到终点的X坐标)
final horizontalEndPoint = Offset(endPoint!.dx, startPoint!.dy);
canvas.drawLine(startPoint!, horizontalEndPoint, paint);
}
// 计算并显示角度
if (angle != null) {
final center = Offset((startPoint!.dx + endPoint!.dx) / 2,
(startPoint!.dy + endPoint!.dy) / 2);
final textPainter = TextPainter(
text: TextSpan(
text: '${angle!.toStringAsFixed(1)}°',
style: TextStyle(color: color, fontSize: 12),
),
textDirection: TextDirection.ltr,
);
textPainter.layout();
textPainter.paint(canvas,
center - Offset(textPainter.width / 2, textPainter.height / 2));
}
} else if (startPoint != null) {
debugPrint('绘制趋势角度起点: $startPoint');
// 绘制起点标记
canvas.drawCircle(startPoint!, 4.0, paint..style = PaintingStyle.fill);
// 绘制起点周围的小圆圈指示器
canvas.drawCircle(startPoint!, 6.0, paint..style = PaintingStyle.stroke);
}
}