Enclosure Generator
Generate a parametric electronics enclosure with a base and lid.
Parameters to extract from user request
- L, W, H: outer length, width, height in mm
- T: wall thickness (default 2mm)
- Lid type: "screw" (default), "press-fit" (lip only), or "snap-fit" (lip + ridge + snap tabs)
- Post radius: screw post outer radius (default 3mm) — only for screw lid
- Screw size: M3 by default (hole r=1.5mm, clearance r=1.75mm) — only for screw lid
Construction steps (use these exact dimensions)
Variables: L=length, W=width, H=height, T=wall_thickness, PR=post_radius (3mm)
1. Base body
create_body label="EnclosureBase"
2. Outer shell
create_sketch on XY, body_name="EnclosureBase": rectangle x=0, y=0, width=L, height=W
pad_sketch length=H, body_name="EnclosureBase"
3. Interior pocket (from the TOP face)
create_sketch on XY, offset=H, body_name="EnclosureBase": rectangle x=T, y=T, width=L-2T, height=W-2T
pocket_sketch length=H-T, body_name="EnclosureBase"
- This creates the hollow from z=T to z=H (floor thickness=T at bottom, open at top)
4–5. Screw posts and holes (SCREW LID ONLY — skip for snap-fit)
Post centers must be far enough from walls so they don't protrude:
- Center X positions: T+PR (left), L-T-PR (right)
- Center Y positions: T+PR (front), W-T-PR (back)
Step 4: Screw posts (start from top of floor, not bottom)
create_sketch on XY, offset=T, body_name="EnclosureBase": 4 circles at those positions, radius=PR
pad_sketch length=H-T, body_name="EnclosureBase"
Step 5: Screw holes in posts — MUST complete BEFORE moving to step 6!
create_sketch on XY, offset=H, body_name="EnclosureBase": 4 circles at same centers, radius=1.5 (M3)
pocket_sketch length=H-T, body_name="EnclosureBase"
- The holes go H-T deep (through the posts only, NOT through the floor)
6. Lid body
For SCREW lid:
create_body label="EnclosureLid"
create_sketch on XY, body_name="EnclosureLid": rectangle x=0, y=0, width=L, height=W
pad_sketch length=T, body_name="EnclosureLid"
For PRESS-FIT lid (build lip first, then slab on top so lip points downward):
create_body label="EnclosureLid"
create_sketch on XY, body_name="EnclosureLid": rectangle x=T+0.2, y=T+0.2, width=L-2T-0.4, height=W-2T-0.4
pad_sketch length=3 (3mm lip), body_name="EnclosureLid"
create_sketch on XY, offset=3, body_name="EnclosureLid": rectangle x=0, y=0, width=L, height=W
pad_sketch length=T, body_name="EnclosureLid"
- The 0.2mm gap on each side provides clearance for a friction fit.
For SNAP-FIT lid (same structure, but 1mm clearance so snap tabs have room):
create_body label="EnclosureLid"
create_sketch on XY, body_name="EnclosureLid": rectangle x=T+1, y=T+1, width=L-2T-2, height=W-2T-2
pad_sketch length=3 (3mm lip), body_name="EnclosureLid"
create_sketch on XY, offset=3, body_name="EnclosureLid": rectangle x=0, y=0, width=L, height=W
pad_sketch length=T, body_name="EnclosureLid"
- The 1mm gap on each side provides room for the snap tabs (0.5mm protrusion).
For both: Lip: z=0→3, Slab: z=3→3+T. After positioning, the lip hangs into the base.
7. Lid holes (SCREW LID ONLY — skip for press-fit and snap-fit)
create_sketch on XY, body_name="EnclosureLid": 4 circles at same post centers, radius=1.75
pocket_sketch through_all=true, body_name="EnclosureLid"
8. Position lid (BEFORE snap tabs so the shape is in the right place)
- Screw lid:
transform_object EnclosureLid, translate_z=H
- Press-fit lid:
transform_object EnclosureLid, translate_z=H-3
- Snap-fit lid:
transform_object EnclosureLid, translate_z=H-3
9. Snap-fit ridge and tabs (SNAP-FIT ONLY — skip for screw and press-fit)
Add a ridge on the base interior and snap tabs on the lid lip.
The snap tabs tool copies the lid's shape (including its position), so the lid MUST be positioned first in step 8.
create_inner_ridge body_name="EnclosureBase", length=L, width=W, wall_thickness=T, ridge_width=0.8, ridge_height=0.5, z_position=H-2
create_snap_tabs body_name="EnclosureLid", length=L, width=W, wall_thickness=T, clearance=1.0, lip_height=3
10. Hide sketches
Use execute_code to hide all sketches at once:
for obj in App.ActiveDocument.Objects:
if obj.TypeId == "Sketcher::SketchObject":
obj.Visibility = False
Critical rules
- ALWAYS pass explicit
length to pad_sketch — never rely on the 10mm default
- ALWAYS pass
body_name to pad_sketch and pocket_sketch — this ensures features go into the correct body
- Screw posts go INSIDE the enclosure at positions (T+PR, T+PR) from each corner — never at the wall edge
- All sketches on XY plane, attached to the correct body_name
- The base height is H, pocket depth is H-T, post height is H-T
- Use offset=H for the pocket sketch so it is placed at the top face (creates correct floor-at-bottom orientation)
- Complete ALL steps for the base (1–5) before starting the lid (step 6). Each create_sketch MUST be followed by its pad_sketch or pocket_sketch before creating the next sketch.
- Screw lid (default): do steps 4, 5, 7. Skip step 9. Use screw lid variant in step 6.
- Press-fit lid: skip steps 4, 5, 7, 9. Use press-fit/snap-fit lid variant in step 6 (lip only, no tabs).
- Snap-fit lid: skip steps 4, 5, 7. Use press-fit/snap-fit lid variant in step 6, then do step 9 (ridge + tabs).
- After completing ALL construction steps (including positioning), call the
report_skill_params tool (NOT execute_code) with params={"L": value, "W": value, "H": value, "T": value, "PR": value, "lid_type": "screw/press-fit/snap-fit"}.
1---2name: enclosure3description: Enclosure Generator4---5# Enclosure Generator67Generate a parametric electronics enclosure with a base and lid.89## Parameters to extract from user request10- **L, W, H**: outer length, width, height in mm11- **T**: wall thickness (default 2mm)12- **Lid type**: "screw" (default), "press-fit" (lip only), or "snap-fit" (lip + ridge + snap tabs)13- **Post radius**: screw post outer radius (default 3mm) — only for screw lid14- **Screw size**: M3 by default (hole r=1.5mm, clearance r=1.75mm) — only for screw lid1516## Construction steps (use these exact dimensions)1718Variables: L=length, W=width, H=height, T=wall_thickness, PR=post_radius (3mm)1920### 1. Base body21- `create_body` label="EnclosureBase"2223### 2. Outer shell24- `create_sketch` on XY, body_name="EnclosureBase": rectangle x=0, y=0, width=L, height=W25- `pad_sketch` length=**H**, body_name="EnclosureBase"2627### 3. Interior pocket (from the TOP face)28- `create_sketch` on XY, **offset=H**, body_name="EnclosureBase": rectangle x=T, y=T, width=L-2*T, height=W-2*T29- `pocket_sketch` length=**H-T**, body_name="EnclosureBase"30- This creates the hollow from z=T to z=H (floor thickness=T at bottom, open at top)3132### 4–5. Screw posts and holes (SCREW LID ONLY — skip for snap-fit)33Post centers must be far enough from walls so they don't protrude:34- Center X positions: T+PR (left), L-T-PR (right)35- Center Y positions: T+PR (front), W-T-PR (back)3637**Step 4: Screw posts** (start from top of floor, not bottom)38- `create_sketch` on XY, **offset=T**, body_name="EnclosureBase": 4 circles at those positions, radius=PR39- `pad_sketch` length=**H-T**, body_name="EnclosureBase"4041**Step 5: Screw holes in posts** — MUST complete BEFORE moving to step 6!42- `create_sketch` on XY, **offset=H**, body_name="EnclosureBase": 4 circles at same centers, radius=1.5 (M3)43- `pocket_sketch` length=**H-T**, body_name="EnclosureBase"44- The holes go H-T deep (through the posts only, NOT through the floor)4546### 6. Lid body4748**For SCREW lid:**49- `create_body` label="EnclosureLid"50- `create_sketch` on XY, body_name="EnclosureLid": rectangle x=0, y=0, width=L, height=W51- `pad_sketch` length=**T**, body_name="EnclosureLid"5253**For PRESS-FIT lid** (build lip first, then slab on top so lip points downward):54- `create_body` label="EnclosureLid"55- `create_sketch` on XY, body_name="EnclosureLid": rectangle x=T+0.2, y=T+0.2, width=L-2*T-0.4, height=W-2*T-0.456- `pad_sketch` length=**3** (3mm lip), body_name="EnclosureLid"57- `create_sketch` on XY, **offset=3**, body_name="EnclosureLid": rectangle x=0, y=0, width=L, height=W58- `pad_sketch` length=**T**, body_name="EnclosureLid"59- The 0.2mm gap on each side provides clearance for a friction fit.6061**For SNAP-FIT lid** (same structure, but 1mm clearance so snap tabs have room):62- `create_body` label="EnclosureLid"63- `create_sketch` on XY, body_name="EnclosureLid": rectangle x=T+1, y=T+1, width=L-2*T-2, height=W-2*T-264- `pad_sketch` length=**3** (3mm lip), body_name="EnclosureLid"65- `create_sketch` on XY, **offset=3**, body_name="EnclosureLid": rectangle x=0, y=0, width=L, height=W66- `pad_sketch` length=**T**, body_name="EnclosureLid"67- The 1mm gap on each side provides room for the snap tabs (0.5mm protrusion).6869For both: Lip: z=0→3, Slab: z=3→3+T. After positioning, the lip hangs into the base.7071### 7. Lid holes (SCREW LID ONLY — skip for press-fit and snap-fit)72- `create_sketch` on XY, body_name="EnclosureLid": 4 circles at same post centers, radius=1.7573- `pocket_sketch` through_all=true, body_name="EnclosureLid"7475### 8. Position lid (BEFORE snap tabs so the shape is in the right place)76- **Screw lid**: `transform_object` EnclosureLid, translate_z=**H**77- **Press-fit lid**: `transform_object` EnclosureLid, translate_z=**H-3**78- **Snap-fit lid**: `transform_object` EnclosureLid, translate_z=**H-3**7980### 9. Snap-fit ridge and tabs (SNAP-FIT ONLY — skip for screw and press-fit)81Add a ridge on the base interior and snap tabs on the lid lip.82The snap tabs tool copies the lid's shape (including its position), so the lid MUST be positioned first in step 8.83- `create_inner_ridge` body_name="EnclosureBase", length=L, width=W, wall_thickness=T, ridge_width=0.8, ridge_height=0.5, z_position=**H-2**84- `create_snap_tabs` body_name="EnclosureLid", length=L, width=W, wall_thickness=T, clearance=1.0, lip_height=38586### 10. Hide sketches87Use `execute_code` to hide all sketches at once:88```python89for obj in App.ActiveDocument.Objects:90 if obj.TypeId == "Sketcher::SketchObject":91 obj.Visibility = False92```9394## Critical rules95- ALWAYS pass explicit `length` to pad_sketch — never rely on the 10mm default96- ALWAYS pass `body_name` to pad_sketch and pocket_sketch — this ensures features go into the correct body97- Screw posts go INSIDE the enclosure at positions (T+PR, T+PR) from each corner — never at the wall edge98- All sketches on XY plane, attached to the correct body_name99- The base height is H, pocket depth is H-T, post height is H-T100- Use **offset=H** for the pocket sketch so it is placed at the top face (creates correct floor-at-bottom orientation)101- **Complete ALL steps for the base (1–5) before starting the lid (step 6)**. Each create_sketch MUST be followed by its pad_sketch or pocket_sketch before creating the next sketch.102- **Screw lid** (default): do steps 4, 5, 7. Skip step 9. Use screw lid variant in step 6.103- **Press-fit lid**: skip steps 4, 5, 7, 9. Use press-fit/snap-fit lid variant in step 6 (lip only, no tabs).104- **Snap-fit lid**: skip steps 4, 5, 7. Use press-fit/snap-fit lid variant in step 6, then do step 9 (ridge + tabs).105- After completing ALL construction steps (including positioning), call the `report_skill_params` **tool** (NOT execute_code) with params={"L": value, "W": value, "H": value, "T": value, "PR": value, "lid_type": "screw/press-fit/snap-fit"}.