carotid_imt.dart 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. import 'dart:ui';
  2. import 'package:fis_measure/interfaces/date_types/point.dart';
  3. import 'package:fis_measure/interfaces/enums/items.dart';
  4. import 'package:fis_measure/interfaces/process/items/item.dart';
  5. import 'package:fis_measure/interfaces/process/workspace/point_info.dart';
  6. import 'package:fis_measure/process/calcuators/shell_calcuator.dart';
  7. import 'package:fis_measure/process/items/item.dart';
  8. import 'package:fis_measure/utils/canvas.dart';
  9. import '../items/item_feature.dart';
  10. class CarotidIMT extends MeasureItem<CarotidIMTFeature> {
  11. CarotidIMT(ItemMeta meta, IMeasureItem? parent) : super(meta, parent);
  12. static CarotidIMT createMeasureRect(ItemMeta meta, [IMeasureItem? parent]) {
  13. CarotidIMT measureRect = CarotidIMT(meta, parent);
  14. measureRect.calculator = ShellCal(measureRect);
  15. return measureRect;
  16. }
  17. @override
  18. bool onExecuteMouse(PointInfo args) {
  19. if (state == ItemStates.finished) {
  20. if (args.pointType == PointInfoType.mouseDown) {
  21. state = ItemStates.waiting;
  22. }
  23. }
  24. if (state == ItemStates.waiting) {
  25. if (args.pointType == PointInfoType.mouseDown) {
  26. handleMouseDownWhileWaiting(args);
  27. }
  28. } else if (state == ItemStates.running) {
  29. if (args.pointType == PointInfoType.mouseUp) return false;
  30. feature?.endPoint = args;
  31. if (args.pointType == PointInfoType.mouseDown) {
  32. doCalculate();
  33. ///TODO 能否可以不加 delay,直接执行(此处是为了 cal 内 ref.feature!.lowerPoints = lowerPoints; 能够执行完成)
  34. Future.delayed(const Duration(milliseconds: 500), () {
  35. doFeatureFinish();
  36. });
  37. }
  38. }
  39. return true;
  40. }
  41. @override
  42. bool onExecuteTouch(PointInfo args) {
  43. // TODO: implement onExecuteTouch
  44. throw UnimplementedError();
  45. }
  46. void handleMouseDownWhileWaiting(PointInfo args) {
  47. // TODO: 判断是否当前area
  48. // 转换为Area逻辑位置
  49. final point = args.toAreaLogicPoint();
  50. feature = CarotidIMTFeature(this, point, point);
  51. if (args.hostVisualArea != null) {
  52. feature!.hostVisualArea = args.hostVisualArea;
  53. }
  54. state = ItemStates.running;
  55. }
  56. }
  57. class CarotidIMTFeature extends MeasureItemFeature {
  58. CarotidIMTFeature(
  59. IMeasureItem refItem,
  60. DPoint startPoint,
  61. DPoint endPoint,
  62. ) : super(refItem) {
  63. innerPoints.add(startPoint);
  64. innerPoints.add(endPoint);
  65. }
  66. /// 起点
  67. DPoint get startPoint => innerPoints[0];
  68. set startPoint(DPoint value) => innerPoints[0] = value;
  69. /// 终点
  70. DPoint get endPoint => innerPoints[1];
  71. set endPoint(DPoint value) => innerPoints[1] = value;
  72. List<List<Offset>> offsetsList = [];
  73. @override
  74. void paint(Canvas canvas, Size size) {
  75. if (startPoint == endPoint) return;
  76. var idText = '$id.${refItem.briefAnnotation}';
  77. drawId(canvas, size, idText);
  78. final startOffset = convert2ViewPoint(size, startPoint).toOffset();
  79. drawVertex(canvas, startOffset);
  80. final endOffset = convert2ViewPoint(size, endPoint).toOffset();
  81. canvas.drawDashRect(startOffset, endOffset, 1, 10, paintPan);
  82. drawVertex(canvas, endOffset, isActive);
  83. //绘制点集连线
  84. for (var offsets in offsetsList) {
  85. canvas.drawPointsLine(offsets, paintPan);
  86. }
  87. }
  88. }