Files
cadSet/text-to-cad/models/fun/electronics_enclosure_base.py
2026-07-22 19:38:36 +08:00

80 lines
2.2 KiB
Python

from build123d import (
Align,
Box,
BuildPart,
BuildSketch,
Cylinder,
Location,
Locations,
Mode,
Plane,
RectangleRounded,
extrude,
)
OUTER_LENGTH = 100.0
OUTER_WIDTH = 70.0
OUTER_HEIGHT = 30.0
WALL_THICKNESS = 3.0
FLOOR_THICKNESS = 3.0
OUTER_CORNER_FILLET_RADIUS = 2.0
STANDOFF_DIAMETER = 10.0
STANDOFF_HEIGHT = 12.0
STANDOFF_HOLE_DIAMETER = 3.0
STANDOFF_HOLE_DEPTH = 8.0
STANDOFF_LOCATIONS = (
(-35.0, -25.0),
(-35.0, 25.0),
(35.0, -25.0),
(35.0, 25.0),
)
def gen_step():
"""Return a single solid open-top electronics enclosure base in millimeters."""
inner_length = OUTER_LENGTH - 2.0 * WALL_THICKNESS
inner_width = OUTER_WIDTH - 2.0 * WALL_THICKNESS
cavity_height = OUTER_HEIGHT - FLOOR_THICKNESS
standoff_top_z = FLOOR_THICKNESS + STANDOFF_HEIGHT
with BuildPart() as enclosure:
with BuildSketch(Plane.XY):
RectangleRounded(
OUTER_LENGTH,
OUTER_WIDTH,
OUTER_CORNER_FILLET_RADIUS,
align=(Align.CENTER, Align.CENTER),
)
extrude(amount=OUTER_HEIGHT)
with Locations(Location((0.0, 0.0, FLOOR_THICKNESS))):
Box(
inner_length,
inner_width,
cavity_height,
align=(Align.CENTER, Align.CENTER, Align.MIN),
mode=Mode.SUBTRACT,
)
for x_pos, y_pos in STANDOFF_LOCATIONS:
with Locations(Location((x_pos, y_pos, FLOOR_THICKNESS))):
Cylinder(
radius=STANDOFF_DIAMETER / 2.0,
height=STANDOFF_HEIGHT,
align=(Align.CENTER, Align.CENTER, Align.MIN),
mode=Mode.ADD,
)
with Locations(Location((x_pos, y_pos, standoff_top_z))):
Cylinder(
radius=STANDOFF_HOLE_DIAMETER / 2.0,
height=STANDOFF_HOLE_DEPTH,
align=(Align.CENTER, Align.CENTER, Align.MAX),
mode=Mode.SUBTRACT,
)
part = enclosure.part
part.label = "electronics_enclosure_base"
return part