area.dart 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import 'dart:math' as math;
  2. import 'package:fis_measure/interfaces/date_types/point.dart';
  3. import 'package:fis_measure/interfaces/process/calculators/output.dart';
  4. import 'package:fis_measure/interfaces/process/items/types.dart';
  5. import 'package:fis_measure/process/primitives/ellipse.dart';
  6. import 'package:vid/us/vid_us_unit.dart';
  7. import '../primitives/trace.dart';
  8. import 'calculator.dart';
  9. class TraceAreaCal extends Calculator<Trace, double> {
  10. TraceAreaCal(Trace ref) : super(ref);
  11. @override
  12. void calculate() {
  13. if (ref.feature == null) return;
  14. // TODO:xxx
  15. final viewport = ref.feature!.hostVisualArea!.viewport!;
  16. final points =
  17. ref.feature!.innerPoints.map((e) => viewport.convert(e)).toList();
  18. double value = clacArea(points);
  19. updateFloatValue(value);
  20. }
  21. static double clacArea(List<DPoint> points) {
  22. if (points.isEmpty) {
  23. return 0;
  24. }
  25. double sum = 0;
  26. var ax = points[0].x;
  27. var ay = points[0].y;
  28. for (var i = 1; i < points.length - 1; i++) {
  29. var bx = points[i].x;
  30. var by = points[i].y;
  31. var cx = points[i + 1].x;
  32. var cy = points[i + 1].y;
  33. sum += ax * by - ay * bx + ay * cx - ax * cy + bx * cy - cx * by;
  34. }
  35. return (-sum / 2).abs();
  36. }
  37. }