|
@@ -3,9 +3,10 @@ import 'package:flutter/material.dart';
|
|
|
/// 绘制30s完整心电的背景方格
|
|
|
class GridBackgroundPainterForAll extends CustomPainter {
|
|
|
final int xGridNums = 750; // 1秒25格,共30秒
|
|
|
- final int yGridNums = 120;
|
|
|
|
|
|
- GridBackgroundPainterForAll();
|
|
|
+ final int yGridNumsPerMv; // 多少格是一毫伏特 [暂未用到该参数]
|
|
|
+
|
|
|
+ GridBackgroundPainterForAll({this.yGridNumsPerMv = 5});
|
|
|
|
|
|
@override
|
|
|
void paint(Canvas canvas, Size size) {
|
|
@@ -16,6 +17,10 @@ class GridBackgroundPainterForAll extends CustomPainter {
|
|
|
|
|
|
final double xGridSize = size.width / xGridNums;
|
|
|
final double yGridSize = xGridSize;
|
|
|
+ final double centerY = size.height / 2;
|
|
|
+
|
|
|
+ /// 计算 y 轴方格数
|
|
|
+ final int yGridNums = (size.height / yGridSize).ceil();
|
|
|
|
|
|
for (int i = 0; i < xGridNums; i++) {
|
|
|
final offsetX = i * xGridSize;
|
|
@@ -26,11 +31,16 @@ class GridBackgroundPainterForAll extends CustomPainter {
|
|
|
);
|
|
|
}
|
|
|
|
|
|
- for (int i = 0; i < yGridNums; i++) {
|
|
|
- final offsetY = i * yGridSize;
|
|
|
+ for (int i = 0; i < yGridNums / 2; i++) {
|
|
|
+ final offsetY = (i * yGridSize);
|
|
|
+ canvas.drawLine(
|
|
|
+ Offset(0, centerY + offsetY),
|
|
|
+ Offset(size.width, centerY + offsetY),
|
|
|
+ gridPaint,
|
|
|
+ );
|
|
|
canvas.drawLine(
|
|
|
- Offset(0, offsetY),
|
|
|
- Offset(size.width, offsetY),
|
|
|
+ Offset(0, centerY - offsetY),
|
|
|
+ Offset(size.width, centerY - offsetY),
|
|
|
gridPaint,
|
|
|
);
|
|
|
}
|
|
@@ -59,6 +69,14 @@ class GridBackgroundPainterForAll extends CustomPainter {
|
|
|
..style = PaintingStyle.stroke
|
|
|
..strokeWidth = 2.0;
|
|
|
for (int i = 0; i < xGridNums; i++) {
|
|
|
+ if (i % 25 == 0) {
|
|
|
+ final offsetX = i * xGridSize;
|
|
|
+ canvas.drawLine(
|
|
|
+ Offset(offsetX, 0),
|
|
|
+ Offset(offsetX, size.height),
|
|
|
+ boldLinePaint,
|
|
|
+ );
|
|
|
+ }
|
|
|
if (i % 125 == 0) {
|
|
|
final offsetX = i * xGridSize;
|
|
|
canvas.drawLine(
|
|
@@ -73,8 +91,8 @@ class GridBackgroundPainterForAll extends CustomPainter {
|
|
|
text: '${i ~/ 25}秒',
|
|
|
style: TextStyle(
|
|
|
height: 1,
|
|
|
- color: const Color.fromARGB(255, 121, 121, 121),
|
|
|
- fontSize: 16,
|
|
|
+ color: const Color.fromARGB(255, 99, 99, 99),
|
|
|
+ fontSize: 25,
|
|
|
background: Paint()..color = Colors.white.withOpacity(0.5),
|
|
|
),
|
|
|
),
|
|
@@ -83,10 +101,53 @@ class GridBackgroundPainterForAll extends CustomPainter {
|
|
|
textPainter.layout();
|
|
|
textPainter.paint(
|
|
|
canvas,
|
|
|
- Offset(offsetX + 5, size.height - 20),
|
|
|
+ Offset(offsetX + 5, size.height - 30),
|
|
|
);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ /// 绘制电势差标识
|
|
|
+ const tagStartGridX = 5;
|
|
|
+ const tagStartGridY = -30;
|
|
|
+ final tagPointA =
|
|
|
+ Offset(xGridSize * tagStartGridX, centerY + yGridSize * tagStartGridY);
|
|
|
+ final tagPointB = Offset(
|
|
|
+ xGridSize * (tagStartGridX + 1), centerY + yGridSize * tagStartGridY);
|
|
|
+ final tagPointC = Offset(xGridSize * (tagStartGridX + 1),
|
|
|
+ centerY + yGridSize * (tagStartGridY - 5));
|
|
|
+ final tagPointD = Offset(xGridSize * (tagStartGridX + 3),
|
|
|
+ centerY + yGridSize * (tagStartGridY - 5));
|
|
|
+ final tagPointE = Offset(
|
|
|
+ xGridSize * (tagStartGridX + 3), centerY + yGridSize * tagStartGridY);
|
|
|
+ final tagPointF = Offset(
|
|
|
+ xGridSize * (tagStartGridX + 4), centerY + yGridSize * tagStartGridY);
|
|
|
+
|
|
|
+ final tagPaint = Paint()
|
|
|
+ ..color = const Color.fromARGB(255, 99, 99, 99)
|
|
|
+ ..style = PaintingStyle.stroke
|
|
|
+ ..strokeWidth = 3.0;
|
|
|
+ canvas.drawLine(tagPointA, tagPointB, tagPaint);
|
|
|
+ canvas.drawLine(tagPointB, tagPointC, tagPaint);
|
|
|
+ canvas.drawLine(tagPointC, tagPointD, tagPaint);
|
|
|
+ canvas.drawLine(tagPointD, tagPointE, tagPaint);
|
|
|
+ canvas.drawLine(tagPointE, tagPointF, tagPaint);
|
|
|
+ final textPainter = TextPainter(
|
|
|
+ text: TextSpan(
|
|
|
+ text: '1mV',
|
|
|
+ style: TextStyle(
|
|
|
+ height: 1,
|
|
|
+ color: const Color.fromARGB(255, 99, 99, 99),
|
|
|
+ fontSize: 20,
|
|
|
+ background: Paint()..color = Colors.white.withOpacity(0.5),
|
|
|
+ ),
|
|
|
+ ),
|
|
|
+ textDirection: TextDirection.ltr,
|
|
|
+ );
|
|
|
+ textPainter.layout();
|
|
|
+ textPainter.paint(
|
|
|
+ canvas,
|
|
|
+ Offset(tagPointA.dx - 8, tagPointA.dy + 10),
|
|
|
+ );
|
|
|
}
|
|
|
|
|
|
@override
|