1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- import 'dart:math' as math;
- import 'package:fis_measure/interfaces/date_types/point.dart';
- import 'package:fis_measure/interfaces/process/calculators/output.dart';
- import 'package:fis_measure/interfaces/process/items/measure_terms.dart';
- import 'package:fis_measure/process/primitives/ellipse.dart';
- import 'package:vid/us/vid_us_unit.dart';
- import '../primitives/poyline.dart';
- import 'calculator.dart';
- class PolyLineAreaCal extends Calculator<PolyLine, double> {
- PolyLineAreaCal(PolyLine ref) : super(ref);
- @override
- void calculate() {
- if (ref.feature == null) return;
-
- final viewport = ref.feature!.hostVisualArea!.viewport!;
- final points =
- ref.feature!.innerPoints.map((e) => viewport.convert(e)).toList();
- double value = clacArea(points);
- final outputItem = createOutput(MeasureTerms.Area, value, VidUsUnit.cm2);
- final description = "${ref.description}: ${roundDouble(value)}cm²";
- outputItem.updateDescription(description: description);
- output = outputItem;
- }
- static double clacArea(List<DPoint> points) {
- if (points.isEmpty) {
- return 0;
- }
- double sum = 0;
- var ax = points[0].x;
- var ay = points[0].y;
- for (var i = 1; i < points.length - 1; i++) {
- var bx = points[i].x;
- var by = points[i].y;
- var cx = points[i + 1].x;
- var cy = points[i + 1].y;
- sum += ax * by - ay * bx + ay * cx - ax * cy + bx * cy - cx * by;
- }
- return (-sum / 2).abs();
- }
- }
|