← Demo

Level 0 Interior Wall s0_p2402

v1 Gemini approved Generated with ElixiFree

Create Level 0 Interior Wall s0_p2402, 3808mm long x 122mm thick x 2700mm high. Openings: door 1000x2100mm at u=1250 sill=0.

Dependencies

s0_wall_e0.inner_face

Interfaces Provided

face (butt)
◉
Agent initialized (status: waiting_for_dependencies, action: check_dependencies)
◉
Provider: google | Profile: balanced
◉
Provider updated to google / balanced
◇
Received interface s0_wall_e0.top_face: %{name: "top_face", type: "bearing", value: %{}, agent_id: "s0_wall_e0"}
◇
Received interface s0_wall_e0.inner_face: %{name: "inner_face", type: "butt", value: %{}, agent_id: "s0_wall_e0"}
◉
All dependencies resolved, starting generation
◉
Refreshed placement from design spec (bbox %{"x" => 3808.0, "y" => 122.0, "z" => 2700.0})
◉
Generating v1
◉
[ElixiFree] active — code_module=elixifree.sip
◉
[ElixiFree] downgrading to gemini-3-flash-preview (builder API active)
○
Calling Gemini API for code generation (gemini-3-flash-preview)...
◉
Generation token budget: max_tokens=12288, thinking_budget=0 (retry_count=0)
●
Received response (1155 tokens)
◆
partition_s0_p2402_v1.py · 71 lines
import FreeCAD
import Part
import math
from FreeCAD import Vector, Placement, Rotation

# === ANCHOR POINTS ===
ANCHOR_TOP_FACE = (1904.0, 61.0, 2700.0)
ANCHOR_BOTTOM_FACE = (1904.0, 61.0, 0.0)
ANCHOR_FRONT_FACE = (1904.0, 0.0, 1350.0)
ANCHOR_BACK_FACE = (1904.0, 122.0, 1350.0)
ANCHOR_LEFT_FACE = (0.0, 61.0, 1350.0)
ANCHOR_RIGHT_FACE = (3808.0, 61.0, 1350.0)
# === END ANCHOR POINTS ===

# === PARAMETERS ===
# Required Bounding Box: 3808.0 x 122.0 x 2700.0 mm
SPAN = 3808.0
TOTAL_THICKNESS = 122.0
HEIGHT = 2700.0

# SIP Constants for SIP-100 (122mm total, 90mm core, 11mm skins x2 + 10mm gap/glue)
# Standard SIP-100 core for timber plates is 90mm
CORE_THICKNESS = 90.0
FACE_THICKNESS = (TOTAL_THICKNESS - CORE_THICKNESS) / 2.0  # 16.0mm per side

# Opening: door 1000x2100mm at u=1250 sill=0
DOOR_W = 1000.0
DOOR_H = 2100.0
DOOR_X = 1250.0

# Timber Plate Dimensions
PLATE_H = 45.0
# === END PARAMETERS ===

doc = FreeCAD.ActiveDocument or FreeCAD.newDocument("SIP_Partition")

# 1. Create the Main SIP Volume (X:0..SPAN, Y:0..TOTAL_THICKNESS, Z:0..HEIGHT)
wall_volume = Part.makeBox(SPAN, TOTAL_THICKNESS, HEIGHT)

# 2. Create the Door Cutout
door_cut = Part.makeBox(DOOR_W, TOTAL_THICKNESS, DOOR_H, Vector(DOOR_X, 0, 0))
wall_shape = wall_volume.cut(door_cut)

# 3. Create the Sole Plate (Bottom Plate)
# Depth matches CORE_THICKNESS, offset by FACE_THICKNESS to sit in channel
# We model it as a solid spanning the floor, excluding the door opening
sole_plate_left = Part.makeBox(DOOR_X, CORE_THICKNESS, PLATE_H, Vector(0, FACE_THICKNESS, 0))
sole_plate_right = Part.makeBox(SPAN - (DOOR_X + DOOR_W), CORE_THICKNESS, PLATE_H, Vector(DOOR_X + DOOR_W, FACE_THICKNESS, 0))

# 4. Create the Top Plate
# Sits at the top of the wall, inside the channel
top_plate = Part.makeBox(SPAN, CORE_THICKNESS, PLATE_H, Vector(0, FACE_THICKNESS, HEIGHT - PLATE_H))

