trace.dart 5.9 KB

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