marp |
---|
true |
March 9, 2024
- Learn how to build 3D models on a computer
- Learn how to print / cut them on the machines
- Class assumes programming experience.
- 3D Printable QR Codes
- 3D Printable Lock Keys
- Nut/Bolt Framework (SEE:
nut.stl
) - Flexible Coupling
- A 3D Printed Peristaltic Pump
- An Entire Theme Park
"FoxDotBuild" on Github
- 2D/3D CAD Designs from code
- Non-interactive
- Objects + Transformations = CAD design
- Example: Subtract two cyliders
- Parametric Designs: Serial numbers, keys, pipe adapters, QR Codes
- Text is easy to automate, store, version, transform, etc..
- Easily integrates into larger applications/scripts
- Community driven and free
- Light weight, runs in desktop or browser
- Supports 3D and 2D CAD (laser cutter, 3D printer, X-Carve, etc..)
- Higher learning curve
- Assumes computer programming experience:
- loops
- variables
- modules / imports
- You will forget to add semicolons, I promise.
- Web Version: https://openscad.cloud/openscad/
- Desktop Version: https://openscad.org/
- "Advanced" setup with VSCode.
- Derivitive works: Implicitcad, OpenJSCad
translate([0, 0, -10]) {
circle(10);
};
sphere(r=10);
translate([0,0,-10]) {
color("green") {
circle(10);
};
};
translate([0,0,-10]) {
color("blue") {
circle(10);
};
};
color("red") {
sphere(r=10);
};
translate([0,0,-10]) color("blue") circle(10);
color("red") sphere(r=10);
color("blue") square(12);
color("red") cube(10);
color("green") cube([8, 16, 24]);
Let's examine all four.
translate([0,20,0]) hull() {
sphere(10);
translate([-10, 0, 0]) sphere(10);
}
translate([0,0,0]) union() {
sphere(10);
translate([-10, 0, 0]) sphere(10);
}
translate([0,-40,0]) intersection() {
sphere(10);
translate([-10, 0, 0]) sphere(10);
}
translate([0,-20,0]) difference() {
sphere(10);
translate([-10, 0, 0]) sphere(10);
}
Example: Computer generated serial number tag / name tag.
difference() {
square([48, 12]);
translate([46, 10, 0]) circle(d = 2);
translate([3, 3, 0]) text("01GS3TWM8KVFY9", size=3);
}
"candleStand.scad" in File -> Examples
Variable | Usage |
---|---|
$fa | minimum angle |
$fs | minimum size |
$fn | number of fragments |
$t | animation step |
$vpr | viewport rotation angles in degrees |
Variable | Usage |
---|---|
$vpt | viewport translation |
$vpd | viewport camera distance |
$vpf | viewport camera field of view |
$children | number of module children |
$preview | true in F5 preview, false for F6 |
Symbol | Usage |
---|---|
# | debug |
% | transparent |
* | disable |
! | show only |
- See
ducky.stl
. Might crash the machine!!! Set$fn
low!
$fn = 1;
import("ducky.stl");
File -> Examples -> Basics -> LetterBlock.scad
in OpenSCAD "Examples" section.
module pear(scale_factor = 50) {
hull() {
translate([0, 0, -(scale_factor*2)]) sphere(scale_factor * 2);
sphere(scale_factor);
}
}
pear(2);
translate([0, 9, 0]) pear(4);
translate([0, 24, 0]) pear(6);
rotate_extrude() translate([20, 0, 0]) circle(r = 10);
linear_extrude() translate([40, 0, 0]) circle(r = 10);
- Think of a Roomba.
minkowski() {
cube([10,10,1]);
cylinder(r=2,h=1);
}
Now we will move on to higher-level topics.
Here are things you can research independently:
function
mirror
resize
rotate
scale
use
Let's use the 2D esign from before.
- Possible to produce 2D designs.
- Usually DXF files.
- Useful for plates, serial numbers, etc...
- What is GCode?
- What is "Slicing"?
Let's take a look.
- Build a pipe that can be customized via the customizer:
- Pipe length
- Pipe outter diameter
- Pipe inner diameter
- Color