forked from bullestock/bigbro
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathpocket.py
92 lines (75 loc) · 2.87 KB
/
pocket.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#! /usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import division
import os
import sys
import re
# Assumes SolidPython is in site-packages or elsewhwere in sys.path
from solid import *
from solid.utils import *
SEGMENTS = 32
card_pocket_w = 54
card_pocket_h = 50
card_pocket_d = 1.5
fob_pocket_inside_dia = 35
fob_pocket_inside_h = 7
fob_pocket_inside_radius = 1
fob_pocket_thickness = 2
fob_pocket_displacement = 10
def fob_hole():
s = sphere(1)
cyl = cylinder(fob_pocket_inside_dia/2, fob_pocket_inside_h-2*fob_pocket_inside_radius)
rounded_cyl = minkowski()(cyl, s)
return rounded_cyl
def fob_pocket():
# outside rounding radius
r = fob_pocket_inside_radius+fob_pocket_thickness
s = sphere(r)
cyl = cylinder(fob_pocket_inside_dia/2,
fob_pocket_inside_h-2*fob_pocket_inside_radius)
return minkowski()(cyl, s)
def fob_cuts():
# remove top half of fob pocket
fob_cut1 = translate([-card_pocket_w/2,
-fob_pocket_inside_dia,
-(fob_pocket_inside_h*2+2*fob_pocket_thickness+2)/2])(
cube([card_pocket_w+2,
fob_pocket_inside_dia,
fob_pocket_inside_h*4]))
fob_cut2 = translate([-card_pocket_w/2-1, -card_pocket_h, -10])(
cube([card_pocket_w+2, card_pocket_h*2+2, 10]))
return fob_cut1+fob_cut2
def card_pocket():
return down(1)(back(1)(left(card_pocket_w/2)(cube([card_pocket_w,
card_pocket_h+1,
card_pocket_d+1]))))
def half_sphere(r):
return rotate([-90, 0, 0])(difference()(sphere(r),
down(r)(left(r)(cube([r*2,r*2,r*2])))))
def half_cylinder(r):
return rotate([-90, 0, 0])(difference()(cylinder(r,r),
down(r-1)(left(r)(cube([r*2,r*2,r*2])))))
def card_cover():
d = 3
r = 4
card_cover_w = card_pocket_w+2*d
card_cover_d = card_pocket_d+d
left_s = translate([card_cover_w/2-r, card_pocket_h, 0])(half_sphere(r))
right_s = translate([-(card_cover_w/2-r), card_pocket_h, 0])(half_sphere(r))
left_c = translate([card_cover_w/2-r, 0, 0])(half_cylinder(r))
right_c = translate([-(card_cover_w/2-r), 0, 0])(half_cylinder(r))
return hull()(left_c+right_c+left_s+right_s)
def assembly():
fp1 = fob_pocket()
fp2 = translate([0, fob_pocket_displacement, 0])(fp1)
fp = hull()(fp1+fp2)
fh1 = fob_hole()
fh2 = translate([0, fob_pocket_displacement, 0])(fh1)
fh = hull()(fh1+fh2)
fc = fob_cuts()
cp = card_pocket()
cc = card_cover()
return fp+cc-fh-cp-fc
if __name__ == '__main__':
a = assembly()
scad_render_to_file(a, file_header='$fn = %s;' % SEGMENTS, include_orig_code=False)