import 'package:fis_measure/interfaces/date_types/point.dart'; import 'package:fis_measure/interfaces/date_types/rect_region.dart'; import 'package:fis_measure/interfaces/process/modes/mode.dart'; import 'package:fis_measure/interfaces/process/physical_coordinates/physical_coordinate.dart'; import 'package:fis_measure/interfaces/process/visuals/tissue_area.dart'; import 'package:fis_measure/interfaces/process/visuals/visual.dart'; import 'package:fis_measure/process/layout/section.dart'; import 'package:fis_measure/process/physical_coordinates/doppler.dart'; import 'package:fis_measure/process/viewports/tissue_viewport.dart'; import 'package:vid/us/vid_us_2d_visual.dart'; import 'package:vid/us/vid_us_mode.dart'; import 'package:vid/us/vid_us_physical_coordinate.dart'; import 'package:vid/us/vid_us_visual_area_type.dart'; import '../physical_coordinates/convex_tissue.dart'; import '../physical_coordinates/linear_tissue.dart'; import 'visual_area.dart'; class TissueArea extends VisualArea implements ITissueArea { TissueArea( IVisual visual, VidUsVisualAreaType areaType, VidUsModeType modeType, ) : super(visual, areaType, modeType); /// 是否扇形图 bool get isConvex => viewport?.physical is ConvexTissuePhysicalCoordinate; @override void loadData() { final visualData = visual.visualData as VidUs2DVisual; layoutRegion = findRegion(LayoutSections.general); ITissuePhysicalCoordinate? physical; // TODO: 动态创建 final physicalInfo = visualData.physicalCoordinates[visualAreaType]!; if (physicalInfo is VidUsLinearTissuePhysicalCoordinate) { physical = LinearTissuePhysicalCoordinate(physicalInfo); } else if (physicalInfo is VidUsConvexTissuePhysicalCoordinate) { physical = ConvexTissuePhysicalCoordinate(physicalInfo); } if (physical == null) return; final logicalInfo = visualData.logicalCoordinates[visualAreaType]!; final logicalRegion = logicalInfo.region; final region = RectRegion.pointTLBR( DPoint(logicalRegion.topLeft.x, logicalRegion.topLeft.y), DPoint(logicalRegion.bottomRight.x, logicalRegion.bottomRight.y), ); viewport = TissueViewPort( this, physical, logicalInfo.xUnit, logicalInfo.yUnit, logicalInfo.isFlipHorizontal, logicalInfo.isFlipVertical, region, ); } }