trace.dart 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. import 'package:fis_measure/interfaces/date_types/point.dart';
  2. import 'package:fis_measure/interfaces/date_types/vector.dart';
  3. import 'package:fis_measure/interfaces/process/items/terms.dart';
  4. import 'package:fis_measure/process/calcuators/formulas/general.dart';
  5. import 'package:fis_measure/process/items/item_feature.dart';
  6. import 'package:fis_measure/process/primitives/multi_method/multiple_trace.dart';
  7. import 'calculator.dart';
  8. class TraceCal extends Calculator<TraceItemAbstract, double> {
  9. TraceCal(TraceItemAbstract ref) : super(ref);
  10. @override
  11. void calculate() {
  12. if (ref.feature == null) return;
  13. final feature = ref.feature!;
  14. final viewport = feature.hostVisualArea!.viewport!;
  15. // 加入画布偏移量
  16. final canvasOffset = feature.hostVisualArea!.layoutRegion!.topLeft;
  17. //加入坐标系偏移量
  18. final coordinateOffset = viewport.region;
  19. final regionPoints = feature.innerPoints
  20. .map((e) => viewport
  21. .convert(
  22. e.clone().addVector(DVector(-canvasOffset.x, -canvasOffset.y)))
  23. .addVector(DVector(coordinateOffset.left, -coordinateOffset.top)))
  24. .toList();
  25. final yFlippedPoints = regionPoints.map((e) => DPoint(e.x, -e.y)).toList();
  26. double fakeOutputDate = 0;
  27. var countVTIResult = GeneralFormulas.countVTI(yFlippedPoints);
  28. var outputVTI = countVTIResult[0];
  29. var outputVTIMean = countVTIResult[0];
  30. var outputTiEnv = countVTIResult[1];
  31. var outputTAMAX = countVTIResult[2];
  32. var outputTAMEAN = countVTIResult[2];
  33. var outputVelocityMax = countVTIResult[3];
  34. var outputVelocityMean = countVTIResult[3];
  35. var outputMPG = countVTIResult[4];
  36. var outputMMPG = countVTIResult[4];
  37. var outputHR = countVTIResult[5];
  38. for (var output in ref.meta.outputs) {
  39. ///TODO:[Gavin] 实现以下计算逻辑
  40. switch (output.name) {
  41. case MeasureTerms.TAMAX:
  42. feature.updateFloatValue(output, outputTAMAX, output.unit);
  43. break;
  44. case MeasureTerms.TAMEAN:
  45. feature.updateFloatValue(output, outputTAMEAN, output.unit);
  46. break;
  47. case MeasureTerms.PS:
  48. feature.updateFloatValue(output, fakeOutputDate, output.unit);
  49. break;
  50. case MeasureTerms.ED:
  51. feature.updateFloatValue(output, fakeOutputDate, output.unit);
  52. break;
  53. case MeasureTerms.MD:
  54. feature.updateFloatValue(output, fakeOutputDate, output.unit);
  55. break;
  56. case MeasureTerms.HeartRate:
  57. feature.updateFloatValue(output, outputHR, output.unit);
  58. break;
  59. case MeasureTerms.Acceleration:
  60. feature.updateFloatValue(output, fakeOutputDate, output.unit);
  61. break;
  62. case MeasureTerms.AT:
  63. feature.updateFloatValue(output, fakeOutputDate, output.unit);
  64. break;
  65. case MeasureTerms.PSED:
  66. feature.updateFloatValue(output, fakeOutputDate, output.unit);
  67. break;
  68. case MeasureTerms.EDPS:
  69. feature.updateFloatValue(output, fakeOutputDate, output.unit);
  70. break;
  71. case MeasureTerms.PI:
  72. feature.updateFloatValue(output, fakeOutputDate, output.unit);
  73. break;
  74. case MeasureTerms.PIMD:
  75. feature.updateFloatValue(output, fakeOutputDate, output.unit);
  76. break;
  77. case MeasureTerms.RI:
  78. feature.updateFloatValue(output, fakeOutputDate, output.unit);
  79. break;
  80. case MeasureTerms.RIMD:
  81. feature.updateFloatValue(output, fakeOutputDate, output.unit);
  82. break;
  83. case MeasureTerms.MaxPG:
  84. feature.updateFloatValue(output, fakeOutputDate, output.unit);
  85. break;
  86. case MeasureTerms.VelocityMax:
  87. feature.updateFloatValue(output, outputVelocityMax, output.unit);
  88. break;
  89. case MeasureTerms.VelocityMean:
  90. feature.updateFloatValue(output, outputVelocityMean, output.unit);
  91. break;
  92. case MeasureTerms.PeakPG:
  93. feature.updateFloatValue(output, fakeOutputDate, output.unit);
  94. break;
  95. case MeasureTerms.VTI:
  96. feature.updateFloatValue(output, outputVTI, output.unit);
  97. break;
  98. case MeasureTerms.VTIMean:
  99. feature.updateFloatValue(output, outputVTIMean, output.unit);
  100. break;
  101. case MeasureTerms.MPG:
  102. feature.updateFloatValue(output, outputMPG, output.unit);
  103. break;
  104. case MeasureTerms.MMPG:
  105. feature.updateFloatValue(output, outputMMPG, output.unit);
  106. break;
  107. case MeasureTerms.TiEnv:
  108. // var outputTiEnv = GeneralFormulas.countEnvelopeTime(points);
  109. feature.updateFloatValue(output, outputTiEnv, output.unit);
  110. break;
  111. // case MeasureTerms.EVEL:
  112. // feature.updateFloatValue(output, fakeOutputDate, output.unit);
  113. // break;
  114. // case MeasureTerms.AVEL:
  115. // feature.updateFloatValue(output, fakeOutputDate, output.unit);
  116. // break;
  117. // case MeasureTerms.EARatio:
  118. // feature.updateFloatValue(output, fakeOutputDate, output.unit);
  119. // break;
  120. // case MeasureTerms.DT:
  121. // feature.updateFloatValue(output, fakeOutputDate, output.unit);
  122. // break;
  123. // case MeasureTerms.PHT:
  124. // feature.updateFloatValue(output, fakeOutputDate, output.unit);
  125. // break;
  126. // case MeasureTerms.VA:
  127. // feature.updateFloatValue(output, fakeOutputDate, output.unit);
  128. // break;
  129. // case MeasureTerms.ADur:
  130. // feature.updateFloatValue(output, fakeOutputDate, output.unit);
  131. // break;
  132. // case MeasureTerms.ATDTRatio:
  133. // feature.updateFloatValue(output, fakeOutputDate, output.unit);
  134. // break;
  135. // case MeasureTerms.ATETRatio:
  136. // feature.updateFloatValue(output, fakeOutputDate, output.unit);
  137. // break;
  138. // case MeasureTerms.Trace:
  139. // feature.updateFloatValue(output, fakeOutputDate, output.unit);
  140. // break;
  141. default:
  142. break;
  143. }
  144. }
  145. }
  146. static List<DPoint> getFeatureYFlippedPoints(MeasureItemFeature feature) {
  147. final viewport = feature.hostVisualArea!.viewport!;
  148. // 加入画布偏移量
  149. final canvasOffset = feature.hostVisualArea!.layoutRegion!.topLeft;
  150. //加入坐标系偏移量
  151. final coordinateOffset = viewport.region;
  152. final regionPoints = feature.innerPoints
  153. .map((e) => viewport
  154. .convert(
  155. e.clone().addVector(DVector(-canvasOffset.x, -canvasOffset.y)))
  156. .addVector(DVector(coordinateOffset.left, -coordinateOffset.top)))
  157. .toList();
  158. final points = regionPoints.map((e) => DPoint(e.x, -e.y)).toList();
  159. return points;
  160. }
  161. static List<double> getCountVTI(MeasureItemFeature feature) {
  162. final yFlippedPoints = getFeatureYFlippedPoints(feature);
  163. final result = GeneralFormulas.countVTI(yFlippedPoints);
  164. return result;
  165. }
  166. }