-
Notifications
You must be signed in to change notification settings - Fork 1
/
quickrelease_clip.scad
96 lines (76 loc) · 1.68 KB
/
quickrelease_clip.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
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
93
94
95
96
//
// GoPro Quick Release Base Clip
//
// By Jay Abbott 2014
//
use <lib/simple_objects.scad>;
use <lib/quickrelease_base.scad>;
// Constants
// --------------------------------
$fn = 32;
baseThickness = 3;
clipInteriorWidth = 28.6;
clipInteriorHeight = 4.9;
clipLength = 25.6;
clipWallThicknessMin = 3.3;
clipWallThicknessMax = 3.95;
clipRoofTopHeight = 7.3;
clipRoofOverhang = 3.0;
clipHookBacklash = 1.4;
clipEaseInDistance = 3.8;
centreGuideWidth = 3.5;
centreGuideHeight = 2;
centreGuideLength = 34;
// Modules
// --------------------------------
module baseHalf()
{
intersection()
{
box([1000, 1000, 1000], cx = 1, cz = 0);
quickReleaseBase(baseThickness);
}
}
module centreGuide()
{
box([centreGuideLength / 2, centreGuideWidth, baseThickness + centreGuideHeight], cx = 1, cz = 0);
}
module clipRight()
{
translate([0, (clipInteriorWidth / 2) - clipRoofOverhang, 0])
difference()
{
linear_extrude(height = baseThickness + clipRoofTopHeight)
{
polygon
([
[0, 0],
[0, clipRoofOverhang + clipWallThicknessMax],
[-((clipLength / 2) - clipHookBacklash), clipRoofOverhang + clipWallThicknessMin],
[-(clipLength / 2), clipRoofOverhang],
[-((clipLength / 2) - clipEaseInDistance), 0],
]);
}
translate([0.5, -0.5, -0.5])
box([(clipLength / 2) + 1, clipRoofOverhang + 0.5, baseThickness + clipInteriorHeight + 0.5], cx = 1, cy = 0, cz = 0);
}
}
module clipLeft()
{
mirror([0, 1, 0])
clipRight();
}
module quickReleaseBaseClipHalf()
{
rotate([0, 90, 0])
union()
{
baseHalf();
centreGuide();
clipLeft();
clipRight();
}
}
// The Model
// --------------------------------
quickReleaseBaseClipHalf();