"""514-3 — B07 유역도 배경선(등고선 · 계류) = 폴리선 하나 + 꼭짓점 목록(자식 Line 없음). CAD 읽기(꼭짓점 → 선분)는 vitest `cad/polyline-points-514-3`. """ import io from ezdxf import recover from B07_DesignDetail.B07_DesignDetail_Engine_Cad_Basin import ( CONTOUR_LAYER_ID, ROUTE_LAYER_ID, STREAM_LAYER_ID, build_watershed_drawing, ) from B07_DesignDetail.B07_DesignDetail_Engine_Frame_Export import drawing_to_dxf ROUTE = [(0.0, 0.0), (300.0, 0.0)] CONTOUR = [(0.0, 50.0), (100.0, 80.0), (200.0, 40.0), (300.0, 90.0)] STREAM = [(50.0, -100.0), (60.0, 100.0)] def _drawing() -> dict: return build_watershed_drawing("plan_watershed", ROUTE, [], [CONTOUR], [STREAM]) def _on(drawing: dict, layer: str) -> list[dict]: return [e for e in drawing["entities"] if e.get("layerId") == layer] def test_background_is_point_list_polyline() -> None: drawing = _drawing() (contour,) = _on(drawing, CONTOUR_LAYER_ID) (stream,) = _on(drawing, STREAM_LAYER_ID) for entity in (contour, stream): assert entity["type"] == "PolyLine" and "children" not in entity assert all(set(p) == {"x", "y"} for p in entity["shapeData"]["points"]) assert len(contour["shapeData"]["points"]) == 4 assert len(stream["shapeData"]["points"]) == 2 # 주제선(노선)은 옛 꼴 그대로 (route,) = _on(drawing, ROUTE_LAYER_ID) assert len(route["children"]) == 1 def test_dxf_keeps_background_open() -> None: data, _skipped = drawing_to_dxf(_drawing()) doc, _auditor = recover.read(io.BytesIO(data)) polylines = [p for p in doc.modelspace().query("LWPOLYLINE") if p.dxf.layer.endswith("contour")] assert len(polylines) == 1 assert not polylines[0].closed and len(polylines[0]) == 4