-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathOrnithopter.scad
75 lines (69 loc) · 2.66 KB
/
Ornithopter.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
/*
* Copyright (C) 2013 Peter Withers
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
webbingThickness = 0.4;
wingSpan = 80;
fuselageLength = 80;
fuselageWidth = 5;
fuselageHeight = 40;
fingerThickness = 2;
axilDiameter = 1.2;
wingLength = (wingSpan - fuselageWidth) / 2;
module makeWing() {
translate([fuselageWidth,0,0]) {
cube([wingLength, fingerThickness, fingerThickness]);
cube([fingerThickness, fuselageLength, fingerThickness]);
translate([fingerThickness/2,fingerThickness,0])rotate([0,0,-45]) cube([fingerThickness, wingLength*1.2, fingerThickness/2]);
}
// make the loop
translate([wingLength*0.3,fingerThickness/2,fingerThickness+axilDiameter]){
//translate([0,(-fuselageHeight/2)+fingerThickness,0])
rotate([-90,0,0])difference(){
cylinder(h=fingerThickness,r=axilDiameter+fingerThickness,center=true);
cylinder(h=fingerThickness*2,r=axilDiameter,center=true);
}
}
}
module makeWebbing(){
intersection(){
translate([-fuselageLength,0,0]) cube([fuselageLength*2, fuselageLength, webbingThickness]);
union() {
hull() makeWing();
hull() scale([-1,1,1]) makeWing();
}
}
}
module makeFuselage(){
translate([0,fuselageLength/2,fuselageHeight/2]){
difference(){
cube([fuselageWidth, fuselageLength, fuselageHeight], center=true);
union()rotate([-90,0,0]){
// bore the hole for the axil
translate([0,(-fuselageHeight/2)+fingerThickness,0])cylinder(h=fuselageLength*2,r=axilDiameter,center=true);
// make an opening for the rubber band to be placed
rotate([0,90,0])translate([0,(-fuselageHeight/1.5)+fingerThickness,0])scale([1,(fuselageHeight/fuselageLength)*1.8,1])cylinder(h=fuselageWidth*2, r=fuselageLength/2.2,center=true);
}
}
}
}
module makeOrnithopter(){
makeFuselage();
makeWebbing();
makeWing();
scale([-1,1,1]) makeWing();
}
makeOrnithopter();