diff --git a/B07_DesignDetail/B07_DesignDetail_Engine_Cad_Cover.py b/B07_DesignDetail/B07_DesignDetail_Engine_Cad_Cover.py index 3c54ffb6..1e7adad4 100644 --- a/B07_DesignDetail/B07_DesignDetail_Engine_Cad_Cover.py +++ b/B07_DesignDetail/B07_DesignDetail_Engine_Cad_Cover.py @@ -42,8 +42,8 @@ NOTE_LAYER_ID = "b08-cover-note" def build_cover_drawing(drawing_id: str, fields: dict[str, str] | None = None) -> dict[str, Any]: """표지 도면 문서. 템플릿이 없으면 빈 도면을 낸다. - `fields` 의 `{{키}}` 는 도각과 같은 규약으로 치환하고, 값이 없으면 빈칸으로 둔다 - (남의 값이 남지 않는다). 값 공급은 다음 판(메타 배선) 몫이다. + `{{키}}` 는 도각과 같은 규약으로 치환한다 — 값은 요청 문맥(`use_title_fields`)에서 + 오고, `fields` 로 준 것이 그 위에 얹힌다. 값이 없으면 빈칸(남의 값이 남지 않는다). """ template = _load_template(COVER_TEMPLATE) or {} entities: list[dict[str, Any]] = [] diff --git a/B07_DesignDetail/B07_DesignDetail_Engine_Template.py b/B07_DesignDetail/B07_DesignDetail_Engine_Template.py index b170ca98..df74288b 100644 --- a/B07_DesignDetail/B07_DesignDetail_Engine_Template.py +++ b/B07_DesignDetail/B07_DesignDetail_Engine_Template.py @@ -264,7 +264,13 @@ _PLACEHOLDER = re.compile(r"\{\{\s*([^}]+?)\s*\}\}") def _fill_placeholders(entities: list[dict[str, Any]], fields: dict[str, str]) -> None: - """도각 텍스트의 {{키}}를 값으로 바꾼다. 값이 없으면 빈칸 — 남의 값이 남지 않는다.""" + """도각 텍스트의 {{키}}를 값으로 바꾼다. 값이 없으면 빈칸 — 남의 값이 남지 않는다. + + 요청 문맥의 표제란 값(`use_title_fields`)이 바탕이고, 인자로 준 값(도면마다 다른 + 도면명 등)이 위에 얹힌다. 합치는 자리를 **치환 함수 한 곳**에 둬야 도각을 두르지 + 않는 표지처럼 다른 경로로 들어온 도면도 같은 값을 받는다(2026-09-02 표지 누락). + """ + fields = {**_title_fields.get(), **(fields or {})} for entity in entities: if entity.get("type") != "Text": continue @@ -317,6 +323,5 @@ def frame_entities( _transform_entity(entity, f"{drawing_id}:frame:{index}", scale, dx, dy) for index, entity in enumerate(template.get("entities", [])) ] - # 요청 문맥의 값이 바탕, 호출부가 준 값(도면명 등 도면마다 다른 것)이 위에 얹힌다. - _fill_placeholders(placed, {**_title_fields.get(), **(fields or {})}) + _fill_placeholders(placed, fields or {}) return placed