Deflected shape
32-bit, display onlyThe members' deflected shape, enlarged so it can be seen.
drawn point = point + scale × displacement; scale = 0.015 × model size ÷ largest displacement
The scale is chosen for the picture. The largest displacement is returned unscaled beside the geometry.
if (mode === 'deflected') {
let umax = 0;
for (const d of diags) for (let k = 0; k < d.x.length; k++) umax = Math.max(umax, Math.hypot(d.dx[k], d.dy[k], d.dz[k]));
const plated = !!prep.shell?.pl?.length;
if (plated) for (let k = 0; k < prep.P.length; k++) umax = Math.max(umax, Math.hypot(R.u[6 * k], R.u[6 * k + 1], R.u[6 * k + 2]));
const s = scale > 0 ? scale : umax > 0 ? 0.015 * size / umax : 1;
prep.mem.forEach((e, k) => {
const d = diags[k], o = prep.P[e.i], { ex, ey, ez } = e.ax;
for (let q = 0; q < d.x.length - 1; q++) for (const r of [q, q + 1]) {
const u = [d.dx[r], d.dy[r], d.dz[r]], b = at(o, ex, d.x[r]);
out.lines.push(...[0, 1, 2].map((a) => b[a] + s * (ex[a] * u[0] + ey[a] * u[1] + ez[a] * u[2])));
out.lineColors.push(...DEFL);
}
});
if (plated) { const e = plateEdgesDeflected(sol, key, s, DEFL); out.lines.push(...e.lines); out.lineColors.push(...e.lineColors); }
out.max = umax; out.scale = s;