/* * OpenSCAD Shapes Library (www.openscad.org) * Copyright (C) 2009 Catarina Mota * Copyright (C) 2010 Elmo Mäntynen * * License: LGPL 2.1 or later */ // 2D Shapes //ellipse(width, height); //egg_outline(width=5, length=7); //ngon(sides, radius, center=false); // 3D Shapes //box(width, height, depth); //roundedBox(width, height, depth, factor); //cone(height, radius); //ellipticalCylinder(width, height, depth); //ellipsoid(width, height); //tube(height, radius, wall, center = false); //tube2(height, ID, OD, center = false); //ovalTube(width, height, depth, wall, center = false); //hexagon(height, depth); //octagon(height, depth); //dodecagon(height, depth); //hexagram(height, depth); //rightTriangle(adjacent, opposite, depth); //equiTriangle(side, depth); //12ptStar(height, depth); //---------------------- // size is a vector [w, h, d] module box(width, height, depth,) { cube([width, height, depth,], true); } // size is a vector [w, h, d] module roundedBox(width, height, depth, radius) { size=[width, height, depth,]; cube(size - [2*radius,0,0], true); cube(size - [0,2*radius,0], true); for (x = [radius-size[0]/2, -radius+size[0]/2], y = [radius-size[1]/2, -radius+size[1]/2]) { translate([x,y,0]) cylinder(r=radius, h=size[2], center=true); } } module cone(height, radius, center = false) { cylinder(height, radius, 0, center); } module ellipticalCylinder(w,h, height, center = false) { scale([1, h/w, 1]) cylinder(h=height, r=w, center=center); } module ellipse(w, h, center = false) { scale([1, h/w, 1]) circle(r=w/2, center=center); } module ellipsoid(w, h, center = false) { scale([1, h/w, 1]) sphere(r=w/2, center=center); } module egg_outline(width=5, length=7){ union(){ difference(){ ellipse(width, 2*length-width, center=true); translate([0, length/2, 0]) square(length, center=true); } circle(r=width/2, center=true); } } // wall is wall thickness module tube(height, radius, wall, center = false) { difference() { cylinder(h=height, r=radius, center=center); cylinder(h=height, r=radius-wall, center=center); } } // wall is wall thickness module tube2(height, ID, OD, center = false) { difference() { cylinder(h=height, r=OD/2, center=center); cylinder(h=height, r=ID/2, center=center); } } // wall is wall thickness module ovalTube(height, rx, ry, wall, center = false) { difference() { scale([1, ry/rx, 1]) cylinder(h=height, r=rx, center=center); scale([(rx-wall)/rx, (ry-wall)/rx, 1]) cylinder(h=height, r=rx, center=center); } } // The orientation might change with the implementation of circle... module ngon(sides, radius, center=false){ rotate([0, 0, 360/sides/2]) circle(r=radius, $fn=sides, center=center); } // size is the XY plane size, height in Z module hexagon(size, height) { boxWidth = size/1.75; for (r = [-60, 0, 60]) rotate([0,0,r]) cube([boxWidth, size, height], true); } // size is the XY plane size, height in Z module octagon(size, height) { intersection() { cube([size, size, height], true); rotate([0,0,45]) cube([size, size, height], true); } } // size is the XY plane size, height in Z module dodecagon(size, height) { intersection() { hexagon(size, height); rotate([0,0,90]) hexagon(size, height); } } // size is the XY plane size, height in Z module hexagram(size, height) { boxWidth=size/1.75; for (v = [[0,1],[0,-1],[1,-1]]) { intersection() { rotate([0,0,60*v[0]]) cube([size, boxWidth, height], true); rotate([0,0,60*v[1]]) cube([size, boxWidth, height], true); } } } module rightTriangle(adjacent, opposite, height) { difference() { translate([-adjacent/2,opposite/2,0]) cube([adjacent, opposite, height], true); translate([-adjacent,0,0]) { rotate([0,0,atan(opposite/adjacent)]) dislocateBox(adjacent*2, opposite, height+2); } } } module equiTriangle(side, height) { difference() { translate([-side/2,side/2,0]) cube([side, side, height], true); rotate([0,0,30]) dislocateBox(side*2, side, height); translate([-side,0,0]) { rotate([0,0,60]) dislocateBox(side*2, side, height); } } } module 12ptStar(size, height) { starNum = 3; starAngle = 360/starNum; for (s = [1:starNum]) { rotate([0, 0, s*starAngle]) cube([size, size, height], true); } } //----------------------- //MOVES THE ROTATION AXIS OF A BOX FROM ITS CENTER TO THE BOTTOM LEFT CORNER module dislocateBox(w, h, d) { translate([0,0,-d/2]) cube([w,h,d]); } //----------------------- // Tests //module test2D_ellipse(){ellipse(10, 5);} module test_ellipsoid(){ellipsoid(10, 5);} //module test2D_egg_outline(){egg_outline();}