Browse Source

Merge branch 'master' of http://git.ius.plus/melon.yin/fis_lib_measure

bakamaka.guan 2 years ago
parent
commit
fef69fcd8c

+ 2 - 5
lib/interfaces/process/workspace/application.dart

@@ -130,12 +130,9 @@ abstract class IApplication {
   /// [type] 点类型
   /// [type] 点类型
   PointInfo createPointInfo(Offset offset, PointInfoType type);
   PointInfo createPointInfo(Offset offset, PointInfoType type);
 
 
-  /// 根据名称切换测量项
-  ///
-  /// [name] 测量项名称
-  void switchItemByName(String name);
-
   /// 切换测量项
   /// 切换测量项
+  ///
+  /// [meta] 测量项信息
   void switchItem(ItemMeta meta);
   void switchItem(ItemMeta meta);
 
 
   /// 切换注释
   /// 切换注释

+ 0 - 12
lib/process/calcuators/ellipse.dart

@@ -1,12 +0,0 @@
-import 'package:fis_measure/process/primitives/ellipse.dart';
-
-import 'calculator.dart';
-
-class VolumeEllipseCal extends Calculator<Ellipse, double> {
-  VolumeEllipseCal(Ellipse ref) : super(ref);
-
-  @override
-  void calculate() {
-    // TODO: implement calculate
-  }
-}

+ 23 - 2
lib/process/primitives/ellipse.dart

@@ -5,11 +5,12 @@ import 'package:fis_measure/interfaces/enums/items.dart';
 import 'package:fis_measure/interfaces/process/items/item.dart';
 import 'package:fis_measure/interfaces/process/items/item.dart';
 import 'package:fis_measure/interfaces/process/items/item_metas.dart';
 import 'package:fis_measure/interfaces/process/items/item_metas.dart';
 import 'package:fis_measure/interfaces/process/workspace/point_info.dart';
 import 'package:fis_measure/interfaces/process/workspace/point_info.dart';
+import 'package:fis_measure/process/calcuators/calculator.dart';
 import 'package:fis_measure/process/calcuators/curve.dart';
 import 'package:fis_measure/process/calcuators/curve.dart';
-import 'package:fis_measure/process/calcuators/ellipse.dart';
 import 'package:fis_measure/process/calcuators/formulas/general.dart';
 import 'package:fis_measure/process/calcuators/formulas/general.dart';
 import 'package:fis_measure/utils/canvas.dart';
 import 'package:fis_measure/utils/canvas.dart';
 import 'package:path_drawing/path_drawing.dart';
 import 'package:path_drawing/path_drawing.dart';
+import 'package:vid/us/vid_us_unit.dart';
 import 'area_abstract.dart';
 import 'area_abstract.dart';
 
 
 class Ellipse extends AreaItemAbstract {
 class Ellipse extends AreaItemAbstract {
@@ -84,7 +85,7 @@ class Ellipse extends AreaItemAbstract {
 
 
   static Ellipse createVolume(ItemMeta meta, [IMeasureItem? parent]) {
   static Ellipse createVolume(ItemMeta meta, [IMeasureItem? parent]) {
     final ellipse = Ellipse(meta, parent);
     final ellipse = Ellipse(meta, parent);
-    ellipse.calculator = VolumeEllipseCal(ellipse);
+    ellipse.calculator = _EllipseVolumeCal(ellipse);
     return ellipse;
     return ellipse;
   }
   }
 }
 }
@@ -286,3 +287,23 @@ class EllipseFeature extends AreaItemFeatureAbstract {
     return rst;
     return rst;
   }
   }
 }
 }
+
+class _EllipseVolumeCal extends Calculator<Ellipse, double> {
+  _EllipseVolumeCal(Ellipse ref) : super(ref);
+
+  @override
+  void calculate() {
+    if (ref.feature == null) return;
+
+    final feature = ref.feature! as EllipseFeature;
+    final viewport = feature.hostVisualArea!.viewport!;
+    final size = viewport.convertBoundary;
+
+    double xAxis = feature.getRadiusX(size);
+    double yAxis = feature.getRadiusY(size);
+    var a = math.max(xAxis, yAxis);
+    var b = math.min(xAxis, yAxis);
+    var value = math.pi / 6.0 * a * b * b;
+    updateFloatValue(value, unit: VidUsUnit.cm3, useRound: true);
+  }
+}

+ 2 - 1
lib/process/primitives/location.dart

