瀏覽代碼

modify urm sharp copy

Melon 8 月之前
父節點
當前提交
e40063984c

+ 0 - 1
lib/process/items/item_feature.dart

@@ -36,7 +36,6 @@ abstract class MeasureItemFeature implements IMeasureItemFeature {
   @override
   int? imageBelongSign;
 
-  @protected
   Paint get paintPan => measureData.paintPen;
   Paint get paintLinePan => measureData.paintLinePan;
   Paint get paintPointPan => measureData.paintPointPan;

+ 47 - 1
lib/process/primitives/ellipse.dart

@@ -253,6 +253,52 @@ class EllipseFeature extends AreaItemFeatureAbstract {
   @override
   void paintPerfusion(Canvas canvas, Size size) {}
 
+  void paintSharpOnly(Canvas canvas, Size size, {Paint? customPaintPen}) {
+    if (innerPoints.isEmpty) return;
+
+    final xStartOffset = convert2ViewPoint(size, xAxisStart).toOffset();
+    final xEndOffset = convert2ViewPoint(size, xAxisEnd).toOffset();
+    canvas.drawDashLine(
+        xStartOffset, xEndOffset, 1, 10, customPaintPen ?? paintLinePan);
+
+    final yStartOffset = convert2ViewPoint(size, innerPoints[2]).toOffset();
+    final yEndOffset = convert2ViewPoint(size, innerPoints[3]).toOffset();
+    final centroidOffset = convert2ViewPoint(size, centroid).toOffset();
+    canvas.drawDashLine(
+        yStartOffset, yEndOffset, 1, 10, customPaintPen ?? paintLinePan);
+
+    final radiusX = getRadiusX(size);
+    final radiusY = getRadiusY(size);
+
+    canvas.save();
+    final path = Path();
+    path.moveTo(xStartOffset.dx, xStartOffset.dy);
+
+    // 以质心为原点旋转到水平方向
+    canvas.translate(centroidOffset.dx, centroidOffset.dy);
+    final rotateRad = (xEndOffset - xStartOffset).direction;
+    canvas.rotate(rotateRad);
+    canvas.translate(-centroidOffset.dx, -centroidOffset.dy);
+
+    path.addOval(
+      Rect.fromCenter(
+        center: centroidOffset,
+        width: radiusX * 2,
+        height: radiusY * 2,
+      ),
+    );
+
+    canvas.drawPath(
+      dashPath(
+        path,
+        dashArray: CircularIntervalList<double>(<double>[2.0, 10.0]),
+      ),
+      customPaintPen ?? paintPan,
+    );
+
+    canvas.restore();
+  }
+
   /// X轴半径
   double getRadiusX([Size? fitSize]) {
     if (innerPoints.length < 2) {
@@ -309,7 +355,7 @@ class EllipseFeature extends AreaItemFeatureAbstract {
   void adjustPoints(DPoint point) {
     if (activeIndex < 1) return;
     Size refSize;
-    if (refItem.feature?.isURMDualImages ?? false) {
+    if (isURMDualImages ?? false) {
       refSize = Size(refItem.application.displaySize.width / 2,
           refItem.application.displaySize.height);
     } else {

+ 5 - 2
lib/process/primitives/urm_measure/urm_ellipse_measure.dart

@@ -147,8 +147,11 @@ class URMEllipseMeasure extends Ellipse {
 
   bool waitingResult = false;
 
-  void handleFinish() async {
-    _recordSharp();
+  void handleFinish({bool recordSharp = true}) async {
+    if (recordSharp) {
+      _recordSharp();
+    }
+
     feature!.isActive = false;
     waitingResult = true;
     await doCalculateAsync();

+ 5 - 2
lib/process/primitives/urm_measure/urm_rect_measure.dart

@@ -121,8 +121,11 @@ class URMRectMeasure extends MeasureItem<URMRectFeature> {
 
   bool waitingResult = false;
 
-  void handleFinish() async {
-    _recordSharp();
+  void handleFinish({bool recordSharp = true}) async {
+    if (recordSharp) {
+      _recordSharp();
+    }
+
     feature!.isActive = false;
     waitingResult = true;
     await doCalculateAsync();

+ 5 - 2
lib/process/primitives/urm_measure/urm_shell_measure.dart

@@ -130,8 +130,11 @@ class URMShellMeasure extends Trace {
 
   bool waitingResult = false;
 
-  void handleFinish() async {
-    _recordSharp();
+  void handleFinish({bool recordSharp = true}) async {
+    if (recordSharp) {
+      _recordSharp();
+    }
+
     feature!.isActive = false;
     waitingResult = true;
     await doCalculateAsync();

+ 5 - 2
lib/process/primitives/urm_measure/urm_trace_measure.dart

@@ -128,8 +128,11 @@ class URMTraceMeasure extends Trace {
 
   bool waitingResult = false;
 
-  void handleFinish() async {
-    _recordSharp();
+  void handleFinish({bool recordSharp = true}) async {
+    if (recordSharp) {
+      _recordSharp();
+    }
+
     feature!.isActive = false;
     waitingResult = true;
     await doCalculateAsync();

+ 15 - 15
lib/process/primitives/utils/urm_sharp_copy.dart

@@ -34,21 +34,7 @@ class UrmSharpCopyBoard {
 
   static void recordSharp(UrmSharpCopyDataType type, List<DPoint> points) {
     final arr = points.map((e) => e.clone()).toList();
-    UrmSharpCopyData data;
-    switch (type) {
-      case UrmSharpCopyDataType.rect:
-        data = RectUrmSharpCopyData(type, arr);
-        break;
-      case UrmSharpCopyDataType.trace:
-        data = TraceUrmSharpCopyData(type, arr);
-        break;
-      case UrmSharpCopyDataType.ellipse:
-        data = EllipseUrmSharpCopyData(type, arr);
-        break;
-      case UrmSharpCopyDataType.rim:
-        data = RimUrmSharpCopyData(type, arr);
-        break;
-    }
+    UrmSharpCopyData data = UrmSharpCopyData.create(type, arr);
 
     final list = _findCacheListByType(type);
     if (list.length == 2) {
@@ -95,4 +81,18 @@ class UrmSharpCopyData {
   final List<DPoint> points;
 
   UrmSharpCopyData(this.type, this.points);
+
+  static UrmSharpCopyData create(
+      UrmSharpCopyDataType type, List<DPoint> points) {
+    switch (type) {
+      case UrmSharpCopyDataType.rect:
+        return RectUrmSharpCopyData(type, points);
+      case UrmSharpCopyDataType.trace:
+        return TraceUrmSharpCopyData(type, points);
+      case UrmSharpCopyDataType.ellipse:
+        return EllipseUrmSharpCopyData(type, points);
+      case UrmSharpCopyDataType.rim:
+        return RimUrmSharpCopyData(type, points);
+    }
+  }
 }