feat(bearing): 방위각 입력 · 계산 비교와 계산값 적용 버튼

교각·교대 솔플레이트 표에 받침별 '방위각 입력 (CAD)' · '방위각 계산 (CAD)' · '차이 (″, 계산 − 입력)' ·
[적용] 열을 두고, 표 위에 '계산 방위각 모두 적용 / 모두 입력값으로' 버튼을 둔다 (사용자 요청 2026-11-06,
Q-SH4 "입력값 유지"를 사용자가 고르게 바꿈).
- 계산 방위각: 거더 짝이면 두 받침을 잇는 방향, 교대만의 현 짝이면 원곡선 접선(현 방향 ± 방위각 변화의 절반)
- 적용값은 교각 input.azimuthApplied / 교대 record.azimuthApplied에 받침번호별로 저장, 엑셀 값은 그대로.
  블럭 · 받침 · 솔플레이트 회전과 오르막 방향에 쓰고, 짝 찾기는 엑셀 입력값으로
- 차이 표시: 거더 짝 ≤ 10″ / WS01, 현 짝은 '현 · 참고'. 도·분·초 CAD 각(엑셀과 같은 표기)
- 테스트: P1 전열 계산값 ≤ 0.5″ · 후열 없음, 적용한 받침만 블럭 회전 변화, 원곡선 현 접선 = 입력, 교대 toAbutInput 반영
- 브라우저: 운곡교AA.xlsx A1-광주 ① 적용 → 블럭 회전 4.39° → 4.36°, 모두 적용 5개 · 모두 해제, 예외 0

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
ypshimandClaude Opus 5.5 committed 2026-11-06 15:55:24 +09:00
1 parent 7c5f129712
commit c7acfccd51
9 files changed
+161 -22

No files matched your search

+8
View File
@@ -38,6 +38,9 @@ export interface BearingSole {
pair?: { structure: string; no: number };
/** 방위각 검사 (″): this bearing's input azimuth against the direction to its pair (Q-SH4, WS01 > 10″). Absent without a pair. */
azimuthCheckSec?: number;
/** 입력 방위각 and the one computed from the pair (deg, model 진북); the second is absent without a pair. */
azimuthInputDeg: number;
azimuthCalcDeg?: number;
/** girder (같은 거더) or chord (교대만, A1 ↔ A2 현). */
pairKind?: 'girder' | 'chord';
slopePct: number;
@@ -65,7 +68,10 @@ export interface BearingSole {
export interface SoleBearing {
no: number;
row: string;
/** The azimuth in use (an applied 계산 방위각 when chosen) — for the 오르막 direction. */
azimuthDeg: number;
/** The workbook azimuth, when it differs from the one in use. */
inputAzimuthDeg?: number;
}
const DEG = Math.PI / 180;
@@ -121,6 +127,8 @@ export function structureSoles(structure: string, bearings: SoleBearing[], setti
return {
no: b.no, row: b.row, pair: pair ? (pair.from.structure === structure ? pair.to : pair.from) : undefined,
pairKind: pair?.kind,
azimuthInputDeg: b.inputAzimuthDeg ?? b.azimuthDeg,
azimuthCalcDeg: pair ? (pair.from.structure === structure && pair.from.no === b.no ? pair.fromCalcDeg : pair.toCalcDeg) : undefined,
azimuthCheckSec: pair ? (pair.from.structure === structure && pair.from.no === b.no ? pair.fromCheckSec : pair.toCheckSec) : undefined,
slopePct, slopeSource: source, aMm, bMm, L, W, T, tTyped: typed, T1, T2, tReq: req[i], h3: s.h3Mm,
dropMm: T - s.tRefMm, uphill: sign ? { e: sign * dir.e, n: sign * dir.n } : null, warnings,