feat(bearing): 솔플레이트 규칙을 교각별 입력으로 바꾸고 도면 불러오기 제거 (C안)

- 받침 기준 카드, 도면 불러오기(xlsx·csv·dxf), 도면 참조 표·오버레이 제거
- 교각마다 솔플레이트 규칙 입력: 받침높이 H(솔플레이트 포함) 211, 교직 L 1000,
  교축 W 1100, 종단 기울기 S −0.5 % (기본값, 가정 표시)
- 중심 두께 T = ⌈22 + L·|S|/200⌉ 로 계산해 얇은 쪽 T2가 22 mm 이상이 되게 함
  (기본값 T 25, T2 22.5, h3 = H − T = 186)
- geometry·scene·SVG는 교각 규칙에서 만든 같은 솔플레이트 계획을 모든 받침에 사용

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
This commit is contained in:
ypshimandClaude Haiku 5.5 committed 2026-11-03 11:07:51 +09:00
1 parent f25e36c050
commit 36b26209df
23 files changed
+257 -1081

No files matched your search

+12 -26
View File
@@ -1,25 +1,14 @@
/**
* 솔플레이트 기하 (승인 2026-10-23). Pure: the solplate of one bearing, from its block (position, rowSkew) and the
* 공통 규칙 values. The plan is L = A + margin across the 교각축 직각 (n) and W = B + margin along the 교축 (s). The top
* tapers across L: the thick end T1 is at the (−) side of the 교각축 직각 direction (n = −L/2), the thin end T2 at (+) (n = +L/2).
* 솔플레이트 기하 (승인 2026-10-23, C안 2026-11-03). Pure: the solplate of one bearing, from its block (position, rowSkew)
* and the pier's solplate plan. The plan is L across the 교각축 직각 (n) and W along the 교축 (s). The top tapers across L:
* the thick end T1 is at the (−) side of the 교각축 직각 direction (n = −L/2), the thin end T2 at (+) (n = +L/2).
* The underside is the bearing top (block top EL.X + h3). Lengths in m, as in the model.
*/
import { blockFramePoint, type BlockModel } from './geometry';
export interface SolplateParams {
/** 받침 평면 A (mm, across the 교각축 직각) and B (mm, along the 교축). */
A: number;
B: number;
/** 솔플 여유 (mm): L = A + margin, W = B + margin. */
margin: number;
/** 중심 두께 T (mm). */
T: number;
/** 기울기 S (%), negative as drawn: thickness changes by L·|S|/2 from the centre. */
slopePct: number;
}
import type { SolplatePlan } from './types';
export interface SolplateGeometry {
/** Length across the 교각축 직각 (m, = A + margin) and width along the 교축 (m, = B + margin). */
/** Length across the 교각축 직각 (m) and width along the 교축 (m). */
L: number;
W: number;
/** Thickness at the (−) side (T1) and the (+) side (T2) of the 교각축 직각 direction (m). */
@@ -33,16 +22,13 @@ export interface SolplateGeometry {
volume: number;
}
/** Solplate of the bearing at `block`, with the bearing height h3 (mm) and the 공통 규칙 parameters. */
export function solplateGeometry(block: BlockModel, h3: number, p: SolplateParams): SolplateGeometry {
const L = (p.A + p.margin) / 1000; // across the 교각축 직각 (n)
const W = (p.B + p.margin) / 1000; // along the 교축 (s)
// Thickness change from the centre to each side: L·|S|/2, with S in % (mm).
const drop = ((p.A + p.margin) * Math.abs(p.slopePct)) / 200 / 1000;
const T = p.T / 1000;
const T1 = T + drop;
const T2 = T - drop;
const bottom = block.padTop + h3 / 1000;
/** Solplate of the bearing at `block`, from the pier's solplate plan (mm). */
export function solplateGeometry(block: BlockModel, plan: SolplatePlan): SolplateGeometry {
const L = plan.L / 1000; // across the 교각축 직각 (n)
const W = plan.W / 1000; // along the 교축 (s)
const T1 = plan.T1 / 1000;
const T2 = plan.T2 / 1000;
const bottom = block.padTop + plan.h3 / 1000;
const thickAt = (c: number) => T1 + ((T2 - T1) * (c + L / 2)) / L;
const corners: [number, number, number][] = [];
for (const a of [-W / 2, W / 2]) {