fix(shape): 전·후열 나눔선을 교각 전체에서 하나로 둔다

횡방향 단차 코핑의 전·후열 나눔선을 구간마다 계산해, 꺾인 교각에서 두 구간의 판이 꺾임점에서 옆으로
어긋났다 (산외교 P11: −0.05 / +0.11). 두 열 전체 받침의 평균 n 하나를 쓰고, 어느 받침이든 그 선에서 블럭
반폭(0.6 m)보다 가까우면 지금처럼 구간별 선을 쓴다.

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
This commit is contained in:
ypshimandClaude Haiku 5.5 committed 2026-11-10 15:51:10 +09:00
1 parent 9777938aa8
commit a39a1ba8d2
2 files changed
+43 -3

No files matched your search

+7 -3
View File
@@ -409,12 +409,16 @@ export function buildPier(input: PierInput, ctx: PierContext = {}): PierModel {
const meanN = (rows: { n: number }[]) => rows.reduce((sum, r) => sum + r.n, 0) / rows.length;
const copingParts: CopingPart[] = [];
const stretchCount = kinkG === null ? 1 : 2;
// One front/back line for the whole pier (2026-11-10), so the parts of the two stretches meet at the kink without a
// sideways jog; per stretch only when some bearing would be closer than half a block to that line.
const nAll = (meanN(frontPlaced) + meanN(backPlaced)) / 2;
const oneLine = [...frontPlaced, ...backPlaced].every((b) => Math.abs(b.n - nAll) >= halfBlock);
for (let k = 0; k < stretchCount; k++) {
const fRows = frontPlaced.filter((b) => b.k === k);
const bRows = backPlaced.filter((b) => b.k === k);
const fRows = oneLine ? frontPlaced : frontPlaced.filter((b) => b.k === k);
const bRows = oneLine ? backPlaced : backPlaced.filter((b) => b.k === k);
const nStep = fRows.length && bRows.length
? (meanN(fRows) + meanN(bRows)) / 2
: (meanN(frontPlaced) + meanN(backPlaced)) / 2;
: nAll;
if (lateralStep) {
// The front row may lie on either side of the axis (it depends on the IP1 → IP3 direction), so each part takes the
// side of its own row; the order stays [front, back].