feat(shape): 교좌면 EL로 받침별 코핑 상면 계단을 만든다 (W10은 정보)
입력 교좌면 EL이 있으면 그 받침 구간의 코핑 상면 = 교좌면 EL (없으면 z − h1 / z − h2). 받침블럭 바닥과 코핑 상면이 항상 맞아 블럭이 뜨거나 묻히지 않는다. seatCalc는 기울기 계산값으로 남겨 W10 비교 기준으로 쓰고, W10은 경고(W)에서 정보(I)로 바꾼다. Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
4ef8412d89
commit
8aedc9b969
4 files changed
+35
-7
No files matched your search
@@ -55,4 +55,22 @@ describe('교좌면 EL 입력 (2026-11-03)', () => {
|
||||
validatePier(input, m, issues);
|
||||
expect(issues.filter((i) => i.code === 'W10')).toEqual([]);
|
||||
});
|
||||
|
||||
it('an input 교좌면 EL also sets the coping top of that step, so the block sits on the coping (2026-11-10)', () => {
|
||||
const m = buildPier(withSeat(loadP1(), [43.4, ...SEAT.slice(1)]), P1CTX);
|
||||
const b1 = m.blocks.find((x) => x.no === 1 && x.row === '전열')!;
|
||||
const seg = m.segments.find((s) => b1.g >= s.s0 && b1.g < s.s1)!;
|
||||
expect(seg.top).toBeCloseTo(43.4, 6);
|
||||
expect(b1.bottom).toBeCloseTo(seg.top, 9);
|
||||
// seatCalc keeps the slope value (z − h1) as the W10 reference.
|
||||
expect(b1.seatCalc).toBeCloseTo(43.411, 3);
|
||||
});
|
||||
|
||||
it('W10 is information (I), not a warning, since the input builds the geometry', () => {
|
||||
const input = withSeat(loadP1(), [43.5, ...SEAT.slice(1)]);
|
||||
const m = buildPier(input, P1CTX);
|
||||
const issues: Issue[] = [];
|
||||
validatePier(input, m, issues);
|
||||
expect(issues.filter((i) => i.code === 'W10').map((i) => i.level)).toEqual(['I']);
|
||||
});
|
||||
});
|
||||
@@ -214,7 +214,8 @@ describe('횡방향 단차 (spec §4.3, Q1·Q2 추천안)', () => {
|
||||
|
||||
it('a 20 mm step in one segment splits the coping into two parts at the bearing-row midline', () => {
|
||||
const p1 = loadP1();
|
||||
const bearings = p1.bearings.map((b) => (b.row === '후열' && b.no === 7 ? { ...b, z: b.z + 0.02 } : b));
|
||||
// The P1 sheet gives 교좌면 EL, which sets the step top (2026-11-10), so it is raised with z.
|
||||
const bearings = p1.bearings.map((b) => (b.row === '후열' && b.no === 7 ? { ...b, z: b.z + 0.02, seatEl: b.seatEl! + 0.02 } : b));
|
||||
const m = buildPier({ ...p1, bearings });
|
||||
expect(m.copingParts).toHaveLength(2);
|
||||
const [front, back] = m.copingParts;
|
||||
@@ -228,6 +229,12 @@ describe('횡방향 단차 (spec §4.3, Q1·Q2 추천안)', () => {
|
||||
expect(topAt(back, s2) - topAt(front, s2)).toBeCloseTo(0.02, 6);
|
||||
});
|
||||
|
||||
it('a 20 mm higher 교좌면 EL alone (z unchanged) also makes the step (2026-11-10)', () => {
|
||||
const p1 = loadP1();
|
||||
const bearings = p1.bearings.map((b) => (b.row === '후열' && b.no === 7 ? { ...b, seatEl: b.seatEl! + 0.02 } : b));
|
||||
expect(buildPier({ ...p1, bearings }).copingParts).toHaveLength(2);
|
||||
});
|
||||
|
||||
it('a 3 mm difference is below the 5 mm tolerance: no step', () => {
|
||||
const p1 = loadP1();
|
||||
const bearings = p1.bearings.map((b) => (b.row === '후열' && b.no === 7 ? { ...b, z: b.z + 0.003 } : b));
|
||||
|
||||
Reference in new issue
Block a user