draw method

  1. @override
void draw(
  1. Canvas canvas,
  2. Size size,
  3. double scaleX,
  4. double scrollX,
  5. double getX(
    1. double
    ),
  6. double getY(
    1. double
    ),
)
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);
  }
}