openings.py draws what stands in the gap the wall engine cuts, from the same numbers - the wall axis, its face offsets and model.segment_of - so the symbol cannot drift off its gap. A door is drawn open at 90 degrees: its leaf as long as the opening is wide, square to the wall from the hinge on the swing-side face, and a quarter arc from the closed position to the open one. swing=in is the left of the axis (the inside of a CCW perimeter); hand names the hinge jamb seen from the swing side facing the wall. All four swing/hand pairs are tested against hand-computed hinges and arc angles. A window is a frame line on each face and two glazing lines at the thirds of the thickness. stairs.py draws every riser once as a line across its flight, the outline, a walking line up the middle with an open arrow at the top, and the language's 'up' word on the first tread at 2.5 mm times the plot scale. An L or a U turns on a square landing; its first flight carries (risers + 1) // 2 risers. The riser count and every dimension are refused by name before any geometry. blondel() reports 2R + G against 600-650 mm - the step-length rule attributed to Francois Blondel (1675), reported as a design rule and never as a building code: no national stair regulation is checked. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FKFStjEFzpGyLq5bMpWxTd
101 lines
2.0 KiB
Python
101 lines
2.0 KiB
Python
"""Architectural 2D: the plan model and the engine that draws it (track F).
|
|
|
|
Merge rule for the three track-F branches: the re-exports below are additive
|
|
and alphabetical - keep every side's names.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from .lang import LANGS, fmt_area_m2, fmt_number, tag_prefix, vocab
|
|
from .layers import ARCH_LAYER_DEFS, ARCH_LAYER_ROLES, ARCH_LAYERS, ARCH_ROLE_LAYER
|
|
from .materials import WALL_HATCH_TABLE, WALL_MATERIALS, wall_hatch
|
|
from .model import (
|
|
APP_ID,
|
|
KINDS,
|
|
Opening,
|
|
Room,
|
|
Stair,
|
|
Wall,
|
|
axis_segments,
|
|
decode,
|
|
encode,
|
|
from_payload,
|
|
opening_from_dict,
|
|
room_from_dict,
|
|
segment_of,
|
|
stair_from_dict,
|
|
to_payload,
|
|
to_values,
|
|
validate_openings,
|
|
wall_from_dict,
|
|
wall_length,
|
|
)
|
|
from .openings import opening_prims
|
|
from .stairs import (
|
|
ARROW_PAPER_MM,
|
|
BLONDEL_RANGE,
|
|
STAIR_KINDS,
|
|
TEXT_PAPER_MM,
|
|
TURNS,
|
|
blondel,
|
|
stair_prims,
|
|
)
|
|
from .walls import (
|
|
MIN_JOIN_ANGLE_DEG,
|
|
WallGeometry,
|
|
face_offsets,
|
|
room_segments,
|
|
wall_geometry,
|
|
wall_geometry_by_wall,
|
|
wall_segments,
|
|
)
|
|
|
|
__all__ = [
|
|
"APP_ID",
|
|
"ARCH_LAYERS",
|
|
"ARCH_LAYER_DEFS",
|
|
"ARCH_LAYER_ROLES",
|
|
"ARCH_ROLE_LAYER",
|
|
"ARROW_PAPER_MM",
|
|
"BLONDEL_RANGE",
|
|
"KINDS",
|
|
"LANGS",
|
|
"MIN_JOIN_ANGLE_DEG",
|
|
"Opening",
|
|
"Room",
|
|
"STAIR_KINDS",
|
|
"Stair",
|
|
"TEXT_PAPER_MM",
|
|
"TURNS",
|
|
"WALL_HATCH_TABLE",
|
|
"WALL_MATERIALS",
|
|
"Wall",
|
|
"WallGeometry",
|
|
"axis_segments",
|
|
"blondel",
|
|
"decode",
|
|
"encode",
|
|
"face_offsets",
|
|
"fmt_area_m2",
|
|
"fmt_number",
|
|
"from_payload",
|
|
"opening_from_dict",
|
|
"opening_prims",
|
|
"room_from_dict",
|
|
"room_segments",
|
|
"segment_of",
|
|
"stair_from_dict",
|
|
"stair_prims",
|
|
"tag_prefix",
|
|
"to_payload",
|
|
"to_values",
|
|
"validate_openings",
|
|
"vocab",
|
|
"wall_from_dict",
|
|
"wall_geometry",
|
|
"wall_geometry_by_wall",
|
|
"wall_hatch",
|
|
"wall_length",
|
|
"wall_segments",
|
|
]
|