|
@@ -0,0 +1,84 @@
|
|
|
+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/types.dart';
|
|
|
+import 'package:fis_measure/interfaces/process/workspace/point_info.dart';
|
|
|
+import 'package:fis_measure/process/calcuators/a_b_ratio.dart';
|
|
|
+import 'package:fis_measure/process/calcuators/residual_urine.dart';
|
|
|
+import 'package:fis_measure/process/calcuators/stenosis.dart';
|
|
|
+import 'package:fis_measure/process/calcuators/volume.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 'package:fis_measure/process/primitives/trace.dart';
|
|
|
+
|
|
|
+class TwoStraightLine extends TopMeasureItem<TwoStraightLineFeature> {
|
|
|
+ static const String _xKey = "X";
|
|
|
+ static const String _yKey = "Y";
|
|
|
+
|
|
|
+ late final StraightLine x;
|
|
|
+ late final StraightLine y;
|
|
|
+
|
|
|
+ TwoStraightLine(ItemMeta meta) : super(meta) {
|
|
|
+ final metaX = meta.getChildByName(_xKey)!;
|
|
|
+ final metaY = meta.getChildByName(_yKey)!;
|
|
|
+ x = StraightLine.createDistance(metaX, this);
|
|
|
+ y = StraightLine.createDistance(metaY, this);
|
|
|
+ childItems.add(x);
|
|
|
+ childItems.add(y);
|
|
|
+ }
|
|
|
+
|
|
|
+ @override
|
|
|
+ bool onExecuteMouse(PointInfo args) {
|
|
|
+ if (args.pointType == PointInfoType.mouseDown) {
|
|
|
+ if (feature == null) {
|
|
|
+ feature = TwoStraightLineFeature(this);
|
|
|
+ listenChildrenUpdate();
|
|
|
+ }
|
|
|
+ if (childrenAllDone) {
|
|
|
+ workingChild.clear();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ feature?.hostVisualArea = args.hostVisualArea;
|
|
|
+ final result = workingChild.execute(args);
|
|
|
+ doCalculate();
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ @override
|
|
|
+ bool onExecuteTouch(PointInfo args) {
|
|
|
+ return workingChild.execute(args);
|
|
|
+ }
|
|
|
+
|
|
|
+ @override
|
|
|
+ void onCancelingOnce() {}
|
|
|
+
|
|
|
+ static TwoStraightLine createRUV(ItemMeta meta, [IMeasureItem? parent]) {
|
|
|
+ if (meta.measureType != MeasureTypes.ResidualUrine ||
|
|
|
+ meta.multiMethod != "TwoStraightLine") {
|
|
|
+ throw ArgumentError();
|
|
|
+ }
|
|
|
+ var twoStraightline = TwoStraightLine(meta);
|
|
|
+ twoStraightline.calculator = ResidualUrineCal(twoStraightline);
|
|
|
+
|
|
|
+ return twoStraightline;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+class TwoStraightLineFeature extends TopMeasureItemFeature {
|
|
|
+ TwoStraightLineFeature(
|
|
|
+ ITopMeasureItem refItem,
|
|
|
+ ) : super(refItem);
|
|
|
+
|
|
|
+ @override
|
|
|
+ void paint(Canvas canvas, Size size) {
|
|
|
+ for (var item in refItem.childItems) {
|
|
|
+ for (var feature in item.measuredFeatures) {
|
|
|
+ feature.paint(canvas, size);
|
|
|
+ }
|
|
|
+ item.feature?.paint(canvas, size);
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|