Browse Source

fix 18967: 【图像测量】【小动物】CW模式下,选择“右室压力随时间变化率” 或者 “左室压力随时间变化率”测量项测量结果和超声机上传的都相差较大

Melon 9 months ago
parent
commit
62e3878683

+ 15 - 0
lib/process/calcuators/calculator.dart

@@ -1,4 +1,5 @@
 import 'package:fis_common/event/event_type.dart';
+import 'package:fis_measure/interfaces/date_types/point.dart';
 import 'package:fis_measure/interfaces/process/calculators/calculator.dart';
 import 'package:fis_measure/interfaces/process/calculators/output.dart';
 import 'package:fis_measure/interfaces/process/calculators/values.dart';
@@ -126,4 +127,18 @@ abstract class Calculator<T extends IMeasureItem, TValue>
     }
     return child.feature as TF?;
   }
+
+  DPoint convertTimeMotionPoint(MeasureItemFeature feature, DPoint point) {
+    final viewport = feature.hostVisualArea!.viewport!;
+    final layout = feature.hostVisualArea!.displayRegion;
+
+    final pointClone = point.clone();
+    pointClone.addOffset(-layout.left, -layout.top);
+
+    final physicalPoint = viewport.convert(pointClone);
+    final coordinateOffset = viewport.region;
+    final y = -physicalPoint.y + coordinateOffset.top;
+    final x = physicalPoint.x + coordinateOffset.left;
+    return DPoint(x, y);
+  }
 }

+ 7 - 3
lib/process/calcuators/time_motion.dart

@@ -1,7 +1,9 @@
+import 'package:fis_measure/interfaces/date_types/point.dart';
 import 'package:fis_measure/interfaces/process/calculators/values.dart';
 import 'package:fis_measure/interfaces/process/items/terms.dart';
 import 'package:fis_measure/process/calcuators/formulas/general.dart';
 import 'package:fis_measure/process/items/item.dart';
+import 'package:fis_measure/process/items/item_feature.dart';
 import 'package:fis_measure/process/primitives/combos/two_length.dart';
 import 'package:vid/us/vid_us_unit.dart';
 
@@ -151,10 +153,12 @@ class DpDtCal extends Calculator<StraightLine, double> {
     if (ref.feature == null) return;
 
     final feature = ref.feature!;
+    final p1 = feature.startPoint;
+    final p2 = feature.endPoint;
+    final pp1 = convertTimeMotionPoint(feature, p1);
+    final pp2 = convertTimeMotionPoint(feature, p2);
 
-    double dpDtRatio =
-        GeneralFormulas.dpDtRatio(feature.startPoint, feature.endPoint);
-    dpDtRatio = dpDtRatio * 100 * 100;
+    double dpDtRatio = GeneralFormulas.dpDtRatio(pp1, pp2);
     updateFloatValue(dpDtRatio, unit: VidUsUnit.mmHgs, useRound: true);
   }
 }

+ 3 - 0
lib/process/calcuators/velocity.dart

@@ -1,3 +1,6 @@
+import 'package:fis_measure/interfaces/date_types/point.dart';
+import 'package:fis_measure/process/items/item_feature.dart';
+
 import '../primitives/location.dart';
 import 'calculator.dart';