If you want to make a ring, how can you do? You may perform the difference
operation on a bigger circle and a smaller circle, such as …
module circle_ring(radius, thickness) {
difference() {
circle(radius, $fn = 48);
circle(radius - thickness, , $fn = 48);
}
}
circle_ring(3, 1);
The code creates a ring below.
The other way is using the offset
transformation. For example.
module circle_ring(radius, thickness) {
difference() {
circle(radius, $fn = 48);
offset(r = -thickness) circle(radius, , $fn = 48);
}
}
circle_ring(3, 1);
Both cases achieve the same results. You can specify the r
or delta
parameters, and the chamfer
parameter when using offset
. The figures shown below is from OpenSCAD User Manual/Transformations. They clearly demonstrate how to use these parameters.
Next, how to make a frame? Similarly, you may use offset
.
module square_frame(dimension, thickness) {
difference() {
square(dimension);
offset(r = -thickness) square(dimension);
}
}
square_frame([10, 5], 1);
The result is below.
Moreover, how to make a triangle frame, a star frame, or even a heart frame? I believe you can do all of them now.
Now that it's such common requirement to make a frame, could we write a general frame
module which generates a frame from any 2D module? No problem.
module frame(thickness) {
difference() {
children();
offset(r = -thickness) children();
}
}
frame(1) circle(3, $fn = 48);
frame(1) square([10, 5]);
We pull out the same code in circle_ring
and square_frame
into a new frame
module. Next, we replace circle
and square
with children
. The modules listed after frame
are the children of frame
. For example, circle(3, $fn = 48)
is a child of frame
in the above example, so is square([10, 5])
. The code will generate models below.
Use an index if there are more than one child. The children index from 0. For example.
module lineup(space) {
for (i = [0 : $children - 1])
translate([space * i, 0, 0 ]) children(i);
}
lineup(100) { sphere(10); sphere(10); }
lineup(100) { cube(35); cube(35); cube(35); }
The lineup
module can lines up children listed after it. When listing multiple children, use curly braces to include them and separate children with a comma. OpenSCAD sets the total number of children to $children
so you can know how many children there are in the above example.
If you observe some reusable operations, such as moving, rotating, etc, try to extract them and define a template module. These template modules will come in handy when you design something in the future.