feat(bearing): plan of a pair with block outline and overlaid drawing values (승인 2026-10-26)

- C4·C5 measured across the coping width (교각축 직각): the two coping edges
  at ±B/2 to the bearing centre. The former along-the-axis definition is replaced.
- view/bearing-plan-svg.ts: the plan of one pair with the model's solplates
  and the block outline(s) (일체: one 2500 × 1200; 분리: two 1200 × 1200), and
  the drawing A/B overlaid as dashed outlines.
- ② bearing card: 상세 보기 pair chips (①·⑥ …) and the overlay toggle.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
This commit is contained in:
ypshimandClaude Haiku 5.5 committed 2026-10-26 12:19:14 +09:00
1 parent 43a18182f3
commit b3a62850ab
5 files changed
+168 -12

No files matched your search

+7 -7
View File
@@ -2,7 +2,7 @@ import type { BlockModel, PierModel } from './geometry';
/**
* 받침 배치 규칙 (승인 2026-10-26).
* - C4·C5: 코핑 가장자리와 받침 중심(받침좌표) 사이 거리, 교각축 방향 (s). 모델값을 쓰고 도면값과 비교한다.
* - C4·C5: 코핑 가장자리(교각축 직각, 폭 B의 두 가장자리)와 받침 중심 사이 거리. 모델값을 쓰고 도면값과 비교한다.
* - 일체: 같은 순서끼리 (전열 1 · 후열 1, 전열 2 · 후열 2 …, 각 열의 번호 순) 두 받침의 편심거리가 100 mm를 넘으면 분리를 우선한다.
* (P1 은 전열 1–5, 후열 6–10 으로 번호가 매겨져 있어서 번호 자체가 아니라 열 안의 순서로 짝짓는다.)
* 편심거리 = 두 받침 중심의 교각축 방향 차이 |s(전열) − s(후열)|.
@@ -12,9 +12,9 @@ export const PAIR_ECCENTRICITY_LIMIT_MM = 100;
export interface EdgeDistance {
no: number;
row: BlockModel['row'];
/** 코핑 시작(s = 0)에서 받침 중심까지 (mm). */
/** 교각축 직각 방향: 코핑 한쪽 가장자리(n = −B/2)에서 받침 중심까지 (mm) = C4. */
leftMm: number;
/** 받침 중심에서 코핑 끝(s = L)까지 (mm). */
/** 받침 중심에서 코핑 다른 가장자리(n = +B/2)까지 (mm) = C5. */
rightMm: number;
}
@@ -27,14 +27,14 @@ export interface PairEccentricity {
allowed: boolean;
}
/** C4·C5 from the model: distances from each coping edge to each bearing centre, along the coping length (mm). */
/** C4·C5 from the model: distances from the two coping edges (±B/2, across the coping width) to each bearing centre (mm). */
export function bearingEdgeDistances(m: PierModel): EdgeDistance[] {
const L = m.copingL * 1000;
const half = m.copingB / 2;
return m.blocks.map((b) => ({
no: b.no,
row: b.row,
leftMm: b.s * 1000,
rightMm: L - b.s * 1000,
leftMm: (b.n + half) * 1000,
rightMm: (half - b.n) * 1000,
}));
}