123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361 |
- 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';
- import 'package:flutter/material.dart';
- import 'package:vid/us/vid_us_probe.dart';
- import '../application.dart';
- import 'package:fis_measure/interfaces/date_types/rect_region.dart';
- import 'package:vid/us/vid_us_2d_visual.dart';
- import 'package:vid/us/vid_us_logical_coordinate.dart';
- import 'package:vid/us/vid_us_physical_coordinate.dart';
- import 'package:vid/us/vid_us_visual.dart';
- import 'package:fis_measure/interfaces/process/workspace/point_info.dart';
- /// URM 专业应用
- class URMApplication extends Application {
- URMApplication(
- VidUsProbe probe, {
- required this.resultWidth,
- required this.resultHeight,
- required this.urmDataProcessor,
- this.onUpdateChart,
- }) : super(probe);
- IURMDataProcessor urmDataProcessor;
- int resultWidth; // 分析结果图像宽度
- int resultHeight; // 分析结果图像高度
- final ValueChanged<URMChartParams>? onUpdateChart;
- @override
- PointInfo createPointInfo(Offset offset, PointInfoType type) {
- // 当前获取到的 displaysize 是错误的,需要手动转一道,将 offset 转为正确的屏幕百分比坐标
- final width = displaySize.width;
- final height = displaySize.height;
- final x = offset.dx / width;
- final y = offset.dy / height;
- final percentOffset = Offset(x, y);
- final info = PointInfo.fromOffset(percentOffset, type);
- info.hostVisualArea = currentVisualArea; // 未切换区域则沿用当前区域
- if (isAnnotationWorking) {
- activeAnnotationItem?.execute(info);
- } else {
- activeMeasureItem?.execute(info);
- if (type == PointInfoType.touchMove) {
- mobileTouchEvent.emit(this, offset); // 传出移动事件
- }
- if (type == PointInfoType.touchUp) {
- mobileTouchEndEvent.emit(this, offset); // 传出触摸结束事件
- }
- }
- return info;
- }
- @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, // TODO 手动计算
- 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;
- }
- }
- // Future<GetSRRoiVelResult?> getSRRoiVelResult(
- // DPoint startPoint, DPoint endPoint) async {
- // try {
- // print("调接口获取测量值 getSRRoiVelAsync");
- // GetSRRoiVelResult result =
- // await RPCBridge.ins.rpc.aIDiagnosis.getSRRoiVelAsync(
- // GetSRRoiVelRequest(
- // remedicalCode: remedicalCode,
- // measureMode: 5,
- // dataWidth: resultWidth,
- // dataHeight: resultHeight,
- // startPointX: startPoint.x,
- // startPointY: startPoint.y,
- // endPointX: endPoint.x,
- // endPointY: endPoint.y,
- // token: RPCBridge.ins.userToken,
- // ),
- // );
- // return result;
- // } catch (e) {
- // return null;
- // }
- // }
- // Future<GetSRRoiFractalDimResult?> getSRRoiFractalDimResult(
- // DPoint startPoint, DPoint endPoint) async {
- // try {
- // print("调接口获取测量值 getSRRoiFractalDimAsync");
- // GetSRRoiFractalDimResult result =
- // await RPCBridge.ins.rpc.aIDiagnosis.getSRRoiFractalDimAsync(
- // GetSRRoiFractalDimRequest(
- // remedicalCode: remedicalCode,
- // measureMode: 5,
- // dataWidth: resultWidth,
- // dataHeight: resultHeight,
- // startPointX: startPoint.x,
- // startPointY: startPoint.y,
- // endPointX: endPoint.x,
- // endPointY: endPoint.y,
- // token: RPCBridge.ins.userToken,
- // ),
- // );
- // return result;
- // } catch (e) {
- // return null;
- // }
- // }
- // Future<GetSRTraceVelResult?> getSRTraceVelResult(
- // List<UrmPoint> points,
- // ) async {
- // try {
- // print("调接口获取测量值 getSRTraceVelResult");
- // GetSRTraceVelResult result =
- // await RPCBridge.ins.rpc.aIDiagnosis.getSRTraceVelAsync(
- // GetSRTraceVelRequest(
- // remedicalCode: remedicalCode,
- // measureMode: 5,
- // dataWidth: resultWidth,
- // dataHeight: resultHeight,
- // inputPoints: points,
- // token: RPCBridge.ins.userToken,
- // ),
- // );
- // return result;
- // } catch (e) {
- // return null;
- // }
- // }
- // Future<GetSRTraceFractalDimResult?> getSRTraceFractalDimResult(
- // List<UrmPoint> points,
- // ) async {
- // try {
- // print("调接口获取测量值 getSRTraceFractalDimAsync");
- // GetSRTraceFractalDimResult result =
- // await RPCBridge.ins.rpc.aIDiagnosis.getSRTraceFractalDimAsync(
- // GetSRTraceFractalDimRequest(
- // remedicalCode: remedicalCode,
- // measureMode: 5,
- // dataWidth: resultWidth,
- // dataHeight: resultHeight,
- // inputPoints: points,
- // token: RPCBridge.ins.userToken,
- // ),
- // );
- // return result;
- // } catch (e) {
- // return null;
- // }
- // }
- // Future<GetSRLoactionVelResult?> getSRLoactionVelResult(
- // DPoint point,
- // ) async {
- // try {
- // print("调接口获取测量值 getSRLoactionVelAsync");
- // GetSRLoactionVelResult result =
- // await RPCBridge.ins.rpc.aIDiagnosis.getSRLoactionVelAsync(
- // GetSRLoactionVelRequest(
- // remedicalCode: remedicalCode,
- // measureMode: 6,
- // dataWidth: resultWidth,
- // dataHeight: resultHeight,
- // startPointX: point.x,
- // startPointY: point.y,
- // token: RPCBridge.ins.userToken,
- // ),
- // );
- // return result;
- // } catch (e) {
- // return null;
- // }
- // }
- // Future<GetSRRoiSpeedResult?> getSRRoiSpeedResult(
- // DPoint startPoint,
- // DPoint endPoint,
- // ) async {
- // try {
- // print("调接口获取测量值 getSRRoiSpeedAsync");
- // GetSRRoiSpeedResult result =
- // await RPCBridge.ins.rpc.aIDiagnosis.getSRRoiSpeedAsync(
- // GetSRRoiSpeedRequest(
- // remedicalCode: remedicalCode,
- // measureMode: 6,
- // dataWidth: resultWidth,
- // dataHeight: resultHeight,
- // startPointX: startPoint.x,
- // startPointY: startPoint.y,
- // endPointX: endPoint.x,
- // endPointY: endPoint.y,
- // token: RPCBridge.ins.userToken,
- // ),
- // );
- // return result;
- // } catch (e) {
- // return null;
- // }
- // }
- // Future<GetURMDenMeasureResult?> getURMDenMeasureResult(
- // DPoint startPoint, DPoint endPoint) async {
- // try {
- // print("调接口获取测量值 getURMDenMeasureAsync");
- // GetURMDenMeasureResult result =
- // await RPCBridge.ins.rpc.aIDiagnosis.getURMDenMeasureAsync(
- // GetURMDenMeasureRequest(
- // remedicalCode: remedicalCode,
- // measureMode: 5,
- // dataWidth: resultWidth,
- // dataHeight: resultHeight,
- // startPointX: startPoint.x,
- // startPointY: startPoint.y,
- // endPointX: endPoint.x,
- // endPointY: endPoint.y,
- // areaScaler: areaScaler,
- // token: RPCBridge.ins.userToken,
- // ),
- // );
- // return result;
- // } catch (e) {
- // return null;
- // }
- // }
- // Future<GetURMVelMeasureResult?> getURMVelMeasureResult(
- // DPoint startPoint, DPoint endPoint) async {
- // try {
- // print("调接口获取测量值 getURMVelMeasureAsync");
- // GetURMVelMeasureResult result =
- // await RPCBridge.ins.rpc.aIDiagnosis.getURMVelMeasureAsync(
- // GetURMVelMeasureRequest(
- // remedicalCode: remedicalCode,
- // measureMode: 6,
- // dataWidth: resultWidth,
- // dataHeight: resultHeight,
- // startPointX: startPoint.x,
- // startPointY: startPoint.y,
- // endPointX: endPoint.x,
- // endPointY: endPoint.y,
- // areaScaler: areaScaler,
- // token: RPCBridge.ins.userToken,
- // ),
- // );
- // return result;
- // } catch (e) {
- // return null;
- // }
- // }
- // Future<GetUrmVessMeasureResult?> getURMVessMeasureResult(
- // DPoint startPoint, DPoint endPoint, double cmlength) async {
- // try {
- // print("调接口获取测量值 getURMVelMeasureAsync");
- // GetUrmVessMeasureResult result =
- // await RPCBridge.ins.rpc.aIDiagnosis.getUrmVessMeasureAsync(
- // GetUrmVessMeasureRequest(
- // remedicalCode: remedicalCode,
- // measureMode: 6,
- // dataWidth: resultWidth,
- // dataHeight: resultHeight,
- // startPointX: startPoint.x,
- // startPointY: startPoint.y,
- // endPointX: endPoint.x,
- // endPointY: endPoint.y,
- // areaScaler: pixelscaler,
- // cmLength: cmlength,
- // token: RPCBridge.ins.userToken,
- // ),
- // );
- // return result;
- // } catch (e) {
- // return null;
- // }
- // }
- }
- class URMChartParams {
- final List<Point> points;
- final double cmlength;
- final int maxPointIndex;
- final int minPointIndex;
- URMChartParams({
- required this.points,
- required this.cmlength,
- required this.maxPointIndex,
- required this.minPointIndex,
- });
- }
|