mirror of
https://github.com/JustinSDK/dotSCAD.git
synced 2025-08-11 01:04:07 +02:00
first commit
This commit is contained in:
BIN
docs/images/line2d-1.JPG
Normal file
BIN
docs/images/line2d-1.JPG
Normal file
Binary file not shown.
After Width: | Height: | Size: 19 KiB |
BIN
docs/images/polyline2d-1.JPG
Normal file
BIN
docs/images/polyline2d-1.JPG
Normal file
Binary file not shown.
After Width: | Height: | Size: 23 KiB |
BIN
docs/images/polyline2d-2.JPG
Normal file
BIN
docs/images/polyline2d-2.JPG
Normal file
Binary file not shown.
After Width: | Height: | Size: 22 KiB |
BIN
docs/images/polyline2d-3.JPG
Normal file
BIN
docs/images/polyline2d-3.JPG
Normal file
Binary file not shown.
After Width: | Height: | Size: 22 KiB |
26
docs/line2d.md
Normal file
26
docs/line2d.md
Normal file
@@ -0,0 +1,26 @@
|
||||
# line2d
|
||||
|
||||
Creates a line from two points.
|
||||
|
||||
## Parameters
|
||||
|
||||
- `p1` : 2 element vector `[x, y]`.
|
||||
- `p2` : 2 element vector `[x, y]`.
|
||||
- `width` : The line width.
|
||||
- `p1Style` : The end-cap style of the point `p1`. The value must be `CAP_BUTT`, `CAP_SQUARE` or `CAP_ROUND`. The default value is `CAP_SQUARE`.
|
||||
- `p2Style` : The end-cap style of the point `p2`. The value must be `CAP_BUTT`, `CAP_SQUARE` or `CAP_ROUND`. The default value is `CAP_SQUARE`.
|
||||
- `round_fn` : When the end-cap style is `CAP_ROUND`, it controlls the `$fn` value used by the `circle` module. The default value is `24`.
|
||||
|
||||
## Examples
|
||||
|
||||
line2d(p1 = [0, 0], p2 = [5, 0], width = 1);
|
||||
|
||||
translate([0, -2, 0])
|
||||
line2d(p1 = [0, 0], p2 = [5, 0], width = 1,
|
||||
p1Style = CAP_ROUND, p2Style = CAP_ROUND);
|
||||
|
||||
translate([0, -4, 0])
|
||||
line2d(p1 = [0, 0], p2 = [5, 0], width = 1,
|
||||
p1Style = CAP_BUTT, p2Style = CAP_BUTT);
|
||||
|
||||

|
27
docs/polyline2d.md
Normal file
27
docs/polyline2d.md
Normal file
@@ -0,0 +1,27 @@
|
||||
# polyline2d
|
||||
|
||||
Creates a polyline from a list of `x`, `y` coordinates. It depends on the `line2d` module so you have to `include` line2d.scad.
|
||||
|
||||
## Parameters
|
||||
|
||||
- `points` : The list of `x`, `y` points of the polyline. : A vector of 2 element vectors. The points are indexed from 0 to n-1.
|
||||
- `width` : The line width.
|
||||
- `startingStyle` : The end-cap style of the starting point. The value must be `CAP_BUTT`, `CAP_SQUARE` or `CAP_ROUND` (defined in line2d.scad). The default value is `CAP_SQUARE`.
|
||||
- endingStyle : The end-cap style of the ending point. The value must be `CAP_BUTT`, `CAP_SQUARE` or `CAP_ROUND` (defined in line2d.scad). The default value is `CAP_SQUARE`.
|
||||
- `round_fn` = When the end-cap style is `CAP_ROUND`, it controlls the `$fn` value used by the `circle` module. The default value is `24`.
|
||||
|
||||
## Examples
|
||||
|
||||
polyline2d(points = [[1, 2], [-5, -4], [-5, 3], [5, 5]], width = 1);
|
||||
|
||||

|
||||
|
||||
polyline2d(points = [[1, 2], [-5, -4], [-5, 3], [5, 5]], width = 1,
|
||||
endingStyle = CAP_ROUND);
|
||||
|
||||

|
||||
|
||||
polyline2d(points = [[1, 2], [-5, -4], [-5, 3], [5, 5]], width = 1,
|
||||
startingStyle = CAP_ROUND, endingStyle = CAP_ROUND);
|
||||
|
||||

|
46
src/line2d.scad
Normal file
46
src/line2d.scad
Normal file
@@ -0,0 +1,46 @@
|
||||
// The end-cap style
|
||||
CAP_BUTT = 0;
|
||||
CAP_SQUARE = 1;
|
||||
CAP_ROUND = 2;
|
||||
|
||||
module line2d(p1, p2, width, p1Style = CAP_SQUARE, p2Style = CAP_SQUARE, round_fn = 24) {
|
||||
$fn = round_fn;
|
||||
half_width = 0.5 * width;
|
||||
|
||||
atan_angle = atan2(p2[1] - p1[1], p2[0] - p1[0]);
|
||||
angle = 90 - atan_angle;
|
||||
|
||||
offset_x = half_width * cos(angle);
|
||||
offset_y = half_width * sin(angle);
|
||||
|
||||
offset1 = [-offset_x, offset_y];
|
||||
offset2 = [offset_x, -offset_y];
|
||||
|
||||
polygon(points=[
|
||||
p1 + offset1, p2 + offset1,
|
||||
p2 + offset2, p1 + offset2
|
||||
]);
|
||||
|
||||
module square_end(point) {
|
||||
translate(point)
|
||||
rotate(atan_angle)
|
||||
square(width, center = true);
|
||||
}
|
||||
|
||||
module round_end(point) {
|
||||
translate(point)
|
||||
circle(half_width, center = true);
|
||||
}
|
||||
|
||||
if(p1Style == CAP_SQUARE) {
|
||||
square_end(p1);
|
||||
} else if(p1Style == CAP_ROUND) {
|
||||
round_end(p1);
|
||||
}
|
||||
|
||||
if(p2Style == CAP_SQUARE) {
|
||||
square_end(p2);
|
||||
} else if(p2Style == CAP_ROUND) {
|
||||
round_end(p2);
|
||||
}
|
||||
}
|
22
src/polyline2d.scad
Normal file
22
src/polyline2d.scad
Normal file
@@ -0,0 +1,22 @@
|
||||
module polyline2d(points, width, startingStyle = CAP_SQUARE, endingStyle = CAP_SQUARE, round_fn = 24) {
|
||||
module line_segment(index) {
|
||||
styles = index == 1 ? [startingStyle, CAP_ROUND] : (
|
||||
index == len(points) - 1 ? [CAP_ROUND, endingStyle] : [
|
||||
CAP_ROUND, CAP_ROUND
|
||||
]
|
||||
);
|
||||
|
||||
line2d(points[index - 1], points[index], width,
|
||||
p1Style = styles[0], p2Style = styles[1],
|
||||
round_fn = round_fn);
|
||||
}
|
||||
|
||||
module polyline2d_inner(points, index) {
|
||||
if(index < len(points)) {
|
||||
line_segment(index);
|
||||
polyline2d_inner(points, index + 1);
|
||||
}
|
||||
}
|
||||
|
||||
polyline2d_inner(points, 1);
|
||||
}
|
Reference in New Issue
Block a user