feat(rebar): 기둥 단면 A·B·C (각 그룹 첫 단, 커플러 θ+Δθ/2, P6 현 4본)

- view/column-section-svg.ts: A 일반(P3, 커플러 없음), B 단부(P5, 커플러 1), C 확대기초 안(P4, 반원 2·커플러 2)
- P1·P2는 같은 각도에 r 875·843.2로 배치, 띠철근 둘레·겹침·반원 길이 표시
- P6은 P6 단이 그 높이에 있을 때만 중심을 지나는 현 4본 (0 · 46.96 · 90 · 133.04°)
- 기둥 패널에서 정면 ↔ 단면 A·B·C 전환 (단면 높이는 각 그룹의 첫 단, 새 계산 없음)

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
This commit is contained in:
ypshimandClaude Haiku 5.5 committed 2026-10-26 16:42:50 +09:00
1 parent c82aff3713
commit baaec9d7e2
3 files changed
+141 -5

No files matched your search

+32 -5
View File
@@ -31,6 +31,7 @@ import { COPING_REBAR_RANGES, copingSettingsIssues, type CopingRebarSettings, DE
import { COLUMN_REBAR_RANGES, type ColumnRebarSettings, columnSettingsIssues, DEFAULT_COLUMN_REBAR } from './core/rebar/column-settings';
import { columnInputFor, columnRebar } from './core/rebar/column';
import { columnElevationSvg } from './view/column-elevation-svg';
import { type ColumnSection, columnSectionSvg } from './view/column-section-svg';
import { groundSectionSvg } from './view/ground-svg';
import { parseBearingElevationTable, parseSolplateTable, readDxfTexts } from './core/dxf-table';
import { columnDiameterIssues } from './core/column-check';
@@ -1233,11 +1234,37 @@ function renderColumnSettings(box: HTMLDivElement, pier: Pier): void {
const input = columnInputFor(pier.model);
const col = columnRebar(input);
wrap.appendChild(el('p', `P1 외측 r ${col.r1} · P2 내측 r ${col.r2} mm · 주철근 P1 ${col.mainP1}본 · P2 ${col.mainP2}본 · 주철근 커플러 ${col.couplers}개`, 'muted small'));
// 정면 (승인 2026-10-26, 시안 ③ 기둥): 치수는 입력과 계산 결과, 간섭(B11–P4)은 검토 제외.
const fig = el('figure', undefined, 'ground-fig');
fig.innerHTML = columnElevationSvg(input, col);
fig.appendChild(el('figcaption', '정면 · 높이 기준 = 확대기초 상면 (mm) · 간섭(B11–P4)은 검토 제외', 'muted small'));
wrap.appendChild(fig);
// 정면 | 단면 A·B·C (승인 2026-10-26): 치수는 입력과 계산 결과, 간섭(B11–P4)은 검토 제외.
let columnView: 'front' | 'section' = 'front';
const figBox = el('div');
const drawColumnFigure = (): void => {
figBox.replaceChildren(toggleRow([['front', '정면'], ['section', '단면 A·B·C']] as const, columnView, (v) => {
columnView = v;
drawColumnFigure();
}));
if (columnView === 'front') {
const fig = el('figure', undefined, 'ground-fig');
fig.innerHTML = columnElevationSvg(input, col);
fig.appendChild(el('figcaption', '정면 · 높이 기준 = 확대기초 상면 (mm) · 간섭(B11–P4)은 검토 제외', 'muted small'));
figBox.appendChild(fig);
return;
}
const captions: Record<ColumnSection, string> = {
A: 'A 일반 · P3 첫 단 · 주철근 P1·P2 · 띠철근 P3 (겹침 표시)',
B: 'B 단부 · P5 첫 단 · 커플러 1개 (θ + Δθ/2)',
C: 'C 확대기초 안 · P4 첫 단 · 커플러 2개 · P6 4본',
};
const row = el('div', undefined, 'opts');
for (const kind of ['A', 'B', 'C'] as const) {
const fig = el('figure', undefined, 'ground-fig');
fig.innerHTML = columnSectionSvg(kind, input, col);
fig.appendChild(el('figcaption', captions[kind], 'muted small'));
row.appendChild(fig);
}
figBox.appendChild(row);
};
drawColumnFigure();
wrap.appendChild(figBox);
const msg = el('p', undefined, 'muted small');
const apply = el('button', '적용', 'btn small');
apply.type = 'button';