← Back to Formula Reference

Post Cap Calculation & Coating Guide

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").

1. How a Post Cap Is Cut

A post cap starts as a rectangular foam billet. It is shaped in two perpendicular cutting passes:

  1. Pass 1 — cut the side profile from the front, producing a slab whose cross-section (viewed from above) is a long rectangle but viewed from the side matches the profile.
  2. Rotate 90° around the vertical axis.
  3. Pass 2 — cut the same side profile again from the new front.

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.

Math name: this is a Steinmetz-style solid (generalization of the classical "bicylinder"). Each of the four "faces" you see on the finished post cap is a curved 3D surface whose silhouette matches the 2D profile — but the surface itself is not flat, and its area is not the area of the 2D profile.

2. Anatomy of the Profile

The source DXFs (e.g. PCI-107 A=26.dxf) carry five dimensions:

FENCE POST apex A (mounting width) flareWidth H (full) pyrH baseH baseContour ↓ (trace along one side from flare to floor)
A (aSize)
Width at the bottom mounting face (sits on the post).
flareWidth
Max width of the cap at the top of the base molding = base of the pyramid.
H
Full vertical height from bottom to apex.
pyramidHeight
Height of the apex zone only (from flare to apex).
baseHeight
Height of the base molding zone = H − pyramidHeight.
baseContour
Contour length along one side of the profile, traced from the outer-top corner of the base molding (where the pyramid begins) down to the outer-bottom corner (where it meets the post). Follow every curve, step, and bevel along that line.
PCI-107 A=26 reference values (from the DXF): A = 26.000", H = 13.125", flareWidth = 35.281", pyramidHeight = 3.868", baseHeight = 9.257", baseContour ≈ 23.73" (the curve-following length, not the vertical span).

3. What Gets Coated

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.

pyr face pyr face pyr face base wrap bottom: not coated
coated
not coated

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.

4. The Exact Coated Surface Area

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.

The simple formula (used when no override is set)

postCapPyrH    = pyramidHeight (or H if blank)
postCapSlantH  = √( (aSize/2)² + postCapPyrH² )
coatingLength  = 2 × postCapSlantH + 4 × baseProfilePerim
coatSurfArea   = (coatingLength / 12) × (aSize / 12)   ft²
The simple formula systematically under-counts surface area on flared post caps. It assumes (a) the pyramid base equals the mounting width 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).

5. Worked Example: PCI-107 (A=26")

DXF integrated directly

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):

SegmentDescriptionds (in)face area (sq in)
v02→v03Pyramid right slant (apex → flare corner)18.06318.58
v03→v04Outer vertical drop at flare2.96104.60
v04→v05Top fillet arc inward1.5855.87
v05→v06Horizontal step0.7826.47
v06→v07Cyma arc (large convex)6.31188.01
v07→v08Vertical reveal1.2136.72
v08→v09Horizontal step0.6820.11
v09→v10Vertical reveal0.6719.43
v10→v11Second cyma arc6.86176.43
v11→v12Vertical reveal1.1029.45
v12→v13Bottom fillet arc inward1.5842.29
Total41.801017.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 formulaDXF-correct (override)under by
coatingLength73.77"156.60"53%
coatSurfArea13.32 sqft28.28 sqft53%
coating labor ($)$10.15$18.8746%
Total$36.74$57.5636%
3x List$111.33$174.4136%

6. How to Tune the Quote

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.

ChangecoatSurfAreacoating labor3x listΔ from base
coatingOverride 156.6 → 10018.06 sqft$12.84~$140−$34
coatingOverride 156.6 → 20036.11 sqft$23.10~$203+$28
aSize 26 → 28 (rare)(scales linearly)
customMargin 1.8 → 2.5(use 1.8x cell × ratio)
Perimeter still does almost nothing. When 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.

7. Measuring coatingOverride from a DXF

  1. Open the DXF in CAD. Confirm the side profile is a single closed polyline.
  2. Pick one side of the profile (left or right of the central symmetry axis) and trace from the outer-top corner at the flare down to the outer-bottom corner. This is the right boundary in our integration.
  3. For each segment along that boundary, multiply (profile_width_at_segment) × (segment_length) and sum across all segments. That's A_face in sq in.
  4. Total coated area = 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.
  5. Enter the value in the Coat Override column of the Pricing tab and save.
Fleet rollout: the catalog currently has ~344 post cap rows (8 models × 43 sizes). For products with up-to-date DXFs, populate 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.

8. Post Cap Formula Reference

KeyExpression
postCapPyrHpyramidHeight > 0 ? pyramidHeight : H
postCapSlantH√( (aSize/2)² + postCapPyrH² )  (approximation — assumes pyramid base = aSize)
perimeter4 × aSize
coatingLength2 × postCapSlantH + 4 × baseProfilePerim
coatingCalccoatingOverride > 0 ? coatingOverride : coatingLength
lengthFactoraSize / 12
coatSurfArea(coatingCalc / 12) × lengthFactor
laborCoatingmanual 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

← Back to Formula Reference