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

South Wall Window Sill

v1 Gemini approved

Create a SIP sill panel, 1200x100x855mm. Cut a 45mm deep routed channel on the bottom for the base plate. Cut 22.5mm deep routed channels on the left and right vertical edges to form timber spline joints with adjacent columns.

Dependencies

base_plate_south_left.base_spline south_wall_left_col.side_spline_right

Interfaces Provided

sill_top (face) side_spline_right (spline)
◉
Agent initialized (status: waiting_for_dependencies, action: check_dependencies)
◉
Provider: google | Profile: quality
◇
Received interface base_plate_south_left.base_spline: %{name: "base_spline", type: "spline", value: %{}, agent_id: "base_plate_south_left"}
◇
Received interface south_wall_left_col.side_spline_right: %{name: "side_spline_right", type: "spline", value: %{}, agent_id: "south_wall_left_col"}
◉
All dependencies resolved, starting generation
◉
Generating v1
◇
Received interface south_wall_left_col.top_support: %{name: "top_support", type: "face", value: %{}, agent_id: "south_wall_left_col"}
○
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 (539 tokens)
◆
south_wall_sill_v1.py · 62 lines
import FreeCAD
import Part
from FreeCAD import Vector

# === PARAMETRIC CONSTANTS ===
LENGTH = 1200.0
WIDTH = 100.0
HEIGHT = 855.0

OSB_THICKNESS = 11.0
BOTTOM_CHANNEL_DEPTH = 45.0
SIDE_CHANNEL_DEPTH = 22.5

# Calculate the inner core width (foam thickness)
CORE_WIDTH = WIDTH - (2 * OSB_THICKNESS)

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

# === SKETCHES & FEATURES ===
# Base solid representing the full un-routed SIP panel
panel = Part.makeBox(LENGTH, WIDTH, HEIGHT, Vector(0, 0, 0))

# Bottom channel cut (for base plate)
bottom_cut = Part.makeBox(
    LENGTH, 
    CORE_WIDTH, 
    BOTTOM_CHANNEL_DEPTH, 
    Vector(0, OSB_THICKNESS, 0)
)

# Left vertical channel cut (for timber spline)
left_cut = Part.makeBox(
    SIDE_CHANNEL_DEPTH, 
    CORE_WIDTH, 
    HEIGHT, 
    Vector(0, OSB_THICKNESS, 0)
)

# Right vertical channel cut (for timber spline)
right_cut = Part.makeBox(
    SIDE_CHANNEL_DEPTH, 
    CORE_WIDTH, 
    HEIGHT, 
    Vector(LENGTH - SIDE_CHANNEL_DEPTH, OSB_THICKNESS, 0)
)

# Combine all cuts into a single tool solid
tool_body = bottom_cut.fuse([left_cut, right_cut])

# Subtract the channels from the main panel
final_shape = panel.cut(tool_body)
final_shape = final_shape.removeSplitter()

# Create the final feature in the document
obj = doc.addObject("Part::Feature", "Body")
obj.Shape = final_shape

# === 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