|
@@ -1,6 +1,8 @@
|
|
|
import 'dart:math';
|
|
|
+import 'package:fis_common/logger/logger.dart';
|
|
|
import 'package:fis_jsonrpc/services/aIDiagnosis.m.dart';
|
|
|
import 'package:fis_measure/interfaces/date_types/point.dart';
|
|
|
+import 'package:fis_measure/interfaces/process/urm/urm_data_processor.dart';
|
|
|
import 'package:fis_measure/interfaces/process/visuals/visual.dart';
|
|
|
import 'package:fis_measure/process/visual/v2d_visual.dart';
|
|
|
import 'package:fis_measure/process/workspace/rpc_bridge.dart';
|
|
@@ -18,104 +20,23 @@ import 'package:fis_measure/interfaces/process/workspace/point_info.dart';
|
|
|
class URMApplication extends Application {
|
|
|
URMApplication(
|
|
|
VidUsProbe probe, {
|
|
|
- required this.beams,
|
|
|
- required this.samples,
|
|
|
- required this.roiRect,
|
|
|
required this.resultWidth,
|
|
|
required this.resultHeight,
|
|
|
- required this.remedicalCode,
|
|
|
- required this.originVisuals,
|
|
|
+ required this.urmDataProcessor,
|
|
|
this.onUpdateChart,
|
|
|
}) : super(probe);
|
|
|
|
|
|
- @override
|
|
|
- bool get isThirdPart => true;
|
|
|
-
|
|
|
- List<IVisual> originVisuals;
|
|
|
-
|
|
|
- int beams;
|
|
|
-
|
|
|
- int samples;
|
|
|
-
|
|
|
- Rect roiRect;
|
|
|
+ IURMDataProcessor urmDataProcessor;
|
|
|
|
|
|
int resultWidth;
|
|
|
|
|
|
int resultHeight;
|
|
|
|
|
|
- String remedicalCode;
|
|
|
-
|
|
|
- bool syncDisplay = false;
|
|
|
-
|
|
|
- double urmPhysicalwidth = 1.0;
|
|
|
-
|
|
|
- double urmPhysicalheight = 1.0;
|
|
|
-
|
|
|
- double areaScaler =
|
|
|
- 1.0;
|
|
|
-
|
|
|
- double pixelscaler = 1.0;
|
|
|
-
|
|
|
- double urmMinVel = 1.0;
|
|
|
-
|
|
|
final ValueChanged<URMChartParams>? onUpdateChart;
|
|
|
|
|
|
- @override
|
|
|
- List<IVisual> convertVisuals() {
|
|
|
- var urmVisuals = originVisuals;
|
|
|
- double beamsPercent = 1;
|
|
|
- Size physicalSize = Size.zero;
|
|
|
- if (originVisuals.isNotEmpty) {
|
|
|
- IVisual visual = originVisuals[0];
|
|
|
- if (visual is V2dVisual) {
|
|
|
- VidUsVisual visualData = visual.visualData;
|
|
|
- if (visualData is VidUs2DVisual) {
|
|
|
- if (visualData.logicalCoordinates.isNotEmpty &&
|
|
|
- visualData.physicalCoordinates.isNotEmpty) {
|
|
|
- beamsPercent = getBeamsPercent(
|
|
|
- visualData.logicalCoordinates.entries.first.value,
|
|
|
- visualData.physicalCoordinates.entries.first.value,
|
|
|
- );
|
|
|
- physicalSize = getPhysicalSize(
|
|
|
- visualData.physicalCoordinates.entries.first.value);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- double scaleX = roiRect.width / beams * beamsPercent;
|
|
|
- double scaleY = roiRect.height / samples;
|
|
|
- urmPhysicalwidth = physicalSize.width * roiRect.width / beams;
|
|
|
- urmPhysicalheight = physicalSize.height * scaleY;
|
|
|
- areaScaler = (urmPhysicalwidth / resultWidth) *
|
|
|
- (urmPhysicalheight / resultHeight);
|
|
|
- pixelscaler = urmPhysicalwidth / resultWidth;
|
|
|
- RectRegion region =
|
|
|
- RectRegion(left: 0, top: 0, right: 1 / scaleX, bottom: 1 / scaleY);
|
|
|
- V2dVisual v2dVisual = V2dVisual(visualData, region);
|
|
|
- urmVisuals = [v2dVisual];
|
|
|
- }
|
|
|
- }
|
|
|
- return urmVisuals;
|
|
|
- }
|
|
|
-
|
|
|
- double getBeamsPercent(VidUsLogicalCoordinate logicalCoordinate,
|
|
|
- VidUsPhysicalCoordinate physicalCoordinates) {
|
|
|
- if (physicalCoordinates is VidUsTissuePhysicalCoordinate) {
|
|
|
- return (physicalCoordinates.width /
|
|
|
- (logicalCoordinate.region.right - logicalCoordinate.region.left));
|
|
|
- }
|
|
|
- return 1;
|
|
|
- }
|
|
|
-
|
|
|
- Size getPhysicalSize(VidUsPhysicalCoordinate physicalCoordinates) {
|
|
|
- if (physicalCoordinates is VidUsTissuePhysicalCoordinate) {
|
|
|
- return Size(physicalCoordinates.width,
|
|
|
- physicalCoordinates.depthEnd - physicalCoordinates.depthStart);
|
|
|
- }
|
|
|
- return Size.zero;
|
|
|
- }
|
|
|
-
|
|
|
@override
|
|
|
PointInfo createPointInfo(Offset offset, PointInfoType type) {
|
|
|
+
|
|
|
final width = displaySize.width;
|
|
|
final height = displaySize.height;
|
|
|
final x = offset.dx / width;
|
|
@@ -140,40 +61,72 @@ class URMApplication extends Application {
|
|
|
|
|
|
@override
|
|
|
double get displayScaleRatio {
|
|
|
- return max(
|
|
|
- 1,
|
|
|
- min(displaySize.width / resultWidth,
|
|
|
- displaySize.height / resultHeight));
|
|
|
-
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ return 1.0;
|
|
|
}
|
|
|
|
|
|
void loadURMVisuals() {
|
|
|
loadVisuals();
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
+ Future<URMMeasureProcessResult?> getURMMeasureResult({
|
|
|
+ required URMMeasureType urmMeasureType,
|
|
|
+ required URMROIType rOIType,
|
|
|
+ List<UrmPoint>? srcDPoints,
|
|
|
+ double? cMlength,
|
|
|
+ double shellWidth = 0,
|
|
|
+ }) async {
|
|
|
+ try {
|
|
|
+ print("调接口获取测量值 getURMMeasureResult");
|
|
|
+ URMMeasureParams params = urmDataProcessor.getURMMeasureParams();
|
|
|
+ URMMeasureProcessResult result =
|
|
|
+ await RPCBridge.ins.rpc.aIDiagnosis.uRMMeasureProcessAsync(
|
|
|
+ URMMeasureProcessRequest(
|
|
|
+ remedicalCode: params.remedicalCode,
|
|
|
+ token: RPCBridge.ins.userToken,
|
|
|
+ urmMeasureType: urmMeasureType,
|
|
|
+ rOIType: rOIType,
|
|
|
+ srcDPoints: srcDPoints,
|
|
|
+ cMlength: cMlength,
|
|
|
+ shellWidth: shellWidth,
|
|
|
+ phywidth: 1,
|
|
|
+ urmImageType: params.urmImageType,
|
|
|
+ urmBlend: params.urmBlend,
|
|
|
+ downsampleIndex: params.downsampleIndex,
|
|
|
+ intPowerDen: params.intPowerDen,
|
|
|
+ intPowerDir: params.intPowerDir,
|
|
|
+ sigmaGauss: params.sigmaGauss,
|
|
|
+ vessScale: params.vessScale,
|
|
|
+ velMaxScaler: params.velMaxScaler,
|
|
|
+ velMinScaler: params.velMinScaler,
|
|
|
+ iterations: params.iterations,
|
|
|
+ imgProcessVer: params.imgProcessVer,
|
|
|
+ zoomOn: params.zoomOn,
|
|
|
+ zoomRoix: params.zoomRoix,
|
|
|
+ zoomRoiy: params.zoomRoiy,
|
|
|
+ zoomRoiwidth: params.zoomRoiwidth,
|
|
|
+ zoomRoiheight: params.zoomRoiheight,
|
|
|
+ roix: params.roix,
|
|
|
+ roiy: params.roiy,
|
|
|
+ roiwidth: params.roiwidth,
|
|
|
+ roiheight: params.roiheight,
|
|
|
+ leftRight: params.leftRight,
|
|
|
+ upDown: params.upDown,
|
|
|
+ screenWidth: params.screenWidth,
|
|
|
+ screenHeight: params.screenHeight,
|
|
|
+ urmTraceDPoints: params.urmTraceDPoints,
|
|
|
+ ),
|
|
|
+ );
|
|
|
+ return result;
|
|
|
+ } catch (e) {
|
|
|
+ logger.e("URM measure error($e)");
|
|
|
+ print("getURMMeasureResult error: $e");
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|