- 헬퍼 동작 그대로(풀이 함수 본문은 옮겨 담음) · 제품 코드 안 고침 - 확인: 이 묶음 헬퍼를 쓰는 시험 233 개 전 233 통과 → 후 233 통과 (시험별 junit 대조 · 어긋남 0) Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
57 lines
2.5 KiB
JavaScript
57 lines
2.5 KiB
JavaScript
/* 493-3 화면 ↔ 저장 자리 거울 — 진짜 TS(`common_util_route_follow`)로 교점 끌기 여러 걸음을 브라우저처럼 돌림.
|
|
* 입력 argv[2] JSON = { lines: [L0(저장 노선), L1, …, Ln(마지막 끌기)], pipes, structures, plus, interval }.
|
|
* 걸음마다(브라우저 follow 단계 · design_pipeline_page.ts · B05_Profile_Pipeline_Grade.ts) 앞 선에서 자리
|
|
* 붙임(placeOnLine) → 새 선 따라감 · 추가 측점 = 누가거리 목록(세션) + 땅 위 자리(첫 걸음 = 저장분 `plus` 좌표 ·
|
|
* 다음 = 앞 걸음 줄 · `followPlusGround`) · `input.oldPlus` 면 고치기 전 셈(좌표 없이 걸음마다 다시 놓음).
|
|
* 표준출력 = 마지막 화면 값.
|
|
*/
|
|
const fs = require("fs");
|
|
const path = require("path");
|
|
const { makeLoader } = require("./helper_ts_stub_loader.cjs");
|
|
|
|
const ROOT = path.join(__dirname, "..", "..");
|
|
|
|
function loadTs(file, stubs = {}) {
|
|
return makeLoader({
|
|
root: ROOT,
|
|
cache: false,
|
|
requireFor: (full) => (request) => {
|
|
if (stubs[request]) return stubs[request];
|
|
throw new Error(`stub 없음: ${request} (${file})`);
|
|
},
|
|
}).loadTs(path.join(ROOT, file));
|
|
}
|
|
|
|
const catalog = require("./helper_322_catalog_module.cjs");
|
|
const station = loadTs("common_util/common_util_structure_station.ts", {
|
|
"./common_util_structure_catalog": catalog,
|
|
});
|
|
const follow = loadTs("common_util/common_util_route_follow.ts", {
|
|
"./common_util_structure_station": station,
|
|
});
|
|
|
|
const input = JSON.parse(fs.readFileSync(process.argv[2], "utf8"));
|
|
const lines = input.lines.map((line) => line.map(([x, y]) => ({ x, y })));
|
|
const saved = input.pipes;
|
|
let pipes = input.pipes;
|
|
let structures = input.structures;
|
|
let plus = input.plus.map((row) => row.chainage_m);
|
|
let ground = input.plus;
|
|
let followed = [];
|
|
for (let i = 0; i + 1 < lines.length; i += 1) {
|
|
const placedPipes = follow.placeOnLine(pipes, lines[i], [...saved, ...followed]);
|
|
pipes = follow.projectPipePoints(placedPipes, lines[i + 1]);
|
|
followed = pipes;
|
|
const placed = follow.placeOnLine(structures, lines[i], [], input.interval);
|
|
structures = follow
|
|
.followStructures(placed, lines[i + 1], undefined, input.interval)
|
|
.map((moved) => moved.item);
|
|
if (input.oldPlus) {
|
|
plus = follow.followPlusStations(plus, lines[i], lines[i + 1]);
|
|
continue;
|
|
}
|
|
ground = follow.followPlusGround(plus, lines[i], lines[i + 1], ground);
|
|
plus = ground.map((row) => row.chainage_m);
|
|
}
|
|
process.stdout.write(JSON.stringify({ pipes, structures, plus }));
|