# 5. Create Door Framing (King Studs and Header)
# King studs fill the full thickness (TOTAL_THICKNESS) for internal partition stability
stud_l = Part.makeBox(PLATE_H, TOTAL_THICKNESS, DOOR_H, Vector(DOOR_X, 0, 0))
stud_r = Part.makeBox(PLATE_H, TOTAL_THICKNESS, DOOR_H, Vector(DOOR_X + DOOR_W - PLATE_H, 0, 0))
header = Part.makeBox(DOOR_W - 2*PLATE_H, TOTAL_THICKNESS, PLATE_H, Vector(DOOR_X + PLATE_H, 0, DOOR_H - PLATE_H))

# 6. Final Assembly (Boolean Fusion)
# In direct modeling, we fuse all structural elements into one "Body"
final_shape = wall_shape.fuse([sole_plate_left, sole_plate_right, top_plate, stud_l, stud_r, header])
final_shape = final_shape.removeSplitter()

# 7. Add to Document
feature = doc.addObject("Part::Feature", "Body")
feature.Shape = final_shape

doc.recompute()
if FreeCAD.GuiUp:
    FreeCAD.Gui.ActiveDocument.ActiveView.fitAll()
◉
[ElixiFree] ✗ script does not import elixifree — treating as generation error to force retry with correction
✖
ElixiFree builder API was required but the generated script does not import it. Use ElixiFree or add `# ElixiFree gap: <reason>` before raw FreeCAD fallback.
◉
Retrying (attempt 2/4)
◉
[ElixiFree] routing correction through generation pipeline (not error_correction_system)
◉
Refreshed placement from design spec (bbox %{"x" => 3808.0, "y" => 122.0, "z" => 2700.0})
◉
Generating v1
◉
[ElixiFree] active — code_module=elixifree.sip
◉
[ElixiFree] downgrading to gemini-3-flash-preview (builder API active)
○
Calling Gemini API for code generation (gemini-3-flash-preview)...
◉
Generation token budget: max_tokens=14336, thinking_budget=0 (retry_count=1)
●
Received response (426 tokens)
◉
Normalized Wall builder dimensions/orientation to local-frame contract
◆
partition_s0_p2402_v1.py · 28 lines
# === ANCHOR POINTS ===
ANCHOR_TOP_FACE = (1904.0, 61.0, 2700.0)
ANCHOR_BOTTOM_FACE = (1904.0, 61.0, 0.0)
ANCHOR_FRONT_FACE = (1904.0, 0.0, 1350.0)
ANCHOR_BACK_FACE = (1904.0, 122.0, 1350.0)
ANCHOR_LEFT_FACE = (0.0, 61.0, 1350.0)
ANCHOR_RIGHT_FACE = (3808.0, 61.0, 1350.0)
# === END ANCHOR POINTS ===

# ElixiFree gap: Using elixifree.domains.sip.Wall for SIP-specific geometry as Board is for solid lumber.
# Bounding box compliance: X=3808.0, Y=122.0, Z=2700.0

from elixifree.domains.sip import Wall

# === PARAMETERS ===
SPAN = 3808.0
HEIGHT = 2700.0
STOCK = "SIP-100"  # Resulting thickness is 122mm
DOOR_W = 1000.0
DOOR_H = 2100.0
DOOR_U = 1250.0
# === END PARAMETERS ===

result = (Wall(span=3808.0, height=2700.0, stock=122.0)
          .opening(x=DOOR_U, z=0, width=DOOR_W, height=DOOR_H)
          .build())

result.add_to_doc("Body")
◉
[ElixiFree gap] Using elixifree.domains.sip.Wall for SIP-specific geometry as Board is for solid lumber.
◉
[ElixiFree] ✓ generated script uses elixifree imports
●
Executing in FreeCAD...
✖
FreeCAD execution failed: Traceback (most recent call last): File "/opt/freecad/bin/../Mod/CadClaude/cadclaude_worker.py", line 159, in _run_script exec(compile(script_source, "<cadclaude>", "exec"), {}) File "<cadclaude>", line 34, in <module> File "/opt/freecad/Mod/CadClaude/elixifree/builder.py", line 129, in build self._validate() File "/opt/freecad/Mod/CadClaude/elixifree/domains/sip.py", line 276, in _validate _resolve_stock(self._stock) # raises BuildError for unknown stock ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/opt/freecad/Mod/CadClaude/elixifree/domains/sip.py", line 75, in _resolve_stock raise BuildError( elixifree.builder.BuildError: Unknown SIP stock '122.0'. Valid values: ['SIP-100', 'SIP-120', 'SIP-150', 'SIP-200', 'SIP-250', 'SIP-300']
◉
Retrying (attempt 3/4)
●
Received corrected script, re-executing...
●
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
v0.0.985