feat(rebar): add downward 90° hooks (135 mm) to P6 crossties in 3D rebar model

This commit is contained in:
ypshim committed 2026-10-22 17:45:22 +09:00
1 parent 4aa8dbb3cb
commit a2317caf6c
15 files changed
+740 -133

No files matched your search

+13 -1
View File
@@ -97,7 +97,15 @@ export function columnRebar(x: ColumnInput = COLUMN_P1, m: Material = DEFAULT_MA
const zTop1 = x.Hc + x.hcop - x.eP1;
const lD2 = developmentLength(dS32, m.fyS, m.fck);
const zTop2 = x.Hc + lD2;
// Bottom of P1 and P2: 확대기초 하면 2단 (B7) 위 + (d_B7 + d_P1)/2 (기둥철근.md §3.2, the same for both).
const zBot = -x.Hf + layers(x.Hf).B7 + (NOMINAL_DIAMETER.S19 + dS32) / 2;
const couplerLevels = Array.from({ length: Math.max(0, Math.floor(zTop1 / x.ctcCoupler) - 1) }, (_, i) => (i + 1) * x.ctcCoupler);
// Pieces of each main bar between its couplers (기둥철근.md §3.2): the bottom piece carries the 90° hook (16.5·d = 525).
const p1Hook = Math.round(hookLength('main90', dS32));
const p1Points = [zBot, ...couplerLevels, zTop1];
const p1Pieces = p1Points.slice(1).map((z, i) => round(z - p1Points[i] + (i === 0 ? p1Hook : 0)));
const p2Points = [zBot, ...couplerLevels.map((z) => z + x.dzCp2), zTop2];
const p2Pieces = p2Points.slice(1).map((z, i) => round(z - p2Points[i]));
const couplersP1 = couplerLevels.length;
const mainLines = x.nDiv;
const mainP1 = mainLines * (couplersP1 + 1);
@@ -126,7 +134,7 @@ export function columnRebar(x: ColumnInput = COLUMN_P1, m: Material = DEFAULT_MA
for (let z = z4first; z <= x.Hc; z += x.ctcP6) p6Levels.push(z);
const p6Straight = 2 * tieRadius;
const p6Hook = hookLength('tie90', dH16);
const p6Length = p6Straight + 2 * p6Hook;
const p6Length = p6Straight + 2 * Math.round(p6Hook); // 135 mm per hook, as in the document
// P3 lap: Q-C6 is open; recommended = 1.3·l_d of H19 with the material inputs.
const lapP3 = spliceLength(dH19, m.fyH, m.fck);
@@ -142,6 +150,10 @@ export function columnRebar(x: ColumnInput = COLUMN_P1, m: Material = DEFAULT_MA
angleStepDeg: 360 / x.nDiv,
zTop1: round(zTop1),
zTop2: round(zTop2),
zBot: round(zBot, 2),
p1Hook,
p1Pieces,
p2Pieces,
couplerP1: couplerLevels,
couplerP2: couplerLevels.map((z) => z + x.dzCp2),
mainP1,