|
@@ -1,24 +1,29 @@
|
|
|
-import 'dart:convert';
|
|
|
import 'dart:ui';
|
|
|
|
|
|
import 'package:fis_common/logger/logger.dart';
|
|
|
import 'package:fis_jsonrpc/rpc.dart';
|
|
|
import 'package:fis_measure/interfaces/date_types/point.dart';
|
|
|
import 'package:fis_measure/interfaces/process/items/types.dart';
|
|
|
+import 'package:fis_measure/process/primitives/area_abstract.dart';
|
|
|
import 'package:fis_measure/process/primitives/location.dart';
|
|
|
import 'package:fis_measure/process/primitives/straightline.dart';
|
|
|
import 'package:fis_measure/process/primitives/urm_rect.dart';
|
|
|
-import 'package:fis_measure/process/workspace/rpc_bridge.dart';
|
|
|
import 'package:fis_measure/process/workspace/urm/application.dart';
|
|
|
import 'package:vid/us/vid_us_unit.dart';
|
|
|
|
|
|
import 'calculator.dart';
|
|
|
|
|
|
class URMRectCal extends Calculator<URMRect, double> {
|
|
|
- URMRectCal(URMRect ref, this.type) : super(ref);
|
|
|
- String type = '';
|
|
|
+ URMRectCal(
|
|
|
+ URMRect ref, {
|
|
|
+ required this.type,
|
|
|
+ }) : super(ref);
|
|
|
+ final String type;
|
|
|
@override
|
|
|
- void calculate() {
|
|
|
+ void calculate() {}
|
|
|
+
|
|
|
+ @override
|
|
|
+ Future<void> calculateAsync() async {
|
|
|
if (ref.feature == null) return;
|
|
|
Size urmResultSize = const Size(0, 0);
|
|
|
try {
|
|
@@ -36,31 +41,25 @@ class URMRectCal extends Calculator<URMRect, double> {
|
|
|
//右下顶点
|
|
|
final rightBottomPercent =
|
|
|
DPoint(p1.x > p2.x ? p1.x : p2.x, p1.y > p2.y ? p1.y : p2.y);
|
|
|
- //画布尺寸
|
|
|
- final canavsSize = ref.application.displaySize;
|
|
|
|
|
|
final startPoint = leftTopPercent.scale2Size(urmResultSize);
|
|
|
final endPoint = rightBottomPercent.scale2Size(urmResultSize);
|
|
|
|
|
|
- print("URM Measure canavsSize: $canavsSize");
|
|
|
- print("URM Measure type: $type");
|
|
|
-
|
|
|
String description = "URM\n Calculating...";
|
|
|
updateStringValue(description);
|
|
|
|
|
|
- /// [URM] ✅在此处通知 Server 计算,获取 description
|
|
|
switch (type) {
|
|
|
case MeasureTypes.SRRoiDensity:
|
|
|
- getSRRoiDensityResult(urmApplication, startPoint, endPoint);
|
|
|
+ await getSRRoiDensityResult(urmApplication, startPoint, endPoint);
|
|
|
break;
|
|
|
case MeasureTypes.SRRoiFractalDim:
|
|
|
- getSRRoiFractalDimResult(urmApplication, startPoint, endPoint);
|
|
|
+ await getSRRoiFractalDimResult(urmApplication, startPoint, endPoint);
|
|
|
break;
|
|
|
case MeasureTypes.SRRoiVel:
|
|
|
- getSRRoiVelResult(urmApplication, startPoint, endPoint);
|
|
|
+ await getSRRoiVelResult(urmApplication, startPoint, endPoint);
|
|
|
break;
|
|
|
case MeasureTypes.URMVelMeasure:
|
|
|
- getURMVelMeasureResult(urmApplication, startPoint, endPoint);
|
|
|
+ await getURMVelMeasureResult(urmApplication, startPoint, endPoint);
|
|
|
break;
|
|
|
default:
|
|
|
}
|
|
@@ -71,7 +70,7 @@ class URMRectCal extends Calculator<URMRect, double> {
|
|
|
}
|
|
|
|
|
|
// URM 测量项 2
|
|
|
- void getSRRoiDensityResult(
|
|
|
+ Future<void> getSRRoiDensityResult(
|
|
|
URMApplication app, DPoint startPoint, DPoint endPoint) async {
|
|
|
String description = "URM\n Measuring";
|
|
|
try {
|
|
@@ -90,7 +89,7 @@ class URMRectCal extends Calculator<URMRect, double> {
|
|
|
}
|
|
|
|
|
|
// URM 测量项 3
|
|
|
- void getSRRoiFractalDimResult(
|
|
|
+ Future<void> getSRRoiFractalDimResult(
|
|
|
URMApplication app, DPoint startPoint, DPoint endPoint) async {
|
|
|
String description = "URM\n Measuring";
|
|
|
try {
|
|
@@ -109,7 +108,7 @@ class URMRectCal extends Calculator<URMRect, double> {
|
|
|
}
|
|
|
|
|
|
// URM 测量项 7
|
|
|
- void getSRRoiVelResult(
|
|
|
+ Future<void> getSRRoiVelResult(
|
|
|
URMApplication app, DPoint startPoint, DPoint endPoint) async {
|
|
|
String description = "URM\n Measuring";
|
|
|
try {
|
|
@@ -128,7 +127,7 @@ class URMRectCal extends Calculator<URMRect, double> {
|
|
|
}
|
|
|
|
|
|
// URM 测量项 9
|
|
|
- void getURMVelMeasureResult(
|
|
|
+ Future<void> getURMVelMeasureResult(
|
|
|
URMApplication app, DPoint startPoint, DPoint endPoint) async {
|
|
|
String description = "URM\n Measuring";
|
|
|
try {
|
|
@@ -152,7 +151,10 @@ class URMLocationCal extends Calculator<Location, double> {
|
|
|
URMLocationCal(Location ref) : super(ref);
|
|
|
|
|
|
@override
|
|
|
- void calculate() {
|
|
|
+ void calculate() {}
|
|
|
+
|
|
|
+ @override
|
|
|
+ Future<void> calculateAsync() async {
|
|
|
if (ref.feature == null) return;
|
|
|
Size urmResultSize = const Size(0, 0);
|
|
|
try {
|
|
@@ -167,7 +169,8 @@ class URMLocationCal extends Calculator<Location, double> {
|
|
|
final point = ref.feature!.point.clone();
|
|
|
final startPoint = point.scale2Size(urmResultSize);
|
|
|
print("URM Measure startPoint: $startPoint");
|
|
|
- getSRLoactionVelResult(urmApplication, startPoint);
|
|
|
+ await getSRLoactionVelResult(urmApplication, startPoint);
|
|
|
+ return;
|
|
|
} catch (e) {
|
|
|
logger.e('URM Measure error: $e');
|
|
|
return;
|
|
@@ -175,7 +178,8 @@ class URMLocationCal extends Calculator<Location, double> {
|
|
|
}
|
|
|
|
|
|
// URM 测量项 6
|
|
|
- void getSRLoactionVelResult(URMApplication app, DPoint startPoint) async {
|
|
|
+ Future<void> getSRLoactionVelResult(
|
|
|
+ URMApplication app, DPoint startPoint) async {
|
|
|
String description = "URM\n Measuring";
|
|
|
try {
|
|
|
GetSRLoactionVelResult? result =
|
|
@@ -194,10 +198,16 @@ class URMLocationCal extends Calculator<Location, double> {
|
|
|
}
|
|
|
|
|
|
class URMStraightLineCal extends Calculator<StraightLine, double> {
|
|
|
- URMStraightLineCal(StraightLine ref) : super(ref);
|
|
|
+ URMStraightLineCal(
|
|
|
+ StraightLine ref, {
|
|
|
+ required this.type,
|
|
|
+ }) : super(ref);
|
|
|
+ final String type;
|
|
|
+ @override
|
|
|
+ void calculate() {}
|
|
|
|
|
|
@override
|
|
|
- void calculate() {
|
|
|
+ Future<void> calculateAsync() async {
|
|
|
if (ref.feature == null) return;
|
|
|
try {
|
|
|
if (ref.application is! URMApplication) {
|
|
@@ -217,7 +227,15 @@ class URMStraightLineCal extends Calculator<StraightLine, double> {
|
|
|
final startPoint = leftTopPercent.scale2Size(urmResultSize);
|
|
|
final endPoint = rightBottomPercent.scale2Size(urmResultSize);
|
|
|
|
|
|
- getSRCurvatureResult(urmApplication, startPoint, endPoint);
|
|
|
+ switch (type) {
|
|
|
+ case MeasureTypes.SRCurvature:
|
|
|
+ await getSRCurvatureResult(urmApplication, startPoint, endPoint);
|
|
|
+ break;
|
|
|
+ case MeasureTypes.URMDensityMeasure:
|
|
|
+ await getURMDenMeasureResult(urmApplication, startPoint, endPoint);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ }
|
|
|
} catch (e) {
|
|
|
logger.e('URM Measure error: $e');
|
|
|
return;
|
|
@@ -225,7 +243,7 @@ class URMStraightLineCal extends Calculator<StraightLine, double> {
|
|
|
}
|
|
|
|
|
|
// URM 测量项 1
|
|
|
- void getSRCurvatureResult(
|
|
|
+ Future<void> getSRCurvatureResult(
|
|
|
URMApplication app, DPoint startPoint, DPoint endPoint) async {
|
|
|
String description = "URM\n Measuring";
|
|
|
try {
|
|
@@ -245,7 +263,7 @@ class URMStraightLineCal extends Calculator<StraightLine, double> {
|
|
|
}
|
|
|
|
|
|
// URM 测量项 8
|
|
|
- void getURMDenMeasureResult(
|
|
|
+ Future<void> getURMDenMeasureResult(
|
|
|
URMApplication app, DPoint startPoint, DPoint endPoint) async {
|
|
|
String description = "URM\n Measuring";
|
|
|
try {
|
|
@@ -264,3 +282,90 @@ class URMStraightLineCal extends Calculator<StraightLine, double> {
|
|
|
ref.application.updateRenderReady.emit(this, null);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+class URMTraceCal extends Calculator<AreaItemAbstract, double> {
|
|
|
+ URMTraceCal(
|
|
|
+ AreaItemAbstract ref, {
|
|
|
+ required this.type,
|
|
|
+ }) : super(ref);
|
|
|
+ final String type;
|
|
|
+
|
|
|
+ @override
|
|
|
+ void calculate() {}
|
|
|
+
|
|
|
+ @override
|
|
|
+ Future<void> calculateAsync() async {
|
|
|
+ if (ref.feature == null) return;
|
|
|
+ final feature = ref.feature!;
|
|
|
+ try {
|
|
|
+ if (ref.application is! URMApplication) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ Size urmResultSize = const Size(0, 0);
|
|
|
+ final URMApplication urmApplication = ref.application as URMApplication;
|
|
|
+ urmResultSize = Size(urmApplication.resultWidth.toDouble(),
|
|
|
+ urmApplication.resultHeight.toDouble());
|
|
|
+ final List<DPoint> points =
|
|
|
+ feature.innerPoints.map((e) => e.scale2Size(urmResultSize)).toList();
|
|
|
+
|
|
|
+ switch (type) {
|
|
|
+ case MeasureTypes.SRTraceDensity:
|
|
|
+ await getSRTraceVelResult(urmApplication, convertPoints(points));
|
|
|
+ break;
|
|
|
+ case MeasureTypes.SRTraceFD:
|
|
|
+ await getSRTraceFractalDimResult(
|
|
|
+ urmApplication, convertPoints(points));
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ }
|
|
|
+ } catch (e) {
|
|
|
+ logger.e('URM Measure error: $e');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // URM 测量项 4
|
|
|
+ Future<void> getSRTraceVelResult(
|
|
|
+ URMApplication app, List<UrmPoint> points) async {
|
|
|
+ String description = "URM\n Measuring";
|
|
|
+ try {
|
|
|
+ GetSRTraceVelResult? result = await app.getSRTraceVelResult(points);
|
|
|
+ if (result != null) {
|
|
|
+ print("URM Measure output: ${result.output} ");
|
|
|
+ description = "${(result.output).toStringAsFixed(2)}mm/s ...";
|
|
|
+ }
|
|
|
+ } catch (e) {
|
|
|
+ description = " ";
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ updateStringValue(description);
|
|
|
+ ref.application.updateRenderReady.emit(this, null);
|
|
|
+ }
|
|
|
+
|
|
|
+ // URM 测量项 5
|
|
|
+ Future<void> getSRTraceFractalDimResult(
|
|
|
+ URMApplication app, List<UrmPoint> points) async {
|
|
|
+ String description = "URM\n Measuring";
|
|
|
+ try {
|
|
|
+ GetSRTraceFractalDimResult? result =
|
|
|
+ await app.getSRTraceFractalDimResult(points);
|
|
|
+ if (result != null) {
|
|
|
+ print("URM Measure output: ${result.output} ");
|
|
|
+ description = "${(result.output).toStringAsFixed(2)}mm/s ...";
|
|
|
+ }
|
|
|
+ } catch (e) {
|
|
|
+ description = " ";
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ updateStringValue(description);
|
|
|
+ ref.application.updateRenderReady.emit(this, null);
|
|
|
+ }
|
|
|
+
|
|
|
+ List<UrmPoint> convertPoints(List<DPoint> points) {
|
|
|
+ List<UrmPoint> urmPoints = [];
|
|
|
+ for (var point in points) {
|
|
|
+ urmPoints.add(UrmPoint(x: point.x, y: point.y));
|
|
|
+ }
|
|
|
+ return urmPoints;
|
|
|
+ }
|
|
|
+}
|