Ver código fonte

1、lv_stady测量项的结果值根据单位进行换算

guanxinyi 10 meses atrás
pai
commit
76c57c01ec

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

@@ -104,6 +104,21 @@ abstract class Calculator<T extends IMeasureItem, TValue>
     return null;
   }
 
+  @protected
+  FloatValue? pickChildToFloatValue(MeasureItem item) {
+    if (item.calculator == null) return null;
+    ValueBase? value;
+    if (item.measuredFeatures.isNotEmpty) {
+      value = item.measuredFeatures.first as FloatValue;
+    } else if (item.feature != null) {
+      value = item.feature!.value;
+    }
+    if (value != null) {
+      return value as FloatValue;
+    }
+    return null;
+  }
+
   @protected
   TF? findChildFeature<TF extends MeasureItemFeature>(MeasureItem child) {
     if (child.measuredFeatures.isNotEmpty) {

+ 1 - 4
lib/process/calcuators/formulas/cardiac.dart

@@ -7,10 +7,7 @@ import 'package:fis_measure/process/calcuators/formulas/general.dart';
 import 'package:fis_measure/utils/number.dart';
 
 class CardiacFormulas {
-  static ICardiacFormulaStrategy _singleton =
-      GlobalPatientConfig.speciesType == SpeciesType.mouseGeneral
-          ? BaseCardiacFormulas()
-          : AnimalsCardiacFormulas();
+  static ICardiacFormulaStrategy _singleton = AnimalsCardiacFormulas();
   static void reinitialize() {
     _singleton = GlobalPatientConfig.speciesType == SpeciesType.mouseGeneral
         ? BaseCardiacFormulas()

+ 32 - 28
lib/process/calcuators/lv_study.dart

@@ -2,6 +2,7 @@ import 'package:fis_measure/configs/cardiac.dart';
 import 'package:fis_measure/configs/patient.dart';
 import 'package:fis_measure/interfaces/enums/calcuator.dart';
 import 'package:fis_measure/interfaces/enums/species.dart';
+import 'package:fis_measure/interfaces/process/calculators/values.dart';
 import 'package:fis_measure/interfaces/process/items/terms.dart';
 import 'package:fis_measure/process/items/top_item.dart';
 import 'package:fis_measure/process/primitives/combos/lv_study.dart';
@@ -79,36 +80,22 @@ class LvStudyDistanceGroupCal extends LvStudyCalculatorBase<LvStudy> {
 
     final feature = ref.feature!;
     final viewport = feature.hostVisualArea!.viewport!;
+    VidUsUnit yUnit = viewport.yUnit;
 
-    /// TODO 需要重新设计
     v = _ValTemp();
-    if (viewport.yUnit == VidUsUnit.cm) {
-      v.ivsd = pickChildFloatValue(kidIVSd) != null
-          ? pickChildFloatValue(kidIVSd)! * 10
-          : null;
-      v.ivss = pickChildFloatValue(kidIVSs) != null
-          ? pickChildFloatValue(kidIVSs)! * 10
-          : null;
-      v.lvidd = pickChildFloatValue(kidLVIDd) != null
-          ? pickChildFloatValue(kidLVIDd)! * 10
-          : null;
-      v.lvids = pickChildFloatValue(kidLVIDs) != null
-          ? pickChildFloatValue(kidLVIDs)! * 10
-          : null;
-      v.lvpwd = pickChildFloatValue(kidLVPWd) != null
-          ? pickChildFloatValue(kidLVPWd)! * 10
-          : null;
-      v.lvpws = pickChildFloatValue(kidLVPWs) != null
-          ? pickChildFloatValue(kidLVPWs)! * 10
-          : null;
-    } else {
-      v.ivsd = pickChildFloatValue(kidIVSd);
-      v.ivss = pickChildFloatValue(kidIVSs);
-      v.lvidd = pickChildFloatValue(kidLVIDd);
-      v.lvids = pickChildFloatValue(kidLVIDs);
-      v.lvpwd = pickChildFloatValue(kidLVPWd);
-      v.lvpws = pickChildFloatValue(kidLVPWs);
-    }
+    FloatValue? ivsd = pickChildToFloatValue(kidIVSd);
+    FloatValue? lvidd = pickChildToFloatValue(kidLVIDd);
+    FloatValue? lvpwd = pickChildToFloatValue(kidLVPWd);
+    FloatValue? ivss = pickChildToFloatValue(kidIVSs);
+    FloatValue? lvids = pickChildToFloatValue(kidLVIDs);
+    FloatValue? lvpws = pickChildToFloatValue(kidLVPWs);
+
+    v.ivsd = updateCalculateValue(ivsd, yUnit);
+    v.ivss = updateCalculateValue(ivss, yUnit);
+    v.lvidd = updateCalculateValue(lvidd, yUnit);
+    v.lvids = updateCalculateValue(lvids, yUnit);
+    v.lvpwd = updateCalculateValue(lvpwd, yUnit);
+    v.lvpws = updateCalculateValue(lvpws, yUnit);
 
     for (var output in ref.meta.outputs) {
       switch (output.name) {
@@ -151,6 +138,23 @@ class LvStudyDistanceGroupCal extends LvStudyCalculatorBase<LvStudy> {
       }
     }
   }
+
+  double? updateCalculateValue(FloatValue? floatValue, VidUsUnit unit) {
+    if (floatValue != null) {
+      if (floatValue.unit == unit) {
+        return floatValue.value;
+      } else {
+        if (floatValue.unit == VidUsUnit.mm &&
+            floatValue.unit == VidUsUnit.cm) {
+          return floatValue.value == null ? null : floatValue.value! * 10;
+        } else if (floatValue.unit == VidUsUnit.cm &&
+            floatValue.unit == VidUsUnit.mm) {
+          return floatValue.value == null ? null : floatValue.value! / 10;
+        }
+      }
+    }
+    return null;
+  }
 }
 
 class LvStudyCalculatorBase<T extends TopMeasureItem>

+ 1 - 1
lib/process/calcuators/time_motion.dart

@@ -27,7 +27,7 @@ class VerticalDistanceCal extends Calculator<StraightLine, double> {
     final ouput = ref.meta.outputs.first;
     feature.updateFloatValue(
       ouput,
-      roundDouble(value, ouput.fractionalDigits),
+      value,
       viewport.yUnit,
     );
   }