浏览代码

绘制 测量序号

melon.yin 2 年之前
父节点
当前提交
30c0f5d141

+ 3 - 0
lib/interfaces/process/items/item.dart

@@ -51,6 +51,9 @@ abstract class IMeasureItem {
   /// 测量状态
   ItemStates get state;
 
+  /// 显示像素/图片像素 缩放比例
+  double get scaleRatio;
+
   /// 处理输入
   bool execute(PointInfo args);
 

+ 3 - 0
lib/process/items/item.dart

@@ -66,6 +66,9 @@ abstract class MeasureItem<T extends MeasureItemFeature> extends IMeasureItem {
     }
   }
 
+  @override
+  double get scaleRatio => application.displayScaleRatio;
+
   @override
   late final featureUpdated = FEventHandler<IMeasureItemFeature?>();
 

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

@@ -4,7 +4,10 @@ import 'package:fis_measure/interfaces/date_types/point.dart';
 import 'package:fis_measure/interfaces/process/items/item.dart';
 import 'package:fis_measure/interfaces/process/items/item_feature.dart';
 import 'package:fis_measure/interfaces/process/visuals/visual_area.dart';
+import 'package:fis_measure/utils/canvas.dart';
+import 'package:fis_measure/values/colors.dart';
 import 'package:flutter/foundation.dart';
+import 'package:flutter/painting.dart';
 
 abstract class MeasureItemFeature implements IMeasureItemFeature {
   late IMeasureItem _refItem;
@@ -56,4 +59,33 @@ abstract class MeasureItemFeature implements IMeasureItemFeature {
     final y = size.height * logicPoint.y;
     return DPoint(x, y);
   }
+
+  /// 画序号
+  ///
+  /// [text] 自定义序号内容
+  @protected
+  void drawId(Canvas canvas, Size size, [String? text]) {
+    final displayText = text ?? id.toString();
+    final fontSize = 14.0 * refItem.scaleRatio; // TODO: from config
+    final letterSpacing = 0.0 * refItem.scaleRatio;
+    final width = fontSize * displayText.length +
+        letterSpacing * (displayText.length - 1);
+    var offset = convert2ViewPoint(size, innerPoints[0]).toOffset();
+    if (offset.dx < width) {
+      offset = offset.translate(fontSize, -fontSize);
+    } else {
+      offset = offset.translate(-width, -fontSize);
+    }
+    TextStyle style = TextStyle(
+      fontSize: fontSize,
+      color: MeasureColors.Primary,
+      // fontWeight: FontWeight.bold,
+      letterSpacing: letterSpacing,
+    );
+    canvas.drawText(
+      displayText,
+      offset,
+      style: style,
+    );
+  }
 }

+ 2 - 0
lib/process/primitives/straightline.dart

@@ -87,6 +87,8 @@ class StraightLineFeature extends MeasureItemFeature {
   void paint(Canvas canvas, Size size) {
     if (startPoint == endPoint) return;
 
+    drawId(canvas, size);
+
     // TODO: dynamic getter
     const double vertexSize = 10;
 

+ 1 - 1
lib/view/measure/measure_main_view.dart

@@ -119,7 +119,7 @@ class _MeasureMainViewState extends State<MeasureMainView> {
 
   /// 卸载参考校准线
   void uninstallStandardLine() {
-    standardLineCalibrationController!.editStateChanged
+    standardLineCalibrationController?.editStateChanged
         .removeListener(onStandardLineCalibrationStateChanged);
     Get.delete<IStandardLineCalibrationController>();
   }

+ 1 - 8
lib/view/result/results_panel.dart

@@ -125,7 +125,7 @@ class _MeasureResultPanelState extends State<MeasureResultPanel> {
     final length = dataList.length;
     for (var i = 0; i < length; i++) {
       final output = dataList[i];
-      final idStr = _getIdDisplayStr(i + 1);
+      final idStr = _getIdDisplayStr(output.id);
       list.add(const FSizedBox(height: 4));
       list.add(_buildLine('$idStr ${output.description}'));
     }
@@ -196,13 +196,6 @@ class _MeasureResultPanelState extends State<MeasureResultPanel> {
     idStrLength = outputs.length.toString().length;
   }
 
-  void _insertOutput(IMode mode, OutputItem output) {
-    if (!_outputMap.containsKey(mode)) {
-      _outputMap.assign(mode, []);
-    }
-    _outputMap[mode]!.add(output);
-  }
-
   String _getIdDisplayStr(int id) {
     return id.toString().padRight(idStrLength, ' ');
   }