|
@@ -1,5 +1,9 @@
|
|
|
+import 'package:fis_measure/interfaces/date_types/point.dart';
|
|
|
+import 'package:fis_measure/interfaces/date_types/vector.dart';
|
|
|
import 'package:fis_measure/interfaces/process/items/terms.dart';
|
|
|
+import 'package:fis_measure/process/calcuators/formulas/general.dart';
|
|
|
import 'package:fis_measure/process/primitives/multi_method/multiple_trace.dart';
|
|
|
+import 'package:flutter/cupertino.dart';
|
|
|
import 'calculator.dart';
|
|
|
|
|
|
class TraceCal extends Calculator<TraceItemAbstract, double> {
|
|
@@ -11,16 +15,139 @@ class TraceCal extends Calculator<TraceItemAbstract, double> {
|
|
|
|
|
|
final feature = ref.feature!;
|
|
|
final viewport = feature.hostVisualArea!.viewport!;
|
|
|
+ // 加入画布偏移量
|
|
|
+ final canvasOffset = feature.hostVisualArea!.layoutRegion!.topLeft;
|
|
|
+ //加入坐标系偏移量
|
|
|
+ final coordinateOffset = viewport.region;
|
|
|
+ final regionPoints = feature.innerPoints
|
|
|
+ .map((e) => viewport
|
|
|
+ .convert(
|
|
|
+ e.clone().addVector(DVector(-canvasOffset.x, -canvasOffset.y)))
|
|
|
+ .addVector(DVector(coordinateOffset.left, -coordinateOffset.top)))
|
|
|
+ .toList();
|
|
|
final points = feature.innerPoints.map((e) => viewport.convert(e)).toList();
|
|
|
-
|
|
|
+ // 翻转y轴坐标
|
|
|
+ final yFlippedPoints = regionPoints.map((e) => DPoint(e.x, -e.y)).toList();
|
|
|
+ // final points_X = points.map((e) => e.x).toList();
|
|
|
+ // print("横坐标集合: $points_X");
|
|
|
double fakeOutputDate = 0;
|
|
|
+ var countVTIResult = GeneralFormulas.countVTI(yFlippedPoints);
|
|
|
+ var outputVTI = countVTIResult[0];
|
|
|
+ var outputVTIMean = countVTIResult[0];
|
|
|
+ var outputTiEnv = countVTIResult[1];
|
|
|
+ var outputTAMAX = countVTIResult[2];
|
|
|
+ var outputTAMEAN = countVTIResult[2];
|
|
|
+ var outputVelocityMax = countVTIResult[3];
|
|
|
+ var outputVelocityMean = countVTIResult[3];
|
|
|
+ var outputMPG = countVTIResult[4];
|
|
|
+ var outputMMPG = countVTIResult[4];
|
|
|
+ var outputHR = countVTIResult[5];
|
|
|
+
|
|
|
for (var output in ref.meta.outputs) {
|
|
|
- if (output.name == MeasureTerms.Slope) {
|
|
|
- feature.updateFloatValue(output, fakeOutputDate, output.unit);
|
|
|
- } else if (output.name == MeasureTerms.Timespan) {
|
|
|
- feature.updateFloatValue(output, fakeOutputDate, output.unit);
|
|
|
- } else if (output.name == MeasureTerms.Distance) {
|
|
|
- feature.updateFloatValue(output, fakeOutputDate, output.unit);
|
|
|
+ ///TODO:[Gavin] 实现以下计算逻辑
|
|
|
+ switch (output.name) {
|
|
|
+ case MeasureTerms.TAMAX:
|
|
|
+ feature.updateFloatValue(output, outputTAMAX, output.unit);
|
|
|
+ break;
|
|
|
+ case MeasureTerms.TAMEAN:
|
|
|
+ feature.updateFloatValue(output, outputTAMEAN, output.unit);
|
|
|
+ break;
|
|
|
+ case MeasureTerms.PS:
|
|
|
+ feature.updateFloatValue(output, fakeOutputDate, output.unit);
|
|
|
+ break;
|
|
|
+ case MeasureTerms.ED:
|
|
|
+ feature.updateFloatValue(output, fakeOutputDate, output.unit);
|
|
|
+ break;
|
|
|
+ case MeasureTerms.MD:
|
|
|
+ feature.updateFloatValue(output, fakeOutputDate, output.unit);
|
|
|
+ break;
|
|
|
+ case MeasureTerms.HeartRate:
|
|
|
+ feature.updateFloatValue(output, outputHR, output.unit);
|
|
|
+ break;
|
|
|
+ case MeasureTerms.Acceleration:
|
|
|
+ feature.updateFloatValue(output, fakeOutputDate, output.unit);
|
|
|
+ break;
|
|
|
+ case MeasureTerms.AT:
|
|
|
+ feature.updateFloatValue(output, fakeOutputDate, output.unit);
|
|
|
+ break;
|
|
|
+ case MeasureTerms.PSED:
|
|
|
+ feature.updateFloatValue(output, fakeOutputDate, output.unit);
|
|
|
+ break;
|
|
|
+ case MeasureTerms.EDPS:
|
|
|
+ feature.updateFloatValue(output, fakeOutputDate, output.unit);
|
|
|
+ break;
|
|
|
+ case MeasureTerms.PI:
|
|
|
+ feature.updateFloatValue(output, fakeOutputDate, output.unit);
|
|
|
+ break;
|
|
|
+ case MeasureTerms.PIMD:
|
|
|
+ feature.updateFloatValue(output, fakeOutputDate, output.unit);
|
|
|
+ break;
|
|
|
+ case MeasureTerms.RI:
|
|
|
+ feature.updateFloatValue(output, fakeOutputDate, output.unit);
|
|
|
+ break;
|
|
|
+ case MeasureTerms.RIMD:
|
|
|
+ feature.updateFloatValue(output, fakeOutputDate, output.unit);
|
|
|
+ break;
|
|
|
+ case MeasureTerms.MaxPG:
|
|
|
+ feature.updateFloatValue(output, fakeOutputDate, output.unit);
|
|
|
+ break;
|
|
|
+ case MeasureTerms.VelocityMax:
|
|
|
+ feature.updateFloatValue(output, outputVelocityMax, output.unit);
|
|
|
+ break;
|
|
|
+ case MeasureTerms.VelocityMean:
|
|
|
+ feature.updateFloatValue(output, outputVelocityMean, output.unit);
|
|
|
+ break;
|
|
|
+ case MeasureTerms.PeakPG:
|
|
|
+ feature.updateFloatValue(output, fakeOutputDate, output.unit);
|
|
|
+ break;
|
|
|
+ case MeasureTerms.VTI:
|
|
|
+ feature.updateFloatValue(output, outputVTI, output.unit);
|
|
|
+ break;
|
|
|
+ case MeasureTerms.VTIMean:
|
|
|
+ feature.updateFloatValue(output, outputVTIMean, output.unit);
|
|
|
+ break;
|
|
|
+ case MeasureTerms.MPG:
|
|
|
+ feature.updateFloatValue(output, outputMPG, output.unit);
|
|
|
+ break;
|
|
|
+ case MeasureTerms.MMPG:
|
|
|
+ feature.updateFloatValue(output, outputMMPG, output.unit);
|
|
|
+ break;
|
|
|
+ case MeasureTerms.TiEnv:
|
|
|
+ // var outputTiEnv = GeneralFormulas.countEnvelopeTime(points);
|
|
|
+ feature.updateFloatValue(output, outputTiEnv, output.unit);
|
|
|
+ break;
|
|
|
+ // case MeasureTerms.EVEL:
|
|
|
+ // feature.updateFloatValue(output, fakeOutputDate, output.unit);
|
|
|
+ // break;
|
|
|
+ // case MeasureTerms.AVEL:
|
|
|
+ // feature.updateFloatValue(output, fakeOutputDate, output.unit);
|
|
|
+ // break;
|
|
|
+ // case MeasureTerms.EARatio:
|
|
|
+ // feature.updateFloatValue(output, fakeOutputDate, output.unit);
|
|
|
+ // break;
|
|
|
+ // case MeasureTerms.DT:
|
|
|
+ // feature.updateFloatValue(output, fakeOutputDate, output.unit);
|
|
|
+ // break;
|
|
|
+ // case MeasureTerms.PHT:
|
|
|
+ // feature.updateFloatValue(output, fakeOutputDate, output.unit);
|
|
|
+ // break;
|
|
|
+ // case MeasureTerms.VA:
|
|
|
+ // feature.updateFloatValue(output, fakeOutputDate, output.unit);
|
|
|
+ // break;
|
|
|
+ // case MeasureTerms.ADur:
|
|
|
+ // feature.updateFloatValue(output, fakeOutputDate, output.unit);
|
|
|
+ // break;
|
|
|
+ // case MeasureTerms.ATDTRatio:
|
|
|
+ // feature.updateFloatValue(output, fakeOutputDate, output.unit);
|
|
|
+ // break;
|
|
|
+ // case MeasureTerms.ATETRatio:
|
|
|
+ // feature.updateFloatValue(output, fakeOutputDate, output.unit);
|
|
|
+ // break;
|
|
|
+ // case MeasureTerms.Trace:
|
|
|
+ // feature.updateFloatValue(output, fakeOutputDate, output.unit);
|
|
|
+ // break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
}
|
|
|
}
|
|
|
}
|