feat(rebar): 기둥 배근 입력 8개 (피복·띠철근 K3/K5/K4·K6·커플러·Δz·n_div), CL01·CL02 검사

- core/rebar/column-settings.ts: 입력 정의, 기본값(기둥철근 (1).md), 범위(제안), 검사 (CL01 범위, CL02 n_div 홀수)
- 주철근 하단 갈고리는 고정 (입력 없음)
- 기둥 탭 패널: 적용 버튼으로 반영, 계산 결과(K2 내측 r, 주철근·커플러 수량) 표시
- P1·P2 등분 수, P3·P5·P4·P6 간격, 커플러 간격·상승을 철근표 간격·비고와 근거(기본값/입력)에 연동
- 3D 주철근 개수도 n_div 입력을 사용 (COLUMN_P1 하드코딩 제거)

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
This commit is contained in:
ypshimandClaude Haiku 5.5 committed 2026-10-26 16:22:47 +09:00
1 parent 496e0ea4e5
commit f619b9ea20
9 files changed
+215 -20

No files matched your search

+7 -7
View File
@@ -4,7 +4,7 @@ import { assemblyEndOffset, assemblyJs, b10Levels, b9Bars, FOOTING_DEFAULTS, gri
import { bottomPiece, MAIN, topSplicePieces, widthLayout } from '../core/rebar/coping-main';
import { C14_INSET, c14Bars, CAP, COPING_REBAR, SHEAR_LOOP_STEP, shearBars, shearBarsMulti, shearUHeight, copingSideBars, SIDE_HOOK_LEG, stairBars, undersideAt } from '../core/rebar/coping';
import { sideRowLevels } from '../core/coping-geom';
import { columnRebar, columnInputFor, COLUMN_P1 } from '../core/rebar/column';
import { columnRebar, columnInputFor } from '../core/rebar/column';
import { barDepths, barsAcross } from '../core/rebar/bearing-block';
import { blockFramePoint } from '../core/geometry';
import { INTEGRATED_BLOCK } from '../core/integrated-block';
@@ -294,8 +294,8 @@ export function buildRebar3D(m: PierModel, common: Material = DEFAULT_MATERIAL,
const sc = c.s;
const base = c.bottom;
const rt = mm(col.tieRadius);
for (let i = 0; i < COLUMN_P1.nDiv; i++) {
const th = (2 * Math.PI * i) / COLUMN_P1.nDiv;
for (let i = 0; i < colInput.nDiv; i++) {
const th = (2 * Math.PI * i) / colInput.nDiv;
const r1 = mm(col.r1);
addBar('P1', c.k, [sc + r1 * Math.cos(th), base + mm(zBot), r1 * Math.sin(th)], [sc + r1 * Math.cos(th), base + mm(col.zTop1), r1 * Math.sin(th)], NOMINAL_DIAMETER.S32, COLOR.column);
// 90° bottom hook of P1, outward (기둥철근.md §3.2, Q-C5): the 12·d tail is drawn, the bend is approximated by the tail's start.
@@ -312,8 +312,8 @@ export function buildRebar3D(m: PierModel, common: Material = DEFAULT_MATERIAL,
// Main bar couplers (D32, L150 Ø60, 4단 × 46줄 × 2열 = 368개): P1 at col.couplerP1, P2 at col.couplerP2 (+150 mm)
const r1 = mm(col.r1);
const r2 = mm(col.r2);
for (let i = 0; i < COLUMN_P1.nDiv; i++) {
const th = (2 * Math.PI * i) / COLUMN_P1.nDiv;
for (let i = 0; i < colInput.nDiv; i++) {
const th = (2 * Math.PI * i) / colInput.nDiv;
const cosTh = Math.cos(th);
const sinTh = Math.sin(th);
// P1 couplers (184)
@@ -334,7 +334,7 @@ export function buildRebar3D(m: PierModel, common: Material = DEFAULT_MATERIAL,
// Tie couplers (D19, L100 Ø40, 총 35개): P5 1개 (19개) · P4 2개 (16개)
col.p5.forEach((z, j) => {
const th = (2 * Math.PI * (j * 7 + 0.5)) / COLUMN_P1.nDiv;
const th = (2 * Math.PI * (j * 7 + 0.5)) / colInput.nDiv;
const cx = sc + rt * Math.cos(th);
const cz = rt * Math.sin(th);
const cy = base + mm(z);
@@ -343,7 +343,7 @@ export function buildRebar3D(m: PierModel, common: Material = DEFAULT_MATERIAL,
addBar('띠철근 커플러', c.k, [cx - dx, cy, cz - dz], [cx + dx, cy, cz + dz], 40, COLOR.couplerTie);
});
col.p4.forEach((z) => {
const angles = [(2 * Math.PI * 0.5) / COLUMN_P1.nDiv, (2 * Math.PI * 0.5) / COLUMN_P1.nDiv + Math.PI];
const angles = [(2 * Math.PI * 0.5) / colInput.nDiv, (2 * Math.PI * 0.5) / colInput.nDiv + Math.PI];
angles.forEach((th) => {
const cx = sc + rt * Math.cos(th);
const cz = rt * Math.sin(th);