@@ -68,7 +68,8 @@ class Location extends MeasureItem<LocationFeature> {
   }
   }
 
 
   void handleTissue(PointInfo args, DPoint point) {
   void handleTissue(PointInfo args, DPoint point) {
-    if (args.hostVisualArea!.mode.modeType == VidUsModeType.Tissue) {
+    final mode = args.hostVisualArea!.mode.modeType;
+    if (mode == VidUsModeType.Tissue || mode == VidUsModeType.Flow) {
       final isProbeConvex = (args.hostVisualArea! as TissueArea).isConvex;
       final isProbeConvex = (args.hostVisualArea! as TissueArea).isConvex;
       if (isProbeConvex) {
       if (isProbeConvex) {
         feature = TissueConvexLocationFeature(this, point);
         feature = TissueConvexLocationFeature(this, point);

+ 25 - 144
lib/process/workspace/application.dart

@@ -306,143 +306,7 @@ class Application implements IApplication {
 
 
   @override
   @override
   void switchItem(ItemMeta meta) {
   void switchItem(ItemMeta meta) {
-    switchItemByName(meta.name);
-    activeMeasureItem ??= MeasureItemFactory.createItem(meta);
-    // activeMeasureItem = MeasureItemFactory.createItem(meta);
-  }
-
-  @override
-  void switchItemByName(String name) {
-    _updateOperateType(MeasureOperateType.measure);
-    activeMeasureItem?.finishOnce();
-    // TODO: create from map
-    if (name == MeasureTerms.AntCCA_IMT) {
-      activeMeasureItem = CarotidIMT.createMeasureRect(
-          ItemMeta(
-            MeasureTerms.AntCCA_IMT,
-            description: MeasureTerms.AntCCA_IMT,
-            measureType: MeasureTerms.AntCCA_IMT,
-            outputs: [
-              ItemOutputMeta(MeasureTerms.AntCCA_IMT, "", VidUsUnit.cm),
-            ],
-          ),
-          null);
-      return;
-    }
-    if (name == MeasureTerms.PostCCA_IMT) {
-      activeMeasureItem = CarotidIMT.createMeasureRect(
-          ItemMeta(
-            MeasureTerms.PostCCA_IMT,
-            description: MeasureTerms.PostCCA_IMT,
-            measureType: MeasureTerms.PostCCA_IMT,
-            outputs: [
-              ItemOutputMeta(MeasureTerms.PostCCA_IMT, "", VidUsUnit.cm),
-            ],
-          ),
-          null);
-      return;
-    }
-    if (name == MeasureTerms.BothCCA_IMT) {
-      activeMeasureItem = CarotidIMT.createMeasureRect(
-          ItemMeta(
-            MeasureTerms.BothCCA_IMT,
-            description: MeasureTerms.BothCCA_IMT,
-            measureType: MeasureTerms.BothCCA_IMT,
-            outputs: [
-              ItemOutputMeta(MeasureTerms.BothCCA_IMT, "", VidUsUnit.cm),
-            ],
-          ),
-          null);
-      return;
-    }
-    if (name == MeasureTerms.PlaqueDetection) {
-      ///TODO: 只允许触发一次
-      activeMeasureItem = CarotidDetection.createDetectionRect(
-          ItemMeta(
-            MeasureTerms.PlaqueDetection,
-            description: MeasureTerms.PlaqueDetection,
-            measureType: MeasureTerms.PlaqueDetection,
-            outputs: [
-              ItemOutputMeta(MeasureTerms.PlaqueDetection, "", VidUsUnit.cm2),
-            ],
-          ),
-          null);
-      return;
-    }
-    if (name == MeasureTerms.IntimaDetection) {
-      ///TODO: 只允许触发一次
-      activeMeasureItem = CarotidDetection.createDetectionRect(
-          ItemMeta(
-            MeasureTerms.IntimaDetection,
-            description: MeasureTerms.IntimaDetection,
-            measureType: MeasureTerms.IntimaDetection,
-            outputs: [
-              ItemOutputMeta(MeasureTerms.IntimaDetection, "", VidUsUnit.cm2),
-            ],
-          ),
-          null);
-      return;
-    }
-
-    if (name == MeasureTypes.AreaPerimeterEllipse) {
-      activeMeasureItem = MeasureItemFactory.createItem(
-        ItemMeta(
-          MeasureTypes.AreaPerimeterEllipse,
-          measureType: MeasureTypes.AreaPerimeterEllipse,
-          description: MeasureTypes.AreaPerimeterEllipse,
-          outputs: [
-            ItemOutputMeta("Perimeter", "Perimeter", VidUsUnit.cm),
-            ItemOutputMeta("Area", "Area", VidUsUnit.cm2),
-          ],
-        ),
-      );
-      return;
-    }
-
-    if (name == MeasureTypes.AreaPerimeterPolyline) {
-      activeMeasureItem = MeasureItemFactory.createItem(
-        ItemMeta(
-          MeasureTypes.AreaPerimeterPolyline,
-          measureType: MeasureTypes.AreaPerimeterPolyline,
-          description: MeasureTypes.AreaPerimeterPolyline,
-          outputs: [
-            ItemOutputMeta("Perimeter", "Perimeter", VidUsUnit.cm),
-            ItemOutputMeta("Area", "Area", VidUsUnit.cm2),
-          ],
-        ),
-      );
-      return;
-    }
-    if (name == MeasureTypes.AreaPerimeterSpline) {
-      activeMeasureItem = MeasureItemFactory.createItem(
-        ItemMeta(
-          MeasureTypes.AreaPerimeterSpline,
-          measureType: MeasureTypes.AreaPerimeterSpline,
-          description: MeasureTypes.AreaPerimeterSpline,
-          outputs: [
-            ItemOutputMeta("Perimeter", "Perimeter", VidUsUnit.cm),
-            ItemOutputMeta("Area", "Area", VidUsUnit.cm2),
-          ],
-        ),
-      );
-      return;
-    }
-
-    if (name == MeasureTypes.VerticalDistance) {
-      activeMeasureItem = MeasureItemFactory.createItem(
-        ItemMeta(
-          MeasureTerms.VerticalDistance,
-          measureType: MeasureTypes.VerticalDistance,
-          description: MeasureTypes.VerticalDistance,
-          outputs: [
-            ItemOutputMeta(MeasureTypes.VerticalDistance,
-                MeasureTypes.VerticalDistance, VidUsUnit.cm),
-          ],
-        ),
-      );
-      return;
-    }
-    activeMeasureItem = null;
+    activeMeasureItem = MeasureItemFactory.createItem(meta);
   }
   }
 
 
   @override
   @override
@@ -482,7 +346,7 @@ class Application implements IApplication {
   void switchMode(String name) {
   void switchMode(String name) {
     for (var area in currentVisual.visualAreas) {
     for (var area in currentVisual.visualAreas) {
       if (area.mode.name == name) {
       if (area.mode.name == name) {
-        _handleAreaSwitch(area, PointInfo(0, 0, PointInfoType.mouseDown));
+        _changeAcitveArea(area);
       }
       }
     }
     }
   }
   }
@@ -578,6 +442,9 @@ class Application implements IApplication {
   }
   }
 
 
   IVisualArea? _attchVisualArea(PointInfo point) {
   IVisualArea? _attchVisualArea(PointInfo point) {
+    if (currentVisualArea.displayRegion.containsPoint(point)) {
+      return currentVisualArea;
+    }
     for (var visual in visuals) {
     for (var visual in visuals) {
       for (var area in visual.visualAreas) {
       for (var area in visual.visualAreas) {
         if (area.displayRegion.containsPoint(point)) {
         if (area.displayRegion.containsPoint(point)) {
@@ -594,16 +461,30 @@ class Application implements IApplication {
       return false;
       return false;
     }
     }
 
 
-    /// 点击切换所在区域焦点
-    if (area != currentVisualArea) {
-      for (var visual in visuals) {
-        visual.setUnAcitve();
+    // 点击切换所在区域焦点
+    // 不同幅或者不同模式类型的才切换
+    bool needSwitch = false;
+    if (area.visual.visualData.indicator !=
+        currentVisual.visualData.indicator) {
+      needSwitch = true;
+    } else {
+      if (!currentVisualArea.displayRegion.containsPoint(point)) {
+        needSwitch = true;
       }
       }
-      area.isActive = true;
-      visualAreaChanged.emit(this, area);
+    }
+    if (needSwitch) {
+      _changeAcitveArea(area);
       return true;
       return true;
     }
     }
 
 
     return false;
     return false;
   }
   }
+
+  void _changeAcitveArea(IVisualArea area) {
+    for (var visual in visuals) {
+      visual.setUnAcitve();
+    }
+    area.isActive = true;
+    visualAreaChanged.emit(this, area);
+  }
 }
 }

+ 0 - 8
lib/view/measure/measure_config/measure_configuation_page.dart

@@ -111,14 +111,6 @@ class _MeasureConfigurationDialogState
     }
     }
   }
   }
 
 
-  void changeItem(String? name) {
-    activeName = name ?? '';
-    application.switchItemByName(activeName);
-    if (mounted) {
-      setState(() {});
-    }
-  }
-
   void submit() async {
   void submit() async {
     var measureModeSubmitChanged = MeasureModeSubmit(
     var measureModeSubmitChanged = MeasureModeSubmit(
       measureData.measureApplicationVersion,
       measureData.measureApplicationVersion,