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));
}
}