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

Base Plate South Right

v1 Gemini approved

Create a timber base plate, 200x100x45mm, C24 structural pine. Acts as anchor to slab and provides upward 45mm timber spline interface for the right front SIP column.

Interfaces Provided

base_spline (spline)
◉
Agent initialized (status: waiting_for_dependencies, action: check_dependencies, delay: 1000ms)
◉
Provider: google | Profile: quality
◉
Starting after stagger delay (action: check_dependencies)
◉
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 (1025 tokens)
◆
base_plate_south_right_v1.py · 74 lines
import FreeCAD
import Part
import math
from FreeCAD import Vector, Placement, Rotation

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

# === PARAMETRIC CONSTANTS ===
LENGTH = 200.0         # Total length in X
WIDTH = 100.0          # Total width in Y
HEIGHT = 45.0          # Total height in Z (acts as the 45mm spline interface)

BOLT_HOLE_DIA = 14.0   # M12 clearance hole
CBORE_DIA = 30.0       # Washer/counterbore diameter
CBORE_DEPTH = 15.0     # Counterbore depth from top
HOLE_OFFSET_X = 50.0   # Anchor bolt inset from ends
# === END PARAMETRIC CONSTANTS ===

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

# === FEATURES ===

# 1. Base timber block (entire block acts as the 45mm spline)
base_box = doc.addObject("PartDesign::AdditiveBox", "BaseBlock")
base_box.Length = LENGTH
base_box.Width = WIDTH
base_box.Height = HEIGHT
base_box.Placement = Placement(Vector(0, 0, 0), Rotation(0, 0, 0))
body.addObject(base_box)
doc.recompute()

# 2. Anchor hole 1 - Clearance
hole1_clearance = doc.addObject("PartDesign::SubtractiveCylinder", "Hole1Clearance")
hole1_clearance.Radius = BOLT_HOLE_DIA / 2.0
hole1_clearance.Height = HEIGHT
hole1_clearance.Placement = Placement(Vector(HOLE_OFFSET_X, WIDTH / 2.0, 0), Rotation(0, 0, 0))
body.addObject(hole1_clearance)
doc.recompute()

# 3. Anchor hole 1 - Counterbore
hole1_cbore = doc.addObject("PartDesign::SubtractiveCylinder", "Hole1CBore")
hole1_cbore.Radius = CBORE_DIA / 2.0
hole1_cbore.Height = CBORE_DEPTH + 1.0  # +1mm to ensure it cuts fully through top surface
hole1_cbore.Placement = Placement(Vector(HOLE_OFFSET_X, WIDTH / 2.0, HEIGHT - CBORE_DEPTH), Rotation(0, 0, 0))
body.addObject(hole1_cbore)
doc.recompute()

# 4. Anchor hole 2 - Clearance
hole2_clearance = doc.addObject("PartDesign::SubtractiveCylinder", "Hole2Clearance")
hole2_clearance.Radius = BOLT_HOLE_DIA / 2.0
hole2_clearance.Height = HEIGHT
hole2_clearance.Placement = Placement(Vector(LENGTH - HOLE_OFFSET_X, WIDTH / 2.0, 0), Rotation(0, 0, 0))
body.addObject(hole2_clearance)
doc.recompute()

# 5. Anchor hole 2 - Counterbore
hole2_cbore = doc.addObject("PartDesign::SubtractiveCylinder", "Hole2CBore")
hole2_cbore.Radius = CBORE_DIA / 2.0
hole2_cbore.Height = CBORE_DEPTH + 1.0
hole2_cbore.Placement = Placement(Vector(LENGTH - HOLE_OFFSET_X, WIDTH / 2.0, HEIGHT - CBORE_DEPTH), Rotation(0, 0, 0))
body.addObject(hole2_cbore)
doc.recompute()

# === INTERFACES PROVIDED ===
# {"name": "base_spline", "type": "mating_face", "value": {"width": WIDTH, "length": LENGTH, "height": HEIGHT}}

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