Skip to content

Commit

Permalink
Initial revision, March 27th, 2013
Browse files Browse the repository at this point in the history
  • Loading branch information
castaway committed Mar 27, 2013
0 parents commit bb30f37
Show file tree
Hide file tree
Showing 6 changed files with 329 additions and 0 deletions.
7 changes: 7 additions & 0 deletions README.md
@@ -0,0 +1,7 @@
OpenSCAD files for snhack
=========================

tutorial/ contains a set of files which Jess created for an OpenSCAD tutorial, held at the hackspace on March 27th, 2013.

Feel free to add your own files, or make improvements to the tutorial!

91 changes: 91 additions & 0 deletions tutorial/#04-meeple.scad#
@@ -0,0 +1,91 @@
// 04 - A meeple

// A meeple is a person-shaped playing piece for board games

module body() {
union() {
// First we need a head:
translate([0,0,15])
sphere(r=5, $fn=50);

// and a body:
cylinder(h=15, r1=10, r2=1, $fn=50);
}
}

// Save it for later by making it a module.
// (we're not calling it yet so reloading makes it disappear)

// Let's display it for reference:
translate([0,0,7])
body();

// Create a leg, then attach a foot.

module leg() {
// A leg:
cylinder(h=7,r=3, $fn=50);

// Foot
difference() {
union() {
// First a cylinder along the X-axis
rotate(a=90,v=[0,1,0])
cylinder(h=5,r=3,$fn=50);
// Then round the end with a sphere:
translate([5,0,0])
sphere(r=3, $fn=50);
}

// Level off the bottom by subtracting a larger cube:
# translate([-5,-7,-14])
cube(size=14);
}
}
// Wrap it in a module so that we can create two easily
// Then duplicate either side of the Y axis:

2translate([0,3,0])
leg();
translate([0,-3,0])
leg();

// All we need now are arms, grey the legs for a moment using % (or just comment them out)
// The arms are more cylinders with spheres on each end:
/*
module arm() {
cylinder(h=6, r=2.5, $fn=50);
sphere(r=2.5,$fn=50);
translate([0,0,6])
sphere(r=2.5,$fn=50);
}
*/

// I want the the arm alongside the body:
// Angle the arm outwards.

// We want the top (end of arm) to be two thirds up the body cone
// height of body (7) + two thirds (10) - length of arm(6)
// For the distance along y (out alongside the cone), I just start guessing...
// Move this code into the arm module.
module arm() {
translate([0,8,11])
rotate(a=45,v=[1,0,0])
union() {
cylinder(h=6, r=2.5, $fn=50);
sphere(r=2.5,$fn=50);
translate([0,0,6])
sphere(r=2.5,$fn=50);
}
}

// Now we draw two, and just mirror the second one:
arm();
mirror([0,1,0])
arm();


// Tada!



40 changes: 40 additions & 0 deletions tutorial/01-introduction.scad
@@ -0,0 +1,40 @@

// 01 - Introduction

// This is a comment

i = 0; // This is a variable assignment and a comment

/*
This is a
multi-line
comment
*/

// Output a string and the value of i:
echo("The value of i is:");
echo(i);

// Hit F5 (or Design -> Compile) to run.
// If you prefer your own editor, you can Reload and Compile (F4)

// Don't forget to end your statements with a semi-colon(;)

i = 3;
// Re-running this will now output 3, as variables are set at compile time!

// Let's draw something!
// Values are mm when converted to STL
cube(size=20);
// cube(20); // Same thing with less text

// Hit F5 (or Design -> Compile) to

// View -> Show axes to see the origin and which axis is which
// Middle mouse button to zoom in and out
// Left mouse button to rotate
// Right mouse button to move




39 changes: 39 additions & 0 deletions tutorial/02-shapes.scad
@@ -0,0 +1,39 @@
// 02 - Shapes

// Cubes are not just square, they have x,y,z sides
// [..,..] is a vector in openscad (similar to an array elsewhere)
cube(size=[10,20,30]);

// Spheres are, well, round and have a radius size
sphere(r=10);

// To see which item we just drew, we can use # to highlight it:
# sphere(r=15);

// The resolution is fairly rough by default, to get a smoother one, change $fn, you can do this globally, or per object:
sphere(r=15, $fn=100);

// We can colour the objects (only for the preview, not the STL)
// And also stack/scope functions

color("blue")
cube(size=[10,20,30]);

// A cylinder has height (h) and radius (r):
cylinder(h=35,r=10);

// It can also be a cone by using two radii: r1 and r2:
cylinder(h=50,r1=5,r2=40);

