Files
Aislo/resources/tester/helper_139_3_ford_level.cjs
T
eomsangdonandClaude Opus 5.5 e4befd158a refactor(472-3 B06 구조물): 관 · BOX · 세월교 · 물넘이 모양 계산을 logic 으로 옮김(518-2)
- logic 새 파일 9 — B06_Section_Cross_Culvert · _Culvert_Geom · _Culvert_Extra · _Culvert_Tiers ·
  _Culvert_Types · _Culvert_Wire · _Box_Geom · _Ford_Geom · _Ford_Pavement
- 그림 파일(UI_Cross_Culvert · _Culvert_Types · _Box · _Ford · _Ford_Pavement)은 받은 좌표로 그리기만 ·
  관 겹 꼭짓점(pipeShellCorners) · 물넘이 노면 끝 · 월류선 · 유출 성토선은 logic 으로
- 옛 순수 기하 6 파일(UI_Cross_Culvert_Geom · _Extra · _Tiers · _Wire · _Box_Geom · _Ford_Geom) 지움 ·
  부르는 쪽(B05 Corridor · Structure_Layouts · Route_Carry_Patch · Wall 등)은 import 줄만
- test_472_3 GEOMETRY_PULLS 자기 11 줄 + 더는 안 끌리는 Design_Surface 1 줄 걷음
- 시험 · helper 경로를 새 logic 파일로 — 옮긴 파일을 가리키던 낡은 경로

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 19:17:23 +09:00

51 lines
2.1 KiB
JavaScript

/* 139-3 세월교 수평 헬퍼 — `_Cross_Ford_Geom`(computeFordLayout · fordDropOf)를 그 자리에서 트랜스파일해
* 73-4 픽스처 세월교(173.087)로 돌림. 짝 = `test_139_3_ford_level.py`.
*/
const fs = require("fs");
const path = require("path");
const { makeLoader } = require("./helper_ts_stub_loader.cjs");
const ROOT = path.join(__dirname, "..", "..");
const noop = new Proxy({}, { get: () => () => "" });
const { loadTs } = makeLoader({
root: ROOT,
requireFor: (full) => (request) => {
if (request.startsWith("@ui/") || request.startsWith("@config/")) return noop;
if (request.startsWith("@util/"))
return loadTs(path.join(ROOT, "common_util", `${request.slice(6)}.ts`));
return loadTs(path.join(path.dirname(full), `${request}.ts`));
},
});
const { computeFordLayout, fordAdjustOf } = loadTs(
path.join(ROOT, "B06_Section", "logic/B06_Section_Cross_Ford_Geom.ts"),
);
const sections = JSON.parse(
fs.readFileSync(path.join(__dirname, "fixtures", "b06_73_4_body_guard_sections.json"), "utf8"),
).cross_sections;
const ford = sections.find((s) => s.ford);
const r3 = (v) => Math.round(v * 1000) / 1000;
const run = (stored) => {
const layout = computeFordLayout(ford, ford.samples, fordAdjustOf(stored));
return {
slab: layout.sides.map((s) => r3(s.slabTopElevation)),
pipeEnds: layout.sides.map((s) => r3(s.pipeEnd.elevation)),
tops: layout.sides.map((s) => r3(s.top.elevation)),
heights: layout.sides.map((s) => r3(s.heightM)),
wallX: layout.sides.map((s) => r3(s.top.offset)),
dropM: r3(layout.adjust.dropM),
};
};
const wall = (o) => ({ heightM: null, lateralM: 0, slopeM: 0, ...o });
process.stdout.write(
JSON.stringify({
base: run(null),
drop: run({ inlet: wall(), outlet: wall(), dropM: 0.4 }),
up: run({ inlet: wall(), outlet: wall(), dropM: -1 }),
lateral: run({ inlet: wall({ lateralM: 1 }), outlet: wall({ lateralM: -2 }), dropM: 0 }),
// 옛 저장 — 유입 높이 + 0.6 · 유출 대각 1.2(= 수직 1.0) → 평균 내림 0.8 언저리
old: run({ inlet: wall({ heightM: 2.1 }), outlet: wall({ slopeM: 1.2 }) }),
}),
);