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

South Wall Window Header

v1 Gemini approved

Create a SIP window header panel, 1200x100x455mm. Cut 22.5mm deep routed channels on left and right faces for timber spline joints connecting to the left and mid columns.

Dependencies

south_wall_left_col.side_spline_right south_wall_mid_col.side_spline_left

Interfaces Provided

top_support (face)
Agent initialized (status: waiting_for_dependencies, action: check_dependencies)
Provider: google | Profile: quality
Received interface south_wall_left_col.side_spline_right: %{name: "side_spline_right", type: "spline", value: %{}, agent_id: "south_wall_left_col"}
Received interface south_wall_left_col.top_support: %{name: "top_support", type: "face", value: %{}, agent_id: "south_wall_left_col"}
Received interface south_wall_mid_col.hinge_jamb: %{name: "hinge_jamb", type: "face", value: %{}, agent_id: "south_wall_mid_col"}
Received interface south_wall_mid_col.side_spline_left: %{name: "side_spline_left", type: "spline", value: %{}, agent_id: "south_wall_mid_col"}
All dependencies resolved, starting generation
Generating v1
Received interface south_wall_mid_col.side_spline_right: %{name: "side_spline_right", type: "spline", value: %{}, agent_id: "south_wall_mid_col"}
Calling Gemini API for code generation (gemini-3.1-pro-preview)...
Received interface south_wall_mid_col.top_support: %{name: "top_support", type: "face", value: %{}, agent_id: "south_wall_mid_col"}
Generation token budget: max_tokens=12288, thinking_budget=0 (retry_count=0)
Received response (446 tokens)
south_wall_win_header_v1.py · 50 lines
import FreeCAD
import Part
from FreeCAD import Vector

# === PARAMETERS ===
LENGTH = 1200.0
WIDTH = 100.0
HEIGHT = 455.0

GROOVE_DEPTH = 22.5
GROOVE_WIDTH = 75.0  # Standard timber spline width for 100mm SIP panel

# === DOCUMENT & BODY ===
doc = FreeCAD.ActiveDocument or FreeCAD.newDocument("Model")

# === GEOMETRY ===
# Base panel
base = Part.makeBox(LENGTH, WIDTH, HEIGHT)

# Calculate centered Y position for the grooves
y_offset = (WIDTH - GROOVE_WIDTH) / 2.0

# Left groove (connects to left column)
left_groove = Part.makeBox(
    GROOVE_DEPTH, 
    GROOVE_WIDTH, 
    HEIGHT, 
    Vector(0, y_offset, 0)
)

# Right groove (connects to mid column)
right_groove = Part.makeBox(
    GROOVE_DEPTH, 
    GROOVE_WIDTH, 
    HEIGHT, 
    Vector(LENGTH - GROOVE_DEPTH, y_offset, 0)
)

# Apply boolean cuts
result = base.cut(left_groove)
result = result.cut(right_groove)

# === FINAL ===
# Add as Part::Feature named "Body" (crucial for export)
obj = doc.addObject("Part::Feature", "Body")
obj.Shape = result
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.542