// Polyhedrons, now it gets complicated!
// Provide a list of points [x,y,z] and a list of triangles [n,m,o] connecting the points (0-based index)
// I borrowed this example from the manual!

polyhedron(
points=[ [30,30,0],[30,-30,0],[-30,-30,0],[-30,30,0], // the four points at base
[0,0,30] ], // the apex point
triangles=[ [0,1,4],[1,2,4],[2,3,4],[3,0,4], // each triangle side
[1,0,3],[2,1,3] ] // two triangles for square base
);

// What a mess, lets look at how to move things around..
61 changes: 61 additions & 0 deletions tutorial/03-transformations.scad
@@ -0,0 +1,61 @@

// 03 - Transformations

// To move objects around in space, we can translate them
// translate takes a vector, of x,y,z

// So this cube:
cube(size=[10,10,20]);

// Can be moved along X:
translate(v=[20,0,0])
cube(size=[10,10,20]);

// Or Y:
translate(v=[0,20,0])
cube(size=[10,10,20]);

// Or even X and Z (we can skip ahead if you're bored):
translate(v=[20,0,40])
cube(size=[10,10,20]);

// We can also translate two objects together by using curlies:
// Look, a badmington shuttlecock!
translate(v=[0,0,50]) {
sphere(r=10);
cylinder(h=30,r1=5,r2=30);
}

// Let's turn it sideways, rotate can take a number of degrees, and a vector to rotate around (default [0,0,0] which does nothing)
rotate(a=90,v=[0,1,0]) {
translate(v=[0,0,50]) {
sphere(r=10);
cylinder(h=30,r1=5,r2=30);
}
}

// Rotation is always around the axis, so to rotate "in space" do a rotation, then translate:
translate(v=[0,0,50]) {
rotate(a=90,v=[0,1,0]) {
sphere(r=10);
cylinder(h=30,r1=5,r2=30);
}
}

// Multiple items together are a union, we can also subtract intersecting parts using "difference"
// Subtract the rotated item from the original one:
# difference() {
union() {
sphere(r=10);
cylinder(h=30,r1=5,r2=30);
}
rotate(a=90,v=[0,1,0]) {
sphere(r=10);
cylinder(h=30,r1=5,r2=30);
}
}

// Note that subtracting exact faces produces uncertain results, it would be better in this case to subtract the two cylinders without the sphere.

// Let's build something now...

91 changes: 91 additions & 0 deletions tutorial/04-meeple.scad
@@ -0,0 +1,91 @@
// 04 - A meeple
// A meeple is a person-shaped playing piece for board games

// Adjust for more roundiness:
$fn=25;

module body() {
union() {
// First we need a head:
translate([0,0,15])
sphere(r=5);

// and a body:
cylinder(h=15, r1=10, r2=1);
}
}

// Save it for later by making it a module.
// (we're not calling it yet so reloading makes it disappear)

// Let's display it for reference:
translate([0,0,7])
body();

// Create a leg, then attach a foot.

module leg() {
// A leg:
cylinder(h=7,r=3);

// Foot
difference() {
union() {
// First a cylinder along the X-axis
rotate(a=90,v=[0,1,0])
cylinder(h=5,r=3);
// Then round the end with a sphere:
translate([5,0,0])
sphere(r=3);
}

// Level off the bottom by subtracting a larger cube:
# translate([-5,-7,-14])
cube(size=14);
}
}
// Wrap it in a module so that we can create two easily
// Then duplicate either side of the Y axis:

translate([0,3,0])
leg();
translate([0,-3,0])
leg();

// All we need now are arms, grey the legs for a moment using % (or just comment them out)
// The arms are more cylinders with spheres on each end:
/*
module arm() {
cylinder(h=6, r=2.5);
sphere(r=2.5);
translate([0,0,6])
sphere(r=2.5);
}
*/

// I want the the arm alongside the body:
// Angle the arm outwards.

// We want the top (end of arm) to be two thirds up the body cone
// height of body (7) + two thirds (10) - length of arm(6)
// For the distance along y (out alongside the cone), I just start guessing...
// Move this code into the arm module.
module arm() {
translate([0,8,11])
rotate(a=45,v=[1,0,0])
union() {
cylinder(h=6, r=2.5);
sphere(r=2.5,$fn=50);
translate([0,0,6])
sphere(r=2.5,$fn=50);
}
}

// Now we draw two, and just mirror the second one:
arm();
mirror([0,1,0])
arm();


// Tada!

0 comments on commit bb30f37

Please sign in to comment.