80 lines
2.2 KiB
Python
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
|