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

South Wall Left Column

v1 Gemini approved

Create a full-height SIP panel column, 300x100x2310mm (100mm OSB/EPS). Cut a 45mm deep routed channel on the bottom face to accept the base plate spline. Cut 22.5mm deep routed channels on the right face to form a timber spline joint with the window header and sill.

Dependencies

base_plate_south_left.base_spline

Interfaces Provided

side_spline_right (spline) top_support (face)
◉
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"}
◉
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 (536 tokens)
◆
south_wall_left_col_v1.py · 57 lines
import FreeCAD
import Part
import math
from FreeCAD import Vector, Placement, Rotation

# === PARAMETERS ===
LENGTH = 300
WIDTH = 100
HEIGHT = 2310

OSB_THICKNESS = 15
CORE_WIDTH = WIDTH - (2 * OSB_THICKNESS)  # 70mm core

BOTTOM_GROOVE_DEPTH = 45
RIGHT_GROOVE_DEPTH = 22.5

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

# === BUILD GEOMETRY ===
# Base SIP column
base = Part.makeBox(LENGTH, WIDTH, HEIGHT)

# Bottom groove for base plate spline
# Removes the EPS core from the bottom face, 45mm deep, across the full length
bottom_groove = Part.makeBox(
    LENGTH, 
    CORE_WIDTH, 
    BOTTOM_GROOVE_DEPTH, 
    Vector(0, OSB_THICKNESS, 0)
)

# Right face groove for timber spline (mating with window header and sill)
# Removes the EPS core from the right face, 22.5mm deep, across the full height
right_groove = Part.makeBox(
    RIGHT_GROOVE_DEPTH, 
    CORE_WIDTH, 
    HEIGHT, 
    Vector(LENGTH - RIGHT_GROOVE_DEPTH, OSB_THICKNESS, 0)
)

# Apply boolean cuts to route out the channels
result = base.cut(bottom_groove)
result = result.cut(right_groove)

# Clean up internal splitter faces from CSG operations
result = result.removeSplitter()

# === ADD TO DOCUMENT ===
# Add as a Part::Feature (direct modeling approach, naming it "Body" for export)
feature = doc.addObject("Part::Feature", "Body")
feature.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.985