|
@@ -1,6 +1,10 @@
|
|
|
import 'package:fis_common/logger/logger.dart';
|
|
|
+import 'package:fis_jsonrpc/rpc.dart';
|
|
|
+import 'package:fis_measure/interfaces/process/items/terms.dart';
|
|
|
import 'package:fis_measure/process/calcuators/urm_calcuators/urm_rect_measure.dart';
|
|
|
import 'package:fis_measure/process/workspace/urm/application.dart';
|
|
|
+import 'package:vid/us/vid_us_unit.dart';
|
|
|
+import 'dart:math' as math;
|
|
|
|
|
|
class URMRectDenVelMeasureCal extends URMRectMeasureCal {
|
|
|
URMRectDenVelMeasureCal(super.ref);
|
|
@@ -14,11 +18,65 @@ class URMRectDenVelMeasureCal extends URMRectMeasureCal {
|
|
|
try {
|
|
|
if (ref.feature == null) return;
|
|
|
if (ref.application is! URMApplication) return;
|
|
|
+ final URMApplication urmApplication = ref.application as URMApplication;
|
|
|
|
|
|
- // TODO 规划入参,坐标系转换,调用接口,处理返回结果
|
|
|
+ URMMeasureProcessResult? outResult =
|
|
|
+ await urmApplication.getURMMeasureResult(
|
|
|
+ urmMeasureType: URMMeasureType.URMDenVelMeasure,
|
|
|
+ rOIType: URMROIType.URMRect,
|
|
|
+ srcDPoints: param!.srcDPoints,
|
|
|
+ );
|
|
|
+ var result = outResult?.denMeasureResult;
|
|
|
+ var velResult = outResult?.velMeasureResult;
|
|
|
+
|
|
|
+ if (result != null && velResult != null) {
|
|
|
+ final feature = ref.feature!;
|
|
|
+
|
|
|
+ for (var output in ref.meta.outputs) {
|
|
|
+ if (output.name == MeasureTerms.URMDenROI) {
|
|
|
+ output.unit = VidUsUnit.percent;
|
|
|
+ feature.updateFloatValue(output, result.roiDen * 100, output.unit);
|
|
|
+ } else if (output.name == MeasureTerms.URMDenFractalDim) {
|
|
|
+ output.unit = VidUsUnit.None;
|
|
|
+ feature.updateFloatValue(output, result.roiFractalDim, output.unit);
|
|
|
+ } else if (output.name == MeasureTerms.URMDenMax) {
|
|
|
+ output.unit = VidUsUnit.None;
|
|
|
+ feature.updateFloatValue(output, result.maxDensity, output.unit);
|
|
|
+ } else if (output.name == MeasureTerms.URMDenMin) {
|
|
|
+ output.unit = VidUsUnit.None;
|
|
|
+ feature.updateFloatValue(output, result.minDensity, output.unit);
|
|
|
+ } else if (output.name == MeasureTerms.URMDenMean) {
|
|
|
+ output.unit = VidUsUnit.None;
|
|
|
+ feature.updateFloatValue(output, result.meanDensity, output.unit);
|
|
|
+ } else if (output.name == MeasureTerms.URMDenStd) {
|
|
|
+ output.unit = VidUsUnit.None;
|
|
|
+ feature.updateFloatValue(
|
|
|
+ output, math.sqrt(result.varianceDensity), output.unit);
|
|
|
+ } else if (output.name == MeasureTerms.URMVelMax) {
|
|
|
+ output.unit = VidUsUnit.None;
|
|
|
+ feature.updateFloatValue(output, velResult.maxVel, output.unit);
|
|
|
+ } else if (output.name == MeasureTerms.URMVelMin) {
|
|
|
+ output.unit = VidUsUnit.None;
|
|
|
+ feature.updateFloatValue(output, velResult.minVel, output.unit);
|
|
|
+ } else if (output.name == MeasureTerms.URMVelMean) {
|
|
|
+ output.unit = VidUsUnit.None;
|
|
|
+ feature.updateFloatValue(output, velResult.meanVel, output.unit);
|
|
|
+ } else if (output.name == MeasureTerms.URMVelStd) {
|
|
|
+ output.unit = VidUsUnit.None;
|
|
|
+ feature.updateFloatValue(
|
|
|
+ output, math.sqrt(velResult.varianceVel), output.unit);
|
|
|
+ } else if (output.name == MeasureTerms.Area) {
|
|
|
+ output.unit = VidUsUnit.cm2;
|
|
|
+ feature.updateFloatValue(output, result.roiArea, output.unit);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ throw Exception("URM Measure API error");
|
|
|
+ }
|
|
|
} catch (e) {
|
|
|
logger.e('URM Measure error: $e');
|
|
|
return;
|
|
|
}
|
|
|
+ ref.application.updateRenderReady.emit(this, null);
|
|
|
}
|
|
|
}
|