Browse Source

DepthToBaseLine - 修复BaseLine刷新绘制问题

melon.yin 2 years ago
parent
commit
c8bfd29dbb

+ 3 - 0
lib/item_create_test.dart

@@ -88,8 +88,11 @@ class ItemCreateTest {
 class TestItems {
   TestItems._();
   static final C_TEST_ITEMS = [
+    "HIP(α) L",
+    "HIP(αβ) L",
     "MV Ann Diam",
     "Distance",
+    "Cardiac Axis",
     MeasureTerms.Volume,
     MeasureTerms.Stenosis,
     MeasureTerms.AbRatio,

+ 19 - 0
lib/process/primitives/combos/depth2baseline.dart

@@ -31,6 +31,25 @@ class DepthToBaseLine extends TopMeasureItem<DepthToBaseLineFeature> {
   @override
   DepthToBaseLineFeature buildFeature() => DepthToBaseLineFeature(this);
 
+  @override
+  bool onExecuteMouse(PointInfo args) {
+    if (feature == null) {
+      feature = buildFeature();
+      listenChildrenUpdate();
+    }
+    if (args.pointType == PointInfoType.mouseDown) {
+      if (childrenAllDone) {
+        workingChild.clear();
+      }
+    }
+    feature?.hostVisualArea = args.hostVisualArea;
+    final result = workingChild.execute(args);
+    if (result) {
+      doCalculate();
+    }
+    return result;
+  }
+
   static DepthToBaseLine createDepthToBaseLine(ItemMeta meta,
       [IMeasureItem? parent]) {
     if (meta.measureType != MeasureTypes.DepthToBaseLine) {

+ 41 - 2
lib/process/primitives/ray.dart

@@ -1,4 +1,5 @@
 import 'dart:ui';
+import 'dart:math' as math;
 
 import 'package:fis_measure/interfaces/date_types/point.dart';
 import 'package:fis_measure/interfaces/enums/items.dart';
@@ -11,9 +12,28 @@ import 'package:fis_measure/process/items/item_feature.dart';
 import 'package:fis_measure/utils/canvas.dart';
 
 class Ray extends MeasureItem<RayFeature> {
-  Ray(ItemMeta meta, IMeasureItem? parent) : super(meta, parent);
+  double _initializeAngle = 0;
+  double _initializeAngleVal = 0;
+  bool _switchInitialAngle = false;
+  Ray(ItemMeta meta, IMeasureItem? parent) : super(meta, parent) {
+    initializeAngle = 45;
+  }
+
+  double get initializeAngle => _initializeAngle;
+  set initializeAngle(double value) {
+    if (value != _initializeAngle) {
+      _initializeAngleVal = value;
+      _updateInitializeAngle();
+    }
+  }
 
-  final double initializeAngle = 0;
+  bool get switchInitialAngle => _switchInitialAngle;
+  set switchInitialAngle(bool value) {
+    if (value != _switchInitialAngle) {
+      _switchInitialAngle = value;
+      _updateInitializeAngle();
+    }
+  }
 
   @override
   bool onExecuteMouse(PointInfo args) {
@@ -50,6 +70,11 @@ class Ray extends MeasureItem<RayFeature> {
     ray.calculator = RayDepthCal(ray);
     return ray;
   }
+
+  void _updateInitializeAngle() {
+    int switchNumber = switchInitialAngle ? -1 : 1;
+    _initializeAngle = _initializeAngleVal * switchNumber;
+  }
 }
 
 class RayFeature extends MeasureItemFeature {
@@ -87,8 +112,22 @@ class RayFeature extends MeasureItemFeature {
     final offset = convert2ViewPoint(size, point).toOffset();
     final left = Offset(0, offset.dy);
     final right = Offset(size.width, offset.dy);
+
+    // final center = Offset(size.width / 2, size.height / 2);
+    // if (angle != 0) {
+    //   canvas.save();
+    //   canvas.translate(center.dx, center.dy);
+    //   final rotateRad = angle * math.pi / 180;
+    //   canvas.rotate(rotateRad);
+    //   canvas.translate(-center.dx, -center.dy);
+    // }
+
     canvas.drawDashLine(left, right, 1, 10, paintPan);
 
+    // if (angle != 0) {
+    //   canvas.restore();
+    // }
+
     var idText = '$id.${refItem.displayName}';
     drawCustomId(canvas, size, right, idText);
   }