feat(B06): 관 접속 절·성토선 3도 물매 + 교차점 보간 + 절성토 교차 기준 자동 줌아웃

- 관 유도 접속선을 0도 → **3도**로: 유입측은 계류 쪽 오름(물이 관으로),
  유출측 매몰 절토선은 계류 쪽 내림(물이 밖으로). 집수정 I형 되메움선도 동일
- 모든 유도선·성토부선 끝점을 격자점이 아니라 **선형 보간 교차점**에 붙여
  선이 원지반을 미세하게 벗어나던 문제 해소(2026-08-22 사용자 지적)
- 카드 자동 줌아웃: **구조물 없는 상태**의 설계 절·성토선이 원지반과 만나는
  지점(+0.5m)이 표시 반폭 밖이면 그 카드만 반폭을 넓혀 그린다. 보유 샘플
  범위를 넘는 경우는 기존 전역 반폭 재생성 경로(applyPanelToAll)가 담당

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-22 15:44:10 +09:00
co-authored by Claude Opus 5
parent de78feabde
commit cd855e32d3
7 changed files with 154 additions and 38 deletions
@@ -8,6 +8,7 @@ import type { SectionSample } from "./B06_Section_Api_Fetch";
import {
FILL_MIN_RISE_M,
FILL_SLOPE_MAX_LENGTH_M,
PIPE_CONNECT_GRADE,
FILL_SLOPE_RATIO_MIN,
REVET_HEIGHT_STEP_M,
REVET_LEAN_RATIO,
@@ -15,7 +16,7 @@ import {
REVET_TRAP_TOP_M,
} from "./B06_Section_UI_Cross_Culvert_Const";
import type { OffsetPoint, PipeEnd, WallAdjust } from "./B06_Section_UI_Cross_Culvert_Types";
import { horizontalCrossing } from "./B06_Section_UI_Cross_Culvert_Extra";
import { slopedCrossing } from "./B06_Section_UI_Cross_Culvert_Extra";
/** 기슭막이 하단선 폭(m) — 사다리꼴 밑변. 자리 기준(하단선 중점) 환산에 쓴다. */
export function fillWallBaseWidth(height: number): number {
@@ -386,9 +387,10 @@ export function placePipeWall(input: {
if (input.requireCrossing) {
const placeable = (anchorOffset: number, invertE: number): boolean =>
invertE >= input.groundAt(anchorOffset) - 0.01 ||
horizontalCrossing(
slopedCrossing(
{ offset: anchorOffset, elevation: invertE },
input.outward,
-PIPE_CONNECT_GRADE,
input.groundAt,
input.limitOffset,
) !== null;