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

54 lines
1.8 KiB
Python

from build123d import Align, Box, BuildPart, Cylinder, Location, Locations, Mode
from benchmark_common import circular_edges, safe_chamfer
TOTAL_LENGTH = 120.0
LEFT_LENGTH = 30.0
MIDDLE_LENGTH = 60.0
RIGHT_LENGTH = 30.0
SMALL_DIAMETER = 20.0
MIDDLE_DIAMETER = 30.0
END_CHAMFER = 1.0
KEYWAY_X_START = 40.0
KEYWAY_X_END = 80.0
KEYWAY_WIDTH = 6.0
KEYWAY_DEPTH = 3.0
def _add_shaft_section(x_start: float, x_end: float, diameter: float):
with Locations(Location(((x_start + x_end) / 2.0, 0.0, 0.0))):
Cylinder(
radius=diameter / 2.0,
height=x_end - x_start,
rotation=(0.0, 90.0, 0.0),
align=(Align.CENTER, Align.CENTER, Align.CENTER),
mode=Mode.ADD,
)
def gen_step():
"""Return the stepped shaft with keyway benchmark model in millimeters."""
with BuildPart() as shaft:
_add_shaft_section(0.0, LEFT_LENGTH, SMALL_DIAMETER)
_add_shaft_section(LEFT_LENGTH, LEFT_LENGTH + MIDDLE_LENGTH, MIDDLE_DIAMETER)
_add_shaft_section(LEFT_LENGTH + MIDDLE_LENGTH, TOTAL_LENGTH, SMALL_DIAMETER)
with Locations(Location(((KEYWAY_X_START + KEYWAY_X_END) / 2.0, 0.0, MIDDLE_DIAMETER / 2.0 - KEYWAY_DEPTH))):
Box(
KEYWAY_X_END - KEYWAY_X_START,
KEYWAY_WIDTH,
KEYWAY_DEPTH + 2.0,
align=(Align.CENTER, Align.CENTER, Align.MIN),
mode=Mode.SUBTRACT,
)
part = shaft.part
end_edges = []
end_edges.extend(circular_edges(part, radius=SMALL_DIAMETER / 2.0, axis="x", coordinate=0.0))
end_edges.extend(circular_edges(part, radius=SMALL_DIAMETER / 2.0, axis="x", coordinate=TOTAL_LENGTH))
part = safe_chamfer(part, end_edges, length=END_CHAMFER)
part.label = "benchmark_04_stepped_shaft_keyway"
return part