chore(plan): 92~97장 2차 요구 원문 · 조사 다섯 · 분석 정함(10-8 오후)
B01 대시보드 제안 · B07 평면도 묶음 · IP 표 · B08 탭 · 수리 연결 · CAD 입력창. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LLCk2y5xE8YGVgjbTntWsY
This commit is contained in:
Binary file not shown.
|
After Width: | Height: | Size: 12 KiB |
@@ -0,0 +1,68 @@
|
||||
# 10-8 2차 요구 — 분석 · 정함 (브레인)
|
||||
|
||||
원문 = `사용자요구_1008_2.md` + `IP표_예시.png` · 근거(파일:줄) = 같은 폴더 `조사_I · J1 · J2 · K · L_*.md` · 계획서 = `PLAN.md` 92~97장. 정함(브레인)은 사용자가 바꿀 수 있음.
|
||||
|
||||
## 0. 한눈에
|
||||
|
||||
- 요구 18건 = B01 1(검토) · B07 7 · B08 7 · CAD 3.
|
||||
- 장 · 창(승인 뒤):
|
||||
|
||||
| 장 | 내용 | 창 | 모델 |
|
||||
|---|---|---|---|
|
||||
| 92 | B01 대시보드 항목별 탭 — **제안 · 사용자 승인 뒤 구현** | (승인 뒤 정함) | — |
|
||||
| 93 | B07 평면도 묶음 정리 — 제목 · 용지도 종류 편입 · 용지도 라벨 · 유역도 · 표준 횡단 · 사용자 지정 | sub6 | Opus high |
|
||||
| 94 | B07 평면도 IP 표 | sub4 | Opus high |
|
||||
| 95 | B08 탭(구조물 · 보조 넷) · 간격 · 구조물도 모달 · 수리 화면 크기 | sub3 | Sonnet high |
|
||||
| 96 | B08 수리 표 ← B05 배수유역 값(관 · 박스 · 세월교) | sub5 | Opus high |
|
||||
| 97 | CAD 커서 입력창 색 · 글 넘침 · Space = Enter | 데스크탑 보조 | Opus high |
|
||||
|
||||
## 1. 정함 (브레인)
|
||||
|
||||
### B01 대시보드(92 · 제안)
|
||||
- 갈래 B = 해시 탭(`#/b01-account?tab=…` · 라우터 안 바꿈 · 저장 뒤 다시 그려도 탭 유지) + 「개요」 첫 탭(로그인 직후).
|
||||
- 탭: **개요**(단계별 프로젝트 수 · 실패/재확인 · 가입 대기 · 보관함 · 시스템 관리자는 리소스 요약 — 누르면 해당 탭) · **프로젝트**(표 칸 보강: 연도 · 도로 종류 · 연장 · 발주처 · 작성자 · 만든 날 · 찾기 · 거르기 · 4줄 제한 풀고 쪽 넘김 + 진행 현황(단계 글 · 진행률 · 시각) + 임시 보관함) · **회사**(회사 정보 + 사업자번호 · 대표 · 상태 · 팀원(일반도 읽기) · 가입 요청 · 로고 · 자산) · **내 계정**(기본정보 · 서명 · 비밀번호 · 마지막 로그인) · **시스템**(시스템 관리자: 리소스 7/30/90일 · 활성 추이 · 사용자 · 회사 전체 목록 · 로그 쪽 넘김 · 고객 문의 — API 있음).
|
||||
- 시스템 설정 카드 = 모든 탭 위 한 줄 그대로(27-3a) · 회사 고르기 알약 = 탭 줄 오른쪽 하나로.
|
||||
- 보강은 이미 있는 자료 · API 만 · 새 API 필요한 것(로그인 기록 목록 · 회사별 저장 용량 · 알림 · 결제)은 이번 밖.
|
||||
- 크기 = 중간(Page 재편 · 개요 카드 · 탭 줄 · 시험 둘 고침).
|
||||
|
||||
### B07(93 · 94)
|
||||
- **제목(93-1)** — 화면 컨테이너: 계획평면도 → 평면도 · 종단면도 → 종단도 · 횡단면도 → 횡단도 · 종류 제목(탭 · 내보내기 이름) 「계획평면도(…)」 → 「평면도(…)」 · 도각 도면명(종단면도 · 횡단면도)은 그대로(공식 도면명).
|
||||
- **용지도 편입(93-2)** — 원문 「종류 추가 · 업데이트 · 대피소 자리」 = 평면도 묶음 아래 접이 패널 제목 → 용지도를 그 패널의 진짜 「종류」로(길 B): 조각 넷(필지 경계 · 필지 정보 · 읍면동 경계 · 시군구 경계) · 기본 종류 「용지도」 · 고르기 · × · 업데이트가 다른 종류와 같음 · 이미 종류 파일이 있는 프로젝트엔 용지도 종류를 한 번 더해 줌 · 옛 따로 도면(landuse) 길은 지움(옛 용지도 확정은 풀림 — 새 라벨 반영).
|
||||
- **용지도 라벨(93-3)** — 「구역」 = 필지 · 필지마다 상자 + 지시선 라벨(지번 · 지목 · 면적 · 소유자 4줄 그대로) · 자리 = (필지 ∩ 도곽) − 노선 버퍼 안 대표점 · 노선 · 이미 놓은 라벨과 안 겹치는 후보 · 행정구역 이름 글은 이번 밖.
|
||||
- **배수유역도(93-4)** — 평면도 컨테이너 안 항목으로 옮김(용지도와 같은 자리) · 1/6,000 한 장 · 정보표 그대로 · 축척이 달라 조각 종류로는 안 만듦.
|
||||
- **표준 횡단면도(93-5)** — 횡단도 컨테이너 안 맨 위 한 줄(전체 폭) · 개수 표시는 횡단 장만.
|
||||
- **평면도 사용자 지정(93-6)** — 이미 있음(종류마다 정보 조각 14개 체크 · 생성 때 반영 · 조사_J2 1 · 2) · 접이 패널에 숨어 안 보였을 것 → 패널 기본 펼침 · 용지 조각 넷도 체크 목록에.
|
||||
- **IP 표(94)** — 새 조각 「IP 표」(`ip_table` · IP · R 조각 옆) · 장 도곽 왼쪽 아래 · IP 마다 표 하나(행 IP · CO X/Y · IA · R · TL · CL · SL · BP · EP 는 IP · CO 만) · X = 북 · Y = 동(측량 관례 · 예시 값 근거) · IA = 곡선 접선으로 다시 셈(저장 내각은 소수 2자리라 ±18″) · 표기 「94-59-58.38」(분 · 초 두 자리 · 초 60 올림 처리) · R · TL · CL · SL = R 과 IA 로 다시 셈(TL = R·tan(IA/2) · CL = R·IA · SL = R·(sec(IA/2) − 1) · 예시 검산 일치) · 소수 다섯 자리 · 장마다 그 장 IP 만 · BP · EP 는 그 장만 · 곡선 있는 IP 만(그림 「IPn」 번호와 같음) · 기본 체크 = 「노선배치도」 종류 · 색 = 예시대로(선 빨강 · 글 파랑) · 표 밑 등고선 · 노선 자름 · 한 줄 넘치면 위로 다음 줄 · 새 파일 `B07_DesignDetail_Engine_Cad_IpTable.py`.
|
||||
|
||||
### B08(95 · 96)
|
||||
- **탭(95-1)** — 메인 = 구조물 · 토공 · 수리집수면적표 · 구조물 보조 = 구조물 집계표 · 총괄자재수량집계표 · 콘크리트소요자재집계표 · 자재수량집계표(셋은 「차례대로 만들 탭입니다.」 자리표) · 구조물도 탭 지움.
|
||||
- **간격(95-2)** — 보조 탭 위 공간 = 아래와 같게(메인 줄과 패널 사이 16 → 8).
|
||||
- **구조물도 모달(95-3)** — 집계표 행 누름 → 큰 모달 · 그 측점 조합 전부 · 조합마다 도면 + 면적산출 카드(지금 탭과 같음) · 도면 여러 장(82 더한장)이면 장도 · 세로 스크롤 · 원천 = 그 구조물의 프로젝트 복사본 있으면 복사본 · 없으면 M02 원본 · 공용 표에 opt-in 줄 누름 · 닫을 때 카드 정리.
|
||||
- **수리 화면 크기(95-4)** — 1000px 폭 제한 풂 · 카드 높이 = 화면 높이 따라(B08 다른 표 규칙 `calc(100vh − N)` + 안 스크롤) · 2열 ↔ 1열은 칸 폭 기준(@container) · 오른쪽 진행단계 판 가림은 다른 페이지와 같이 둠.
|
||||
- **수리 ← B05(96)** — 서버가 B05 분석 결과(`04_detailed_basins.geojson` + `pipe_points`)를 읽어 측점마다 연결값: 유역면적 A · 유로 길이 L · 표고차 H(관 · 박스 · 세월교 · 물넘이) · 관경 D(관) · 내공 B · H(박스) · 월류 폭(세월교 · 물넘이) · 표준값(유출계수 · 할증 · 재현기간 · 최소 도달시간)은 설정 하나로 묶음(값 같음) · 덮어쓰기 = 빈칸만 연결값 · [저장] 때 연결값과 같으면 비워 저장(연동 유지) · 다르면 손 값 · B05 값은 B05 [저장] 뒤 반영 · 하상경사 · 관 종류 · n 은 잇지 않음 · 참고로 B05 설계유량 · 도달시간을 계산 칸 옆에 · 옛 결정 62 · 62-4 · 69-6 「B05 와 잇지 않음」은 이번 요구가 바꿈.
|
||||
|
||||
### CAD(97)
|
||||
- **색(97-1)** — 입력창 칸 · 글이 테마를 따름(밝음 = 흰 칸 + 테두리 · 어두움 = 짙은 보라 칸 #251f38 · 글 = CAD 글 색) · 캔버스 자동색 뒤집기를 이 칸만 건너뜀.
|
||||
- **글 넘침(97-2)** — 글을 칸 세로 가운데로 · 칸 폭 = 글 폭에 맞춤(최소 150) · 단축키 후보 목록도 바탕 안(최대 6줄 그대로).
|
||||
- **Space(97-3)** — Space = Enter(명령 · 숫자 · 좌표 · 명령줄) · 빈 입력에서 Enter · Space = 마지막 명령 반복(오토캐드 꼴) · 글 단계(TEXT · MTEXT · 표 칸 · 이름)에선 띄어쓰기 · 한글 조합 중 · Shift/Ctrl+Space · 길게 누름은 제외 · 빈 우클릭은 반복 안 함(지금처럼 확정만).
|
||||
|
||||
## 2. 같은 파일 몫
|
||||
|
||||
| 파일 | 몫 |
|
||||
|---|---|
|
||||
| `B07_DesignDetail_Engine_Cad_PlanKinds.py` | 93 = 용지 조각 넷(목록 끝) · 그리기 갈래 / 94 = `ip_table` 한 줄(IP · R 조각 옆) · 그리기는 새 파일 부르는 한 갈래 |
|
||||
| `B07_DesignDetail_Router_Support_Plan.py` | 93 = 용지 조각 계산 · 기본 종류 · 이관 / 94 = IP 표 자료 계산 부르는 한 줄(몸은 새 파일) |
|
||||
| `B07_DesignDetail_UI_Panels.ts` · `UI_PlanKinds.ts` · `UI_Style.css` | 93 만 |
|
||||
| `B08_Quantity_UI_Page.ts/.css` · `UI_Drawing.ts` · `UI_Summary.ts` · `Summary_Data.ts` · `UI_Hydro.css` · `ui_template_data_table.ts` | 95 만 |
|
||||
| `B08_Quantity_Router_Hydro.py` · `Hydro_Site.py` · `Hydro_Defaults.py` · `UI_Hydro.ts` · `UI_Hydro_Sheet.ts` · `b_page_state.ts`(초안 version) | 96 만 |
|
||||
| `openwebcad/src/inputController/*` · `components/CommandLine.tsx` · `drawControllers/screenCanvas.drawController.ts` · `App.consts.ts` · `commands/run-command.ts` · `tools/factories/sequence-tool.ts`(meta 한 줄) | 97 만 |
|
||||
|
||||
## 2. 검증 자리
|
||||
- B07 · B08 = 자기 `검증_subN` 프로젝트 · 데스크탑 보조 = 자기 서버 · ORCA · 랩탑 화면 검증은 동시 둘(ask 로 차례).
|
||||
|
||||
## 3. 찾은 흠 — 이번 밖(남김)
|
||||
- B07 서버 도면 순서와 화면 순서가 원래 다름(도면번호 · 이전/다음은 서버 순서).
|
||||
- B07 호출처 0 옛 평면도 코드(`Engine_Cad_Plan.py` build_plan_drawing 등) 남음.
|
||||
- CAD TEXT · MTEXT 영문이 대문자로 들어감(`input-controller.ts:494`) · `keyboard-handler.ts:5` 의 `'Space'` 는 안 맞음.
|
||||
- B08 이미 깨진 옛 시험(없는 파일 읽음) 여럿 · B08 탭 기억 없음(새로고침하면 첫 탭).
|
||||
- B01 Modals.ts 662줄(700 가까움).
|
||||
@@ -0,0 +1,37 @@
|
||||
# 사용자 요구 2차 (2026-10-08 오후 · 원문 그대로)
|
||||
|
||||
계획서 = `PLAN.md` 92장부터 · 분석 = 같은 폴더 `분석_정함.md` · 첨부 그림 = `IP표_예시.png`(평면도 좌측 하단 IP 표 예).
|
||||
|
||||
```
|
||||
1. B01 대시보드
|
||||
현재 대시보드가 한페이지에 전체 내용이 들어가서 보기 불편함. 항목별로 페이지르 구성하여 보여주는 내용을 보강하는건 어떤지 검토.
|
||||
|
||||
B07 상세 설계
|
||||
- 용지도의 텍스트가 노선위에 배치되면 안됨. 그자는 추가로 라벨 형태로 구역을 구분하고 표현되었으면 함.
|
||||
- 용지도도 계획평면도 컨테이너 내부로 들어가고 종류 추가 업데이트 대피소 자리 항목으로 편입
|
||||
- 배수유역도도 계획평면도 내부로 편입. 편입 방식은 용지도와 동일함.
|
||||
- 평면도로 기본 평면도들과 나타내는 정보들에 따라 사용자가 지정할수 있게 하였으면 함.
|
||||
- 컨테이너 제목 정리 계획평면도 > 평면도, 종단면도 > 종단도, 횡단면도 > 횡단도
|
||||
- 표준 횡단면도는 횡단면도 컨테이너 내부의 최상위에 1행 구조로 배치
|
||||
- 평면도의 IP에는 도면 좌측하단에 IP테이블 들어간 경우에는 테이블로 상세 정보도 표기되어야함. 단축키로 IP, CO의 X와 Y, IA, R, TL, CL, SL 정보임.(첨부 그림 참고)
|
||||
|
||||
B08 수량산출
|
||||
- 수리집수면적표의 내용에서 상세페이지는 브라우져 크기에 연동되어야함. (다른 페이지 참조)
|
||||
- 구조물도 탭은 삭제하고 구조물 집계표의 해당 행을 선택할경우 모달창으로 보여주게 변경. 이때 복수의 표현이 필요한 경우에는 모달창에서 스크롤하여 내려서 보이게 구현.
|
||||
- 메인 탭과 보조탭의 사이에 수평 구분선은 좋은나 보조탭 항목의 아래와 위 공간이 차이가 있음 위 공간을 아래공간과 동일하게 구현
|
||||
- 기존 구조물 집계표 상위에 구조물이라는 탭을 생성하고 구조물 집계표는 보조탭으로 이동
|
||||
- 구조물 탭에서 구조물 집계표 외에 총괄자재수량집계표, 콘크리트소요자재집계표,자재수량집계표의 보조탭을 신규로 생성. 내용은 탭생성 후 하나씩 만들생각임.
|
||||
- 수리집수면적표에 b05에서 배수유역 분석후에 넣을 수 있는 값들이 있음 연결필요.
|
||||
- 세월교와 박스암거도 동일.
|
||||
|
||||
전역 공통 및 공통 프로그램
|
||||
- 오토캐드에서 테마에 따라 마우스 커서를 따라 다니는 입력창의 색상문제로 제대로 안보임
|
||||
- 마우스 커서를 따라 다니는 입력창에서 단축키 텍스트가 벗어남
|
||||
- 마우스 커서를 따라 다니는 입력창에서 오토캐드 프로그램에서는 스페이스도 엔터키와 동일한 기능 아님?
|
||||
```
|
||||
|
||||
첨부 그림(IP표_예시.png) 내용 — 열마다 IP 번호(BP · 1 · 2 …) · 행 = IP · CO(X · Y) · IA(도-분-초) · R · TL · CL · SL · BP 열은 IP · CO 만.
|
||||
|
||||
## 함께 받은 말
|
||||
|
||||
다른 워크트리가 작업하는 동안 너는 신규 작업에 대한 신규 계획서 검토 진행.
|
||||
@@ -0,0 +1,58 @@
|
||||
# 조사 I — B01 대시보드 항목별 페이지 나누기 검토 (10-8 오후 · 읽기 전용 조사 원문)
|
||||
|
||||
결정은 `분석_정함.md` 가 앞섬. 한 주소(`#/b01-account`)에 역할별 5~9 컨테이너 · 시스템 관리자 화면 약 3.5~4 화면(추정). 해시 인자 탭(`?tab=`)이 가장 작게 바꾸는 길 · 보강 내용은 대부분 이미 백엔드 응답에 있음.
|
||||
약어: Page · Projects · Company · Admin · Profile · Resources · TempUpload · Common · Modals · CompanyPick = `B01_Dashboard/B01_Dashboard_UI_<이름>.ts` · Api = `B01_Dashboard_Api_Fetch.ts` · Router · Router_Assets · Repo · Repo_Co = `B01_Dashboard_Router.py` · `_Router_Assets.py` · `_Repository.py` · `_Repository_Company.py` · SA = 시스템 관리자 · AD = 회사 관리자 · U = 일반.
|
||||
|
||||
## 1. 현재 구성(Page:232-326)
|
||||
| 컨테이너 | 내용 | 파일:줄 | API | 권한 |
|
||||
|---|---|---|---|---|
|
||||
| 리소스 현황 | CPU · 메모리 · 디스크 % · 활성 사용자 · 활성 프로젝트 5칸 + 7일 선그래프 | Page:243 · Resources:13-151 | GET admin/resources?days=7(Router:551) | SA |
|
||||
| 시스템 설정 | M01 · M02 카드 · 통째 접힘 | Page:166-198 · 221-230 | 이동만 | 모두(SA 4장 / AD · 마스터 1장 / U 1장) |
|
||||
| 프로젝트 | 이름 · 지역 · 단계 막대 · 수정일 · [수정][삭제] · [+]=B02 | Page:245/280/293 · Projects:11-54 | SA · AD admin/projects(Router:343) · U user/projects(Router:136) | 모두 |
|
||||
| 임시 보관함 | 묶음 · 파일 표 · 청크 업로드 진행률 | Page:251/283/298 · TempUpload:72-469 | GET /api/temp-uploads(`B03_FileInput_Router_Temp.py:149`) | 모두 |
|
||||
| 사용자 관리 | 이메일 · 이름 · 직급 · 부서 · 전화 · 역할 · 상태 · 관리 | Page:252-260 · Admin:18-76 | admin/users?company_id(Router:424) | SA |
|
||||
| 팀원 관리 | 이메일 · 이름 · 직급 · 부서 · 역할 · 관리 | Page:284 · Company:84-137 | admin/members(Router:245) | AD |
|
||||
| 가입 요청 | 이메일 · 회사 · 요청일 · 상태 · 승인/거절 | Page:261/287 · Company:139-160 | admin/join-requests(Router:316) | SA · AD |
|
||||
| 회사 관리 | 고른 회사 1줄 | Page:241 · 269-274 · Company:162-207 | admin/companies(Router:408) | SA |
|
||||
| 회사 정보 | 회사명 · 인원 · 프로젝트 수 · 주소(AD 수정 · 로고) | Page:288/299 · Company:25-82 | user/company(Router:148) · company/assets(Router_Assets:41) | AD · U |
|
||||
| 기본정보(반폭) | 이름 · 직급 · 이메일 · 부서 · 전화 + 서명 | Page:304 · Profile:15-48 | GET/PATCH me(Router:99-115) | 모두 |
|
||||
| 보안(반폭) | 비밀번호 바꾸기 | Page:305 · Profile:50-110 | POST /api/auth/password | 모두 |
|
||||
| 시스템 로그 | 이메일 · 행위 · 대상 · IP · 시각 | Page:308-310 · Admin:97-118 | admin/audit-logs(Router:541) | SA |
|
||||
| 챗봇(떠 있는 단추) | 법령 · 지침 질의 | Page:312 · Knowledge_Chat:7-119 | POST knowledge-chat | 모두 |
|
||||
- 역할별 차례: SA 9개 · AD 7개 · U 5개 · 사실상 1열 · 목록은 4줄까지 + 안 스크롤(Common:11-15 · 08-08 지시) · 길이(추정) SA 2,900~3,500px · AD 2,100~2,700px · U 1,550~1,850px · 첫 화면 요청 SA 9 · AD 9(같은 회사 프로젝트를 user/projects · admin/projects 두 번 · Page:131-145) · U 5.
|
||||
|
||||
## 2. 쓸 수 있는 틀
|
||||
- 해시 인자 `currentQuery()` · `navigateTo(route, query)`(`A00_Common/router.ts:127-140`) — M02 가 `?open=&root=&owner=&company=` 에 상태(`M02_MasterTemplete_Layer.ts:34-50`) · 층 단추 줄(`TreePanel_Roots.ts:48-90`).
|
||||
- 페이지 안 탭: B08 위 탭(md) · 보조 탭(sm)(`B08_Quantity_UI_Page.ts:28-87` · `.css:14-20` · `B08_Quantity_UI_Earthwork.ts:257-283`) · 공용 탭 부품 없음(`cad_host_tabs.ts` 는 CAD 장 전용).
|
||||
- 좌측 패널: `ui_template_overlay.ts:245` createWorkflowOverlays + `ui_template_tree.ts`(M01 · M02).
|
||||
- 한 페이지 여러 주소: MountedPage(`router.ts:16-20 · 101-105` · B05 · B06).
|
||||
- 자리표 페이지: B10 결재(`B10_Payment_UI_Page.ts:11-45`) · B11 처리 상태(`B11_Status_UI_Page.ts:31-51`) — 버튼 꺼짐 · 링크 없음.
|
||||
|
||||
## 3. 갈래
|
||||
- A 해시 인자 탭(`#/b01-account?tab=projects`): 탭 줄(B08 단추 꼴) · 고른 탭만 그리고 그 자료만 받음 · 라우터 · 설정 안 바꿈 · 저장 뒤 다시 그려도 해시로 유지 · 다른 화면이 특정 탭으로 보냄(회사 없음 → `?tab=company`) · 요청 수 줄어듦 · 크기 Page 재편 120~180줄 + 탭 줄 25줄 + CSS 10줄 · 시험 1 · ORCA 점검 1.
|
||||
- B A + 「개요」 첫 탭: 숫자 카드(단계별 프로젝트 수 · 실패/재확인 · 가입 대기 · 보관함 · SA 리소스) → 누르면 해당 탭 · 이미 받는 자료 · 카드 80~120줄 · CSS `.b01-dashboard__metric`(`B01_Dashboard_UI_Style.css:193-222`).
|
||||
- C 좌측 패널 메뉴(M01 · M02 꼴): 세로 목록 · 09-06 「공용 일반 레이아웃」(Page:233)과 어긋남 · 좁은 화면 덮음 · 200~300줄.
|
||||
- 비추천: 항목마다 새 주소(`config_frontend.ts:94-147` · `main.ts:26-40` · `router.ts:27-75` · 「주소 = 폴더 1:1」 어긋남).
|
||||
- 판단(조사자): A 로 시작 · 요약 필요하면 B.
|
||||
|
||||
## 4. 묶음 · 보강 후보
|
||||
| 묶음(권한) | 담을 것 | 더 보일 것 · 근거 |
|
||||
|---|---|---|
|
||||
| 프로젝트(모두) | 프로젝트 표 + 임시 보관함 | 연도 · 도로 종류 · 연장 · 발주처 · 작성자 · 만든 날(응답에 있음 Repo:213-219 · 표는 4칸 Projects:44-50) · 찾기 · 거르기 · 4줄 제한 풀기 |
|
||||
| 진행 현황(모두) | 단계별 수 · 실패(FAILED) · 재확인(STALE) | 단계별 message · progress_percent · 시작/완료 시각(Repo:139-173 · Api:19-28 · 지금 막대 색 · 풍선만) |
|
||||
| 회사(모두) | 회사 정보 · 팀원 · 가입 요청(AD) · 로고 · 서명 | 사업자번호 · 대표 · 사업 상태(Repo_Co:25-28) · U 도 팀원 목록 읽기 가능(Router:245-256) · 회사 자산 목록(Router_Assets:41) |
|
||||
| 내 계정(모두) | 기본정보 · 서명 · 비밀번호 | 마지막 로그인 · 이메일 재인증 만료일(/me 가 줌 Repo:98-101 · 타입에 없음 Api:3-17) · 로그인 기록 목록 = 새 API |
|
||||
| 설정(모두) | 시스템 설정 카드 | 자리만 |
|
||||
| 시스템(SA) | 리소스 · 로그 · 회사 목록 · 문의 | 리소스 7/30/90일(백엔드 최대 90 Router:553 · 화면 7 고정 Page:115) · 활성 사용자 · 프로젝트 추이(Repo:516-518) · 로그 전체 수 · 쪽(Router:541-548 · 화면 50건) · 회사 전체 목록 + 인원 · 프로젝트 수 · 등록일(Repo_Co:252-263) · 사용자 마지막 로그인 · 소속(Repo:347-351) · 고객 문의 목록 · 상태(API 있음 `A09_Security_Router.py:86-122` · `A09_Security_Api_Fetch.ts` 안 쓰임) |
|
||||
- 데이터 없음: 알림(표 · API 없음) · 결제(B10 · B11 자리표뿐 · `companies.subscription_status` 열만) · 회사 · 프로젝트별 저장 용량(없음 · total_storage_mb 는 서버 디스크 전체).
|
||||
- 안 쓰는 함수: fetchAllProjects · assignUserToCompany · fetchAllJoinRequests · fetchProjectWorkflowState(Api:430 · 475 · 482 · 500).
|
||||
|
||||
## 5. 영향
|
||||
- 진입(모두 인자 없이 `navigateTo(ROUTES.B01_ACCOUNT)`): 로그인 뒤(`A06_Login_UI_Auth_Page.ts:167 · 202`) · 머리 이름 단추(`app_shell.ts:139`) · 작업 화면 집 단추(`ui_template_workflow_layout.ts:80`) · 회사 없음(`router.ts:189-191`) · 프로젝트 없어짐(`router.ts:206`) · 자료 없음(`b_missing_data_guard.ts:32`) · B02 취소 · M01 권한 없음 · M02 회사 없음(`Layer.ts:176`) · B11 준비 실패 — 회사 없음 두 곳은 `tab` 인자 덧붙임.
|
||||
- 다시 그리기: 저장 · 승인 · 회사 고르기 = hashchange 로 통째(Modals:77 · Company:219 · Page:213) → 탭을 메모리에만 두면 첫 탭으로 튐 → 해시에 둠 · MountedPage 면 hashchange 가 show() 만(main.ts:66-69).
|
||||
- 상태: sessionStorage `aislo.adminCompany`(Page:67-74 · 212 · M02 도 읽음) 그대로 · localStorage `temp:session:*` 무관 · 마지막 탭 기억은 pref 틀(`b_page_state.ts:253 · 304-390` + Router:122-133).
|
||||
- 시험: 고쳐야 함 `test_b01_settings_cards.py:99-141`(buildPage 문자열 구조) · `ui_checks/44-7_단위_드롭다운.js:22-26`(설정 카드 기다림) / 그대로 `test_common_native_menu.py:52` · `test_m02_layer_screen.py:146` · `test_b01_knowledge_chat` · `test_b01_ui_prefs_dead_project`.
|
||||
- 기타: Modals.ts 662줄 · 위키 `docs/wiki/pages/B01_Dashboard/B01_frontend.md` 옛 내용(위키 운영 안 함).
|
||||
|
||||
## 미결(조사자 제시)
|
||||
1. 갈래 A / B / C. 2. 로그인 직후 첫 탭(개요 / 프로젝트). 3. 진행 현황을 프로젝트 탭에 합칠지 · 임시 보관함 자리(08-08 「프로젝트 바로 아래」). 4. 시스템 설정 자리(모든 탭 위 한 줄 27-3a / 설정 탭 / 머리). 5. SA 회사 알약(컨테이너 4곳 29-1 / 탭 줄 오른쪽 하나). 6. 4줄 제한(전용 탭에선 풀고 쪽 넘김). 7. 보강 범위(응답에 있는 것만 / + 화면만 새로(문의 관리) / + 새 API(로그인 기록 · 회사별 용량)). 8. 결제 · 알림 탭(만들지 않음 / B10 · B11 자리표를 탭으로).
|
||||
@@ -0,0 +1,49 @@
|
||||
# 조사 J1 — B07 컨테이너 · 용지도 · 배수유역도 · 표준 횡단 (10-8 오후 · 읽기 전용 조사 원문)
|
||||
|
||||
결정은 `분석_정함.md` 가 앞섬 · 이 파일은 근거(파일:줄)용. 경로 = `B07_DesignDetail/` 아래.
|
||||
|
||||
## 0. 「대피소」의 정체
|
||||
- 「대피소」 = 계획평면도 기본 종류 넷 중 하나(id `layout` · `Engine_Cad_PlanKinds.py:78-82`).
|
||||
- 같은 묶음 아래 접이 패널 제목 = 「종류 추가 · 업데이트 · 대피소 자리」(`UI_PlanKinds.ts:193-194`) — 펼치면 종류 칸(`kindForm` 55-94: 종류 고르기 · 이름 · 조각 체크 · [추가/업데이트]) + 대피소 · 사토장 자리 칸(`marksForm` 96-149).
|
||||
- 원문 「종류 추가 업데이트 대피소 자리 항목으로 편입」 = 이 패널 제목과 글자 같음 → 추정: 용지도를 이 패널의 「종류」로(고르기 목록 · × 지우기 · 업데이트 대상) · 「대피소」 종류를 바꾸라는 뜻 아님.
|
||||
|
||||
## 1. 좌측 목록
|
||||
- 정의 `UI_Panels.ts:24-40` `DRAWING_GROUPS` 8개: 표지(cover) · 계획평면도(plan) · 종단면도(longitudinal) · 표준 횡단면도(cross_standard) · 횡단면도(cross) · 토적도(mass_haul) · 유역도(watershed) · 용지도(`idPrefix:"landuse"`) · 이름은 코드에 직접(locale 키 없음).
|
||||
- 그리기 `UI_Panels.ts:91-143` — plan 이면 `buildPlanSection` · 1장 이하면 컨테이너 없이 단추(이름 group.label · 106-128) · 2장 이상이면 컨테이너 + 제목 `${label} ${N}`(130-142).
|
||||
- 계획평면도 묶음 `UI_PlanKinds.ts:152-211` — 종류별 블록 · × 지우기(176-186) · 접이 패널(191-209).
|
||||
- 종류 자료: 조각 14개 `PIECES`(`Engine_Cad_PlanKinds.py:46-61`) · 기본 넷 `DEFAULT_KINDS`(71-89) · 저장 `B07_DesignDetail/plan_kinds/{id}.json`(폴더 없으면 기본 넷 · 처음 고칠 때 파일로 · `Router_Support_Plan.py:78-115`) · 도면 id `plan_{kind}[_{장}]`(:61) · 제목 `계획평면도({이름})`(:67-68).
|
||||
- 서버 목록 순서 `Router_Support.py:110-192`: 종단 → 횡단 장 → 종류×장 → 용지도(161-174) → 표지 · 표준 · 토적 · 유역(176-189) — 화면 순서와 다름 · 도면번호(195-211) · 이전/다음(`UI_Page.ts:323-328`)은 서버 순서(원래부터 어긋남).
|
||||
|
||||
## 2. 용지도 · 배수유역도 편입
|
||||
- 지금: 용지도 = 따로 `landuse[_N]`(`Router.py:358-366` · `Router_Support.py:481-500`) · 축척 · 도곽 · 장 나눔은 계획평면도와 같은 식(`Router_Support_Basin.py:470-480` = `_sheet_box` 496-510) / 배수유역도 = `watershed` 한 장 · 1/6,000 · 노선 전체 · 오른쪽 정보표(`Engine_Cad_Basin.py:278-438`).
|
||||
- 길 A(화면만 · 작음): `_drawing_list` 에서 landuse · watershed 에 `plan_kind` · `plan_kind_name` 실음(`Router_Support.py:163-189`) · `UI_Panels.ts:92-96` plan 묶음에 함께 · 38-39줄 항목 뺌 · × 단추는 `kind==="plan"` 일 때만(`UI_PlanKinds.ts:176` — 가드 필수 · 없으면 `delete_kind` 가 기본 넷을 디스크에 먼저 내린 뒤 404 · `Router_Support_Plan.py:169-172`) · id · manifest · 확정 · 도면번호 그대로 · 「종류」 고르기 목록엔 안 들어감.
|
||||
- 길 B(용지도를 진짜 종류로 · 중간): `PIECES` 에 조각 넷(parcel · parcel_info · emd · sgg) · `build_pieces`(`Router_Support_Plan.py:320-418`)에서 `_clip_parcels` · `_clip_rings`(Basin 377-438) · `_piece_entities`(`PlanKinds.py:347-478`)에 그리기 옮김(출처 `Engine_Cad_Landuse.py` `_boundary_entities` · 정보 글) · `DEFAULT_KINDS` 에 `{"id":"landuse","name":"용지도"}` → 체크 목록 · 고르기 · × · 업데이트 자동(`Router_PlanKinds.py:49-55` · 라이다 선례 138e80c79) · 이관 ① 이미 `plan_kinds/` 있는 프로젝트엔 새 기본 종류 안 생김(`list_kinds` 81-82) → 한 번 더해 주는 이관 ② id `landuse` → `plan_landuse` → 옛 확정 고아(단계 완료 기준은 횡단만 · `Router.py:448` · 무해) · 지울 자리 `Router.py:358-366` · `Router_Support.py:161-174 · 427-428 · 481-500` · `landuse_source`(Basin 441-490) · `build_landuse_drawing` · 주의: 제목 `plan_title` 로 「계획평면도(용지도)」 · 종류 양식엔 범례 없음 · 등고선 색이 계획평면도 색으로 · 순서 끝에 두면 도면번호 그대로.
|
||||
- 길 C(배수유역도까지 조각 · 큼 · 비권장): 1/6,000 한 장 → 1/1,200 장 나눔 · 「수리집수면적유역도 S=1/6,000」 양식 깨짐 → 유역도는 길 A(고정 항목)가 맞음(추정).
|
||||
|
||||
## 3. 제목 바꾸기(작음)
|
||||
- 고칠 자리 `UI_Panels.ts:34` 「종단면도」 · `:36` 「횡단면도」 · `UI_PlanKinds.ts:159` `계획평면도 ${N}` · `UI_Panels.ts:33` label 은 화면에 안 쓰임 · 1장일 때 단추 이름 = group.label(`UI_Panels.ts:123`).
|
||||
- 같은 글 다른 곳: 도각 도면명 `Engine_Cad_Long.py:661` 「종단면도」 · `Engine_Cad_Sheet.py:254` 「횡단면도」 · 장 응답 라벨 `Router_Support.py:396` 「횡단면도 N장」 · 종류 제목 `Router_Support_Plan.py:68` 「계획평면도(…)」(탭 이름 · 내보내기 파일 이름이 이 label · `UI_Page.ts:316 · 420-424`) · 종단 단추 이름은 이미 「종단도」(`Engine_Cad_Long.py:106-121`) · B08 · locale · B07 도움말엔 없음.
|
||||
|
||||
## 4. 표준 횡단면도(작음)
|
||||
- 지금 `UI_Panels.ts:35` 따로 항목 · 1장이라 종단 · 횡단 사이에 단추.
|
||||
- 고칠 자리: `group.kind==="cross"` 일 때 items 앞에 `cross_standard` 붙이고 35줄 뺌 · 횡단 장 1개여도 컨테이너 · CSS 한 줄(횡단 컨테이너 2열 grid `UI_Style.css:59-63` → `grid-column: 1 / -1` · 84-86 재사용).
|
||||
- 주의: 개수 표시 `횡단도 N` 에 표준 섞임 · 서버 고칠 것 없음 · `isCrossSheet`(`UI_Panels.ts:163-165`) kind 먼저 · `CROSS_SHEET_ID` 숫자 fullmatch · 확정 기준(`UI_Page.ts:125`) kind "cross" 만 → 안전.
|
||||
|
||||
## 5. 용지도 글(중간)
|
||||
- 지금 `Engine_Cad_Landuse.py:227-274` — 필지마다 지번 · 지목 · 면적 · 소유자 4줄(1.8 mm) · 자리 = 잘린 경계 bbox 중심(`_ring_center` 86-90) · 노선 · 다른 글과 겹침 검사 없음 · 노선 그린 뒤 글을 맨 위(303).
|
||||
- 원인 1순위: 도곽을 감싼 필지의 글 자리 = 도곽 중심(`Router_Support_Basin.py:418 · 436-437`) = 노선 범위 중심 → 거의 노선 위 · 경계도 열린 선 조각으로만 와서 다각형 없음(433-435).
|
||||
- 고칠 자리: `_clip_parcels`(Basin 399-438)에서 shapely `(필지 ∩ 도곽) − 노선 버퍼` 의 `representative_point()` → label_at · 노선을 인자로(시험 부르는 꼴은 기본값) · 엔진에서 상자 라벨 + 지시선 · 후보 자리 몇 개 중 노선 버퍼 · 놓은 상자와 안 겹치는 첫 자리(shapely `box.intersects`).
|
||||
- 재사용: `Engine_Cad_MassHaul.py:182-256` `_balloon_entities`(사각 + 계단형 지시선 + 여러 줄 · 층 · 색 · 글 크기 인자로) · Basin `_number_badge_entities`(183-228) + `_info_box_entities`(231-275)(「번호 배지 + 오른쪽 표」) · `route_frame`(`PlanKinds.py:121-131` 노선 법선 띄우기 · 대피소 라벨 8 m 선례 `Router_Support_Plan.py:64 · 308-315`) · CAD 지시선 `openwebcad/src/tools/annotate/leader-table-tools.ts:20-53` · shapely 2.x 설치됨(`requirements.txt:46`).
|
||||
- 주의: `Router_Support_Basin.py` 668줄 → 용지도 함수는 새 파일로 · b 를 길 B 로 하면 그리기가 `PlanKinds` 로 → a 와 한 번에.
|
||||
|
||||
## 6. 시험 · 겹침
|
||||
- `test_b07_plan_kinds.py`(종류 이름 목록 단정 126 · 135 · 142) · `test_b07_landuse_parcel_info.py`(글 자리 단정 30 · 37) · `test_b07_masshaul_basin.py`(유역도 엔진 · 길 A 면 그대로) · ui_checks 엔 B07 목록 글 단정 없음.
|
||||
- 82-4 탭 작업(`UI_Page.ts` · `UI_Style.css` 끝 `.b07-cad-stack` 332-343)과: b~e 는 `UI_Panels.ts` · `UI_PlanKinds.ts` · CSS 앞쪽만 · `buildDrawingSidePanel` 서명 지키면 `UI_Page.ts` 그대로 · 88-4 수확(`Cross_Overlay.ts`)과 안 겹침.
|
||||
|
||||
## 미결(조사자 제시)
|
||||
1. 용지도 = 진짜 「종류」(길 B) vs 묶음 안 고정 항목(길 A).
|
||||
2. 배수유역도 = 1/6,000 한 장 고정 항목 vs 1/1,200 조각(길 C).
|
||||
3. 이관: 이미 종류 고친 프로젝트에 용지도 종류 자동 추가 · 옛 용지도 확정 풀려도 되는지.
|
||||
4. 용지도 종류 도면 제목(계획평면도(용지도) / 용지도 / 평면도(용지도)) · 종류 제목 「계획평면도(…)」 · 도각 도면명 「종단면도 · 횡단면도」도 바꿀지.
|
||||
5. 라벨 꼴: 상자 + 지시선 4줄 vs 번호 배지 + 오른쪽 표 · 「구역」 = 필지 vs 행정구역(리 · 읍면동 — 지금 이름 글 없음 · `_clip_rings` 가 속성 버림) · 필지 채움색.
|
||||
6. 표준 횡단면도 단추 이름 · 개수 표시.
|
||||
@@ -0,0 +1,48 @@
|
||||
# 조사 J2 — B07 평면도 사용자 지정 · IP 표 (10-8 오후 · 읽기 전용 조사 원문)
|
||||
|
||||
결정은 `분석_정함.md` 가 앞섬. 접두어 `B07_DesignDetail_` 생략.
|
||||
요약: (a) 이미 구현됨(PLAN 60 · 67장 · 커밋 138e80c79 → 3e1186861) — 평면도 종류(지형 · 노선배치도 · 대피소 · 라이다 · 사용자 추가)마다 정보 조각 14개를 체크로 고르고 서버가 생성 때 반영 · 남은 것 = 용지도 · 유역도 편입 · 이름 「평면도」. (b) 없음 — 지금 IP 는 점선 접선 · 원 · 「IPn」 글 · R 은 「R=..」 글뿐 · 가장 짧은 길 = 새 조각 `ip_table`(체크박스는 서버 목록에서 저절로).
|
||||
|
||||
## 1. 평면도 만드는 방식
|
||||
- 목록 `Router_Support.py:152-160` ← `plan_kind_items` `Router_Support_Plan.py:450-468` · id `plan_{종류}[_{장}]` · 축척 1/1,200 고정 · 안 들어가면 장 나눔(`Engine_Cad_Plan.py:96-132`).
|
||||
- 열기 `Router.py:348-357` → `plan_kind_source` `Router_Support_Plan.py:421-447` → `build_pieces` :320-418 → `build_plan_kind_drawing` `Engine_Cad_PlanKinds.py:481-555` · 조각은 열 때마다 다시 계산해 `plan_pieces/{장}/{조각}.json`(:415-417).
|
||||
- 정보 층(조각 14 · `PlanKinds.py:46-61`): 라이다 음영 · 등고선 · 계류 · 비탈 눈금 · 노견선 · 성토/절토 외곽선 · 중심선 · IP · R · 측점 NO · 시종점 · 대피소/사토장 · 배수시설 기호 · 층 이름 `b07-plan-{조각}` · 고른 조각만 층(:542-554) · 기본 종류 넷 :71-89 · 조각에 없는 것 = 용지(지적 · 행정경계) · 유역은 따로 도면(`Engine_Cad_Landuse.py:191` · `Engine_Cad_Basin.py:278`).
|
||||
- 저장: 종류 `plan_kinds/{id}.json` = {name, pieces, order}(`Router_Support_Plan.py:74-173` · 폴더 없으면 기본 넷 · 처음 고칠 때 파일로 :105-115) · 대피소 자리 `plan_marks.json` · 확정 `manifest.json`(`Router_Support_Io.py:65-79`) + `drawings/<id>.json`(쓰기 `Router_Support.py:594-606` · 읽기 :417-436 · `DRAWING_FORMAT=7` `Engine_Cad.py:51`) · 종류 고치면 그 종류 확정본 풀림(`Router_Support_Plan.py:154-162`).
|
||||
- 화면 · API: `Router_PlanKinds.py:72-126` · UI `UI_PlanKinds.ts:55-94`(체크 목록은 서버 조각 목록 `Router_PlanKinds.py:52` · `<details>` 안에 접힘 :193-208).
|
||||
- 층 켬/끔: CAD 눈 아이콘(`openwebcad/src/components/LayerManager.tsx:68` · 숨긴 층 안 그림 `helpers/draw-functions.ts:32`) · DXF 내보내기는 숨김 안 봄(`Engine_Frame_Export.py:219-235`) · 미확정 도면은 열 때마다 새로 → 켬/끔 사라짐.
|
||||
- 양식 `resources/master_template/drawing/00_template_A1.json` = 작도 영역 [42,47,812,567] + 표제란 자리표 11개 · 표 자리 없음.
|
||||
- ⚠ 호출처 0 옛 코드(여기에 IP 표 넣으면 화면에 안 나옴): `Engine_Cad_Plan.py:66-71 · 135-142 · 155-388`(build_plan_drawing) · `Router_Support_Basin.py:276 · 292-353`(plan_source) · `:493 · 531-558`(lidar_source) · `Engine_Cad_Lidar.py:106`.
|
||||
|
||||
## 2. (a) 사용자 지정
|
||||
- 지금 「종류마다 보일 조각」을 프로젝트에 저장 · 생성 때 반영 → 요구 문장 이미 충족.
|
||||
- 남은 것: 이름 바꾸기(`UI_Panels.ts:33` · `UI_PlanKinds.ts:159` · `plan_title` `Router_Support_Plan.py:67-68`) · 용지(지적 · 경계 · 범례) · 유역(경계 · 번호 · 정보표) 조각 편입 + 기본 종류 「용지도」 「유역도」(`build_pieces` · `PlanKinds._piece_entities` · `Router_Support.py:161-189` 목록에서 따로 도면 빼기).
|
||||
- 저장 자리: 종류 파일(권장) · 장마다(요구 없어 생략) · 회사 양식(여러 프로젝트 기본값 필요할 때만).
|
||||
- 반영: 생성 때 주력 · CAD 켬/끔 보조면 `drawing_to_dxf` 가 숨긴 층 빼게 몇 줄(작음).
|
||||
- 재사용 `map_background` `Router_Support_Basin.py:236-273` · `landuse_source` :441 · `watershed_source` :606 · `clip_line_to_box` :144.
|
||||
- 위험: 유역도 1/6,000(`config_system.py:184`) vs 평면도 1/1,200(:187) · 종류별 축척 개념 없음 → 유역 편입은 축척 규칙부터. 크기: 이름 작음 · 용지 편입 중간 · 유역 편입 큼.
|
||||
|
||||
## 3. IP 자료 원천
|
||||
- 곡선표 읽기 `_load_design_curves` `B05_Profile/B05_Profile_Engine_Sections.py:75-100` → `B05_Profile/route/planned_route_curves.json`(없으면 `planned_route_initial_curves.json` · 경로 `common_util_route_geometry.py:237-261`) · 쓰기 `B05_Profile_Router_Replan.py:296-326`.
|
||||
- 곡선 하나(`RouteCurve.as_dict` `common_util/common_util_route_polyline.py:130-141` · 계산 :670-731): apex(IP 좌표 · 소수 4) · radius_m(R · 3) · tangent_m(TL · 3) · inner_angle_deg(**내각** · 교각 아님 · 2) · start / end(BC / EC · 4).
|
||||
- 없는 것: IA(= 180° − 내각) · CL · SL · BP/EP · 식(지식DB `resources/knowledge/technical_info/01_임도/03_계산정보/곡선설치_계산.md:22-25`) TL = R·tan(IA/2) · CL = R·IA(rad) · SL = R·(sec(IA/2) − 1) · 예시 IA 94-59-58.38 · R 15 검산 = 16.36950 · 24.87082 · 7.20271 표와 정확히 일치 → SL = 외할 확정.
|
||||
- 정밀도: 내각 소수 2자리 → IA 최대 ±18″ 틀림 → IA 는 곡선 자기 접선(`start→apex` · `apex→end` 방향각)으로 다시 계산(약 1″) · TL · CL · SL 은 R 과 새 IA 로 다시 계산 · 대안: `as_dict` 반올림 자리 늘리기 1줄(공용 · 새로 저장분부터).
|
||||
- 예시 표 검산: BP→IP1 1,259 m · 좌표 사슬 교각 101.87° ≠ 94.9995° → 예시 값은 견본(추정) → IA 는 IP 사슬이 아니라 곡선 자기 접선으로.
|
||||
- BP/EP: 노선 첫 · 끝 정점(`context.vertices`) · B05 화면 이름 「시점 · 종점 · 교각점」(`B05_Profile_UI_RouteEdit_CurveBar.ts:106`).
|
||||
- 좌표계: TM(PRJ · 기본 EPSG:5186 `B04_PreProcess_Engine_Extent.py:146-147`) · x = 동 · y = 북 · 도면은 종이 mm(`PlanKinds.py:490-491`) · 예시 X 387998 = 북 · Y 226767 = 동 → 한국 측량 관례대로 X = 북(y) · Y = 동(x)(추정 · 근거 강함).
|
||||
- 번호: `curve_pieces` `PlanKinds.py:299` 노선 전체 차례 · 장 범위로 거름(:304) · 노선 밖 옛 곡선 거르는 장치 없음 → B05 5 m 허용 `_design_curve_spans` `B05_Profile_Engine_Sections_Core.py:219-275` 재사용. 크기: 작음(계산 약 30줄 + 도-분-초 글 · 초 60.00 올림 처리).
|
||||
|
||||
## 4. IP 표(b)
|
||||
- 지금 `ip` 조각 = 접선 · 원 · 「IPn」(`PlanKinds.py:401-410`) · `radius` = 「R=..」(:411-413) · 표 · 양식 자리 없음.
|
||||
- 그림 꼴: IP 마다 3열 묶음 [머리 | X·Y | 값] · 행 IP · CO(X, Y · CO 2행 병합) · IA · R · TL · CL · SL(IA 이하 2 · 3열 병합) · BP 묶음은 3행뿐 · 밑엔 테두리 없음 → 표 하나면 BP 밑 빈칸에 테두리 생김 → IP 묶음마다 Table 하나씩 나란히(유역 정보표 방식 `Engine_Cad_Basin.py:231-275`).
|
||||
- 고칠 자리: `Engine_Cad_PlanKinds.py` 조각 목록 끝 `("ip_table","IP 표",False)` · `_COLORS` · `_piece_entities` 새 갈래 · 자리 = 장 도곽 왼쪽 아래 종이 (0,0) + 여백(`frame_box` :498) / `Router_Support_Plan.py` `build_pieces` :358-359 옆에서 BP · IP… · EP 자료 계산 · 번호는 `curve_pieces` 와 같은 차례 / UI · API · CAD 손댈 것 없음.
|
||||
- 판정: 종류에 `ip_table` 조각 체크면 넣음(양식 표 칸 방식은 M02 양식 · 작업본까지 번져 비권장).
|
||||
- 재사용: `table_entity` `Engine_Cad.py:183-219`(병합) · 병합 꼴 `Engine_Cad_Table.py:124-229` · DXF 표 → 선+글 `Engine_Frame_Export.py:81-149`(거울 시험) · CAD `entities/TableEntity.ts`.
|
||||
- 길이: 값 칸 12자 · 글자 2.2 mm → 묶음 폭 약 30~35 mm · 평면 칸 약 700 mm(`Engine_Cad_Plan.py:81-87`) → 한 줄 약 20 묶음 · 1.1 km 노선 곡선 13곳이면 거의 한 줄 · 넘치면 다음 줄 위로(한 줄 = 8행 × 5 mm = 40 mm).
|
||||
- 주의: 도각 배치 범위 계산(`Engine_Template.py:240-270`)이 Table 모름 → 도곽 안에 두거나 계산 보강 · 표 밑 등고선 · 노선 비침(Table 채움 없음 · Hatch 는 DXF 에서 테두리만 `Engine_Frame_Export.py:210-213`) → 가리려면 등고선을 표 칸 밖으로 자름 · 여러 장 범위 겹치면 같은 IP 두 장 → 누가거리로 거르기(`_project_chainage` `B05_Profile_Engine_Sections_Core.py:224-238`) · 확정 도면은 저장본 → 종류 [업데이트] 해야 풀림. 크기: 중간(2파일 약 150줄 + 시험).
|
||||
|
||||
## 5. 시험 · 겹침
|
||||
- `test_b07_plan_kinds.py`(232줄 · 곡선/IP 경우 없음 → 예시 값 검산 · ip_table 층 시험 자리) · 표 내보내기 `test_b07_frame_export_table.py` · `helper_b07_table_geometry.cjs` · `resources/tester/cad/table.test.ts` · `table-export.test.ts` · 곡선 `test_plan_curve_limits.py` · `test_route_polyline_apex_roundtrip.py` · `test_route_polyline_curve_fit.py` · `test_b05_curve_radius_floor.py` · `test_75_profile_strip.py`.
|
||||
- 겹침: `UI_Page.ts` 평면도 코드 없음 · `Cross_Overlay.ts` 무관 · openwebcad tools · entities 손댈 것 없음 · (a) 이름 바꾸기만 `UI_Panels.ts` · `UI_PlanKinds.ts`.
|
||||
|
||||
## 미결(조사자 제시)
|
||||
1. CO 의 X · Y = 북 · 동(한국 측량 관례). 2. EP 열(IP · CO 만). 3. 여러 장: 장마다 그 장 IP 만 vs 전체 표 · BP · EP 는 해당 장만. 4. 곡선 없는 꺾임(내각 179° 이상)에도 IP 번호 · 열. 5. 표 한 줄 최대 폭 · 넘칠 때 위로 · 표 밑 등고선 지움. 6. 어느 기본 종류에 IP 표 기본 체크(지형?) · 이미 내려간 프로젝트는 [업데이트]로만. 7. IA 정밀도: 기하 재계산만 vs B05 저장 자리 늘리기도. 8. 도-분-초 분 · 초 두 자리(「5-03-07.20」). 9. 색: 예시 빨강 선 · 파랑 글 vs 지금 도면 표 색. 10. 용지 · 유역 편입 범위 · 유역 축척 · 장마다 종류.
|
||||
@@ -0,0 +1,57 @@
|
||||
# 조사 K — B08 탭 · 수리집수면적표 · 구조물도 모달 (10-8 오후 · 읽기 전용 조사 원문)
|
||||
|
||||
결정은 `분석_정함.md` 가 앞섬. 파일 = `B08_Quantity/B08_Quantity_*` · `ui_template/*` · `M02_MasterTemplete/*` · `common_util/common_util_drainage_detail.py` · `common_util_drainage_pipes.py` · `B04_PreProcess/B04_PreProcess_Router_Basins.py` · `A00_Common/b_page_state.ts` · `config/config_system_design.py`.
|
||||
|
||||
## 1. 탭 · 구분선 · 보조 탭 간격(c)
|
||||
- 메인 `TABS` 넷: summary(구조물 집계표) · sheet(구조물도) · earthwork(토공) · hydrology(수리집수면적표) — `UI_Page.ts:28-33` · 그리기 38-55 · md 단추 70-74.
|
||||
- 보조 탭 세 곳 복사: 토공 넷(`UI_Earthwork.ts:226-283`) · 수리 측점(`UI_Hydro.ts:95-130` · [저장] 툴바 104-108) · 구조물도 조합(`UI_Drawing.ts:89-124`) · class `b08-quantity__tabs` · sm 단추.
|
||||
- 탭 상태 저장 없음(늘 첫 탭 · `UI_Page.ts:87` · `UI_Earthwork.ts:282` · `UI_Hydro.ts:188`) · 수리 입력 초안만 sessionStorage `aislo:draft:b08-hydro:{프로젝트}`(`b_page_state.ts:167-168` · version 2).
|
||||
- 구분선 `.b08-quantity__tabs { padding-bottom: 8px; border-bottom: 1px }`(`UI_Page.css:14-20`) · 보조 줄도 같은 class.
|
||||
- 간격 원인: 보조 탭 위 16px = 메인 줄과 패널 사이 `gap: var(--spacing-16)`(`UI_Page.css:6`) · 아래 8px = padding-bottom(:18) → 고칠 자리 `UI_Page.css:6` gap 16 → 8 한 줄(수리 툴바도 같이 맞음) · 참고: 보조 줄 선 아래 본문 간격 토공 0 · 수리 16(`UI_Hydro.css:16`). 크기 작음.
|
||||
|
||||
## 2. (a) 수리 상세 브라우저 크기
|
||||
- 폭 `.b08-hydro__toolbar, .b08-hydro__sheet { max-width: 1000px }`(`UI_Hydro.css:5-9` · 진행단계 판 피하려던 것) · 높이 규칙 없음 · 바깥 main 이 통째 스크롤(`ui_template_workflow_layout.css:132-138`) · 2열 → 1열 = `@media 960px`(`UI_Hydro.css:34-45`).
|
||||
- 선례: ① B08 다른 보조 탭 공용 표 `max-height: calc(100vh - 260px)` + `max-width: 100%`(`ui_template_data_table.css:13-16`) — B08 안에서 수리만 규칙 밖 ② M02 면적 · 일위대가 상세 `height: calc(100vh - var(--spacing-64))` + flex `min-height: 0` · 본문만 스크롤(`M02_MasterTemplete_UI_Style.css:136-160` · `M02_MasterTemplete_Drawing.css:3-10`) ③ M02 구조물 카드 `--m02-struct-card-h: min(640px, 70vh)` + `@container 960px`(`Structure.css:9-45` · `test_m02_tree_paste.py:156-158` 고정) ④ B05/B06/B07 뿌리 `height: calc(100dvh - var(--spacing-64)); overflow: hidden`.
|
||||
- 고칠 자리 `UI_Hydro.css` 하나: 1000px 지움 · 높이 = 선례 ① 꼴(카드 `max-height: calc(100vh - Npx)` + `.ui-card__body { overflow: auto }`) 또는 ② · `@media` → `@container`.
|
||||
- 위험: 폭 풀면 오른쪽 떠 있는 진행단계 판(`ui_template_overlay.css:56-60` · 끌기 · 접기)이 오른쪽 카드 가림(B05~B07 · M02 도 같음). 크기 작음.
|
||||
|
||||
## 3. (b) 구조물도 탭 → 집계표 행 모달
|
||||
- 지금: 집계표 열(조합)마다 보조 탭 · 한 장 = M02 항목 카드(`createItemCards`) · 카드 둘 = 도면 정보(보기 전용 웹캐드 iframe · `DrawingCard` → `M02_Drawing` → `cad_host`) + 면적산출(읽기 전용 시트) · 일위대가 카드 없어 2열로 덮어씀(`UI_Drawing.css:8-17`) · M02 원본 층만 읽음(`UI_Drawing.ts:74-81` readTemplate) · 프로젝트 복사본 안 읽음 · 열 · 차례는 집계표와 같음(summaryColumns).
|
||||
- 행 ↔ 구조물: 집계표 줄 = 측점(1cm 묶음) · 열 = 조합(summary_item + group_items)(`Summary_Data.ts:45-83`) · 「측점 → 그 측점의 조합들」 함수 없음 → `Summary_Data.ts` 에 10줄 안팎(런타임 import 는 `common_util_summary_item` 하나만 · test_61_1 이 두 파일을 이어 붙여 node 로 돌림) · 조합 → M02 줄(열 · 도번) Map 이미 있음(`UI_Summary.ts:84` m02).
|
||||
- 행 고르기: 공용 표 innerHTML 가상 그리기 · 줄 이벤트 없음(`ui_template_data_table.ts:108-130 · 179-211`) · 방법 1(권장) opt-in `onRowClick(i)` · `data-i` 는 옵션 있을 때만(`test_ui_data_table.py` 가 `<tr><td class=…` · `<tr class="is-alt">` 글 봄) · 방법 2 B08 위임 클릭 + 첫 칸 측점 글.
|
||||
- 재사용: `openModal`(`ui_template_modal.ts:20-52` · `.ui-modal` `overflow: auto` + `max-height: var(--modal-max)` → 세로 스크롤 그대로) · 큰 창 선례 `.ui-modal.ui-item-picker { width: min(1320px, 96vw); --modal-max: 94vh }`(`item_picker.css:3-10` · 공용 `modal.css` 는 `test_modal_top_and_add_word.py` 가 글 고정 → 자기 class) · 모달 안 카드 선례 `item_picker_detail.ts:318-337`(늦은 import) · 구조물 복사본 읽기 `makeSource 168-183` · 닫을 때 `cards.destroy()`(`ItemCards.ts:555-560`) → `beforeClose`(`modal.ts:17 · 23-25`).
|
||||
- 주의: 조합마다 CAD iframe(`cad_host.ts:109-128` · 5개면 5개) · 감시 시계 20/15초(:147-182) 때문에 `loading=lazy` 못 씀 · 카드 높이 `min(640px, 70vh)` · 키보드 줄 고르기 없음 · `test_61_2` 가 `tab === "sheet"` 단언 → 고침 · PLAN 82(여러 장 `더한장[]`)와 「여러 장」 뜻 겹침. 크기 중간.
|
||||
|
||||
## 4. (d)(e) 「구조물」 탭 · 보조 탭 넷
|
||||
- `UI_Page.ts:28-55` TABS = structure · earthwork · hydrology · sheet 지움 · structure 아래 보조 넷(토공 SHEETS 꼴 `UI_Earthwork.ts:226-283`): 구조물 집계표(`renderStructureSummary`) · 총괄자재수량집계표 · 콘크리트소요자재집계표 · 자재수량집계표 · 빈 탭 = 기존 「차례대로 만들 탭입니다.」(`B08_Quantity_Tab_Pending` `locale_b4.ts:21` · `UI_Page.ts:51-54`).
|
||||
- 글: 새 키 넷 `locale_b4.ts` B08 묶음(20-46) · 옛 키 `B08_Quantity_Tab_Material` 등(`locale_b2.ts:611-617`) 안 씀 · 지울 것 `B08_Quantity_Tab_StructureSheet`(b2:614) · `UI_Page.ts` 머리 주석 3-8 · `UI_Drawing.ts`(모달 모듈로).
|
||||
- 주의: `UI_Hydro.ts:22` · `UI_Earthwork.ts:16` 이 `UI_Summary` 에서 `stationInterval` import → 옮기면 함께 · `ui_checks/54-2_도움말.js:71` · `54-20_좌측단추_치수.js:22` 가 `.b08-quantity` 씀 → 이름 유지. 크기 작음.
|
||||
|
||||
## 5. (f)(g) 수리 표 ← B05 배수유역 값
|
||||
- 칸(`UI_Hydro_Sheet.ts`): 왼쪽(323-353) 할증 factor(288) · 유출계수 f(337) · 유역면적 A `area_km2`(339) · 거리 L `length_m`(343) · 표고차 H `height_m`(344) · 최소 도달시간(346) · 지역(305-315) · 재현기간(296) · R24(295) / 오른쪽 관(404-425) 관 종류(419) · 단면 가정(420) · 관경 D `diameter_mm`(410) · 하상경사 1/S(361) · n(359) / 박스(370-383) 내공 B `box_width_m`(373) · H `box_height_m`(374) · 수심비(375) / 세월교 · 물넘이(384-403) 월류 폭 `overflow_width_m`(387) · 계산 칸은 서버(`Engine_Hydro.py:73-139`).
|
||||
- 지금 값 차례: DEFAULTS(측점 고유 값 None · `Hydro_Defaults.py:24-39`) → 장 기본(51-58) → 저장본 `hydro_inputs.json`(`Hydro_Site.py:23 · 108-121`) → 세션 초안(`UI_Hydro.ts:86-93`) · R24 · 지역은 `rainfall_table.json` · 행정구역(`Hydro_Site.py:90-105`) · 계산 때 서버가 R24 덮음(`Router_Hydro.py:94-97`) · 「B05/B06 값과 잇지 않음」 = 사용자 결정 62 · 62-4 · 69-6(`docs/raw/plans/2026-10-06_plan_62_홍수량.md:4,9` · `2026-10-07_plan_64-71_밤작업.md:43`) → 이번 요구가 바꿈 · 같은 뜻 주석 넷 고침(`Router_Hydro.py:8-9` · `Hydro_Defaults.py:3` · `UI_Hydro.ts:5` · `b_page_state.ts:167`).
|
||||
- B05 결과: 관 지점마다 유역 `area_m2` · `relief_m` · `flow_length_m` · `tc_minutes` · `intensity_mm_hr` · `design_flow_m3s`(×2.0) · `pipe_diameter_mm` · `recommended_diameter_mm` · `bridge_required`(`common_util_drainage_detail.py:102-130`) · 식(`size_pipe` 633-681) Kirpich + Mononobe(`config_system_design.py:166`) · f 0.8 · ×2.0 · 100년 · 최소 5분(:170-176) = B08 식 · 기본값과 같음 · 시설 옵션(`pipe_points.json`) 관 `pipe_diameter_mm`(분석 추천이 빈칸에 · `Router_Basins.py:156-186`) · 박스 `body_width_m` · `body_height_m` · 세월교 · 물넘이 `ford_width_m` · `ford_height_m`(`Router_Basins.py:122-142`).
|
||||
- 파일 · API: `{프로젝트}/B04_PreProcess/drainage/04_detailed_basins.geojson`(kind `detail_basin` · 측점 0.01 반올림 · `required_area` · `recommended_facility` 안 남음) · B05 [저장](PUT …/drainage/pipe-points) 때 `pipe_points.json` 과 함께(`B04_PreProcess_Router_Basins.py:280-331 · 404-432`) · GET `/api/projects/{id}/drainage/pipe-points` → `basins[]` + `pipe_points[]`(매번 다시 셈 · 분석 없으면 404 · B08 이 이미 부름 `UI_Summary.ts:78`).
|
||||
|
||||
| B08 칸 | B05 원천 | 장 | 비고 |
|
||||
|---|---|---|---|
|
||||
| A `area_km2` | `area_m2 / 1e6` | 모두 | |
|
||||
| L `length_m` | `flow_length_m` | 모두 | |
|
||||
| H `height_m` | `relief_m` | 모두 | 0 이면 빈칸(저장 검사 gt=0 `Router_Hydro.py:40`) |
|
||||
| D `diameter_mm` | `options.pipe_diameter_mm` | 관 | 글 '1000' 일 수 있어 숫자로 |
|
||||
| 내공 B · H | `options.body_width_m` · `body_height_m` | 박스 | |
|
||||
| 월류 폭 | `options.ford_width_m` | 세월교 · 물넘이 | |
|
||||
| f · 할증 · 재현기간 · 최소 tc | config `DRAINAGE_*` | 모두 | 지금 같은 수를 Hydro_Defaults 에 따로 → import 로 묶기 |
|
||||
| (비교만) Qd · T · 월류 높이 | `design_flow` · `tc` · `ford_height_m` | 해당 장 | 계산 칸 옆 참고 |
|
||||
- 잇지 않음: 하상경사(B05 관 경사 10° 고정 :178) · 관 종류(B05 은퇴 · 선택지 다름) · n.
|
||||
- 방식(권장): 서버 GET …/quantity/hydro(`Router_Hydro.py:75-85`)가 04 파일 읽음(읽기 함수 `Hydro_Site.py`) · `station_rows(points, basins=None)`(`Hydro_Defaults.py:61-69`)가 측점마다 `linked`(기본 None → test_73_1 · 73_11 그대로) · 측점 짝 `carry_indices`(±0.05 m · `common_util_drainage_pipes.py:371-390`) · 화면 `inputsOf`(`UI_Hydro.ts:86-93`) 차례 = 기본 < 장 기본 < linked < 저장 < 초안 · 저장본 · 초안은 null 까지 담음 → null 은 건너뜀 · [저장] 때 linked 와 같은 값은 null 저장(연동 유지) · 다르면 손 값(B04 「빈칸만 채움 · 사용자 값 안 덮음」과 같은 규칙) · 초안 version 2 → 3.
|
||||
- 위험: 04 파일은 B05 [저장] 때만 새로 → 저장 전 분석은 B08 에 안 보임 · B05 H = max(H, 0.1) · L = max(L, 1) · 반올림 → Qd 조금 다를 수 · R24 B05 선정 관측소 100년 `r24_design` vs B08 `values` 1440분(같은 표 추정) · 독립 기슭막이 지점도 관 장(기존) · 강우표 없으면 tc · Qd 비고 A · L · H 는 있음.
|
||||
- 시험: `test_69_b08_hydro_site.py:75-80` DEFAULTS 측점 값 None 고정 → DEFAULTS 고치지 말고 linked 층 · 새 시험(견본 basins + points → linked · `compute(linked)` Qd ≈ B05 `design_flow`). 크기 중간.
|
||||
|
||||
## 6. 시험 · 겹침
|
||||
- 걸림: `test_61_2_b08_structure_sheets.py`(탭 단언 → 모달) · `test_61_1_b08_summary_table.py`(Summary_Data import 제약) · `test_ui_data_table.py` + `helper_ui_data_table.cjs` · `test_modal_top_and_add_word.py` · `test_69_b08_hydro_site.py` · `test_73_1_b08_hydro_pending.py` · `test_73_11_b08_hydro_box_ford.py` · `test_62_2_b08_hydro_engine.py`(안 건드림) · `test_65_ford_defaults.py`(참고) · `test_69_b08_earthwork_tabs.py` · `ui_checks/54-2_도움말.js` · `54-20_좌측단추_치수.js`.
|
||||
- 이미 깨진 옛 시험(없는 파일 읽음): `test_b08_station_label` · `test_b08_seed_spray_leaf` · `test_b10a_rules_visible_b08` · `test_b08_face_dressing_fields_ui` 등.
|
||||
- 겹침: `M02_Table_Fill_Spec.py` 안 건드림 · PLAN 82(여러 장) — (b) 모달이 같은 카드.
|
||||
|
||||
## 미결(조사자 제시)
|
||||
1. (b) 「복수」 = 한 측점 여러 조합 vs 한 조합 도면 여러 장(82). 2. 모달 원천 = M02 원본 vs 프로젝트 복사본. 3. 모달 카드 = 도면 + 면적산출 vs 도면만. 4. (f)(g) 덮어쓰기 ⓐ 빈칸만 · B05 와 같은 값은 저장 안 함(연동) ⓑ 고정 읽기 전용 ⓒ 처음 한 번만. 5. 표준값도 B05 설정에 묶을지 · 하상경사를 B06 실제 관 경사에서. 6. (a) 진행단계 판 가림 허용 · 카드 안 스크롤 vs 페이지 고정 높이. 7. 탭 기억. 8. 독립 기슭막이 지점 수리 표에서 뺄지.
|
||||
@@ -0,0 +1,34 @@
|
||||
# 조사 L — CAD 커서 따라다니는 입력창 · Space (10-8 오후 · 읽기 전용 조사 원문)
|
||||
|
||||
결정은 `분석_정함.md` 가 앞섬. CAD = `B07_DesignDetail/openwebcad/src`.
|
||||
요약: 입력창은 HTML/CSS 가 아니라 캔버스에 직접 그림 → (a)(b) 뿌리 같음(칸 · 글이 테마에 따라 같은 색으로 바뀌고 글 세로 자리도 칸 아래로 어긋남) · (c) Space 전용 처리 없어 공백 글자로 들어감 · 빈 Enter 「직전 명령 반복」은 함수만 있고 부르는 곳 없음.
|
||||
|
||||
## 1. 입력창 위치 · 색(a)
|
||||
- 매 프레임 `helpers/draw.ts:73-76` → `inputController/input-controller.ts:129-174 draw()`(객체 `main.tsx:168`) · 칸 133-141 커서 오른쪽 아래 20px · 150×20(`App.consts.ts:165 · 170 · 175`) · 입력 글 144-157(12px) · 안내 · 좌표 · 명령 후보 665-689(`'#999'`).
|
||||
- 색은 `fillRectScreen` · `drawTextScreen` 안에서 무조건 `paintColor`(`drawControllers/screenCanvas.drawController.ts:680 · 599`) · 자동색(#000000 · #ffffff · #f5f7fa)은 어두움 = 흰색 · 밝음 = 검정(`theme.ts:97-99`) · 부모 테마 전달은 정상(`app_shell.ts:40` frd_theme · `theme.ts:43-52`).
|
||||
- 안 보이는 조합: 칸 `'#000000'`(`App.consts.ts:181`) · 글 `'#FFF'`(186) 둘 다 자동색 → 어두움 = 흰 칸 흰 글 · 밝음 = 검정 칸 검정 글(`resources/tester/cad/theme-auto-color.test.ts` 25 · 27 · 34 · 35 단언이 이 값) · 생긴 때 = 커밋 `44a6ec51d`(09-28 칸 `'#161616'` → `'#000000'`) · `App.consts.ts:179` 주석은 실제와 반대.
|
||||
- 목록 글 `'#999'` 는 읽히나 바탕 없어 도면 선과 겹침.
|
||||
- 고칠 자리: `input-controller.ts` draw() 색 · `screenCanvas.drawController.ts` 에 `paintColor` 건너뛰는 선택 인자 · `App.consts.ts` 상수 · 주석 · 재사용 `themeColor()`(`theme.ts:55` · `clear()` 371 이 씀) · 토큰은 명령줄 후보 상자(`App.css:617-629`)와 같게 `--cad-chrome-raised`(밝음 #ffffff · 어두움 #251f38) · `--cad-line` · `--cad-text`(#333 / #e4e0f0) · `--cad-text-dim`.
|
||||
- 주의: 토큰 값을 그대로 넘기면 밝음에서 #ffffff 칸이 `paintColor` 로 다시 검정 → 건너뛰기 필수 · 상수 하나씩으론 두 테마 다 맞는 쌍 없음 · 차선 = 칸 `'#161616'` + 글 휘도 0.58 이하(예 `'#909090'`) → 두 테마 대비 약 5.7:1 · 밝음에서도 칸 어두움. 크기: 작음.
|
||||
|
||||
## 2. 단축키 글이 칸 밖(b)
|
||||
- 세로: 칸은 커서 아래 20~40px(137) · 글 중심은 커서 아래 42px(149 `-OFFSET-HEIGHT-2` · `textBaseline 'middle'` 600) → 글 중심이 칸 아래 변보다 2px 밑 → 12px 대문자(494 대문자 변환)의 약 2/3 가 칸 밖 · 칸과 글이 같은 색이라 삐져나온 부분만 보임 · 글자 18 → 12px 커밋 `b4a653e68` 뒤 더 드러남(추정).
|
||||
- 가로: 칸 폭 150px 고정 · 글 폭 안 잼(src 에 `measureText` 없음) → 긴 좌표 · 한글 넘침 · 후보 「LINE (L) 선」(`registry.ts:134` · 최대 6개 518) · 안내 · 좌표는 칸 아래 바탕 없이(672-673) · 폭 제한 없음.
|
||||
- 고칠 자리: `input-controller.ts` draw() · `drawListBelowInputField` — 글 y 를 칸 가운데 `-OFFSET-HEIGHT/2` · 칸 폭 = max(150, 가장 긴 줄 폭 + 여백) · 입력 글과 목록을 바탕 한 장 안 · 글 폭은 `screenCanvas.drawController.ts` 에 `measureText` 감싼 메서드 · 재사용 명령줄 후보 상자 모양(`App.css:617-638` min-width 220) · `registry.ts` 는 다른 창 고치는 중 → 읽기만. 크기: 작음~중간.
|
||||
|
||||
## 3. 키 처리 · Space(c)
|
||||
- 문서 keydown = `handleKeyStroke`(`input-controller.ts:394-496`) — input · textarea · select 키 건너뜀(396 · IME 받개 예외) · IME 조합 건너뜀(399) · 나머지 기본 동작 막음(444) · Enter(474-477) → `handleEnterKey`(521-643 · 빈 입력이면 활성 도구에 ENTER 525-541 · 문자 단계면 TEXT_INPUT · 아니면 명령 · 숫자 · 좌표) · 우클릭(183-188)도 같은 함수 · Esc(471-473) → `handleEscapeKey`(498-511 · 선택 해제 → 도구 취소 → 글 지움) · 명령줄 Esc `components/CommandLine.tsx:57-60`.
|
||||
- Space 전용 처리 없음 → 일반 글자 가지(490-495) `text += ' '` → 「L␣」 실행 안 됨 · 빈 Space 는 공백만 쌓임 · 명령줄 입력칸(`CommandLine.tsx:50-77`)에서 Space = 띄어쓰기 · 빈 Enter 는 `handleEnterKey`(21) · 주석 「직전 명령 반복」이나 실제 반복 없음 · `repeatLastCommand`(`commands/run-command.ts:63-70`) 부르는 곳 0 · 빈 Enter 는 선택 도구 끝냈다 다시 세우기만(`tools/select-tool.ts:70-71`).
|
||||
- 고칠 자리: `input-controller.ts` 490 앞 · 399 IME 가드 뒤에 Space 가지(Space · 수정키 없음 · 길게 누른 반복 아님 · 자유 글 단계 아님 → Enter 와 같음) · `handleEnterKey` 빈 입력 가지 — 선택 도구 대기(`WAITING_FOR_FIRST_SELECT_POINT`)면 `repeatLastCommand()` · `CommandLine.tsx` onKeyDown 56 IME 가드 뒤 — Space 면 기본 동작 막고 `form.requestSubmit()` · 판정 함수는 `inputController/ime-sink.ts` `activeToolAcceptsText`(13-16) 옆.
|
||||
- 글 입력 상태 판정: 기존 `activeToolAcceptsText()` 는 너무 넓음(숫자 단계 `tools/factories/sequence-tool.ts:289-294` OFFSET 거리 · FILLET 반지름 · 키워드 단계 `array-tool.ts:150` 에서도 참) → 권장 `sequence-tool.ts:334` meta 에 `kind: step.kind` 한 줄 · `getMeta()` 로 `kind === 'text'` 인지(`state.ts:298` 꼴) · 'text' 단계 = TEXT · MTEXT · DDEDIT · FIND(`text-tools.ts:44 · 57 · 71 · 88-90`) · 표 칸(`table-tools.ts:100`) · 지시선(`leader-table-tools.ts:25`) · 도면층 상태 이름(`layer-tools.ts:157 · 167`) · 색 · 선종류 · 해치 패턴 · QSELECT 키워드형도 'text' → Space = 띄어쓰기로 남음(Enter 로 확정 · 해 없음).
|
||||
- 주의: IME 조합 중 Space 는 399 에서 먼저 빠짐 · IME 띄어쓰기는 input 사건(`ime-sink.ts:51-55` · 시험 `ime-sink.test.ts:23-25`) → 새 가지는 399 뒤 · 윈도 한글 IME Shift+Space(한/영) · Ctrl+Space → 수정키 Space 제외 · 길게 누름 제외 · 화면 입력칸(LayerManager · PropertiesEditor)은 396 에서 빠짐 · 우클릭도 `handleEnterKey` → 반복을 그 안에 넣으면 빈 우클릭 = 반복(미결 3) · `components/Button.tsx:56-59` keyup Space/Enter onClick → 포커스 남으면 반복 + 단추 겹침(지금 Enter 도 같음) · `sequence-tool.ts` 는 tools 아래(다른 창 겹칠 수 있음 · meta 한 줄만) · 범위 밖: 494 대문자 변환으로 TEXT · MTEXT 영문이 대문자 · `keyboard-handler.ts:5` 의 `'Space'` 는 절대 안 맞음(`' '` 이어야). 크기: 중간.
|
||||
|
||||
## 4. 시험 · 겹침
|
||||
- `resources/tester/cad/theme-auto-color.test.ts` 「칸 · 글 색이 두 테마 모두 달라야」 단언 자리(`node --experimental-strip-types`) · `inputController/ime-sink.test.ts:36-48` InputController + `handleKeyStroke` 직접 부르는 틀(Space = Enter · 자유 글 띄어쓰기 · 조합 중 Space) · `screenCanvas.drawController.test.ts:9-21` recordingContext(「글 중심이 칸 안」) · 동적 입력 · Space 시험 없음.
|
||||
- 겹침: 고칠 파일(`input-controller.ts` · `ime-sink.ts` · `CommandLine.tsx` · `screenCanvas.drawController.ts` · `App.consts.ts` · `run-command.ts`)은 다른 창 목록과 안 겹침 · `main.tsx` · `registry.ts` 는 읽기만.
|
||||
|
||||
## 미결(조사자 제시)
|
||||
1. 칸 색: 테마 따름(밝음 흰 칸 + 테두리 · 어두움 #251f38) vs 두 테마 공통 어두운 칸(상수 2개).
|
||||
2. 단축키 후보 목록 바탕 안에 · 몇 줄(지금 6).
|
||||
3. 빈 우클릭도 마지막 명령 반복(오토캐드 기본은 바로가기 메뉴) vs 키보드만.
|
||||
4. 키워드형 'text' 단계(색 · 선종류 · 패턴 · QSELECT)도 Space = 확정.
|
||||
Reference in New Issue
Block a user