feat(774-1): 다시 긋기 = 중간 노드 고름으로 켬 · 다른 중간 노드에 이어야 끝

- 노드 속성 판 · 우클릭 = 중간 노드에 [다시 긋기](선 토막 고름의 [다시 긋기] 뺌) · B05 긋기 중 중간 노드 누름 = 그대로 켬
- 끝 = 같은 선 다른 중간 노드만(rejoinMiss) · 시작 노드 · 끝점 = 못 찍음 + 안내(계속 긋기) · 빈 곳 = 점 찍고 계속
- 고리: 시작 노드 · 이을 중간 노드 · 마우스 올린 중간 노드(paintRejoin · --draw-map-*) · 옛 구간 흐림(dim) 뺌
- 시험: test_771_2 에 끝 판정 · 중간 노드 대조 더함

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-11-03 20:31:21 +09:00
co-authored by Claude Opus 5.5
parent ea6207d587
commit 2a67a7092d
7 changed files with 127 additions and 98 deletions
+9 -12
View File
@@ -3,9 +3,9 @@
* D03 고름 속성 판(PLAN 585-2 · 598 · 요구 463 13·16 · 11) — 오토캐드 특성 창 꼴 · 판 하나가 고름 꼴마다 몸을 바꿈.
*
* 판 = 지도 위 떠 있는 판(공용 `createFloatPanel` · 머리 끌어 옮김 · 오른쪽 위) · 고름 있을 때만 · ✕ = 풂.
* 노드 — 경위도 · 지반고 · 측점 · 앞 선 길이 · 기울기 · [노드 지움] [지점으로](그 자리에 지점 · 이미 있으면 숨김) ·
* [잇기](선 끝 · 638-3).
* 선(토막) — 측점 · 길이 · 지반 기울기 · 세트 · [다시 긋기](하나 · 599) [선 지움](가운데 = 구역 둘).
* 노드 — 경위도 · 지반고 · 측점 · 앞 선 길이 · 기울기 · [다시 긋기](중간 노드 · 774) [노드 지움]
* [지점으로](그 자리에 지점 · 이미 있으면 숨김) · [잇기](선 끝 · 638-3).
* 선(토막) — 측점 · 길이 · 지반 기울기 · 세트 · [선 지움](가운데 = 구역 둘).
* 구역 — 길이 · 노드 수 · 세트(구역 모든 구간) · 구간 줄 · [구역 지움].
* 전체 — 길이 · 구역 수 · 해마다 길이 · [전체 지움](되돌리기 됨).
* 세트 구간(왼쪽 해 · 세트 · 구간 줄) — 세트(모두 같으면 그 세트 · 다르면 「여러 세트」) · 구간 줄 · 마커 — 앞뒤 세트 · [마커 지움].
@@ -34,7 +34,7 @@ import {
segmentPieces,
segmentRange,
} from "./logic/D03_PlanAnalysis_Select";
import { nodeOff, nodeRecord } from "./logic/D03_PlanAnalysis_Span";
import { isMiddleNode, nodeOff, nodeRecord } from "./logic/D03_PlanAnalysis_Span";
import {
createDrawKindFields,
DRAW_DEFAULT_LENGTH_M,
@@ -71,8 +71,8 @@ export interface PlanPropsParams {
addPoint?: (point: Vertex) => void;
/** 노드 판 방식 · 값 바꿈 — 노드 · 그 자리 지점 한 걸음. */
commitPoints: (points: Vertex[], next: PlanNetwork) => void;
/** [다시 긋기](599-3) — 구역 id · 앞 노드 · 뒤 노드. */
respan: (line: string, from: number, to: number) => boolean;
/** [다시 긋기](774) — 구역 id · 시작 중간 노드. */
respan: (line: string, vertex: number) => boolean;
}
export interface PlanProps {
@@ -238,6 +238,9 @@ export function createPlanProps(params: PlanPropsParams): PlanProps {
title: `${nameOf(line)} · 노드 ${vertex + 1}`,
parts,
actions: [
...(isMiddleNode(vertices.length, vertex)
? [button("다시 긋기", "props-respan", () => params.respan(line, vertex))]
: []),
button("노드 지움", "props-drop-node", () => edit.dropNode(picked.node!)),
toPoint,
...(featureOn(page, "join") && edit.isEnd(picked.node!)
@@ -265,12 +268,6 @@ export function createPlanProps(params: PlanPropsParams): PlanProps {
const parts: HTMLElement[] = [createKv(rows)];
if (yearsShown(network)) parts.push(setField(inSegments, ranges));
const actions = [button("선 지움", "props-drop-segment", edit.dropSelected)];
if (single)
actions.unshift(
button("다시 긋기", "props-respan", () =>
params.respan(single.line, single.index, single.index + 1),
),
);
return {
title: single
? `${nameOf(single.line)} · 선 ${single.index + 1}`