case study
Deck-Leg As-Built QA
When an offshore structure is fabricated, the as-built geometry never matches the drawing exactly. This tool turns laser-scan points into an answer: where is each deck leg really, how does that compare to where it was designed to be, and is the difference within tolerance? Drag the model below to rotate it — orange is as-built, blue dashed is as-designed.
Dimensional check vs. design
Leg elevation (Z) summary
Synthetic demonstration data — the coordinates are fabricated and represent no real platform or client. The method is exactly what runs on real surveys.
What it does
On a real job, a terrestrial laser scanner captures millions of points across a platform. To locate a single deck leg I sample several points around its base, then reduce them to the numbers a fabricator actually needs:
- Elevation from a cluster. For each leg, the tool takes ~5 scan points and reports the lowest, highest, and average Z — the average being the recommended set-out elevation. The spread between low and high is a quick read on scan noise and surface irregularity.
- Dimensional control. Using the corner legs, it measures the true leg-to-leg lengths, widths, and diagonal, and compares each to the as-designed dimension — reporting the deviation in inches and as a percentage.
- 3D verification. Overlaying as-built against as-designed in 3D makes a racked or out-of-square structure obvious at a glance, the way a table of numbers never can.
How it's built
The production tool is a Quarto document in R: scan coordinates go in, a few small functions compute the elevation statistics and 3D distances, and Plotly renders an interactive 3D model the team can spin around. Because it regenerates from the data, re-running it on an updated scan reproduces the whole report instantly — the same reproducible-deliverable philosophy behind my nozzle QA and regression work. The 3D model above is the genuine article: R's plotly package renders by bundling Plotly.js, so the viewer here uses that same engine and trace structure — it loads on click to keep the page fast.
The heart of it is small enough to read. Each leg's scan points get reduced to a recommended elevation, and a plain Euclidean helper handles the leg-to-leg distances:
# For each deck leg, reduce its cluster of scan points
# to the numbers a fabricator actually needs.
calculate_deckleg_z <- function(points_matrix, leg_name = "Deck Leg") {
z_coords <- points_matrix[, 3] # Z is the 3rd column (feet)
z_min <- min(z_coords)
z_max <- max(z_coords)
z_avg <- mean(z_coords) # recommended set-out elevation
invisible(list(
z_min_ft = z_min, z_max_ft = z_max, z_avg_ft = z_avg,
z_min_in = z_min * 12, # also report in inches
z_avg_in = z_avg * 12
))
}
# 3D distance between two leg coordinates, used for the
# as-built vs. as-designed dimensional checks.
calc_distance <- function(p1, p2) {
sqrt(sum((p1 - p2)^2))
} Excerpt from the production Quarto document (the interactive table above runs the same logic in JavaScript).