|
@@ -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);
|
|
|
+ }
|
|
|
+}
|