전역 공통 · M02 · 노면공 · B06 요구 30건을 11장으로 나눈 근거 묶음. 조사 A~H 는 파일:줄 근거 · 분석_정함 은 브레인 정함과 창 사이 약속. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LLCk2y5xE8YGVgjbTntWsY
11 KiB
11 KiB
조사 D — CAD 탭 · 면적↔도면 표 · 도면 불러오기 오류 (10-8 · 읽기 전용 조사 원문)
결정은 분석_정함.md 가 앞섬 · 이 파일은 근거(파일:줄)용. R = 루트 · CAD = B07_DesignDetail/openwebcad/src · M02 = M02_MasterTemplete
1. CAD 구조
- 도면 상태 전역 한 벌:
CAD/state.ts:39(entities) · :159(layers) · :572(undoStack) · 선택 · 활성 층도 모듈 변수 → iframe 하나에 도면 하나 · 탭 · 여러 문서 · 종이 공간 없음(대신 잠금 층b08-frame·m02-structure-framestate.ts:213-219·drawControllers/screenCanvas.drawController.ts:152-163). - 저장 꼴
{entities, layers}(helpers/import-export-handlers/export-entities-to-json.ts:14-32) · 읽기import-entities-from-json.ts:44-94(엔티티 11종 · 모르는 type throw). - B07 장마다 파일
drawings/<id>.json+ manifest(B07_DesignDetail/B07_DesignDetail_Router_Support.py:417,594-596) · 여러 장 = 부모 목록 + 이전/다음 한 장씩(B07_DesignDetail_UI_Page.ts:106,252,277). - M02 구조물 도면 열마다 파일
templates/structure/<열>.json={양식, 종류, 판, 열, 도번, 도면:{format, entities, layers}, 연결표[]}(M02_MasterTemplete_Api_Fetch.ts:146-161) · 층 자리M02_Template_Layers.py:3-8· 뼈대 검사 :172-173(도면.entities필수) · 새 문서M02_MasterTemplete_Store.py:300. - 띄우는 곳(모두 iframe
/b07-cad/index.html· 부모ui_template/cad_host/cad_host.ts:109한 벌): B07B07_DesignDetail_UI_Page.ts:106· M02M02_MasterTemplete_Drawing.ts:143경유 — 상세M02_MasterTemplete_UI_Main.ts:419-438· 카드M02_MasterTemplete_DrawingCard.ts:67-91· 면적 패널M02_MasterTemplete_AreaDrawing.ts:36-42· 항목 고르기ui_template/ui_template_item_picker_edit.ts:130. - 주고받기: 같은 출처 postMessage
aislo:b08:*(CAD 짝integration/aislo-drawing-bridge.ts:38-47·aislo-table-bridge.ts:16-18) · 실으면 entities · layers 통째(bridge:214-220) · 서버는 부모만(읽기/쓰기M02_MasterTemplete_Router_Layers.py:288-314· DXF 불러오기 · 도각M02_MasterTemplete_Router_Drawing.py:56-130) · CAD 직접 길은 DXF 붙이기 하나(integration/dxf-clip-paste.ts:24).
2. CAD 탭(한 구조물 = 여러 장)
- (가) 부모(M02) 탭:
M02_MasterTemplete_Drawing.ts에 탭 줄 · 탭 바꿀 때requestSave→load·cad_host.ts그대로 · B07 이전/다음 길과 같은 꼴 · 자동백업 칸에 탭 id(M02_MasterTemplete_Drawing.ts:59-64·CAD/helpers/autosave.ts:49). 크기 중간. - (나) CAD 안 탭:
state.ts전역 상태를 문서별(엔티티 · 층 · undo · 선택 · 화면 위치 · 백업 칸)로 묶고 탭 UI · bridge 여러 장 · 모든 tools/commands 가 state 직접 읽어 파급 큼. 크기 큼. - 저장 꼴:
도면.entities직접 읽는 곳M02_Template_Layers.py:172-173·M02_Area_Table.py:64·AreaToDrawing.ts:244,326·DrawingCard.ts:75,132·UI_Main.ts:425,507-514·AreaDrawing.ts:40·ui_template_item_picker_edit.ts:130→ 한 파일 안도면(1장) 두고장[]덧붙이기가 가장 덜 고침(추정) · 장마다 파일이면 복사 · 개인 복사 · 스냅샷(M02_Item_Source.py:25·M02_Item_Copy.py:50-57·M02_Item_Personal.py:25·M02_Item_Snapshot.py:112-140) 다 고침 · 도번 열마다SD-하나(Store.py:49-66·ItemCards.ts:428·ItemList.ts:85,105·Items.py:31,76) · 장 번호 규칙 · 도각 자리표{{도면번호}}(Router_Drawing.py:50) · B07 은 M02 구조물 도면 안 읽음. - 위험: 판 = 파일 sha(
M02_Template_Layers.py:123-127) · 한 장 저장해도 전체 판 바뀜 · 15 MB 도면 여러 장이면 파일 커짐.
3. 면적산출 → 도면 표 보내기
- 보내기
M02_MasterTemplete_AreaToDrawing.ts:209-239→ 서버 변환(M02_MasterTemplete_Router_Items.py:320→M02_Area_Table.py:24-33→common_util/common_util_spreadsheet_node.ts:65-143) → 같은 열 구조물 도면(지금 실린 한 장) 열고placeTable로 PLACETABLE(놓을 자리 사용자 · :298-319 ·aislo-table-bridge.ts:41-55). - 표 꼴
{type:"Table", shapeData:{origin, columnWidths[], rowHeights[], cells[r][c]{text,colSpan,rowSpan,align,key}|null, style{fontSize,fontFamily,textColor,padding,연결}}}(CAD/entities/TableEntity.ts:29-46,323-339·CAD/helpers/table-geometry.ts:12-29). - 식별: 표
style.연결="T1…"· 문서 맨 위연결표[{연결,시트,범위,글자크기,값}]· 새 id = 안 쓴 가장 작은 T번호(AreaToDrawing.ts:242-248) · 도면 열 때 값 다르면 [업데이트] →updateTable로연결===link표 칸만(크기 그대로aislo-table-bridge.ts:29-38·TableEntity.ts:102-105) · 면적 [저장] 때 서버도 갈음(M02_Area_Table.py:42-84· 칸 수 바뀌면 크기도 새로 :75-79 → CAD 규칙과 다름) · 도면 저장 때withLinks는 남은 표만(AreaToDrawing.ts:322-335) · COPY 하면 연결 남음(TableEntity.ts:234-243) · EXPLODE 하면 선+글로 풀려 끊김(CAD/tools/modify/modify.helpers.ts:162-184). - 탭 생기면 깨질 자리: ① 놓을 장 정하는 길 없음 ②
nextId가 지금 장만 봐서 T번호 겹침 ③withLinks가 다른 장 표를 「지운 표」로 봄 ④ CAD 갱신은 실린 장만 ⑤ 서버refresh_drawing도도면.entities만 → 연결표 줄에장칸 + ①~⑤(AreaToDrawing.ts·M02_Area_Table.py·aislo-table-bridge.ts). 크기 중간.
4. 도면 → 엑셀 한 번 옮기기
- 표 엔티티: 쉬움 · 면적 시트 붙여넣기가 HTML
<table>(colspan · rowspan 병합 · 정렬 · 테두리) · TSV 받음(A00_Common/spreadsheet/spreadsheet_clipboard.ts:340-405· 붙이기 :463) → CAD 에서 고른 표를text/html+text/plain클립보드로(추정) · 병합 판정B07_DesignDetail/B07_DesignDetail_Engine_Frame_Export.py:81-140(table_parts) ·table-geometry.ts:58(cellOwners) · 칸 읽기 예B07_DesignDetail_Engine_Cad_Table.py:232-271. - 선 · 글로 그린 표: 범용 인식 코드 없음(
Engine_Cad_Table.py:274-292는 정해진 id 만) · 필요: 가로·세로 선 x·y 경계를 허용오차로 묶음 → 안쪽 선 빠진 곳 = 병합 → 글 basePoint 를 칸에(columnEdges·rowEdges·cellRect) · 어려움: 불러온 선은 PolyLine 자식 · 끊김 · 겹침 · 회전 · 축척 · TEXT 정렬점 무시(Frame_Import.py:120-135,171-175) · MTEXT 여러 줄 · SHX 폭발 글자는 선 · 「1,500」 표시 글 → 값. 크기: 표 엔티티 작음~중간 · 선+글 큼.
5. 도면 불러오기 오류(중력식사방댐)
- 파일:
storage/1/10/templates/structure/item1_2.json(15,371,412 B · 10-08 10:53 · 열 item1_2 · 도번 SD-000010 · 판 1 · 연결표 빔) · 같은 층구조물집계표조합.jsonSP10-000010 사방댐/비투과식/중력식사방댐줄 → item1_2 · 사용자 10 = 엄상준(docs/raw/조사/2026-10-06_54-44_새프로젝트.md:18) · uuid5 이름공간이Frame_Import와 맞음 → 📂 DXF/DWG 불러오기로 만든 도면. - 실측(저장본엔 「작은 호 반전」 확인 못 함): 맨 위 9,319 = Line 7,146 · PolyLine 1,352(자식 선 22,058) · Point 413 · Text 408 · Arc · Circle 0 · JSON 정상(NaN · null 없음 · 모든 type 받음) · 호는 불러올 때 이미 선분 · 호 모양 사슬 213 — 열림 148(90° 이하 135 · 180° 이하 3 · 270° 이하 10 = 3마디 U자) · 닫힘 65 · 작은 호가 큰 호로 뒤집힌 꼴 0 · 정상 호 예 중심(−2077.82, 517.78) r 3.978 30마디 · (−2079.45, 517.50) r 2.317 39마디 · (−2081.04, 517.10) r 0.742 21마디.
- 눈에 띈 것: 불러온 그대로인 PolyLine 107 이 도각(0
841) 밖 x −2158.6−2078.2 · y 516.4~528.4(화면맞춤이 도각 기준이라 안 보임) · 나머지 9,212 는 CAD 가 새로 만든 것(uuid4 · 색 #fff · 층 b08-frame) — MOVE/SCALE 가 clone 으로 갈아 끼우며 DXF 색 · 층 버림(CAD/tools/move-tool.ts:214,252-259·CAD/entities/LineEntity.ts:78-80). - 반전 날 수 있는 코드: 불러오기
B07_DesignDetail/B07_DesignDetail_Engine_Frame_Import.py— :150-156 LWPOLYLINEget_points("xy")· POLYLINElocation이 bulge 버림(호 → 직선) · OCS 좌표 그대로(압출 (0,0,−1)이면 x 뒤집혀 놓임 · 거울 블록을virtual_entities로 풀면 흔함 · 추정) · ARC/CIRCLE 은flattening이 WCS 로(:157-162) → 같은 블록 안 호와 폴리선이 어긋나 「호 반전」처럼 보일 수 있음(추정) · :171-175 TEXT OCS 그대로 · 정렬점 무시 · :185-193 INSERT 한 겹만(속 INSERT :182 버림) · 단위 변환 없음(:14) · ezdxf 1.4.4(requirements 버전 고정 없음). - CAD(Arc 있는 다른 도면):
CAD/entities/ArcEntity.ts:88-98mirror 가 축 각도 무시(세로축 대칭이면 호 뒤집힘) · :32-34 getAngleLine.slope(±π 모호 → TRIM/BREAK :186-212 추정) · :63-64endAngle || 2π(끝각 0 → 2π). - 내보내기:
B07_DesignDetail_Engine_Frame_Export.py:195-204add_arc가 counterClockwise 무시(시계방향 작은 호 → DXF 큰 호) ·CAD/drawControllers/svg.drawController.ts:181-195각 부호 안 뒤집음(화면판screenCanvas.drawController.ts:478-479은 뒤집음) → SVG/PNG 작은 호가 대칭된 큰 호(추정). - SVG 가져오기
CAD/helpers/convert-svg-path-to-line-segments.ts— :106-112 반지름 키운 뒤 :135-136 · 155-158 원래 rx·ry · :150 r < 0.25 면 NaN(호 사라짐) · :184 붙여 쓴 플래그(0110) 못 가름. - 고칠 자리:
Frame_Import._convert_entity한 곳 · 재사용 ezdxfezdxf.path.make_path(e).flattening(0.2)(bulge · OCS→WCS) · TEXTocs().to_wcs()·get_placement()· 위험: 저장본은 이미 선으로 펴지고 옮겨져 코드 고쳐도 이 파일 안 바뀜(원본으로 다시 불러와야) · 원본 DXF/DWG 저장소에 없음 · 15 MB · 선 약 3만이라 불러오기 감시 시계 15 s(cad_host.ts:148-149) 넘을 수 있음(추정). 크기: 불러오기 작음~중간 · Arc mirror / 내보내기 ccw 각각 작음.
6. 시험
resources/tester/cad/: geometry · table · grips · dxf-clip · block-library · origin-marker · theme-auto-color · random-uuid-polyfill(.test.ts).resources/tester/: test_b07_dxf_clip · test_b07_frame_export_table · helper_b07_table_geometry.cjs · test_m02_router_drawing · test_m02_drawing_card · test_m02_drawing_area · test_m02_area_to_drawing · test_m02_area_table · test_m02_area_panel · test_m02_area_marks · test_m02_structure*(8) · test_m02_template_layers · test_sheet_drawing_select · test_cad_rect_harvest.mjs ·ui_checks/43-6_도면표_선색 · 47-6_면적_도면패널 · 44-8_CAD_한글입력.- CAD 안:
CAD/entities/ArcEntity.test.ts·CAD/integration/aislo-table-bridge.test.ts·CAD/helpers/import-export-handlers/group-id-roundtrip.test.ts· 빈 곳: DXF 불러오기 ARC · bulge · OCS(압출 −Z) · 중첩 블록 시험 없음.
미결(조사자 제시)
- 탭을 CAD 안(큼) vs M02 부모(중간) · B07 에도.
- 여러 장 저장: 한 파일
장[](추정 권장) vs 장마다 파일 · 장 도번(예 SD-000010-2) ·{{도면번호}}. - 면적→도면 표 놓을 장 고르기 · 안 열린 장 표 갱신을 서버가.
- 도면→엑셀: 1단계(표 엔티티 · 클립보드) vs 선+글 인식까지 · 붙일 자리 새 시트 vs 고른 칸.
- 사방댐: 원본 파일 받아 재현 · 고친 뒤 다시 불러오기 · 도각 밖 107 지우기 · MOVE 때 색 · 층 사라지는 문제.