Minor tweaks to Shapes2d tutorital.

This commit is contained in:
Garth Minette 2022-01-07 19:31:58 -08:00
parent 592e367cfb
commit 8d9d1f46a6
3 changed files with 102 additions and 22 deletions

View file

@ -16,7 +16,7 @@
// Creates a mask for creating a Phillips drive recess given the Phillips size. Each mask can
// be lowered to different depths to create different sizes of recess.
// Arguments:
// size = The size of the bit as a number or string. "#0", "#1", "#2", "#3", or "#4"
// size = The size of the bit as an integer or string. "#0", "#1", "#2", "#3", or "#4"
// ---
// anchor = Translate so anchor point is at origin (0,0,0). See [anchor](attachments.scad#subsection-anchor). Default: `CENTER`
// spin = Rotate this many degrees around the Z axis after anchor. See [spin](attachments.scad#subsection-spin). Default: `0`
@ -323,4 +323,46 @@ module torx_mask(size, l=5, center, anchor, spin=0, orient=UP) {
}
// Section: Robertson/Square Drives
// Module: robertson_mask()
// Usage:
// robertson_mask(size, [extra]);
// Description:
// Creates a mask for creating a Robertson/Square drive recess given the drive size as an integer.
// Arguments:
// size = The size of the square drive, as an integer from 0 to 4.
// extra = Extra length of drive mask to create.
// Example:
// robertson_mask(size=2);
// Example:
// difference() {
// cyl(d1=2, d2=8, h=4, anchor=TOP);
// robertson_mask(size=2);
// }
module robertson_mask(size, extra=1) {
assert(is_int(size) && size>=0 && size<=4);
Mmin = [0.0696, 0.0900, 0.1110, 0.1315, 0.1895][size];
Mmax = [0.0710, 0.0910, 0.1126, 0.1330, 0.1910][size];
M = (Mmin + Mmax) / 2 * INCH;
Tmin = [0.063, 0.105, 0.119, 0.155, 0.191][size];
Tmax = [0.073, 0.113, 0.140, 0.165, 0.201][size];
T = (Tmin + Tmax) / 2 * INCH;
Fmin = [0.032, 0.057, 0.065, 0.085, 0.090][size];
Fmax = [0.038, 0.065, 0.075, 0.095, 0.100][size];
F = (Fmin + Fmax) / 2 * INCH;
ang = 2;
h = T + extra;
down(T) {
intersection(){
Mtop = M + 2*adj_ang_to_opp(F+extra,ang);
Mbot = M - 2*adj_ang_to_opp(T-F,ang);
prismoid([Mbot,Mbot],[Mtop,Mtop],h=h,anchor=BOT);
cyl(d1=0, d2=M/(T-F)*sqrt(2)*h, h=h, anchor=BOT);
}
}
}
// vim: expandtab tabstop=4 shiftwidth=4 softtabstop=4 nowrap

View file

