소스 검색

added revolver mount/stand

Thomas Buck 6 년 전
부모
커밋
48e312b6a4
3개의 변경된 파일22510개의 추가작업 그리고 0개의 파일을 삭제
  1. 132
    0
      revolver-mount/revolver-mount.scad
  2. 22318
    0
      revolver-mount/revolver-mount.stl
  3. 60
    0
      revolver-mount/rounded.scad

+ 132
- 0
revolver-mount/revolver-mount.scad 파일 보기

@@ -0,0 +1,132 @@
1
+include <rounded.scad>;
2
+
3
+handle_width = 32;
4
+handle_depth = 31;
5
+handle_height = 20;
6
+handle_wall = 3;
7
+handle_off = 5;
8
+
9
+// distance between table and bottom of barell
10
+mount_off_bottom = 82;
11
+
12
+// distance between center of handle and center of barell mount
13
+mount_off_handle = 141;
14
+
15
+mount_post_dia = 15;
16
+mount_post_off = 5;
17
+mount_post_height_remove = 10;
18
+
19
+mount_grip_width = 10;
20
+mount_grip_depth = 9;
21
+mount_grip_height = 6;
22
+mount_grip_wall = 2;
23
+
24
+ammo_dia = 10.5;
25
+ammo_height = 10;
26
+ammo_dist = 5;
27
+ammo_box_wall = 2;
28
+
29
+ammo_count_width = 7;
30
+ammo_count_depth = 3;
31
+
32
+ammo_box_width = ammo_count_width * (ammo_dia + ammo_dist);
33
+ammo_box_depth = ammo_count_depth * (ammo_dia + ammo_dist);
34
+
35
+base_depth = 50;
36
+base_height = 2;
37
+
38
+base_fillet = (base_height / 2) - 0.01;
39
+handle_fillet = (handle_wall / 2) - 0.01;
40
+ammo_box_fillet = (ammo_box_wall / 2) - 0.01;
41
+
42
+handle_center = handle_off + handle_wall + (handle_width / 2);
43
+base_width = handle_center + mount_off_handle + (mount_post_dia / 2) + mount_post_off;
44
+
45
+$fn = 30;
46
+
47
+module ammo() {
48
+    difference() {
49
+        rounded_cube(ammo_box_width,
50
+                ammo_box_depth,
51
+                ammo_box_wall + ammo_height,
52
+                rx=ammo_box_fillet, ry=ammo_box_fillet,
53
+                rz=ammo_box_fillet,
54
+                noback=false, nobottom=true, notop=true);
55
+        
56
+        translate([(ammo_dia + ammo_dist) / 2,
57
+                (ammo_dia + ammo_dist) / 2,
58
+                ammo_box_wall])
59
+        for (y = [0 : ammo_count_depth - 1]) {
60
+            for (x = [0 : ammo_count_width - 1]) {
61
+                translate([x * (ammo_dia + ammo_dist),
62
+                        y * (ammo_dia + ammo_dist),
63
+                        0])
64
+                cylinder(d = ammo_dia, h = ammo_height + 1);
65
+            }
66
+        }
67
+    }
68
+}
69
+
70
+module mount() {
71
+    // base plate
72
+    color("blue")
73
+    rounded_cube(base_width, base_depth, base_height,
74
+            rx=base_fillet, ry=base_fillet, rz=base_fillet,
75
+            noback=false, nobottom=true, notop=true);
76
+    
77
+    // handle holder
78
+    color("green")
79
+    translate([handle_off,
80
+            (base_depth - handle_depth) / 2 - handle_wall,
81
+            base_height])
82
+    difference() {
83
+        rounded_cube(handle_width + (2 * handle_wall),
84
+                handle_depth + (2 * handle_wall),
85
+                handle_height,
86
+                rx=handle_fillet, ry=handle_fillet,
87
+                rz=handle_fillet,
88
+                noback=false, nobottom=true, notop=true);
89
+        
90
+        translate([handle_wall, handle_wall, 0])
91
+        rounded_cube(handle_width, handle_depth,
92
+                handle_height + 1,
93
+                rx=handle_fillet, ry=handle_fillet,
94
+                rz=handle_fillet,
95
+                noback=false, nobottom=true, notop=true);
96
+    }
97
+    
98
+    // front holder
99
+    color("yellow")
100
+    translate([handle_center + mount_off_handle,
101
+            base_depth / 2,
102
+            base_height])
103
+    difference() {
104
+        hull() {
105
+            cylinder(d = mount_post_dia,
106
+                    h = mount_off_bottom
107
+                        - mount_post_height_remove);
108
+            
109
+            translate([-mount_grip_width / 2,
110
+                    -mount_grip_depth / 2 - mount_grip_wall,
111
+                    mount_off_bottom])
112
+            cube([mount_grip_width,
113
+                    mount_grip_depth + (2 * mount_grip_wall),
114
+                    mount_grip_height]);
115
+        }
116
+        
117
+        translate([-mount_grip_width / 2 - 1,
118
+                -mount_grip_depth / 2,
119
+                mount_off_bottom])
120
+        cube([mount_grip_width + 2,
121
+                mount_grip_depth,
122
+                mount_grip_height + 1]);
123
+    }
124
+    
125
+    color("red")
126
+    translate([2 * handle_center, (base_depth - ammo_box_depth) / 2, base_height - ammo_box_wall])
127
+    ammo();
128
+}
129
+
130
+mount();
131
+
132
+//ammo();

