auto: 2026-09-14 04:26 (ESD_LAPTOP)
This commit is contained in:
@@ -23,19 +23,21 @@ from typing import Any
|
||||
|
||||
from B07_DesignDetail.B07_DesignDetail_Engine_Cad import (
|
||||
DRAWING_FORMAT,
|
||||
_text_entity,
|
||||
TABLE_LABEL_COLOR,
|
||||
TABLE_LINE_COLOR,
|
||||
TABLE_VALUE_COLOR,
|
||||
_format,
|
||||
_layer,
|
||||
_text_entity,
|
||||
polyline_entity,
|
||||
table_entity,
|
||||
)
|
||||
from B07_DesignDetail.B07_DesignDetail_Engine_Cad_StandardFigure import (
|
||||
from B07_DesignDetail.B07_DesignDetail_Engine_Template import usable_bbox
|
||||
from B08_Quantity.B08_Quantity_Engine_StructureFigure import (
|
||||
SCALE_MM_PER_M as FIGURE_SCALE_MM_PER_M,
|
||||
)
|
||||
from B07_DesignDetail.B07_DesignDetail_Engine_Cad_StandardFigure import build_figure, figure_reason
|
||||
from B07_DesignDetail.B07_DesignDetail_Engine_Template import usable_bbox
|
||||
from B08_Quantity.B08_Quantity_Engine_StructureFigure import build_figure as figure_shapes
|
||||
from B08_Quantity.B08_Quantity_Engine_StructureFigure import figure_reason
|
||||
|
||||
STANDARD_LAYER_ID = "standard"
|
||||
|
||||
@@ -66,6 +68,44 @@ def _figure_height(sheet: dict[str, Any]) -> float:
|
||||
return (height_m + 0.95) * FIGURE_SCALE_MM_PER_M if height_m > 0 else 0.0
|
||||
|
||||
|
||||
def build_figure(
|
||||
drawing_id: str, sheet: dict[str, Any], origin: tuple[float, float]
|
||||
) -> tuple[list[dict[str, Any]], float]:
|
||||
"""B08 그림 모양 목록(m)을 CAD 엔티티(종이 ㎜)로. `(엔티티, 높이 ㎜)` — 못 그리면 `([], 0)`."""
|
||||
shapes = figure_shapes(sheet) or []
|
||||
ox, oy = origin
|
||||
scale = FIGURE_SCALE_MM_PER_M
|
||||
entities: list[dict[str, Any]] = []
|
||||
for index, shape in enumerate(shapes):
|
||||
x, y = (shape.get("at") or [0.0, 0.0])[:2]
|
||||
if shape["kind"] == "text":
|
||||
entities.append(
|
||||
_text_entity(
|
||||
f"{drawing_id}:fig:{index}",
|
||||
shape["text"],
|
||||
ox + x * scale,
|
||||
oy + y * scale,
|
||||
STANDARD_LAYER_ID,
|
||||
shape["size"] * scale,
|
||||
TABLE_LABEL_COLOR,
|
||||
shape["align"],
|
||||
)
|
||||
)
|
||||
continue
|
||||
poly = polyline_entity(
|
||||
f"{drawing_id}:fig:{index}",
|
||||
[(ox + px * scale, oy + py * scale) for px, py in shape["points"]],
|
||||
STANDARD_LAYER_ID,
|
||||
TABLE_LINE_COLOR if shape["role"] == "wall" else TABLE_VALUE_COLOR,
|
||||
dash=[4, 3] if shape["dash"] else None,
|
||||
width=2 if shape["role"] == "wall" else 1,
|
||||
)
|
||||
if poly is not None:
|
||||
entities.append(poly)
|
||||
ys = [point[1] for shape in shapes for point in shape.get("points") or [shape["at"]]]
|
||||
return entities, ((max(ys) - min(ys)) * scale if ys else 0.0)
|
||||
|
||||
|
||||
def _cell(
|
||||
text: str, color: str, *, align: str = "left", col_span: int = 1, bold: bool = False
|
||||
) -> dict[str, Any]:
|
||||
@@ -166,11 +206,7 @@ def build_standard_drawing(drawing_id: str, label: str, payload: dict[str, Any])
|
||||
figure, used = build_figure(
|
||||
drawing_id,
|
||||
sheet,
|
||||
STANDARD_LAYER_ID,
|
||||
(x0 + _FIGURE_INSET, top - _FIGURE_TOP_PAD - _figure_height(sheet)),
|
||||
TABLE_LINE_COLOR,
|
||||
TABLE_LABEL_COLOR,
|
||||
TABLE_VALUE_COLOR,
|
||||
)
|
||||
if figure:
|
||||
entities.extend(figure)
|
||||
|
||||
Reference in New Issue
Block a user