Browse Source

fix(measure): 解决颈动脉测量时缩放比错误的问题

gavin.chen 2 years ago
parent
commit
aaa608b843

+ 1 - 0
lib/interfaces/process/visuals/visual_area.dart

@@ -23,6 +23,7 @@ abstract class IVisualArea {
 
   /// 布局区域
   RectRegion? get layoutRegion;
+  set layoutRegion(RectRegion? value);
 
   /// 整体显示区域
   RectRegion get displayRegion;

+ 6 - 0
lib/process/visual/visual_area.dart

@@ -67,6 +67,12 @@ abstract class VisualArea<T extends IViewPort> implements IVisualArea {
     }
   }
 
+  set carotidLayoutRegioin(RectRegion? value) {
+    if (value != _layoutRegion) {
+      _layoutRegion = value;
+    }
+  }
+
   @override
   RectRegion get displayRegion => _displayRegion;
 

+ 16 - 0
lib/process/workspace/application.dart

@@ -1,3 +1,4 @@
+import 'package:fis_measure/interfaces/date_types/rect_region.dart';
 import 'package:fis_measure/interfaces/enums/annotation.dart';
 import 'package:fis_measure/interfaces/enums/operate.dart';
 import 'package:fis_measure/interfaces/process/annotations/annotation.dart';
@@ -123,6 +124,13 @@ class Application implements IApplication {
 
   @override
   double get displayScaleRatio {
+    if (isAdaptiveCarotid2D) {
+      final firstScale = min(displaySize.width / frameData!.width,
+          displaySize.height / frameData!.height);
+      final secondScale = min(frameData!.width / carotid2DSize.width,
+          frameData!.height / carotid2DSize.height);
+      return firstScale * secondScale;
+    }
     if (frameData != null) {
       return min(displaySize.width / frameData!.width,
           displaySize.height / frameData!.height);
@@ -145,6 +153,14 @@ class Application implements IApplication {
   set isAdaptiveCarotid2D(bool value) {
     if (value != _isAdaptiveCarotid2D) {
       _isAdaptiveCarotid2D = value;
+      //如果颈动脉2D图像超出范围需要缩放,利用 layoutRegion 参数改变缩放比
+      if (value) {
+        final scale = min(frameData!.width / carotid2DSize.width,
+            frameData!.height / carotid2DSize.height);
+        currentVisualArea.layoutRegion = RectRegion.fill(0, 0, scale, scale);
+      } else {
+        currentVisualArea.layoutRegion = RectRegion.fill(0, 0, 1, 1);
+      }
     }
   }
 

+ 9 - 3
lib/view/3d_view/carotid_player.dart

@@ -33,16 +33,22 @@ class _CarotidPlayerState extends State<CarotidPlayer> {
   ];
   @override
   void initState() {
-    application.isAdaptiveCarotid2D = true;
     final stdSize = widget.measure3DViewController.stdSize;
-
-    /// [Carotid] 🚧颈动脉切割图像长宽存在大于标准面时,缩放系数错误,需修正
     // application.loadFrame(widget.measure3DViewController.image4Measure!);
     application.loadFrame(VidUsImage(1, stdSize.width.toInt(),
         stdSize.height.toInt(), Uint8List.fromList([0])));
     application.carotid2DSize = Size(
         widget.measure3DViewController.image4Measure!.width.toDouble(),
         widget.measure3DViewController.image4Measure!.height.toDouble());
+    print("carotid2DSize: ${application.carotid2DSize} stdSize: $stdSize");
+    if (application.carotid2DSize.width > stdSize.width ||
+        application.carotid2DSize.height > stdSize.height) {
+      print("out of range");
+      application.isAdaptiveCarotid2D = true;
+      //TODO:Gavin:2021/8/31:🚧颈动脉切割图像长宽存在大于标准面时,缩放系数错误,需修正
+    } else {
+      application.isAdaptiveCarotid2D = false;
+    }
     widget.measure3DViewController.onUpdateCarotid2DImage
         .addListener(_loadCarotidImageBytes);
     loadFrame(widget.measure3DViewController.image4Measure!);