diff --git a/resources/views/rd/fire-shutter-drawing/index.blade.php b/resources/views/rd/fire-shutter-drawing/index.blade.php index 06eaee23..0b948bd5 100644 --- a/resources/views/rd/fire-shutter-drawing/index.blade.php +++ b/resources/views/rd/fire-shutter-drawing/index.blade.php @@ -1387,31 +1387,28 @@ function renderSbSide() { ` : ''; })()} - + ${(() => { - const bk30 = 30*sc, bk15 = 15*sc, bk20 = 20*sc; - // 전면판 J-훅 내부에 위치, 레일 개구부(70mm)를 막지 않음 - // 프로파일: 밑면에서 하향 30mm → 내향 15mm → 하향 20mm (레일 개구부 전면벽) - const bx = ox + f50; // Seg3 끝 (50mm 지점) = 레일 개구부 전면 - const by = oy + sH; // 밑면 레벨 - const O = [ - [bx, by], // 0: 밑면 레벨 (레일 개구 전면) - [bx, by + bk30], // 1: 30mm 하향 - [bx + bk15, by + bk30], // 2: 15mm 내향 (레일 방향 선반) - [bx + bk15, by + bk30 + bk20],// 3: 20mm 하향 (하단) - ]; - const I = [ - [bx - vt, by], - [bx - vt, by + bk30 - vt], - [bx + bk15 - vt, by + bk30 - vt], - [bx + bk15 - vt, by + bk30 + bk20], - ]; - const outer = O.map(p => p.join(',')).join(' L'); - const inner = [I[3],I[2],I[1],I[0]].map(p => p.join(',')).join(' L'); + // 프로파일: 좌측벽(55)─상부선반(30)─스텝(15↓)─하부립(20)─하부선반(50) + // 레일 개구부 전면에 위치, 레일과 떨어진 형태로 밑면에서 만남 + const b20=20*sc, b15=15*sc, b50b=50*sc, b55=55*sc, b30=30*sc; + const bx = ox + f50 + vt; // 전면판 Seg3 끝에서 시작 + const by = oy + sH; // 밑면 레벨 (상단) const brkCol = '#7c9c6b'; + const brkStroke = '#5a7a4a'; return ` - - 레일연결절곡물 + + + + + + + + + + + + 린텔 `; })()} @@ -1905,16 +1902,20 @@ function addPlate(w, h, d, x, y, z, mat, eMat) { // Seg1: 17mm ← (Seg2 상단에서 전면 방향으로 복귀) addPlate(W1, pt, fpSeg[0], 0, fpSeg[1] - pt / 2, frontZ - fpSeg[2] + fpSeg[0] / 2); - // ── 밑면레일연결절곡물 (레일 개구부 전면벽, 70mm 개구 유지) ── - // Seg3 끝(50mm 지점)에서 하향, 레일 개구부를 막지 않음 + // ── 밑면레일연결절곡물 (린텔, 5세그먼트: 20,15,50,55,30) ── + // 좌측벽(55)─상부선반(30)─스텝(15↓)─하부립(20)─하부선반(50) const brkMat = new THREE.MeshStandardMaterial({ color: 0x7c9c6b, transparent: true, opacity: S.td.caseOpacity, side: THREE.DoubleSide }); - const brkZ = frontZ - fpSeg[2]; // Seg3 끝 = 레일 개구 전면 - // 30mm 하향 (밑면에서 아래로, 레일 개구 전면벽) - addPlate(W1, 30, pt, 0, -30 / 2, brkZ + pt / 2, brkMat); - // 15mm 내향 선반 (30mm 하단에서 레일 방향) - addPlate(W1, pt, 15, 0, -30 + pt / 2, brkZ - 15 / 2, brkMat); - // 20mm 하향 (선반 끝에서 더 아래로) - addPlate(W1, 20, pt, 0, -30 - 20 / 2, brkZ - 15 + pt / 2, brkMat); + const brkZ = frontZ - fpSeg[2]; // Seg3 끝 = 린텔 좌측벽 위치 + // 좌측벽 (55mm 수직, 밑면에서 아래로) + addPlate(W1, 55, pt, 0, -55 / 2, brkZ - pt / 2, brkMat); + // 상부선반 (30mm → 내향, 밑면 레벨) + addPlate(W1, pt, 30, 0, pt / 2, brkZ - 30 / 2, brkMat); + // 스텝벽 (15mm ↓, 상부선반 내측 끝) + addPlate(W1, 15, pt, 0, -15 / 2, brkZ - 30 - pt / 2, brkMat); + // 하부립 (20mm → 내향, 스텝 하단) + addPlate(W1, pt, 20, 0, -15 + pt / 2, brkZ - 30 - 20 / 2, brkMat); + // 하부선반 (50mm → 내향, 좌측벽 하단) + addPlate(W1, pt, 50, 0, -55 + pt / 2, brkZ - 50 / 2, brkMat); // ── ② 상부 커버는 케이스 공통으로 아래에서 렌더링 ──