fix(abut): 흉벽과 벽체가 간섭하지 않도록 벽체 배면 단차를 나눔
- 벽체를 전면부(t −0.5 … 1.6, 교좌면 단차까지)와 배면 단차부(t −0.8 … −0.5, 브라켓 상면까지)로 나눔. 배면 단차 위가 접속슬래브 받침 (흉벽 상단 − 0.85) - 흉벽은 교좌면 단차 위(t −0.5 … 0)에서 흉벽 상단까지. 벽체와 겹치지 않음 - 배면은 연직 단차 없이 같은 면(−0.8, −0.5)을 따라 올라가고, 바뀌는 곳은 수평 단차 1개 - 테스트: 벽체와 흉벽 사이 공통 체적 0, 벽체 배면 위치. 전체 636건 통과, 타입 검사·빌드 통과. 브라우저 시각 확인은 미실시 Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
986418024a
commit
43edcdc3c5
3 files changed
+39
-14
No files matched your search
@@ -55,4 +55,17 @@ describe('교대 3D: 받침블럭과 접속슬래브 (spec §4.2, §4.8)', () =>
|
||||
expect(box.min.z).toBeCloseTo(members.shape.parapetBackM - 0.005 - 7, 2);
|
||||
expect(box.max.y - box.min.y).toBeGreaterThan(0.45);
|
||||
});
|
||||
|
||||
it('the 흉벽 and the 벽체 only touch (no shared volume) and the back ledge is vertical-step free', () => {
|
||||
const volume = (a: THREE.Object3D, b: THREE.Object3D) => {
|
||||
const box = new THREE.Box3().setFromObject(a).intersect(new THREE.Box3().setFromObject(b));
|
||||
return Math.max(0, box.max.x - box.min.x) * Math.max(0, box.max.y - box.min.y) * Math.max(0, box.max.z - box.min.z);
|
||||
};
|
||||
for (const w of (named('wall') as THREE.Group).children) {
|
||||
for (const p of (named('parapet') as THREE.Group).children) expect(volume(w, p)).toBeLessThan(1e-9);
|
||||
}
|
||||
// back face: the ledge (t −0.8 … −0.5) and the 흉벽 back (−0.5) meet at one horizontal edge, not a vertical offset
|
||||
const backs = (named('wall') as THREE.Group).children.map((w) => new THREE.Box3().setFromObject(w).min.z);
|
||||
expect(Math.min(...backs)).toBeCloseTo(members.shape.wallBackM, 6);
|
||||
});
|
||||
});
|
||||
@@ -21,9 +21,9 @@ const group = buildAbutGroup(model, members, wings);
|
||||
const count = (name: string) => (group.getObjectByName(name) as THREE.Group | undefined)?.children.length ?? 0;
|
||||
|
||||
describe('교대 A1 3D 장면 (AA3·AA3b·AA3c)', () => {
|
||||
it('has the members: 5 wall segments, 1 parapet, 1 footing, 18 piles, 2 wings, 4 haunches', () => {
|
||||
expect(count('wall')).toBe(5);
|
||||
expect(count('parapet')).toBe(1);
|
||||
it('has the members: 5 wall segments (front + back ledge), 5 parapet parts, 1 footing, 18 piles, 2 wings, 4 haunches', () => {
|
||||
expect(count('wall')).toBe(10); // 5 front parts + 5 back ledges (도면 type-1)
|
||||
expect(count('parapet')).toBe(5); // one per 교좌면 step, from the step up
|
||||
expect(count('footing')).toBe(1);
|
||||
expect(count('piles')).toBe(18);
|
||||
expect(count('wings')).toBe(2);
|
||||
|
||||
Reference in new issue
Block a user