Files
Aislo/docs/raw/요구_1008/조사_D_CAD.md
T
eomsangdonandClaude Opus 5.5 e25b9ddf2f chore(plan): 81~91장 요구 원문 · 조사 여덟 · 분석 정함(10-8 요구)
전역 공통 · M02 · 노면공 · B06 요구 30건을 11장으로 나눈 근거 묶음.
조사 A~H 는 파일:줄 근거 · 분석_정함 은 브레인 정함과 창 사이 약속.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LLCk2y5xE8YGVgjbTntWsY
2026-10-08 11:43:08 +09:00

11 KiB
Raw Blame History

조사 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-frame state.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 한 벌): B07 B07_DesignDetail_UI_Page.ts:106 · M02 M02_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 · 연결표 빔) · 같은 층 구조물집계표조합.json SP10-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 이 도각(0841) 밖 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 LWPOLYLINE get_points("xy") · POLYLINE location 이 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-98 mirror 가 축 각도 무시(세로축 대칭이면 호 뒤집힘) · :32-34 getAngle Line.slope(±π 모호 → TRIM/BREAK :186-212 추정) · :63-64 endAngle || 2π(끝각 0 → 2π).
  • 내보내기: B07_DesignDetail_Engine_Frame_Export.py:195-204 add_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 한 곳 · 재사용 ezdxf ezdxf.path.make_path(e).flattening(0.2)(bulge · OCS→WCS) · TEXT ocs().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) · 중첩 블록 시험 없음.

미결(조사자 제시)

  1. 탭을 CAD 안(큼) vs M02 부모(중간) · B07 에도.
  2. 여러 장 저장: 한 파일 장[](추정 권장) vs 장마다 파일 · 장 도번(예 SD-000010-2) · {{도면번호}}.
  3. 면적→도면 표 놓을 장 고르기 · 안 열린 장 표 갱신을 서버가.
  4. 도면→엑셀: 1단계(표 엔티티 · 클립보드) vs 선+글 인식까지 · 붙일 자리 새 시트 vs 고른 칸.
  5. 사방댐: 원본 파일 받아 재현 · 고친 뒤 다시 불러오기 · 도각 밖 107 지우기 · MOVE 때 색 · 층 사라지는 문제.