← Two story family home

First-Floor Structural Deck

v2 Gemini approved

SIP-200 inter-storey floor deck panel, 9000mm long (E-W, full building span) × 7000mm wide (N-S, full building depth) × 222mm thick (SIP-200 core with OSB skins). Bears on top plates of all four ground-floor walls (south, north, east, west). Contains sole plates routed on underside for first-floor walls' bearing. Sole plates 120mm deep × 180mm wide on all four edges for wall bearing. Interior cavity for services routing.

Dependencies

south_wall_s0.top_bearing_surface north_wall_s0.top_bearing_surface east_wall_s0.top_bearing_surface west_wall_s0.top_bearing_surface

Interfaces Provided

top_bearing_surface (SIP bearing face)
◉
Agent initialized (status: approved, action: noop)
◉
Provider: google | Profile: balanced
◉
User edited code — executing manually
◆
floor_deck_s1_v2_manual.py · 56 lines
import FreeCAD
import Part
from FreeCAD import Vector

from elixifree.domains.sip import FloorDeck

# === ANCHOR POINTS ===
ANCHOR_TOP_FACE = (4500.0, 3500.0, 222.0)
ANCHOR_BOTTOM_FACE = (4500.0, 3500.0, 0.0)
ANCHOR_FRONT_FACE = (4500.0, 0.0, 111.0)
ANCHOR_BACK_FACE = (4500.0, 7000.0, 111.0)
ANCHOR_LEFT_FACE = (0.0, 3500.0, 111.0)
ANCHOR_RIGHT_FACE = (9000.0, 3500.0, 111.0)
# === END ANCHOR POINTS ===

# === PARAMETERS ===
LENGTH    = 9000.0   # mm — span along X (E-W, full building span)
WIDTH     = 7000.0   # mm — depth along Y (N-S, full building depth)
THICKNESS = 222.0    # mm — SIP-200 total thickness (core + OSB skins)

# Interior services cavity (modest central channel, does not affect outer bbox)
CAVITY_WIDTH  = 400.0   # mm — channel width (Y direction)
CAVITY_DEPTH  = 60.0    # mm — channel depth into underside
CAVITY_MARGIN = 1000.0  # mm — inset from each end so it doesn't meet edge grooves
# === END PARAMETERS ===

# === BUILD BASE FLOOR DECK (SIP-200 footprint, full building extents) ===
result = FloorDeck(
    vertices=[[0, 0], [LENGTH, 0], [LENGTH, WIDTH], [0, WIDTH]],
    stock="SIP-200",
).build()

feature = result.add_to_doc("Body")
doc = FreeCAD.ActiveDocument

# ElixiFree gap: FloorDeck builder does not support an interior services cavity —
# cut it manually with a raw Part boolean. No perimeter bearing groove: per the
# SIP construction standard, wall bearing is handled by each wall's OWN bottom
# plate (see skills/sip_building.md "Wall Assembly") sitting on this deck's flat
# top face — the deck itself is a plain, solid slab with no underside cuts at
# the edges. A routed perimeter groove here would leave the deck's edge
# unsupported over the wall below, visible as a gap in the assembled view.
shape = feature.Shape

cavity = Part.makeBox(
    LENGTH - 2 * CAVITY_MARGIN,
    CAVITY_WIDTH,
    CAVITY_DEPTH,
    Vector(CAVITY_MARGIN, WIDTH / 2 - CAVITY_WIDTH / 2, 0)
)

feature.Shape = shape.cut(cavity)
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
◉
Manual execution succeeded and approval was preserved (v2)
◉
All components approved — triggering placement recomputation
◉
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
◉
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
◉
Provider updated to google / balanced
◉
Provider updated to google / balanced
◉
Provider updated to google / balanced
v0.0.985