+ 22318
- 0
revolver-mount/revolver-mount.stl
파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
파일 보기


+ 60
- 0
revolver-mount/rounded.scad 파일 보기

@@ -0,0 +1,60 @@
1
+
2
+
3
+module rounded_cube(x, y, z, rx=fillet, ry=fillet, rz=fillet, noback=true, nobottom=false, notop=false) {
4
+    $fs = 0.15;
5
+    union() {
6
+        
7
+        if (rx == ry && ry == rz) {
8
+             minkowski() {
9
+                translate([rx, rx, rx])cube([x-rx*2, y-rx*2, z-rx*2]);                
10
+                sphere(r = rx);
11
+            }           
12
+        } else {
13
+            minkowski() {
14
+                translate([rz+ry, rz+rx, rz+ry])cube([x-rz*2-ry*2, y-rz*2-rx*2, z-rx*2-ry*2]);
15
+                cylinder(r = rz, h = 0.01);
16
+                rotate ([0, 90, 0]) cylinder(r = rx, h = 0.01);
17
+                rotate ([90, 0, 0]) cylinder(r = ry, h = 0.01);
18
+            }
19
+        }
20
+        
21
+        if (noback) {
22
+            minkowski() {
23
+                translate([ry, y/2, ry])cube([x-ry*2, y/2, z-ry*2]);
24
+                rotate ([90, 0, 0]) cylinder(r = ry, h = 0.01);
25
+            }
26
+        }
27
+        
28
+        if (nobottom) {
29
+            minkowski() {
30
+                translate([rz, rz, 0])cube([x-rz*2, y-rz*2, z/2]);
31
+                rotate ([0, 0, 0]) cylinder(r = rz, h = 0.01);
32
+            }
33
+        }
34
+        
35
+        if (notop) {
36
+            minkowski() {
37
+                translate([rz, rz, z/2])cube([x-rz*2, y-rz*2, z/2]);
38
+                rotate ([0, 0, 0]) cylinder(r = rz, h = 0.01);
39
+            }
40
+        }
41
+    }
42
+    
43
+}
44
+
45
+module rounded_cylinder(r, h, rrnd = fillet, rtop = true, rbottom = false, center=false) {
46
+    $fs = 0.15;    
47
+    
48
+    htr = center ? -h/2 : 0;
49
+    translate([0, 0, htr]) union() {        
50
+        minkowski() {
51
+            translate([0,0,rrnd]) cylinder(r=r-rrnd, h=h-rrnd*2);
52
+            sphere(rrnd);
53
+        }
54
+        
55
+        if (!rbottom) 
56
+                translate([0,0,h/2]) cylinder(r=r, h=h/2);
57
+        if (!rtop) 
58
+                translate([0,0,0]) cylinder(r=r, h=h/2);        
59
+    }   
60
+}

Loading…
취소
저장