12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- import 'package:fis_measure/interfaces/process/calculators/values.dart';
- import 'package:fis_measure/interfaces/process/items/terms.dart';
- import 'package:fis_measure/process/calcuators/formulas/urology.dart';
- import 'package:fis_measure/process/primitives/combos/two_straightline.dart';
- import 'package:fis_measure/process/primitives/straightline.dart';
- import 'package:vid/us/vid_us_unit.dart';
- import 'calculator.dart';
- import 'formulas/general.dart';
- class TwoDistanceCalBase extends Calculator<TwoStraightLine, double> {
- TwoDistanceCalBase(TwoStraightLine ref) : super(ref);
- @override
- void calculate() {
- // TODO: implement calculate
- }
- }
- class ResidualUrineCal extends Calculator<TwoStraightLine, double> {
- ResidualUrineCal(TwoStraightLine ref) : super(ref);
- @override
- void calculate() {
- if (ref.feature == null) return;
- final x = _pickChildValue(ref.x);
- final y = _pickChildValue(ref.y);
- final feature = ref.feature!;
- final viewport = feature.hostVisualArea!.viewport!;
- if (x != null && y != null) {
- final value = UrologyFormulas.calcRUV(
- x,
- y,
- );
- updateFloatValue(value);
- }
- }
- double? _pickChildValue(StraightLine item) {
- if (item.calculator == null) return null;
- ValueBase? value;
- if (item.measuredFeatures.isNotEmpty) {
- value = item.measuredFeatures.first.value;
- } else if (item.feature != null) {
- value = item.feature!.value;
- }
- if (value != null) {
- return (value as FloatValue).value ?? 0;
- }
- return null;
- }
- }
- class TwoDistanceVolumeCal extends Calculator<TwoStraightLine, double> {
- TwoDistanceVolumeCal(TwoStraightLine ref) : super(ref);
- @override
- void calculate() {
- if (ref.feature == null) return;
- final f1 = findChildFeature(ref.child1);
- final f2 = findChildFeature(ref.child2);
- if (f1 == null || f2 == null) return;
- final feature = ref.feature!;
- final val1 = f1.value?.pickFloat() ?? 0;
- final val2 = f2.value?.pickFloat() ?? 0;
- final unitY = f1.hostVisualArea!.viewport!.yUnit;
- for (var ouput in ref.meta.outputs) {
- if (ouput.name == MeasureTerms.Volume) {
- var volume = GeneralFormulas.volumeTwoLine(val1, val2);
- final unit = unitY == VidUsUnit.cm ? VidUsUnit.cm3 : VidUsUnit.None;
- feature.updateFloatValue(
- ouput,
- roundDouble(volume, ouput.fractionalDigits),
- unit,
- );
- } else if (ouput.name == MeasureTerms.AvgDistance) {
- double avg = (val1 + val2) / 2;
- feature.updateFloatValue(
- ouput,
- roundDouble(avg, ouput.fractionalDigits),
- unitY,
- );
- }
- }
- }
- }
|