import 'dart:ui'; 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/items/terms.dart'; import 'package:fis_measure/interfaces/process/items/types.dart'; import 'package:fis_measure/interfaces/process/workspace/point_info.dart'; import 'package:fis_measure/process/calcuators/three_distance.dart'; import 'package:fis_measure/process/items/item.dart'; import 'package:fis_measure/process/items/item_feature.dart'; import 'package:fis_measure/process/items/top_item.dart'; import 'package:fis_measure/process/items/top_item_feature.dart'; import 'package:fis_measure/process/primitives/straightline.dart'; import 'three_children.dart'; class LWHStraightLine extends ThreeChildrenAbstract { static const String _lineLKey = "L"; static const String _lineWKey = "W"; static const String _lineHKey = "H"; late final StraightLine l; late final StraightLine w; late final StraightLine h; final bool ifVertical; final bool ifTimeSpan; LWHStraightLine(ItemMeta meta, {this.ifVertical = false, this.ifTimeSpan = false}) : super(meta) { final metaL = meta.getChildByName(_lineLKey)!; final metaH = meta.getChildByName(_lineHKey)!; final metaW = meta.getChildByName(_lineWKey)!; if (ifVertical) { l = StraightLine.createVerticalDistance(metaL, this); w = StraightLine.createVerticalDistance(metaW, this); h = StraightLine.createVerticalDistance(metaH, this); } else if (ifTimeSpan) { l = StraightLine.createTimeSpan(metaL, this); w = StraightLine.createTimeSpan(metaW, this); h = StraightLine.createTimeSpan(metaH, this); } else { l = StraightLine.createDistance(metaL, this); w = StraightLine.createDistance(metaW, this); h = StraightLine.createDistance(metaH, this); } childItems.add(l); childItems.add(w); childItems.add(h); } @override bool get finishAfterUnactive => true; @override MeasureItem get child1 => l; @override MeasureItem get child2 => w; @override MeasureItem get child3 => h; @override LWHStraightlineFeature buildFeature() => LWHStraightlineFeature(this); @override void onCancelingOnce() {} //ThreeDistMeanCalculator static LWHStraightLine createVolume(ItemMeta meta, [IMeasureItem? parent]) { if (meta.measureType != MeasureTypes.VolumeThreeDistance) { throw ArgumentError(); } var lwh = LWHStraightLine(meta); lwh.calculator = VolumeThreeDistanceCal(lwh); return lwh; } static LWHStraightLine createMean(ItemMeta meta, [IMeasureItem? parent]) { if (meta.measureType != MeasureTypes.ThreeDistanceMean) { throw ArgumentError(); } var lwh = LWHStraightLine(meta); lwh.calculator = ThreeDistMeanCalculator(lwh); return lwh; } static LWHStraightLine createMax(ItemMeta meta, [IMeasureItem? parent]) { var lwh = LWHStraightLine(meta); lwh.calculator = ThreeDistMaxCalculator(lwh); return lwh; } static LWHStraightLine createThreeVerticalDistance(ItemMeta meta, [IMeasureItem? parent]) { if (meta.measureType != MeasureTypes.ThreeVerticalDistance) { throw ArgumentError(); } var lwh = LWHStraightLine( meta, ifVertical: true, ); if (meta.name == MeasureTerms.PercentMAM) { lwh.calculator = PercentMAMCalculator(lwh); } return lwh; } } class LWHStraightlineFeature extends TopMeasureItemFeature { LWHStraightlineFeature( ITopMeasureItem refItem, ) : super(refItem); }