How post cap dimensions map to calculator fields, how the "cut + rotate + cut" geometry produces a Steinmetz-style 3D shape, why the simple formula under-counts coated area, and how to use coatingOverride to land on accurate prices. Worked example: PCI-107 (A=26").
A post cap starts as a rectangular foam billet. It is shaped in two perpendicular cutting passes:
The finished piece is the 3D intersection of the two perpendicular profile extrusions. At any horizontal slice through the cap, the cross-section is a square whose side length equals the profile width at that height.
The source DXFs (e.g. PCI-107 A=26.dxf) carry five dimensions:
H − pyramidHeight.Coating wraps every outer face except the bottom (sits on the post). With four-fold symmetry, the total coated surface is exactly four times the area of one "side face" of the Steinmetz solid.
Each "face" is a doubly-curved Steinmetz surface that can be flat-developed only approximately. Its area equals ∫ w(y) ds traced along one side of the 2D profile, where w(y) is the profile width at that height and ds is the arc length differential.
Because every horizontal slice of the cap is a square of side w(y), the area of one side face is the line integral
A_face = ∫ w(y) ds — integrated along one side of the 2D profile from apex to bottom corner.
Equivalently, A_face = ∫ w(y) × √(1 + (w'/2)²) dy integrated over height. The √(1 + (w'/2)²) factor accounts for the slant of the face when the profile is moving inward or outward.
Total coated area = 4 × A_face.
For an arbitrary profile (curves, ogees, steps) the cleanest way to evaluate this is to integrate along the DXF polyline directly. The calculator does not have a built-in DXF integrator, so we use a per-row coatingOverride populated from a one-time measurement.
postCapPyrH = pyramidHeight (or H if blank) postCapSlantH = √( (aSize/2)² + postCapPyrH² ) coatingLength = 2 × postCapSlantH + 4 × baseProfilePerim coatSurfArea = (coatingLength / 12) × (aSize / 12) ft²
aSize (it doesn't — it equals flareWidth), (b) the base molding is a flat-sided box (it's a tapered profile with curves), and (c) baseProfilePerim is the per-side contour length (this part is correct, but the value entered must be the actual contour, not the base zone height).Tracing the right side of the closed polyline from apex (25.50, 20.84) down to bottom-right (38.50, 7.71) and integrating w(y) ds over each segment (straight lines plus bulged arcs):
| Segment | Description | ds (in) | face area (sq in) |
|---|---|---|---|
| v02→v03 | Pyramid right slant (apex → flare corner) | 18.06 | 318.58 |
| v03→v04 | Outer vertical drop at flare | 2.96 | 104.60 |
| v04→v05 | Top fillet arc inward | 1.58 | 55.87 |
| v05→v06 | Horizontal step | 0.78 | 26.47 |
| v06→v07 | Cyma arc (large convex) | 6.31 | 188.01 |
| v07→v08 | Vertical reveal | 1.21 | 36.72 |
| v08→v09 | Horizontal step | 0.68 | 20.11 |
| v09→v10 | Vertical reveal | 0.67 | 19.43 |
| v10→v11 | Second cyma arc | 6.86 | 176.43 |
| v11→v12 | Vertical reveal | 1.10 | 29.45 |
| v12→v13 | Bottom fillet arc inward | 1.58 | 42.29 |
| Total | 41.80 | 1017.96 |
1Coated area
A_face = 1017.96 sq in
coatSurfArea = 4 × A_face = 4071.84 sq in = 28.28 sq ft
2Convert to a coatingOverride value the calculator can use:
coatSurfArea = (coatingOverride / 12) × (aSize / 12)
28.28 = (coatingOverride / 12) × (26 / 12)
coatingOverride = 28.28 × 144 / 26 = 156.6"
Enter 156.6 in the Coat Override column for PCI-107 (A=26"). The calculator now bypasses the simple geometric formula and feeds the real area into mesh, glue, base coat, and manual coating labor.
3Compare against the broken simple formula
| simple formula | DXF-correct (override) | under by | |
|---|---|---|---|
| coatingLength | 73.77" | 156.60" | 53% |
| coatSurfArea | 13.32 sqft | 28.28 sqft | 53% |
| coating labor ($) | $10.15 | $18.87 | 46% |
| Total | $36.74 | $57.56 | 36% |
| 3x List | $111.33 | $174.41 | 36% |
Once coatingOverride is set, here's how each remaining input shifts the 3x list price for PCI-107 (A=26"). Base case is coatingOverride=156.6 giving $174.41.
| Change | coatSurfArea | coating labor | 3x list | Δ from base |
|---|---|---|---|---|
| coatingOverride 156.6 → 100 | 18.06 sqft | $12.84 | ~$140 | −$34 |
| coatingOverride 156.6 → 200 | 36.11 sqft | $23.10 | ~$203 | +$28 |
| aSize 26 → 28 (rare) | (scales linearly) | — | — | — |
| customMargin 1.8 → 2.5 | — | — | (use 1.8x cell × ratio) | — |
coatingOverride is set, the post cap branch of the formula is short-circuited, but perimeter is still only used by laborCutting (≈ $0.011/inch at $20/hr). Treat the Perimeter override as a cutting-labor knob only.coatingOverride from a DXF(profile_width_at_segment) × (segment_length) and sum across all segments. That's A_face in sq in.4 × A_face sq in. Convert to coatingOverride with coatingOverride = totalSqIn / aSize × 12 / 12 = totalSqIn × 12 / aSize / 12 — or directly coatingOverride = totalSqIn / aSize if you keep everything in inches.coatingOverride per row. For models still on old drawings, leave the override blank and the simple formula will run — just be aware quotes will under-count coating labor by 30-50% on flared shapes.| Key | Expression |
|---|---|
| postCapPyrH | pyramidHeight > 0 ? pyramidHeight : H |
| postCapSlantH | √( (aSize/2)² + postCapPyrH² ) (approximation — assumes pyramid base = aSize) |
| perimeter | 4 × aSize |
| coatingLength | 2 × postCapSlantH + 4 × baseProfilePerim |
| coatingCalc | coatingOverride > 0 ? coatingOverride : coatingLength |
| lengthFactor | aSize / 12 |
| coatSurfArea | (coatingCalc / 12) × lengthFactor |
| laborCoating | manual curve over coatSurfArea (post caps are manual-coated) |
| wFoamVol | (H−0.125) × (W−0.25) × (W−0.25) (cu in) — bounding box, over-counts by Steinmetz waste |