← Test Lab — Gemini — 2026-05-15T12:44

East Wall Assembly

v1 Gemini approved

Create the east wall SIP assembly, 100x1800x2310mm. Route a 150mm circular vent cutout at Y=1000mm, Z=300mm. Provide internal face mount for the roof ledger.

Dependencies

north_wall_assembly.side_spline_right

Interfaces Provided

ledger_mount (face)
◉
Agent initialized (status: waiting_for_dependencies, action: check_dependencies)
◉
Provider: google | Profile: quality
◇
Received interface north_wall_assembly.ledger_mount: %{name: "ledger_mount", type: "face", value: %{}, agent_id: "north_wall_assembly"}
◇
Received interface north_wall_assembly.side_spline_right: %{name: "side_spline_right", type: "spline", value: %{}, agent_id: "north_wall_assembly"}
◉
All dependencies resolved, starting generation
◉
Generating v1
○
Calling Gemini API for code generation (gemini-3.1-pro-preview)...
◉
Generation token budget: max_tokens=12288, thinking_budget=0 (retry_count=0)
●
Received response (513 tokens)
◆
east_wall_assembly_v1.py · 49 lines
import FreeCAD
import Part
import math
from FreeCAD import Vector, Placement, Rotation

# Force load the PartDesign C-extension before use
FreeCAD.loadModule("PartDesign")
import PartDesign

# === PARAMETERS ===
THICKNESS_X = 100
WIDTH_Y = 1800
HEIGHT_Z = 2310

VENT_DIAMETER = 150
VENT_RADIUS = VENT_DIAMETER / 2.0
VENT_POS_Y = 1000
VENT_POS_Z = 300

# === DOCUMENT & BODY ===
doc = FreeCAD.ActiveDocument or FreeCAD.newDocument("EastWallSIP")
body = doc.addObject("PartDesign::Body", "Body")

# === GEOMETRY ===
# Main wall panel base
panel = doc.addObject("PartDesign::AdditiveBox", "WallPanel")
panel.Length = THICKNESS_X
panel.Width = WIDTH_Y
panel.Height = HEIGHT_Z
panel.Placement = Placement(Vector(0, 0, 0), Rotation())
body.addObject(panel)
doc.recompute()

# Circular vent cutout
vent = doc.addObject("PartDesign::SubtractiveCylinder", "VentCutout")
vent.Radius = VENT_RADIUS
# Extend the cylinder length to ensure a clean cut entirely through the wall
vent.Height = THICKNESS_X + 20

# Rotate the cylinder 90 degrees around the Y-axis so it points along the X-axis.
# We start it slightly before X=0 (-10mm) so it cuts cleanly through both faces.
vent.Placement = Placement(Vector(-10, VENT_POS_Y, VENT_POS_Z), Rotation(Vector(0, 1, 0), 90))
body.addObject(vent)
doc.recompute()

# === FINAL ===
doc.recompute()
if FreeCAD.GuiUp:
    FreeCAD.Gui.ActiveDocument.ActiveView.fitAll()
●
Executing in FreeCAD...
◉
StepAnalyzer failed: FreeCAD could not read STEP file: FreeCAD exception thrown (File to load not existing or not readable) — skipping
●
FreeCAD execution succeeded
●
Exported: model.stl
◉
Generation succeeded and component was auto-approved (v1)
◉
Provider updated to google / balanced
◉
Provider updated to google / balanced
◉
Provider updated to google / balanced
◉
Provider updated to google / balanced
◉
Provider updated to google / balanced
◉
Provider updated to google / balanced
◉
Provider updated to google / balanced
◉
Provider updated to google / balanced
v0.0.985