fix(abut): 교대 받침 공통 규칙을 교각 솔플레이트 규칙 형식으로 변경
- 이전 가정(받침 A×B 700×640, h3 181, T 30, 여유 100)을 없애고, 교각과 같은 솔플레이트 규칙(src/core/solplate-rule.ts)을 씀 (결정 2026-11-03: 교각 규칙을 기본값으로) - 입력: 솔플레이트 교직 L 1000, 교축 W 1100, 종단 기울기 S −0.5 %. 받침높이 H는 교대 받침 시트 값(A1 275 mm)으로 고정 - 계산: T = ⌈22 + L·|S|/200⌉ = 25, h3 = H − T = 250, T1 27.5 / T2 22.5, E = 400. 교각 카드와 같은 안내 줄 표시 - 받침 종류 · 용량 입력은 유지. ELEVATION TABLE의 A·B 열 삭제, 삽도는 솔플레이트 L × W 기준 - 테스트 갱신. 전체 651건 통과, 타입 검사·빌드 통과. 브라우저 시각 확인은 미실시 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
4b02dde153
commit
6b969f4a7c
7 files changed
+137
-110
No files matched your search
@@ -8,9 +8,7 @@ export interface AbutBearingDetail {
|
||||
/** 블럭 평면 (정사각), 몰탈패드 평면 (정사각), mm. */
|
||||
blockMm: number;
|
||||
padMm: number;
|
||||
/** 받침 A × B, 솔플레이트 L × W (mm). */
|
||||
A: number;
|
||||
B: number;
|
||||
/** 솔플레이트 교직 L × 교축 W (mm). 받침 본체 평면은 입력이 없어 그리지 않는다. */
|
||||
L: number;
|
||||
W: number;
|
||||
/** 높이 (mm): 블럭 콘크리트 h1, 패드 h2, 받침 h3, 솔플레이트 h4 = T. */
|
||||
@@ -36,23 +34,22 @@ const text = (x: number, y: number, s: string, anchor = 'middle', fill = INK) =>
|
||||
const square = (cx: number, cy: number, w: number, h: number, style: string) =>
|
||||
`<rect x="${(cx - w / 2).toFixed(1)}" y="${(cy - h / 2).toFixed(1)}" width="${w.toFixed(1)}" height="${h.toFixed(1)}" ${style}/>`;
|
||||
|
||||
/** 평면: 블럭 1200, 몰탈패드 1000 (점선), 솔플레이트 L × W (주황 점선), 받침 A × B. 블럭은 받침 방위각만큼 돈다. */
|
||||
/** 평면: 블럭 1200, 몰탈패드 1000 (점선), 솔플레이트 L × W (주황). 블럭은 받침 방위각만큼 돈다. */
|
||||
export function abutBearingPlanSvg(d: AbutBearingDetail): string {
|
||||
const k = 0.17; // px per mm
|
||||
const cx = 150;
|
||||
const cy = 130;
|
||||
const turn = `transform="rotate(${(-d.rotDeg).toFixed(3)} ${cx} ${cy})"`;
|
||||
return [
|
||||
`<svg viewBox="0 0 300 270" width="100%" role="img" aria-label="받침 ${d.no} 평면: 블럭 ${d.blockMm}, 몰탈패드 ${d.padMm}, 받침 ${d.A} × ${d.B}, 솔플레이트 ${d.L} × ${d.W}, 회전 ${d.rotDeg.toFixed(2)}°">`,
|
||||
`<svg viewBox="0 0 300 270" width="100%" role="img" aria-label="받침 ${d.no} 평면: 블럭 ${d.blockMm}, 몰탈패드 ${d.padMm}, 솔플레이트 ${d.L} × ${d.W}, 회전 ${d.rotDeg.toFixed(2)}°">`,
|
||||
`<g ${turn}>`,
|
||||
square(cx, cy, d.blockMm * k, d.blockMm * k, `fill="#dfe5ec" stroke="${MUTED}"`),
|
||||
square(cx, cy, d.padMm * k, d.padMm * k, `fill="none" stroke="${MUTED}" stroke-dasharray="4 3"`),
|
||||
square(cx, cy, d.L * k, d.W * k, `fill="none" stroke="${ORANGE}" stroke-dasharray="5 3"`),
|
||||
square(cx, cy, d.A * k, d.B * k, `fill="#b9c3ce" stroke="${INK}"`),
|
||||
square(cx, cy, d.L * k, d.W * k, `fill="#f0c9a0" fill-opacity="0.6" stroke="${ORANGE}"`),
|
||||
`</g>`,
|
||||
text(cx, cy - (d.blockMm * k) / 2 - 8, `${d.blockMm}`),
|
||||
text(cx, cy + 4, `${d.A} × ${d.B}`),
|
||||
text(cx, cy + (d.blockMm * k) / 2 + 16, `솔플 ${d.L} × ${d.W} · 패드 ${d.padMm}`, 'middle', MUTED),
|
||||
text(cx, cy + 4, `솔플 ${d.L} × ${d.W}`),
|
||||
text(cx, cy + (d.blockMm * k) / 2 + 16, `패드 ${d.padMm} (점선)`, 'middle', MUTED),
|
||||
text(cx, 262, `받침 ${d.no} · 회전 ${d.rotDeg.toFixed(2)}° (방위각)`, 'middle', MUTED),
|
||||
'</svg>',
|
||||
].join('');
|
||||
@@ -74,7 +71,7 @@ export function abutBearingSectionSvg(d: AbutBearingDetail): string {
|
||||
`<line x1="20" y1="${base}" x2="300" y2="${base}" stroke="${MUTED}"/>`,
|
||||
layer(0, d.h1, d.blockMm, `fill="#dfe5ec" stroke="${MUTED}"`),
|
||||
layer(d.h1, d.h2, d.padMm, `fill="#c9d1da" stroke="${MUTED}"`),
|
||||
layer(d.h1 + d.h2, d.h3, d.A, `fill="#b9c3ce" stroke="${INK}"`),
|
||||
layer(d.h1 + d.h2, d.h3, d.L - 100, `fill="#b9c3ce" stroke="${INK}"`),
|
||||
layer(d.h1 + d.h2 + d.h3, d.h4, d.L, `fill="#f0c9a0" stroke="${ORANGE}"`),
|
||||
text(right, at(d.h1 / 2) + 4, `h1 ${d.h1}`, 'start'),
|
||||
text(right, at(d.h1 + d.h2 / 2) + 4, `h2 ${d.h2}`, 'start'),
|
||||
|
||||
Reference in new issue
Block a user