123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212 |
- import 'dart:math';
- import 'package:fis_common/logger/logger.dart';
- import 'package:fis_jsonrpc/rpc.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/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/process/workspace/point_info.dart';
- 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) {
- final width = urmDataProcessor.showLeftRight
- ? displaySize.width / 2
- : displaySize.width;
- final height = displaySize.height;
- final x = offset.dx / width;
- final y = offset.dy / height;
- Rect zoomArea = urmDataProcessor.measureAreaInFullVisual;
- Offset percentOffset = Offset(x, y);
- percentOffset = pointPctOutRect(zoomArea, percentOffset);
- 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 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: urmDataProcessor.phywidth,
- 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;
- }
- }
- Offset pointPctOutRect(Rect r, Offset p) {
- double xPctInR = p.dx * r.width + r.left;
- double yPctInR = p.dy * r.height + r.top;
- return Offset(xPctInR, yPctInR);
- }
- Offset pointPctInRect(Rect r, Offset p) {
- double xPctOutR = (p.dx - r.left) / r.width;
- double yPctOutR = (p.dy - r.top) / r.height;
- return Offset(xPctOutR, yPctOutR);
- }
-
- UrmPoint localToView(DPoint point) {
- Rect urmScreen = urmDataProcessor.urmScreenInFullVisual;
- Offset percentOffset = Offset(point.x, point.y);
- percentOffset = pointPctInRect(urmScreen, percentOffset);
- return UrmPoint(x: percentOffset.dx, y: percentOffset.dy);
- }
-
- DPoint viewToLocal(UrmPoint point) {
- Rect urmScreen = urmDataProcessor.urmScreenInFullVisual;
- Offset percentOffset = Offset(point.x, point.y);
- percentOffset = pointPctOutRect(urmScreen, percentOffset);
- return DPoint(percentOffset.dx, percentOffset.dy);
- }
-
- Rect viewToLocalRect(DRect point) {
- DPoint p1 = viewToLocal(UrmPoint(x: point.left, y: point.top));
- DPoint p2 = viewToLocal(UrmPoint(x: point.right, y: point.bottom));
- return Rect.fromLTRB(p1.x, p1.y, p2.x, p2.y);
- }
-
- List<UrmPoint> dPointsToUrmPoints(List<DPoint>? points) {
- if (points == null) return [];
- List<UrmPoint> urmPoints = [];
- for (var point in points) {
- urmPoints.add(localToView(point));
- }
- return urmPoints;
- }
-
- List<DPoint> urmPointsToDPoints(List<UrmPoint>? points) {
- if (points == null) return [];
- List<DPoint> urmPoints = [];
- for (var point in points) {
- urmPoints.add(viewToLocal(point));
- }
- return urmPoints;
- }
- }
- 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,
- });
- }
- class URMSimpleMeasureParams {
- final URMMeasureType urmMeasureType;
- final URMROIType rOIType;
- final List<UrmPoint>? srcDPoints;
- final double? cMlength;
- double? shellWidth = 0;
- URMSimpleMeasureParams({
- required this.urmMeasureType,
- required this.rOIType,
- this.srcDPoints,
- this.cMlength,
- this.shellWidth,
- });
- }
|