Intro screen
Main screen-
Here's a list of commonly used commands, modules, and libraries in OpenSCAD, along with their uses and examples:
Basic Shapes and Operations:
Cube:
Code: cube([width, depth, height]);
Use: Creates a rectangular prism.
Example: cube([10, 20, 15]);
Sphere:
Code: sphere(r = radius, $fn = facets);
Use: Generates a sphere.
Example: sphere(r = 12, $fn = 50);
Cylinder:
Code: cylinder(h = height, r = radius, $fn = facets);
Use: Creates a cylinder.
Example: cylinder(h = 30, r = 10, $fn = 100);
Cone:
Code: cylinder(h = height, r1 = bottom_radius, r2 = top_radius, $fn = facets);
Use: Generates a cone.
Example: cylinder(h = 25, r1 = 15, r2 = 5, $fn = 100);
Difference:
Code: difference() { ... }
Use: Subtracts one or more 3D shapes from another.
Example: difference() { cube([20, 20, 20]); sphere(r = 10); }
Union:
Code: union() { ... }
Use: Combines two or more 3D shapes into a single object.
Example: union() { cube([10, 10, 10]); sphere(r = 8); }
Intersection:
Code: intersection() { ... }
Use: Retains only the common volume shared by two or more shapes.
Example: intersection() { cube([15, 15, 15]); sphere(r = 8); }
Advanced Shapes and Features:
Polyhedron:
Code: polyhedron(points = [...], faces = [...]);
Use: Defines a custom polyhedron.
Example: polyhedron(points = [[0,0,0], [1,0,0], [0,1,0], [1,1,0]], faces = [[0,1,2], [1,2,3]]);
Linear Extrude:
Code: linear_extrude(height = h, center = boolean);
Use: Extrudes a 2D shape into a 3D object.
Example: linear_extrude(height = 10, center = true) square([5, 5]);
Transformations and Operations:
Translate:
Code: translate([x, y, z]) { ... }
Use: Moves an object in 3D space.
Example: translate([10, 5, 0]) cube([5, 5, 5]);
Rotate:
Code: rotate([x, y, z]) { ... }
Use: Rotates an object around specified axes.
Example: rotate([0, 45, 0]) cube([10, 10, 10]);
Scale:
Code: scale([x, y, z]) { ... }
Use: Scales an object in the x, y, and z dimensions.
Example: scale([2, 1, 0.5]) cube([5, 10, 20]);
Variables, Functions, and Modules:
Variable Declaration:
Code: variable_name = value;
Use: Stores a numerical value for reuse.
Example: length = 20;
Modules:
Code: module module_name() { ... }
Use: Defines a reusable block of code.
Example: module cube_10() { cube([10, 10, 10]); }
For Loop:
Code: for (variable = [start:end]) { ... }
Use: Repeats a block of code for a specified range.
Example: for (i = [0:4]) cube([i * 5, i * 5, 10]);
Importing and Exporting:
Import STL:
Code: import("filename.stl");
Use: Imports an external STL file into the OpenSCAD project.
Example: import("my_model.stl");
Special Shapes and Patterns:
Helix:
Code: Custom helix module (as shown in a previous example).
Use: Creates a helical shape in 3D space.
Example: helix(40, 10, 2, 4);
Voronoi Pattern:
Code: Custom Voronoi pattern module (as shown in a previous example).
Use: Generates a Voronoi pattern in 3D space.
Example: voronoi_pattern();
These are some of the fundamental commands, modules, and libraries in OpenSCAD. By combining and customizing these elements, you can create a wide variety of 3D models. Explore and experiment to enhance your understanding of OpenSCAD!
Some basic projects to try
Here are twenty basic OpenSCAD projects with corresponding codes that you can use for learning and practice:
1. Cube with a Hole
difference() {
cube([20, 20, 20]);
translate([10, 10, 0])
cylinder(5, 25, 25);
}
2. Pyramid
polyhedron(points = [
[0, 0, 0],
[20, 0, 0],
[10, 20, 0],
[10, 10, 20]
], faces = [
[0, 1, 2],
[0, 1, 3],
[1, 2, 3],
[2, 0, 3]
]);
3. Twisted Vase
module helix(h, r, pitch, turns) {
difference() {
translate([0, 0, -h/2])
rotate([0, 0, 360*turns])
linear_extrude(height = h, center = false)
scale([1, 1, 0.5])
circle(r = r);
translate([0, 0, -h/2])
rotate([0, 0, 360*turns])
linear_extrude(height = h, center = false)
scale([1, 1, 0.5])
circle(r = r - pitch);
}
}
helix(40, 10, 2, 4);
4. Customizable Box
module customizable_box(length, width, height) {
cube([length, width, height]);
}
customizable_box(30, 20, 15);
5. Spikey Sphere
module spikey_sphere(radius, spikes) {
sphere(r = radius);
for (i = [1:spikes])
rotate([0, 0, i * 360 / spikes])
translate([radius + 2, 0, 0])
cube([5, 5, radius * 2]);
}
spikey_sphere(15, 12);
6. Gear
module gear(teeth, module, pressure_angle) {
difference() {
union() {
for (i = [0:teeth-1]) {
rotate([0, 0, i * 360 / teeth])
translate([module * (teeth / 2), 0, 0])
rotate([0, 0, 360/teeth/2])
cylinder(h = 5, r1 = 0, r2 = module / 2, $fn = 20);
}
}
circle(r = module * (teeth / 2 + 2), $fn = 100);
}
}
gear(20, 5, 20);
7. Parametric Nut and Bolt
module nut_and_bolt(nut_size, bolt_size) {
difference() {
union() {
cylinder(h = 2 * nut_size, r = nut_size, $fn = 6);
translate([0, 0, -0.5])
cylinder(h = 1.5 * bolt_size, r = bolt_size - 1, $fn = 6);
}
translate([0, 0, -2])
cylinder(h = 4, r = bolt_size + 2, $fn = 6);
}
}
nut_and_bolt(10, 5);
8. Tetris Block
difference() {
cube([20, 20, 20]);
translate([0, 0, 20])
cube([10, 10, 20]);
}
9. Mobius Strip
module mobius(width, thickness, turns) {
difference() {
surface(file = "mobius.scad");
translate([width, 0, 0])
surface(file = "mobius.scad");
}
}
mobius(20, 2, 1);
Note: You'll need to save the Mobius Strip code in a separate file named "mobius.scad" and use it in the main code.
10. Heart Shape
openscad
Copy code
module heart() {
difference() {
scale([5, 5, 5])
circle(r = 1);
translate([0, -2.5, 0])
square([10, 10], center = true);
}
}
heart();
11. Chess Set - Pawn
module pawn() {
difference() {
scale([1, 1, 0.2])
cylinder(5, 6, 6);
translate([0, 0, 6])
scale([1, 1, 1.5])
cylinder(4, 0, 4);
translate([0, 0, 9])
sphere(4);
}
}
pawn();
12. Voronoi Pattern
module voronoi_pattern() {
intersection() {
cube([50, 50, 1]);
for (i = [0:30]) {
translate([rand(50), rand(50), 0])
sphere(2);
}
}
}
voronoi_pattern();
13. Parametric Tree
module tree(levels, trunk_height, branch_height, branch_radius) {
if (levels > 0) {
cylinder(h = trunk_height, r = branch_radius);
translate([0, 0, trunk_height])
rotate([0, 30, 0])
tree(levels - 1, branch_height, branch_height * 0.7, branch_radius * 0.7);
translate([0, 0, trunk_height])
rotate([0, -30, 0])
tree(levels - 1, branch_height, branch_height * 0.7, branch_radius * 0.7);
}
}
tree(3, 10, 10, 2);
14. Parametric Spiral Staircase
module spiral_staircase(steps, height, radius) {
for (i = [0:steps-1]) {
rotate([0, 0, i * 360 / steps])
translate([radius * cos(i * 360 / steps), radius * sin(i * 360 / steps), i * height / steps])
cube([5, 5, height / steps]);
}
}
spiral_staircase(20, 50, 15);
15. Customizable Pen Holder
module pen_holder(diameter, height, num_compartments) {
difference() {
cylinder(h = height, r = diameter / 2);
for (i = [0:num_compartments-1])
translate([diameter * cos(i * 360 / num_compartments * 2), diameter * sin(i * 360 / num_compartments * 2), 0])
cube([diameter, diameter, height], center = true);
}
}
pen_holder(30, 80, 6);
16. Parametric Spirograph
module spirograph(outer_radius, inner_radius, pen_radius, num_teeth) {
for (i = [0:num_teeth-1]) {
rotate([0, 0, i * 360 / num_teeth])
translate([outer_radius * cos(i * 360 / num_teeth), outer_radius * sin(i * 360 / num_teeth), 0])
rotate([0, 0, 45])
circle(r = pen_radius);
}
}
spirograph(40, 20, 5, 12);
17. Parametric Lampshade
module lampshade(radius, height, num_segments) {
rotate_extrude(convexity = 10)
translate([radius, 0])
circle(r = height / 2, $fn = num_segments);
}
lampshade(30, 40, 50);
18. Parametric Dodecahedron
module dodecahedron(size) {
rotate([0, 0, 45])
polyhedron(points = [
[1, 0, 0], [0, 1, 0], [-1, 0, 0], [0, -1, 0],
[0, 0, 1.618], [0, 0, -1.618],
[1.618, 1, 0], [-1.618, 1, 0], [-1.618, -1, 0], [1.618, -1, 0]
], faces = [
[0, 1, 4, 7, 6], [1, 2, 5, 8, 4], [2, 3, 6, 9, 5],
[3, 0, 7, 10, 9], [0, 1, 2, 3], [4, 5, 8, 9], [6, 7, 10, 11],
[8, 4, 7, 10, 11], [5, 8, 9], [6, 9, 5], [7, 10, 11], [6, 11, 7]
]);
}
dodecahedron(20);
19. Customizable Keychain
module keychain(length, width, thickness, hole_radius) {
difference() {
cube([length, width, thickness]);
translate([length/2, width/2])
circle(r = hole_radius);
}
}
keychain(40, 20, 3, 5);
20. Parametric Fidget Spinner
module fidget_spinner(radius, arm_length, arm_width) {
union() {
rotate([0, 0, 0])
cylinder(h = 5, r = radius, $fn = 30);
for (i = [0:2]) {
rotate([0, 0, i * 120])
translate([0, radius - 2, 0])
cube([arm_length, arm_width, 5], center = true);
}
}
}
fidget_spinner(15, 40, 5);
Feel free to customize and modify these projects to explore the capabilities of OpenSCAD further. Enjoy your 3D modeling journey!
0 Comments