diff --git a/docs/raw/요구_1010_2/조사_AK_정수맞춤_측점겹침.md b/docs/raw/요구_1010_2/조사_AK_정수맞춤_측점겹침.md new file mode 100644 index 000000000..0f7062f1d --- /dev/null +++ b/docs/raw/요구_1010_2/조사_AK_정수맞춤_측점겹침.md @@ -0,0 +1,95 @@ +# 조사 AK — 정수 맞춤 · 구조물 측점과 일반 측점 겹침 · 강조 (요구 166-3 · 166-5) + +기준 = main `2399c533c` · 코드 읽기 둘(입력 길 · 측점 합침) + 브라우저 재현(검증_랩탑메인 · 저장 안 함 · 되돌림 끝). + +## 1. 한눈 결론 + +- 사용자 방향(전처리 관 지점 = 반올림 정수 · 뒤 입력도 정수)은 **새 입력에는 대부분 이미 들어가 있음** — 234-1(`994b91636`, 10-10 19:05)이 폼 · 끌기 · 우클릭 · 방향키 · 배수유역도 · B06 옮김 · 서버 자동 배치 · 노선 재투영을 한 규칙(`snapStructureStation` · 일반 측점 1 m 안이면 그 측점 · 아니면 정수 m)으로 묶음. +- **옛 소수 자료는 그대로** — 서버 확정 목록 재계산이 0.01(`common_util_drainage_detail.py:487`)이라, [정수 맞춤]을 누르기 전까지 소수(95.38 · 484.213 …)로 남음. 단추는 세션 초안만 바꾸고 [저장]해야 남음. +- **「횡단배수 근처 2개씩」= 옛 소수 측점이 안 지워진 것** — 관을 옮기면(정수 맞춤 포함) 화면은 새 측점을 더하지만 종단 측점 목록(서버 것)에는 옛 소수 측점이 남아 ▲▼ 단추 · 표 열 · B06 카드가 두 벌. [저장] 뒤에도 서버 증분 병합이 옛 측점을 못 지우는 경우가 있음(새 자리가 일반 측점이면 병합을 건너뜀). 실제 자료 13 프로젝트에 일반 + 소수 같은 정수 m 쌍 22건(예 440 · 440.241). +- **구조물 측점이 일반 측점을 덮는 규칙이 화면마다 다름** — 서버는 일반 측점 이름(id · 종류 · 파일)을 남기고 구조물은 글(라벨)만 얹음 · 종단 그래프 · 3D 는 구조물을 남기고 일반을 지움(0.1 m) · 표 · ▲▼ 는 둘 다 남김 · B06 카드는 따로 지우지 않음. 판정 폭도 0.005 · 0.006 · 0.01 · 0.02 · 0.05 · 0.1 · 0.51 · 1.0 m 로 갈림. +- **정수 맞춤 뒤 더 잦아질 강조 흠** — 관이 일반 측점에 딱 맞으면(예 960.657 → 960) 고름이 카드 id(일반 측점)로 풀리는데 그래프 · 3D 는 그 id 를 지워 둬서 선 · 띠가 안 켜짐(표 열만 켜짐 · 다시 누르면 풀림). 브라우저 재현 = 목록 48+0 누름 → 표 48+0 · 유역 10 · 관 마커는 켜짐, 그래프 선 0. + +## 2. [정수 맞춤] 단추 + +| 항목 | 내용 | 자리 | +| --- | --- | --- | +| 자리 | B05 · B06 좌측 구조물 목록 머리(같은 패널) | `B05_Profile_UI_Structures_Panel.ts:545-551` → `_Structures_Snap.ts:113-127` | +| 대상 | 관 + 구조물 — 구조물은 기준 · 시작 · 끝 중 하나라도 소수면 · 관은 기준만(0.51 m 안에 다른 관이 있으면 건너뜀) | `_Structures_Snap.ts:48-53, 64-88` | +| 규칙 | 일반 측점(시점 · 20 m 격자 · 종점) 1 m 안이면 그 측점 · 아니면 정수 m · 종점에 붙으면 소수 그대로 | `common_util_structure_station.ts:39-48` · `.py:44-55` | +| 실행 | 확인 창 「소수 기준 측점 N건 … [저장]을 눌러야 남습니다」 → 구조물 한 번에 · 관은 하나씩(관마다 세부유역 다시 셈 POST — 11개면 11번) | `_Structures_Snap.ts:129-160` | +| 저장 | 세션 초안만 · [저장] 때 정본 | `B05_Profile_Api_Pipes_Draft.ts:31-36` | +| 계획고 편집 키 | 관 · A군만 따라감 · C · D군 구간 측점은 안 따라감(저장 때 서버가 버리고 알림) | `_Page_Structures.ts:107-121` · `Engine_Grade_Alignment.py:217` | +| 안 하는 것 | 관 시작 · 끝(독립 기슭막이 구간) · 종점에 붙은 소수 · 건너뛴 관 | `_Structures_Snap.ts:91-98` | + +## 3. 입력 길별 정수 처리(지금) + +정수(맞춤) — 폼 [추가] · [수정](친 칸) · 알약 끌기 · 측점선 끌기 · 우클릭 추가(종단 · 3D · 배수유역도) · 방향키 ◀▶ · 배수유역도 끌기 · 추가 · B06 관 옮김 · 추가 · 서버 자동 배치(`snap_candidates`) · 노선 재투영. + +정수가 안 나오는 길: + +| # | 길 | 지금 | 자리 | +| --- | --- | --- | --- | +| 1 | 서버 확정 목록 재계산 | 0.01 — 옛 소수 관이 계속 소수로 저장 | `common_util_drainage_detail.py:487` | +| 2 | 안 고친 폼 칸 · 0.005 이하 [수정] | 옛 값 그대로(단추 몫) | `_Structures_Fields.ts:184-187` · `_Drainage_Panel.ts:620` | +| 3 | C군 계산형 구간 — 기준이 옛 소수 · 길이 1 m 미만 | 시작 · 끝 날값 | `_Structures_Panel_Commit.ts:313-316` | +| 4 | 콘크리트 포장 나눔 경계(세월교 ± 월류폭 / 2) | 홀수 폭이면 .5 | `_Structures_Pavement.ts:24-33, 63-69` | +| 5 | 종점에 붙음 | 종점 소수 그대로 | `common_util_structure_station.ts:46-47` | +| 6 | 관 시설 시작 · 끝(독립 기슭막이) | 어디서도 안 맞춤 · 그런데 측점으로 심김 | `_Structures_Snap.ts:93-94` · `B05_Profile_Engine_Sections.py:285-286` | +| 7 | 옛 측점 이관 · [초기화] 스냅샷 | 날값 | `B05_Profile_Structures_Migration.py:126-151` · `common_util_initial_snapshot.py:260-` | +| 8 | 같은 정수로 두 관이 모임 | 끌기 · 방향키 · 폼 · B06 옮김이 안 막음 → 서버 중복 제거로 하나 · 그 속성 사라짐 | `common_util_drainage_detail.py:487` | +| 9 | 「일반 측점」 목록이 곳마다 다름 | 서버 20 m 고정 · 화면 횡단 상세 · B05 읽기 재투영 [0] · B04 1 m 인덱스 | `common_util_structure_station.py:58-60` · `B05_Profile_Engine_Sections.py:187-192` | + +## 4. 「2개씩」 재현(브라우저 · 검증_랩탑메인 · 저장 안 함) + +- 처음: 관 11 개 모두 소수(95.38 · 195.3 · 292.22 · 387.68 · 484.213 · 581.902 · 676.591 · 769.28 · 864.968 · 960.657 · 1057.346 — 「spacing」 자동 배치) · 그래프 선은 관마다 하나. +- [정수 맞춤] 뒤(초안): 관 = 95 · 195 · 292 · 388 · 484 · 582 · 677 · 769 · 865 · 960 · 1057(정수). + - 종단 ▲▼(계획고) 측점 = 95 · **95.4** · 195 · **195.3** · 292 · **292.2** · **387.7** · 388 · 484 · **484.2** · **581.9** · **676.6** · 677 · 769 · **769.3** · 865 · **960.7** · 1057 · **1057.3** — 굵은 것이 옛 자리(지워지지 않음). + - 582 는 새 자리가 빠지고 옛 581.9 만(0.1 m 안 중복 빼기가 옛 것을 남김). + - 표에도 옛 자리 열이 남아 4+15 · 5+0 칸 글자가 겹침. + - B06 카드 = 옛 「4+15 95.4」 · 「48+1 960.7」 카드가 그대로 · B06 목록 4+15 누름 = 고름 95.38(옛 자리). +- 까닭: 그래프 · ▲▼ · 표의 측점 목록 = 서버 종단 측점(옛 소수 irregular 포함) · 화면은 초안 관으로 새 측점만 더함 · 서버가 다시 만들기 전까지 둘 다. +- [저장] 뒤에도 남는 경우(코드): 증분 병합(B05 확정 `B05_Profile_Router_Confirm.py:346-386` · B06 측점 저장 `B06_Section_Router_Stations.py:145-228`)은 일반 측점을 안 건드리고(`Confirm.py:293`) irregular 만 돌려줌(`Engine_Sections.py:592-598`) → 새 자리가 일반 측점이면 0 건이라 병합을 건너뜀(`Confirm.py:377-378` · `Stations.py:192`) → **옛 소수 측점 · 카드가 남고, 일반 측점의 옛 구조물 글도 남음**. 전체 재생성(`run_section_generation`)만 깨끗해짐. + +## 5. 구조물 측점 ↔ 일반 측점 규칙(지금) + +| 자리 | 같은 자리 판정 | 남기는 것 | +| --- | --- | --- | +| 서버 측점 만들기 | 0.005 m | 일반 측점 id · 종류 · 파일 이름 + 구조물 글만 얹음(`Engine_Sections_Core.py:343-357, 412-422, 469-471`) | +| 종단 그래프 선 · 3D 띠 | 0.1 m | 구조물 측점 · 일반 지움 · 관이 떠나면 곧장 되살림(`B05_Profile_UI_Profile_Render.ts:231-240` · `_Page_Stations.ts:50-53`) | +| 표 열 | 0.1 m | 둘 다 · 일반 열 값만 비움(`_Profile_Table.ts:595-604`) | +| ▲▼ 단추 | 0.1 m | 둘 다(0.1 m 안만 하나) · 23 px 밀어냄(`_Profile_Edit.ts:358-386`) | +| B06 카드 | 없음 | 카드마다 하나 · 소수 카드가 파일 이름 차례로 앞에 섬(`B06_Section_Router.py:273`) · 일반 카드도 관 벽을 같이 그려 벽 고름이 두 카드에 켜짐 | +| 계획선 변화점 | — | 두 측점 모두 꼭짓점 → 아주 짧은 구간 기울기(실측 899.91 → 900 −78.83%) | + +겹침으로 보이는 경우(코드 · 실자료): +1. 0.005 < 거리 ≤ 0.1 m — 그래프 · 3D 하나 · 표 빈 열 둘 · ▲▼ 둘 · 카드 둘 · 짧은 구배 칸. +2. 0.1 < 거리 < 0.51 m(440 · 440.241) — 선 둘(글 「22+0」 같음) · 3D 띠 둘 겹침 · 표 열 둘 · ▲▼ 둘 · 카드 둘. +3. 0.51 ≤ 거리 ≲ 2 m — 모두 둘(4 px 간격). +4. B06 일반 카드 440 고름 → 종단 선 · 좌측 폼은 관(440.241). +5. B05 일반 선 440 고름 → 관 폼 · 지도 관 마커 · 관 알약도 켜짐. +6. 같은 고름 값을 B05 · B06 이 다른 선으로 켬(보기 · 복원 차례 따라 바뀜). +7. 구조물 측점이 일반 측점에 딱 맞음(합쳐짐) → 고름이 일반 측점 id → 그래프 · 3D 가 지운 id 라 선 · 띠 · 핀 꺼짐 · 표 열만(재현 48+0). +8. 관을 옮긴 뒤 다시 만들기 전 — 4장. +9. C · D 구간형 · 기슭막이 시작 · 끝 — 서버 카드 · 표 열 · ▲▼ 는 있는데 화면 측점 목록(A군 관만)에 없어 그래프 선 · 3D 띠 없음. + +## 6. 3번 물음 — 「자기 측점이 없는 구조물」 + +- 측점 = 횡단 카드 한 장 · 종단 표 한 열 · 그래프 선 한 줄 · 3D 띠 하나. 20 m 일반 측점 + 구조물 측점. +- 지금 구조물 측점을 만드는 것: 관(배관 · 세월교 · BOX — A군)은 화면 · 서버 모두 · C · D 구간형(옹벽 등 시작 · 기준 · 끝)은 서버만(카드 · 표 열은 있고 그래프 선 · 3D 띠는 없음) · 점형(위험표시 등 E군)은 어디서도 안 만듦(`B05_Profile_Structures_Schema.py:143-157` · `_Page_Structures.ts:148-169` · `B06_Section_UI_Section_View_Profile.ts:90-110`). +- 그래서 위험표시(6+7.86)를 고르면 B05 표에 켤 열이 없음 · B06 은 가장 가까운 카드(6+0)로 감(`B06_Section_UI_Page_Structure_Pick.ts:102-104`). +- 5번과 같은 뿌리 — 「어떤 구조물이 자기 측점을 갖는가」를 한 규칙으로 정해야 겹침 · 강조가 한 벌이 됨. + +## 7. 고칠 방향(제안 · 구현 전 사용자 확정) + +1. 측점 한 벌 규칙 — 서버가 만든 종단 측점(kind) 하나를 그래프 · 3D · 표 · ▲▼ · B06 카드 · 고름이 그대로 씀 · 화면 쪽 따로 지우기(0.1 m) · 맞추기 폭을 없애고 판정 폭 한 값. +2. 구조물 측점이 위 — 같은 자리(정수 맞춤 뒤 = 딱 같은 m)면 측점 하나 · 그 측점의 주인 = 구조물(종류 · 이름 · 고름 id) · 일반 측점은 「비활성」 표시만 남김 · 구조물이 떠나면 일반 측점 되살아남. +3. 옮김 · 저장 때 옛 측점 지움 — 증분 병합이 옛 소수 측점 · 옛 구조물 글을 지우고(새 자리가 일반 측점이어도) · 초안 단계 화면도 옛 측점을 숨김. +4. 정수 빈틈 메움 — 서버 확정 목록 재계산 · 관 시작 · 끝 · C군 계산형 · 포장 나눔 · 이관도 같은 맞춤 · 같은 정수에 두 관 = 막고 알림 · 「일반 측점 목록」 한 벌(서버 · 화면 같은 것). +5. 옛 자료 정리 — [정수 맞춤] 단추는 두고, 저장 때 서버가 측점을 전체 다시 만들어 옛 소수 측점 · 카드를 지움(실자료 22 쌍). +6. 강조 — 고름이 같은 자리 구조물 측점 id 로 풀리게(카드 id 앞섬 고침) · 3D · 그래프 · 표 · 카드가 같은 id. + +⬜ 사용자 확정 +- 자기 측점을 갖는 구조물 범위 — (가) 관(A군)만 · (나) 관 + 기준 측점이 있는 구조물(옹벽 · 돌쌓기 등 기준 측점 하나) · (다) 지금 서버처럼 구간형은 시작 · 기준 · 끝 모두. +- 종점(EP · 소수) 근처 구조물 — 종점에 붙여 소수 허용인지, 정수로 둘지. +- 옛 자료 — 저장 때 자동 정수 맞춤까지 할지, 단추로만 할지.