浏览代码

1、测量库更新

guanxinyi 8 月之前
父节点
当前提交
5e3f8a2b2a

+ 5 - 1
lib/process/calcuators/urm_calcuators/urm_curve_curvature_line.dart

@@ -3,6 +3,7 @@ import 'package:fis_measure/interfaces/process/items/item.dart';
 import 'package:fis_measure/interfaces/process/items/terms.dart';
 import 'package:fis_measure/process/primitives/trace.dart';
 import 'package:fis_measure/process/primitives/urm_measure/urm_curvature_measure.dart';
+import 'package:fis_measure/process/primitives/urm_measure/urm_curve_curvature_line_measure.dart';
 import 'package:fis_measure/process/workspace/urm/application.dart';
 import 'package:fis_jsonrpc/rpc.dart';
 import 'package:vid/us/vid_us_unit.dart';
@@ -31,13 +32,16 @@ class URMCurveCurvatureLineCal extends Calculator<Trace, double> {
 
       URMMeasureProcessResult? result =
           await urmApplication.getURMMeasureResult(
-        urmMeasureType: URMMeasureType.URMTraceCurvature,
+        urmMeasureType: URMMeasureType.URMCurvature,
         rOIType: URMROIType.URMTrace,
         srcDPoints: srcDPoints,
       );
       if (result == null) return;
       if (result.resultFlag) {
         final feature = ref.feature!;
+        if (feature is! TraceCurvatureLineFeature) return;
+        feature.autoLinePoints =
+            urmApplication.urmPointsToDPoints(result.resultDPoints);
         if (feature.refItem.parent is URMCurvatureMeasure) {
           IMeasureItem? parent = feature.refItem.parent;
           var revert =

+ 2 - 2
lib/process/primitives/urm_measure/urm_curvature_measure.dart

@@ -3,8 +3,8 @@ import 'package:fis_measure/interfaces/process/items/item_metas.dart';
 import 'package:fis_measure/interfaces/process/items/types.dart';
 
 class URMCurvatureMeasure {
-  static String revertRatioName = "URMCurvature(E/A)";
-  static String ratioName = "URMCurvature(A/E)";
+  static String ratioName = "URMCurvature(E/A)";
+  static String revertRatioName = "URMCurvature(A/E)";
   URMCurvatureMeasure(ItemMeta meta, IMeasureItem parent);
 
   static URMCurvatureMeasure createURMCurvatureMeasure(

+ 43 - 0
lib/process/primitives/urm_measure/urm_curvature_trace_measure.dart

@@ -9,6 +9,7 @@ import 'package:fis_measure/process/primitives/trace.dart';
 import 'package:fis_measure/utils/prompt_box.dart';
 import 'package:fis_measure/utils/canvas.dart';
 import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
 
 class URMCurvatureTraceMeasure extends Trace {
   URMCurvatureTraceMeasure(ItemMeta meta, IMeasureItem? parent)
@@ -24,6 +25,7 @@ class URMCurvatureTraceMeasure extends Trace {
 
   @override
   bool onExecuteMouse(PointInfo args) {
+    isAutoSnap = false;
     if (waitingResult) return false;
     if (state == ItemStates.finished) {
       if (args.pointType == PointInfoType.mouseDown) {
@@ -71,6 +73,47 @@ class URMCurvatureTraceMeasure extends Trace {
     PromptBox.dismiss();
     waitingResult = false;
   }
+
+  /// 自动结束检测
+  @override
+  bool checkAutoSnap(PointInfo current, [bool autoFinishFeature = true]) {
+    if (feature == null || feature!.innerPoints.length < 3) {
+      isSmartMove = false;
+      return _syncState(false);
+    }
+
+    // final viewport = feature!.hostVisualArea!.viewport!;
+
+    if (isAutoSnap == false) return false;
+    final pixelSize = application.displaySize;
+
+    final p1 = feature!.innerPoints.first.scale2Size(pixelSize);
+    final p2 = current.scale2Size(pixelSize);
+    final length = (p1 - p2).length;
+    if (length > snapThreshold * 2.0 && !isSmartMove) {
+      isSmartMove = true;
+    }
+    if (length < snapThreshold && isSmartMove) {
+      feature!.innerPoints.last = feature!.innerPoints.first.clone();
+
+      /// 此处的最后一个点,方便计算,但是绘制时要剔除
+      // feature!.innerPoints.removeLast();
+
+      HapticFeedback.heavyImpact();
+      if (autoFinishFeature) {
+        handleFinish();
+      }
+      isSmartMove = false;
+      return _syncState(true);
+    } else {
+      return _syncState(false);
+    }
+  }
+
+  bool _syncState(bool isSnap) {
+    snapState = isSnap;
+    return snapState;
+  }
 }
 
 class TraceCurvatureFeature extends TraceFeature {

+ 39 - 0
lib/process/primitives/urm_measure/urm_curve_curvature_line_measure.dart

@@ -1,10 +1,14 @@
+import 'package:fis_measure/interfaces/date_types/point.dart';
 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_metas.dart';
 import 'package:fis_measure/interfaces/process/workspace/point_info.dart';
 import 'package:fis_measure/process/calcuators/urm_calcuators/urm_curve_curvature_line.dart';
+import 'package:fis_measure/process/primitives/area_abstract.dart';
 import 'package:fis_measure/process/primitives/trace.dart';
+import 'package:fis_measure/utils/canvas.dart';
 import 'package:fis_measure/utils/prompt_box.dart';
+import 'package:flutter/material.dart';
 
 class URMCurveCurvatureLineMeasure extends Trace {
   URMCurveCurvatureLineMeasure(ItemMeta meta, IMeasureItem? parent)
@@ -22,6 +26,7 @@ class URMCurveCurvatureLineMeasure extends Trace {
 
   @override
   bool onExecuteMouse(PointInfo args) {
+    isAutoSnap = false;
     if (waitingResult) return false;
     if (state == ItemStates.finished) {
       if (args.pointType == PointInfoType.mouseDown) {
@@ -46,6 +51,17 @@ class URMCurveCurvatureLineMeasure extends Trace {
     return true;
   }
 
+  @override
+  void handleMouseDownWhileWaiting(PointInfo args) {
+    feature = TraceCurvatureLineFeature(this);
+    if (args.hostVisualArea != null) {
+      feature!.hostVisualArea = args.hostVisualArea;
+    }
+    final point = args.toAreaLogicPoint();
+    feature!.adopt(point);
+    state = ItemStates.running;
+  }
+
   bool waitingResult = false;
 
   void handleFinish() async {
@@ -58,3 +74,26 @@ class URMCurveCurvatureLineMeasure extends Trace {
     waitingResult = false;
   }
 }
+
+class TraceCurvatureLineFeature extends TraceFeature {
+  TraceCurvatureLineFeature(AreaItemAbstract refItem) : super(refItem);
+
+  List<DPoint> autoLinePoints = [];
+
+  @override
+  void paint(Canvas canvas, Size size) {
+    super.paint(canvas, size);
+
+    /// 绘制 AutoLine 点集连线
+    /// 使用 convert2ViewPoint 转为像素坐标
+    final pixelPoints = autoLinePoints.map((e) {
+      return convert2ViewPoint(size, e).toOffset();
+    }).toList();
+    final greenLinePan = Paint()
+      ..color = Colors.green
+      ..isAntiAlias = true
+      ..strokeWidth = 2
+      ..style = PaintingStyle.stroke;
+    canvas.drawPointsLine(pixelPoints, greenLinePan);
+  }
+}