import 'package:fis_measure/interfaces/process/items/item.dart'; import 'package:fis_measure/interfaces/process/items/item_metas.dart'; import 'package:fis_measure/interfaces/process/workspace/application.dart'; import 'package:fis_measure/process/calcuators/a_b_ratio.dart'; import 'package:fis_measure/process/calcuators/stenosis.dart'; import 'package:fis_measure/process/calcuators/tei_index.dart'; import 'package:fis_measure/process/calcuators/two_distance.dart'; import 'package:fis_measure/process/items/top_item_feature.dart'; import 'package:fis_measure/process/primitives/straightline.dart'; import 'package:get/get.dart'; import 'two_length.dart'; class TwoStraightLine extends TwoLengthAbstract { late final StraightLine x; late final StraightLine y; final bool ifVertical; final bool ifTimeSpan; TwoStraightLine(ItemMeta meta, {this.ifVertical = false, this.ifTimeSpan = false}) : super(meta) { final metaX = meta.childItems[0]; final metaY = meta.childItems[1]; if (ifVertical) { x = StraightLine.createVerticalDistance(metaX, this); y = StraightLine.createVerticalDistance(metaY, this); } else if (ifTimeSpan) { x = StraightLine.createTimeSpan(metaX, this); y = StraightLine.createTimeSpan(metaY, this); } else { x = StraightLine.createDistance(metaX, this); y = StraightLine.createDistance(metaY, this); } childItems.add(x); childItems.add(y); } @override StraightLine get child1 => x; @override StraightLine get child2 => y; @override TwoStraightLineFeature buildFeature() => TwoStraightLineFeature(this); @override void onCancelingOnce() {} static TwoStraightLine createTwoDistanceBase(ItemMeta meta, [IMeasureItem? parent]) { var twoStraightline = TwoStraightLine(meta); twoStraightline.calculator = TwoDistanceCalBase(twoStraightline); return twoStraightline; } static TwoStraightLine createRUV(ItemMeta meta, [IMeasureItem? parent]) { var twoStraightline = TwoStraightLine(meta); twoStraightline.calculator = ResidualUrineCal(twoStraightline); return twoStraightline; } static TwoStraightLine createAbRatioDistance(ItemMeta meta, [IMeasureItem? parent]) { TwoStraightLine twoStraightline = TwoStraightLine(meta); twoStraightline.calculator = ABRatioCal(twoStraightline); return twoStraightline; } static TwoStraightLine createStenosisTwoDistance(ItemMeta meta, [IMeasureItem? parent]) { var twoStraightline = TwoStraightLine(meta); twoStraightline.calculator = StenosisCal(twoStraightline); return twoStraightline; } static TwoStraightLine createStenosisTwoVerticalDistance(ItemMeta meta, [IMeasureItem? parent]) { var twoStraightline = TwoStraightLine(meta, ifVertical: true); twoStraightline.calculator = StenosisCal(twoStraightline); return twoStraightline; } static TwoStraightLine createAbRatioTwoVerticalDistance(ItemMeta meta, [IMeasureItem? parent]) { var twoStraightline = TwoStraightLine(meta, ifVertical: true); twoStraightline.calculator = ABRatioCal(twoStraightline); return twoStraightline; } static TwoStraightLine createAbRatioTwoTimeSpan(ItemMeta meta, [IMeasureItem? parent]) { var twoStraightline = TwoStraightLine(meta, ifTimeSpan: true); twoStraightline.calculator = ABRatioCal(twoStraightline); return twoStraightline; } static TwoStraightLine createAbRatioSlope(ItemMeta meta, [IMeasureItem? parent]) { var twoStraightline = TwoStraightLine(meta, ifTimeSpan: false); twoStraightline.calculator = ABRatioCal(twoStraightline); return twoStraightline; } static TwoStraightLine createTeiIndex(ItemMeta meta, [IMeasureItem? parent]) { var twoStraightline = TwoStraightLine(meta, ifTimeSpan: true); twoStraightline.calculator = TeiIndexCal(twoStraightline); return twoStraightline; } static TwoStraightLine createVolume(ItemMeta meta, [IMeasureItem? parent]) { var twoStraightline = TwoStraightLine(meta); twoStraightline.calculator = TwoDistanceVolumeCal(twoStraightline); return twoStraightline; } static TwoStraightLine createTwoDistanceAverage(ItemMeta meta, [IMeasureItem? parent]) { var twoStraightline = TwoStraightLine(meta); twoStraightline.calculator = TwoDistanceSumCal(twoStraightline); return twoStraightline; } static TwoStraightLine createAngle(ItemMeta meta, [IMeasureItem? parent]) { var twoStraightline = TwoStraightLine(meta); twoStraightline.calculator = TwoStraightLineAngleCal(twoStraightline); return twoStraightline; } static TwoStraightLine createEfTeich(ItemMeta meta, [IMeasureItem? parent]) { final isModeBelow = _checkIsModeBelow(); var twoStraightline = TwoStraightLine(meta, ifVertical: isModeBelow); twoStraightline.calculator = EfTeichCal(twoStraightline); return twoStraightline; } static TwoStraightLine createIvsThck(ItemMeta meta, [IMeasureItem? parent]) { var twoStraightline = TwoStraightLine(meta); twoStraightline.calculator = IvsThckCal(twoStraightline); return twoStraightline; } static TwoStraightLine createTwoVerticalDistance(ItemMeta meta, [IMeasureItem? parent]) { var twoStraightline = TwoStraightLine(meta, ifVertical: true); twoStraightline.calculator = RvStudyCal(twoStraightline); return twoStraightline; } static TwoStraightLine createAreaPerimeter(ItemMeta meta, [IMeasureItem? parent]) { var twoStraightline = TwoStraightLine(meta); twoStraightline.calculator = AreaPerimeterByLAndWCal(twoStraightline); return twoStraightline; } static bool _checkIsModeBelow() { if (Get.isRegistered()) { final app = Get.find(); final mode = app.currentMode.name.toLowerCase(); return ["m", "pw"].contains(mode); } return false; } } class TwoStraightLineFeature extends TopMeasureItemFeature { TwoStraightLineFeature( ITopMeasureItem refItem, ) : super(refItem); }