fix: [fire-shutter] 샤프트 최소 감김량 표시 + shutterPos 100 복원

- shutterPos 100%(완전 내림)에서도 샤프트에 최소 감김 표시 (minRollH=8%)
- 스크린이 샤프트에 물리적으로 연결된 실제 구조 반영
- shutterPos 기본값 100으로 복원
This commit is contained in:
김보곤
2026-03-14 18:30:26 +09:00
parent 311642b2c1
commit 5ad2ed07e3

View File

@@ -257,7 +257,7 @@
<!-- 개폐율: -->
<div class="flex items-center gap-2 mb-1">
<label class="text-[10px] text-slate-500 font-bold shrink-0" style="width:24px;">개폐</label>
<input type="range" id="shutterPos" min="0" max="100" value="50" class="flex-1 accent-blue-500" style="height:3px;" oninput="fs3dShutterPos(this.value)">
<input type="range" id="shutterPos" min="0" max="100" value="100" class="flex-1 accent-blue-500" style="height:3px;" oninput="fs3dShutterPos(this.value)">
<span id="shutterPosLabel" class="text-[10px] text-blue-400 font-black shrink-0" style="width:28px;text-align:right;">100%</span>
</div>
<!-- 투명도: -->
@@ -406,7 +406,7 @@
// Shutter Box
sb: { width:2280, height:380, depth:500, thickness:1.6, shaftDia:80, bracketW:10, motorSide:'right', viewMode:'side', showShaft:true, showSlatRoll:true, showMotor:true, showBrake:true, showSpring:true },
// 3D
td: { shutterPos:50, caseOpacity:0.3, lightPreset:'default', bgColor:'#ffffff', show:{ case:true, shaft:true, motor:true, rails:true, slats:true, bottomBar:true, wall:false, slatRoll:true } },
td: { shutterPos:100, caseOpacity:0.3, lightPreset:'default', bgColor:'#ffffff', show:{ case:true, shaft:true, motor:true, rails:true, slats:true, bottomBar:true, wall:false, slatRoll:true } },
// Wall (벽체)
wall: { wing:600, thick:600, topMargin:300, color:'#a1887f', opacity:30 },
// View
@@ -2436,12 +2436,14 @@ function createRailGroup() {
meshes.slats.add(lineGroup);
}
// === SLAT ROLL (샤프트에 감긴 슬랫 — 샤프트 전체에 두껍게 감기는 실린더) ===
// === SLAT ROLL (샤프트에 감긴 슬랫 — 항상 최소 반 바퀴 감김 표시) ===
const rolledH = H - shutterH;
if (rolledH > 0) {
{ // 스크린 100% 내려도 샤프트에 최소 감김량 표시 (물리적 연결)
const minRollH = H * 0.08;
const effectiveRolledH = Math.max(rolledH, minRollH);
const wrapThick = S.productType === 'steel' ? 10 : 1;
const shaftR = b.shaftDia / 2;
const rollThick = Math.max(Math.sqrt(rolledH * wrapThick / Math.PI), 8);
const rollThick = Math.max(Math.sqrt(effectiveRolledH * wrapThick / Math.PI), 8);
const rollOuterR = shaftR + rollThick;
const rollLen = W - 30 - stubPinVisible * 2; // 샤프트 관 길이에 맞춤