measurementResult property

PdfMeasurementResult? get measurementResult

The fully computed takeoff measurement - kind, real-world value, unit, formatted text - or null when the annotation isn't a measurement (no /Measure and not a count marker).

Implementation

PdfMeasurementResult? get measurementResult {
  final kind = measurementKind;
  if (kind == null) return null;
  final m = measure;
  final t = takeoff;
  final pts = _measurementPoints;

  switch (kind) {
    case PdfMeasurementKind.count:
      return PdfMeasurementResult(
          kind: kind, value: 1, unit: '', text: '1', count: 1);
    case PdfMeasurementKind.distance:
      if (m == null || pts == null || pts.length < 2) return null;
      final len = pdfPolylineLength(pts);
      return PdfMeasurementResult(
          kind: kind,
          value: m.realDistance(len),
          unit: m.distance.first.unit,
          text: m.formatDistance(len));
    case PdfMeasurementKind.perimeter:
      if (m == null || pts == null || pts.length < 2) return null;
      final len = pdfPolylineLength(pts);
      return PdfMeasurementResult(
          kind: kind,
          value: m.realDistance(len),
          unit: m.distance.first.unit,
          text: m.formatDistance(len));
    case PdfMeasurementKind.arc:
      if (m == null || pts == null || pts.length < 3) return null;
      final metrics = pdfArcMetrics(pts[0], pts[1], pts[2]);
      final len = metrics?.length ?? pdfPolylineLength(pts);
      return PdfMeasurementResult(
          kind: kind,
          value: m.realDistance(len),
          unit: m.distance.first.unit,
          text: m.formatDistance(len));
    case PdfMeasurementKind.area:
      if (m == null || pts == null || pts.length < 3) return null;
      final pointArea = pdfShoelaceArea(pts);
      return PdfMeasurementResult(
          kind: kind,
          value: m.realArea(pointArea),
          unit: m.area.first.unit,
          text: m.formatArea(pointArea));
    case PdfMeasurementKind.areaCutout:
      if (m == null || pts == null || pts.length < 3) return null;
      final pointArea = pdfNetPolygonArea(pts, t?.holes ?? const []);
      return PdfMeasurementResult(
          kind: kind,
          value: m.realArea(pointArea),
          unit: m.area.first.unit,
          text: m.formatArea(pointArea));
    case PdfMeasurementKind.volume:
      if (m == null || pts == null || pts.length < 3) return null;
      final depth = t?.depth ?? 0;
      final pointArea = pdfShoelaceArea(pts);
      return PdfMeasurementResult(
          kind: kind,
          value: m.realArea(pointArea) * depth,
          unit: (m.volume?.first ?? m.area.first).unit,
          text: m.formatVolume(pointArea, depth));
    case PdfMeasurementKind.angle:
      if (pts == null || pts.length < 3) return null;
      final deg = pdfMeasurementAngle(pts);
      return PdfMeasurementResult(
          kind: kind,
          value: deg,
          unit: '°',
          text: m?.formatAngle(deg) ??
              const PdfNumberFormat(unit: '°', precision: 10).format(deg));
    case PdfMeasurementKind.slope:
      if (pts == null || pts.length < 2) return null;
      final deg = pdfSlopeDegrees(pts.first, pts.last);
      return PdfMeasurementResult(
          kind: kind,
          value: deg,
          unit: '°',
          text: m?.formatAngle(deg) ??
              const PdfNumberFormat(unit: '°', precision: 10).format(deg));
  }
}