feat(b05): 3D 흑백 지형 · 등고선 처음 값 꺼짐 — 단추 · 뷰어 두 곳(176-2)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QND7Co43B24zK2P937rdxt
This commit is contained in:
2026-10-10 11:50:59 +09:00
co-authored by Claude Opus 5.5
parent 23b5e93b03
commit de1fc63260
3 changed files with 33 additions and 5 deletions
+3 -3
View File
@@ -62,13 +62,13 @@ export function createViewControls(callbacks: ViewControlCallbacks): {
toggleButton("지표면", true, callbacks.onSurfaceVisible),
// 예상형상(2026-08-23): ON=공사 후 형상(기본), OFF=원지반 완전체.
toggleButton("예상형상", true, callbacks.onCorridorVisible),
toggleButton("등고선", true, callbacks.onContoursVisible),
// 등고선 · 흑백 지형 기본 꺼짐(176-2) — 뷰어 처음 값과 맞춘다.
toggleButton("등고선", false, callbacks.onContoursVisible),
toggleButton("축 표시", false, callbacks.onAxesVisible),
toggleButton(L("B05_Route_Field_StationLines"), true, callbacks.onStationLinesVisible),
toggleButton(L("B05_Route_Field_StationLabels"), true, callbacks.onStationLabelsVisible),
// 무지개 고도색이 헷갈릴 때 명도만 남기는 흑백 표시(2026-08-05 사용자 요청).
// 기본 켜짐(2026-08-23 사용자 확정) — 예상형상 색이 지형 고도색에 묻히지 않는다.
toggleButton("흑백 지형", true, callbacks.onSurfaceGrayscale),
toggleButton("흑백 지형", false, callbacks.onSurfaceGrayscale),
);
// [3D 업데이트](2026-09-01 사용자 지시) — 계획선을 고칠 때마다 3D가 따라오면 조작이
// 무거워, 갱신을 이 버튼으로 모았다. 편집이 쌓이면 is-pending으로 알리고, 누르는 동안은
+3 -2
View File
@@ -182,6 +182,7 @@ export function createRouteViewer(): RouteViewer {
return heightIndex.triangleCount > 0 ? heightIndex : null;
}
const contours = new THREE.Group();
contours.visible = false; // 기본 꺼짐(176-2) — 패널 토글 처음 값과 맞춘다.
scene.add(contours);
let bounds: ModelBounds | null = null;
let current: { projectId: string; modelId: number; smooth: boolean; interval: number } | null =
@@ -386,8 +387,8 @@ export function createRouteViewer(): RouteViewer {
// 지표면 흑백 표시(2026-08-05 사용자 요청). 정점색 배열을 한 번 바꿔치기하는 것뿐이라
// (원본은 색 버퍼 열쇠 `ORIGINAL_COLORS`에 보관, 재질·셰이더 교체 없음) 로딩·회전 속도에 영향이 없다.
// 기본 흑백 지형(2026-08-23 사용자 확정) — 패널 토글 초기값과 맞춘다.
let surfaceGrayscale = true;
// 기본 꺼짐(176-2) — 패널 토글 초기값과 맞춘다.
let surfaceGrayscale = false;
function applySurfaceGrayscale(): void {
[terrain, corridor.clipped()].forEach((target) => applyGrayscaleTo(target));
}
@@ -0,0 +1,27 @@
# -*- coding: utf-8 -*-
"""PLAN 176-2 — B05 3D 흑백 지형 · 등고선 처음 값 false(단추 · 뷰어 두 곳 다)."""
import os
import re
ROOT = os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "..")
def _read(name):
with open(os.path.join(ROOT, "B05_Profile", name), encoding="utf-8") as f:
return f.read()
def test_panel_buttons_start_off():
src = _read("B05_Profile_UI_Panel_View.ts")
assert re.search(r'toggleButton\("등고선", false,', src)
assert re.search(r'toggleButton\("흑백 지형", false,', src)
def test_viewer_starts_off():
src = _read("B05_Profile_UI_Viewer.ts")
assert "let surfaceGrayscale = false;" in src
# 등고선 그룹은 만들자마자 숨김(적재 때 선은 그대로 만들고 단추로 켬)
assert re.search(
r"const contours = new THREE\.Group\(\);\s*\n\s*contours\.visible = false;", src
)