Geometry-driven manual body assembly

3 min read

Status Current
Last verified 2026-10-07 (matches Git at import; content not re-reviewed)
Source Git
Source file docs/BODY_ASSEMBLY_GEOMETRY.md — view on GitHub
Article language original from Git
Git repository git@github.com:advertech/signage-estimator.git (server: /root/signage-estimator)
Git commit d22587c1f7e3add9efd54c7ffc0be0a01b296fa3 (master)
File last changed c4c262f2f0e5 on 2026-09-29
Last imported 2026-10-07T09:14:19+02:00
Note Source of truth: Git. Edit the file in the repository and re-run /root/wiki-sign-expert/import_git_docs.py; edits made here will be overwritten by the next import.

Production elements persist geometry_metrics. The same values are exposed in
Geometry Review and product Calculation details, with per-element body assembly
time and a quantity-weighted project breakdown. Metrics include outer and hole
boundaries; graphics and ignored contours do not affect manufacturing labour.

For each physical element:

minutes = base_minutes_per_element
        + total_perimeter_m * minutes_per_perimeter_meter
        + corner_count * minutes_per_corner
        + curve_length_m * minutes_per_curve_meter

The seeded coefficients are 10, 1, 1 and 3 respectively. Element quantities
multiply the entire formula. The BODY_ASSEMBLY route uses the existing
technology rate override or frozen operation hourly rate to price total hours.
No font classification or font multiplier participates in this calculation.
The source font is used only to produce its real glyph outlines.

Admins can create a technology draft and edit the four named assembly
coefficients in the operation route. The API field is formula_parameters;
coefficients must be finite, non-negative and complete before publishing.
Published versions and existing quote references are preserved. The migration
creates new aluminium and composite technology versions; existing calculations
retain their previous version until explicitly upgraded.

Native glyph quadratic/cubic curves, SVG Beziers and elliptical arcs, and PDF
cubic curves are measured before flattening. Physical transforms, including
nonuniform SVG scaling, are applied while integrating path speed, so lengths
are curve lengths rather than chord lengths. DXF native circles, ellipses and
LWPolyline bulge arcs are measured analytically/integrated as arcs; other DXF
curves use the Bezier representation produced by ezdxf’s path conversion.
Lengths and contour measurements are retained with the source Part. Uniform
source-scale changes update lengths without changing corner/contour counts.

Contiguous smooth curves form one curved section. Tangent direction changes
of at least 15 degrees are meaningful corners; segments smaller than 0.01 mm
do not introduce corners, while their source lengths remain included.

Existing polygon-only data, and boundaries changed by clipping or splitting,
use a flattened_estimate fallback. Sustained small direction changes identify
curved runs; local circular-arc correction estimates lengths beyond the chord.
Sub-0.01 mm numerical noise is simplified for labour measurement only. The UI
labels these values as estimated: arbitrary original Bezier curves cannot be
recovered exactly from a flattened polygon. Exact source measurements are
reused for complete surviving body/cutout boundaries. The persisted cache is
invalidated only when physical geometry or retained source measurements change.

The cutting/nesting polygons and their existing perimeter inputs are unchanged.
Return bending, CNC cutting, LED installation, wiring, supplier pricing,
painting, and nesting continue using their existing drivers and quantities.

Updated on 07.10.2026