feat(arch): SECTION 25 opens - walls, openings, stairs and exterior chains as tools

engineering/arch/draw.py is the only module of the track that touches a
backend. It draws through draw_prims(role_layer=ARCH_ROLE_LAYER) and the
generic contract members, so it runs on both engines as written, and it writes
the plan onto the drawing: each element's ACADMCP_ARCH record on one of its own
entities (a wall's first face line, a door's leaf, a window's frame, a stair's
first riser) and, beside it under ACADMCP_ARCH_H, the handles that element
owns. read_plan reads the records back and never modifies the drawing.

arch_wall computes the whole network before and after the new walls and
redraws only the drawn walls whose outline changes - erasing exactly the
entities they own - and says which under redrawn. arch_opening hosts a door or
a window in a drawn wall found by id and redraws that wall cut; its tag
defaults to the next D1/W1 (K1/P1 in Turkish). A new wall that would leave a
drawn opening uncuttable, and an opening that runs into a junction, are refused
before anything is erased. arch_stair reports the Blondel value; it does not
enforce it.

exterior_chains gives each side up to three rows, nearest first: every jamb in
that facade, both faces of every wall meeting it, and the overall - from the
wall engine's own faces. A row that would only restate a farther one is not
emitted (ISO 129-1: each measurement once). The 10 mm / 8 mm row spacing is a
declared drafting default times the plot scale, not a standard value.

The arch tag is ranked after mech so the four tools file under a new
architecture group; alias records carry WALLADD/MLINE, DOORADD/WINDOWADD and
STAIRADD with English and Turkish shop words. Inventory regenerated; README
snapshot 233 tools (228 advertised) in 26 groups; registry snapshot
architecture: 4.

No new ActiveX member is called. Measured on AutoCAD 2026 in a scratch
document through ComBackend: shell + teed partition, D1 + W1, a straight 17-riser stair
and the bottom chains gave the same 20 wall LINEs (identical endpoints),
9 poche HATCHes, 1+1 door, 4 window lines, 11 dimensions and a read_plan
round trip as the headless engine.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FKFStjEFzpGyLq5bMpWxTd
This commit is contained in:
Umut CAN
2026-09-23 23:00:05 +03:00
co-authored by Claude Opus 5.5
parent b68fe7ef66
commit cd1ae3529c
12 changed files with 1511 additions and 8 deletions
+74
View File
@@ -2230,6 +2230,80 @@ TOOL_ALIASES: dict[str, ToolAliases] = {
"punta deligi",
),
),
# ── Architecture (SECTION 25, track F group W) ──────────────────────────
"arch_wall": ToolAliases(
acad=("WALLADD", "MLINE"),
synonyms=(
"draw a wall",
"wall with a thickness",
"exterior wall",
"partition wall",
"floor plan walls",
"clean wall corners",
"t junction of walls",
"wall poche",
"duvar",
"duvar çiz",
"duvar ciz",
"bölme duvar",
"bolme duvar",
"kat planı",
"kat plani",
),
),
"arch_opening": ToolAliases(
acad=("DOORADD", "WINDOWADD"),
synonyms=(
"add a door",
"door in a wall",
"door swing",
"add a window",
"window in a wall",
"cut an opening in the wall",
"kapı",
"kapi",
"kapı ekle",
"pencere",
"pencere ekle",
"doğrama",
"dograma",
),
),
"arch_stair": ToolAliases(
acad=("STAIRADD",),
synonyms=(
"draw a stair",
"staircase",
"flight of stairs",
"l-shaped stair",
"u-shaped stair",
"walking line",
"blondel rule",
"risers and treads",
"merdiven",
"merdiven çiz",
"merdiven ciz",
"basamak",
"rıht",
"riht",
),
),
"arch_dimension_chains": ToolAliases(
acad=(),
synonyms=(
"dimension the facade",
"exterior dimensions",
"dimension chains",
"overall building dimensions",
"opening dimensions on the plan",
"ölçülendir",
"olculendir plan",
"dış ölçü",
"dis olcu",
"aks ölçüsü",
"aks olcusu",
),
),
}