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(
      '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: 没有可绘制的点');
  }
}