瀏覽代碼

修正椭圆绘制异常

gavin.chen 8 月之前
父節點
當前提交
aa88ea1821
共有 2 個文件被更改,包括 27 次插入23 次删除
  1. 1 1
      lib/interfaces/process/urm/urm_data_processor.dart
  2. 26 22
      lib/process/primitives/ellipse.dart

+ 1 - 1
lib/interfaces/process/urm/urm_data_processor.dart

@@ -1,7 +1,6 @@
 import 'dart:ui';
 
 import 'package:fis_jsonrpc/rpc.dart';
-import 'package:fis_jsonrpc/services/aIDiagnosis.m.dart';
 
 abstract class IURMDataProcessor {
   URMMeasureParams getURMMeasureParams();
@@ -9,6 +8,7 @@ abstract class IURMDataProcessor {
   Rect get urmScreenInFullVisual; // 当前URM视图在完整视图中的归一化矩形
   double get fullVisualPhywidth; // 完整视图的图像物理宽度
   bool get showLeftRight; // 是否显示左右双幅
+  bool get isLeftRight; // 是否左右双幅的图像 (不考虑同步显示的情况)
 }
 
 class URMMeasureParams {

+ 26 - 22
lib/process/primitives/ellipse.dart

@@ -8,6 +8,7 @@ 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/formulas/general.dart';
+import 'package:fis_measure/process/workspace/urm/application.dart';
 import 'package:fis_measure/utils/canvas.dart';
 import 'package:path_drawing/path_drawing.dart';
 import 'package:vid/us/vid_us_unit.dart';
@@ -315,6 +316,20 @@ class EllipseFeature extends AreaItemFeatureAbstract {
     return (p2 - p1).length / 2;
   }
 
+  // 获取未缩放的基准半径
+  double getBaseRadiusX([Size? fitSize]) {
+    if (innerPoints.length < 2) {
+      return 0;
+    }
+    var p1 = xAxisStart;
+    var p2 = xAxisEnd;
+    if (fitSize != null) {
+      p1 = p1.scale2Size(fitSize);
+      p2 = p2.scale2Size(fitSize);
+    }
+    return (p2 - p1).length / 2;
+  }
+
   /// Y轴半径
   double getRadiusY([Size? fitSize]) {
     if (activeIndex > 1) {
@@ -354,37 +369,26 @@ class EllipseFeature extends AreaItemFeatureAbstract {
   /// 计算Y轴坐标点
   void adjustPoints(DPoint point) {
     if (activeIndex < 1) return;
-    Size refSize;
-    if (isURMDualImages ?? false) {
-      refSize = Size(refItem.application.displaySize.width / 2,
-          refItem.application.displaySize.height);
-    } else {
-      refSize = refItem.application.displaySize;
+    Size refSize = refItem.application.displaySize;
+    // 判断是否为 URMApp 如果是左右双幅,则需要宽度减半,此处其实是需要一个当前画幅长宽比来确定垂直位置
+    if (refItem.application is URMApplication &&
+        (refItem.application as URMApplication).urmDataProcessor.isLeftRight) {
+      refSize = Size(refSize.width / 2, refSize.height);
     }
-    // final refSize = Size(refItem.application.displaySize.width / 2,
-    //     refItem.application.displaySize.height);
-    //  const refSize= Size(1000, 1000);
-    // const restoreSize = Size(1 / 1000, 1 / 1000);
     final restoreSize = Size(1 / refSize.width, 1 / refSize.height);
-    // final p = point.scale2Size(refSize);
-    // final p1 = xAxisStart.scale2Size(refSize);
-    // final p2 = xAxisEnd.scale2Size(refSize);
-
-    final p = convert2ViewPoint(refSize, point);
-    final p1 = convert2ViewPoint(refSize, xAxisStart);
-    final p2 = convert2ViewPoint(refSize, xAxisEnd);
+    final p = point.scale2Size(refSize);
+    final p1 = xAxisStart.scale2Size(refSize);
+    final p2 = xAxisEnd.scale2Size(refSize);
     final double radius;
     if (activeIndex == 2) {
       radius = GeneralFormulas.distance2Line(p1, p2, p);
     } else {
-      radius = getRadiusX(refSize);
+      radius = getBaseRadiusX(refSize);
     }
     final crossPoints = findCrossPoints(p2, p1, radius);
     final p3Index = findNearest(p, crossPoints);
-    // innerPoints[2] = crossPoints[p3Index].scale2Size(restoreSize);
-    // innerPoints[3] = crossPoints[1 - p3Index].scale2Size(restoreSize);
-    innerPoints[2] = convert2ViewPoint(restoreSize, crossPoints[p3Index]);
-    innerPoints[3] = convert2ViewPoint(restoreSize, crossPoints[1 - p3Index]);
+    innerPoints[2] = crossPoints[p3Index].scale2Size(restoreSize);
+    innerPoints[3] = crossPoints[1 - p3Index].scale2Size(restoreSize);
   }
 
   List<DPoint> findCrossPoints(DPoint a, DPoint b, distance) {