summaryrefslogtreecommitdiff
path: root/shapes.scad
diff options
context:
space:
mode:
Diffstat (limited to 'shapes.scad')
-rw-r--r--shapes.scad154
1 files changed, 154 insertions, 0 deletions
diff --git a/shapes.scad b/shapes.scad
new file mode 100644
index 0000000..e09279b
--- /dev/null
+++ b/shapes.scad
@@ -0,0 +1,154 @@
+/*
+ * OpenSCAD Shapes Library (www.openscad.at)
+ * Copyright (C) 2009 Catarina Mota <clifford@clifford.at>
+ *
+ * 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
+ *
+*/
+
+
+//box(width, height, depth);
+//roundedBox(width, height, depth, factor);
+//cone(height, radius);
+//oval(width, height, depth);
+//tube(height, radius, wall);
+//ovalTube(width, height, depth, wall);
+//hexagon(height, depth);
+//octagon(height, depth);
+//dodecagon(height, depth);
+//hexagram(height, depth);
+//rightTriangle(adjacent, opposite, depth);
+//equiTriangle(side, depth);
+//12ptStar(height, depth);
+
+//----------------------
+
+module box(w,h,d) {
+ scale ([w,h,d]) cube(1, true);
+}
+
+module roundedBox(w,h,d,f){
+ difference(){
+ box(w,h,d);
+ translate([-w/2,h/2,0]) cube(w/(f/2),true);
+ translate([w/2,h/2,0]) cube(w/(f/2),true);
+ translate([-w/2,-h/2,0]) cube(w/(f/2),true);
+ translate([w/2,-h/2,0]) cube(w/(f/2),true);
+ }
+ translate([-w/2+w/f,h/2-w/f,-d/2]) cylinder(d,w/f, w/f);
+ translate([w/2-w/f,h/2-w/f,-d/2]) cylinder(d,w/f, w/f);
+ translate([-w/2+w/f,-h/2+w/f,-d/2]) cylinder(d,w/f, w/f);
+ translate([w/2-w/f,-h/2+w/f,-d/2]) cylinder(d,w/f, w/f);
+}
+
+module cone(height, radius) {
+ cylinder(height, radius, 0);
+}
+
+module oval(w,h,d) {
+ scale ([w/100, h/100, 1]) cylinder(d, 50, 50);
+}
+
+module tube(height, radius, wall) {
+ difference(){
+ cylinder(height, radius, radius);
+ cylinder(height, radius-wall, radius-wall);
+ }
+}
+
+module ovalTube(w,h,d,wall) {
+ difference(){
+ scale ([w/100, h/100, 1]) cylinder(d, 50, 50);
+ scale ([w/100, h/100, 1]) cylinder(d, 50-wall, 50-wall);
+ }
+}
+
+module hexagon(height, depth) {
+ boxWidth=height/1.75;
+ union(){
+ box(boxWidth, height, depth);
+ rotate([0,0,60]) box(boxWidth, height, depth);
+ rotate([0,0,-60]) box(boxWidth, height, depth);
+ }
+}
+
+module octagon(height, depth) {
+ intersection(){
+ box(height, height, depth);
+ rotate([0,0,45]) box(height, height, depth);
+ }
+}
+
+module dodecagon(height, depth) {
+ intersection(){
+ hexagon(height, depth);
+ rotate([0,0,90]) hexagon(height, depth);
+ }
+}
+
+module hexagram(height, depth) {
+ boxWidth=height/1.75;
+ intersection(){
+ box(height, boxWidth, depth);
+ rotate([0,0,60]) box(height, boxWidth, depth);
+ }
+ intersection(){
+ box(height, boxWidth, depth);
+ rotate([0,0,-60]) box(height, boxWidth, depth);
+ }
+ intersection(){
+ rotate([0,0,60]) box(height, boxWidth, depth);
+ rotate([0,0,-60]) box(height, boxWidth, depth);
+ }
+}
+
+module rightTriangle(adjacent, opposite, depth) {
+ difference(){
+ translate([-adjacent/2,opposite/2,0]) box(adjacent, opposite, depth);
+ translate([-adjacent,0,0]){
+ rotate([0,0,atan(opposite/adjacent)]) dislocateBox(adjacent*2, opposite, depth);
+ }
+ }
+}
+
+module equiTriangle(side, depth) {
+ difference(){
+ translate([-side/2,side/2,0]) box(side, side, depth);
+ rotate([0,0,30]) dislocateBox(side*2, side, depth);
+ translate([-side,0,0]){
+ rotate([0,0,60]) dislocateBox(side*2, side, depth);
+ }
+ }
+}
+
+module 12ptStar(height, depth) {
+ starNum=3;
+ starAngle=360/starNum;
+ for (s=[1:starNum]){
+ rotate([0, 0, s*starAngle]) box(height, height, depth);
+ }
+}
+
+//-----------------------
+//MOVES THE ROTATION AXIS OF A BOX FROM ITS CENTER TO THE BOTTOM LEFT CORNER
+module dislocateBox(w,h,d){
+ translate([w/2,h,0]){
+ difference(){
+ box(w, h*2, d+1);
+ translate([-w,0,0]) box(w, h*2, d+1);
+ }
+ }
+}
+