import sand3d as s3d
OUTER_RADIUS = 25.0
INNER_RADIUS = 20.0
SOCKET_HEIGHT = 50.0
BASE_THICKNESS = 5.0
CLEARANCE_HOLE_DIAMETER = 4.5
FILLET_RADIUS = 2.0
NOTCH_WIDTH = 5.0
NOTCH_DEPTH = 3.0
MOUNT_TAB_WIDTH = 15.0
MOUNT_TAB_HEIGHT = 8.0
MOUNT_TAB_THICKNESS = 4.0
TAB_OVERLAP = 1.0
socket = s3d.cylinder(class="tok-string">"Socket", OUTER_RADIUS * 2, SOCKET_HEIGHT)
s3d.fillet(socket, FILLET_RADIUS, edges=class="tok-string">"top")
cavity = s3d.at(s3d.cylinder(class="tok-string">"Inner cavity cutter", INNER_RADIUS * 2, SOCKET_HEIGHT - BASE_THICKNESS), z=BASE_THICKNESS + BASE_THICKNESS / 2)
s3d.cut(socket, cavity)
side_hole = s3d.at(s3d.cylinder(class="tok-string">"Clearance hole cutter", CLEARANCE_HOLE_DIAMETER, SOCKET_HEIGHT + BASE_THICKNESS), x=OUTER_RADIUS, y=0, z=(SOCKET_HEIGHT - BASE_THICKNESS) / 2)
s3d.cut(socket, side_hole)
notch = s3d.at(s3d.box(class="tok-string">"Notch cutter", NOTCH_WIDTH, NOTCH_DEPTH, SOCKET_HEIGHT + BASE_THICKNESS), x=OUTER_RADIUS - NOTCH_WIDTH / 2, y=0, z=SOCKET_HEIGHT - BASE_THICKNESS / 2)
s3d.cut(socket, notch)
tab = s3d.at(s3d.box(class="tok-string">"Mounting tab", MOUNT_TAB_WIDTH, MOUNT_TAB_THICKNESS, MOUNT_TAB_HEIGHT), y=-(OUTER_RADIUS - TAB_OVERLAP) - MOUNT_TAB_THICKNESS / 2, z=SOCKET_HEIGHT / 2 + MOUNT_TAB_HEIGHT / 2)
s3d.join(socket, tab)