feat(abut): ③ 교대 반투명 보기 · 교대 저판 전용 fck

- ③ 철근배근에서 교대 부재·지반도 교각처럼 반투명(0.5, 깊이 쓰기 끔). setRebarViewOn으로 공통화, 끄면 원래 불투명도 복원(지반 0.35 유지)
- 교대 저판 fck(abutFooting, 기본 27)를 교각 기초 fck와 분리. ② 확대기초·말뚝 카드에 입력, ③ 저판 배근·이음 길이에 반영
- 테스트 713개 통과

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
ypshimandClaude Opus 5.5 committed 2026-11-04 14:28:47 +09:00
1 parent b06bf368b6
commit 603066f370
6 files changed
+89 -24

No files matched your search

+15 -11
View File
@@ -208,17 +208,21 @@ const REBAR_VIEW_ALPHA = 0.5;
/** Turns the ③ rebar view on or off. Off restores each part's own opacity. Depth writes stop while on, so bars behind a member stay visible. */
export function setRebarView(scene: PierScene, on: boolean): void {
for (const group of Object.values(scene.parts)) {
group.traverse((o) => {
if (!(o instanceof THREE.Mesh)) return;
const mat = o.material as THREE.MeshStandardMaterial;
const base = mat.userData.baseOpacity as number;
mat.opacity = on ? REBAR_VIEW_ALPHA : base;
mat.transparent = on || base < 1;
mat.depthWrite = !on;
mat.needsUpdate = true;
});
}
for (const group of Object.values(scene.parts)) setRebarViewOn(group, on);
}
/** {@link setRebarView} for any group (교대 3D). A material without a recorded base opacity takes its current one as the base. */
export function setRebarViewOn(root: THREE.Object3D, on: boolean): void {
root.traverse((o) => {
if (!(o instanceof THREE.Mesh)) return;
const mat = o.material as THREE.MeshStandardMaterial;
mat.userData.baseOpacity ??= mat.opacity;
const base = mat.userData.baseOpacity as number;
mat.opacity = on ? REBAR_VIEW_ALPHA : base;
mat.transparent = on || base < 1;
mat.depthWrite = !on && base >= 1;
mat.needsUpdate = true;
});
}
export type ViewKind = 'iso' | 'front' | 'side' | 'top';