-
Notifications
You must be signed in to change notification settings - Fork 4
/
picture-hook.scad
68 lines (53 loc) · 1.77 KB
/
picture-hook.scad
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
// Small picture frame hook
// Copyright (C) 2020 Jeremy Bennett <www.jeremybennett.com>
// Contributor: Jeremy Bennett <jeremy.bennett@embecosm.com>
// This file is licensed under the Creative Commons Attribution-ShareAlike 3.0
// Unported License. To view a copy of this license, visit
// http://creativecommons.org/licenses/by-sa/3.0/ or send a letter to Creative
// Commons, PO Box 1866, Mountain View, CA 94042, USA.
EPS = 0.1;
// Dimensions of a 3/8" no 3 wood screw
HEAD_DIAM = 0.199 * 25.4; // x
SHANK_DIAM = 0.099 * 25.4; // y
HEAD_ANGLE = 100.0; // B - not used explicitly
// The countersink height is calculated as:
//
// x - y
// ----------
// 2 tan(B/2)
CS_HEIGHT = 1.065656532;
CS_RIM_HEIGHT = 0.3;
// Clip dimensions
HOOK_H = 1.5;
HOOK_L = 8.0;
HOOK_MAJOR_D = 6.0;
HOOK_MINOR_D = 6.0;
// The hole for hanging
HOLE_DIAM = 3.0;
// Hole for a countersink screw
module cs_hole() {
translate(v = [0, 0, CS_HEIGHT])
cylinder(r = HEAD_DIAM / 2, h = CS_RIM_HEIGHT + EPS, center = false,
$fn = 45);
cylinder(r1 = SHANK_DIAM / 2, r2 = HEAD_DIAM / 2, h = CS_HEIGHT,
center = false, $fn = 45);
cylinder(r = SHANK_DIAM / 2, h = HOOK_H * 3, center = true, $fn = 45);
}
// plain clip
module clip() {
hull() {
translate(v = [-HOOK_L / 2, 0, 0])
cylinder(r = HOOK_MAJOR_D / 2, h = HOOK_H, center = false,
$fn = 90);
translate(v = [HOOK_L / 2, 0, 0])
cylinder(r = HOOK_MINOR_D / 2, h = HOOK_H, center = false,
$fn = 90);
}
}
difference() {
clip();
translate(v = [-HOOK_L / 2, 0, HOOK_H - CS_HEIGHT - CS_RIM_HEIGHT])
cs_hole();
translate(v = [HOOK_L / 2, 0, HOOK_H - CS_HEIGHT - CS_RIM_HEIGHT])
cylinder(r = HOLE_DIAM / 2, h = HOOK_H * 3, center = true, $fn = 45);
}