@ -729,11 +729,11 @@ module octagon(r, d, or, od, ir, id, side, rounding=0, realign=false, align_tip,
// ---
// anchor = Translate so anchor point is at origin (0,0,0). See [anchor](attachments.scad#subsection-anchor). Default: `CENTER`
// spin = Rotate this many degrees around the Z axis after anchor. See [spin](attachments.scad#subsection-spin). Default: `0`
// Example:
// Example(2D):
// right_triangle([40,30]);
// Example: With `center=true`
// Example(2D): With `center=true`
// right_triangle([40,30], center=true);
// Example: Anchors
// Example(2D): Anchors
// right_triangle([40,30])
// show_anchors();
function right_triangle(size=[1,1], center, anchor, spin=0) =

View file

@ -133,7 +133,7 @@ square(50, center=true)
```openscad-2D
square(50, center=true)
#square([30,50], anchor=FWD);
#square([20,40], anchor=FWD);
```
By adding the `position()` module, you can position the child at any anchorpoint on the parent:
@ -177,25 +177,25 @@ module. It does not position the child. It only rotates it:
```openscad-2D
square(50, center=true)
orient(anchor=LEFT)
#square([10,50], anchor=FWD);
#square([10,40], anchor=FWD);
```
```openscad-2D
square(50, center=true)
orient(anchor=FWD)
#square([10,50], anchor=FWD);
#square([10,40], anchor=FWD);
```
```openscad-2D
square(50, center=true)
orient(anchor=RIGHT)
#square([10,50], anchor=FWD);
#square([10,40], anchor=FWD);
```
```openscad-2D
circle(d=50)
orient(polar_to_xy(1,30))
#square([10,50], anchor=FWD);
#square([10,40], anchor=FWD);
```
You can use `position()` and `orient()` together to both position and orient to an anchorpoint:
@ -204,7 +204,7 @@ You can use `position()` and `orient()` together to both position and orient to
square(50, center=true)
position(RIGHT+BACK)
orient(anchor=RIGHT+BACK)
#square([10,50], anchor=FWD);
#square([10,40], anchor=FWD);
```
```openscad-2D
@ -219,13 +219,13 @@ But it's simpler to just use the `attach()` module to do both at once:
```openscad-2D
square(50, center=true)
attach(LEFT+BACK)
#square([10,50], anchor=FWD);
#square([10,40], anchor=FWD);
```
```openscad-2D
circle(d=50)
attach(polar_to_xy(1,30))
#square([10,50], center=true);
#square([10,40], center=true);
```
Instead of specifying the `anchor=` in the child, you can pass a second argument to `attach()`
@ -234,18 +234,18 @@ that tells it which side of the child to attach to the parent:
```openscad-2D
square([10,50], center=true)
attach(BACK, LEFT)
#square([10,50], center=true);
#square([10,40], center=true);
```
```openscad-2D
circle(d=50)
attach(polar_to_xy(1,30), LEFT)
#square([10,50], center=true);
#square([10,40], center=true);
```
#### `rect()`
#### Rectangles
The BOSL2 library provides an alternative to `square()`, that support more features. It is
called `rect()`. You can use it in the same way you use `square()`, but it also provides
@ -298,7 +298,7 @@ a corner, specify a 0 chamfer for that corner, and vice versa:
rect([60,40], rounding=[5,0,10,0], chamfer=[0,5,0,15]);
```
### `ellipse()`
#### Ellipses
The BOSL2 library also provides an enhanced equivalent of `circle()` called `ellipse()`.
You can use it in the same way you use `circle()`, but it also provides extended
@ -362,9 +362,47 @@ ellipse(d=50)
```
### Trapezoids
#### Right Triangles
The BOSL2 library provides a simple way to make a 2D right triangle by using the `right_triangle()` module:
OpenSCAD doesn't provide a simple way to make 2D triangles, trapezoids, or parallelograms.
```openscad-2D
right_triangle([40,30]);
```
You can use `xflip()` and `yflip()` to change which quadrant the triangle is formed in:
```openscad-2D
xflip() right_triangle([40,30]);
```
```openscad-2D
yflip() right_triangle([40,30]);
```
```openscad-2D
xflip() yflip() right_triangle([40,30]);
```
Or, alternatively, just rotate it into the correct quadrant with `spin=`:
```openscad-2D
right_triangle([40,30], spin=90);
```
```openscad-2D
right_triangle([40,30], spin=-90);
```
You can also use anchoring with right triangles:
```openscad-2D
right_triangle([40,30], anchor=FWD+RIGHT);
```
#### Trapezoids
OpenSCAD doesn't provide a simple way to make general 2D triangles, trapezoids, or parallelograms.
The BOSL2 library can provide all of these shapes with the `trapezoid()` module.
To make a simple triangle, just make one of the widths zero:
@ -417,7 +455,7 @@ trapezoid(w1=30, w2=50, h=50)
show_anchors();
```
### Regular N-Gons
#### Regular N-Gons
OpenSCAD lets you make regular N-gons (pentagon, hexagon, etc) by using `circle()` with `$fn`.
While this is concise, it may be less than obvious at first glance:
@ -507,7 +545,7 @@ pentagon(d=30)
```
### Stars
#### Stars
The BOSL2 library has stars as a basic supported shape. They can have any number of points.
You can specify a star's shape by point count, inner and outer vertex radius/diameters:
@ -583,7 +621,7 @@ star(n=5, step=2, d=40)
### Teardrop2D
#### Teardrop2D
Often when 3D printing, you may want to make a circular hole in a vertical wall. If the hole is
too big, however, the overhang at the top of the hole can cause problems with printing on an
@ -625,7 +663,7 @@ teardrop2d(d=50, ang=30, cap_h=30)
```
### Glued Circles
#### Glued Circles
A more unusal shape that BOSL2 provides is Glued Circles. It's basically a pair of circles,
connected by what looks like a gloopy glued miniscus: