1
0
mirror of https://github.com/JustinSDK/dotSCAD.git synced 2025-08-19 13:01:37 +02:00

added polyline3d

This commit is contained in:
Justin Lin
2017-03-17 08:56:47 +08:00
parent f4578286f0
commit 9ee6448667
7 changed files with 101 additions and 0 deletions

View File

@@ -16,6 +16,7 @@ I've been using OpenSCAD for years and created some funny things. Some of them i
- 3D
- [line3d](https://openhome.cc/eGossip/OpenSCAD/lib-line3d.html)
- [polyline3d](https://openhome.cc/eGossip/OpenSCAD/lib-polyline3d.html)
- Transformations
- [hollow_out](https://openhome.cc/eGossip/OpenSCAD/lib-hollow_out.html)

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

65
docs/lib-polyline3d.md Normal file
View File

@@ -0,0 +1,65 @@
# polyline3d
Creates a polyline from a list of `[x, y, z]` coordinates. It depends on the `line3d` module so you have to `include` line3d.scad.
## Parameters
- `points` : The list of `[x, y, z]` points of the polyline. : A vector of 3 element vectors. The points are indexed from 0 to n-1.
- `thickness` : The line thickness.
- `startingStyle` : The end-cap style of the starting point. The value must be `CAP_BUTT`, `CAP_CIRCLE` or `CAP_SPHERE` (defined in line3d.scad). The default value is `CAP_CIRCLE`.
- endingStyle : The end-cap style of the ending point. The value must be `CAP_BUTT`, `CAP_CIRCLE` or `CAP_SPHERE` (defined in line3d.scad). The default value is `CAP_CIRCLE`.
- `fn` : It controlls the `$fn` value used by the `circle` and `sphere` module. The default value is `24`.
## Examples
polyline3d(
points = [
[1, 2, 1],
[-5, -4, 2],
[-5, 3, 3],
[5, 5, 4]
],
thickness = 1
);
![polyline3d](images/lib-polyline3d-1.JPG)
polyline3d(
points = [
[1, 2, 1],
[-5, -4, 2],
[-5, 3, 3],
[5, 5, 4]
],
thickness = 1,
endingStyle = CAP_SPHERE
);
![polyline3d](images/lib-polyline3d-2.JPG)
polyline3d(
points = [
[1, 2, 1],
[-5, -4, 2],
[-5, 3, 3],
[5, 5, 4]
],
thickness = 1,
startingStyle = CAP_SPHERE,
endingStyle = CAP_SPHERE
);
![polyline3d](images/lib-polyline3d-3.JPG)
r = 20;
h = 5;
fa = 15;
circles = 10;
points = [
for(a = [0:fa:360 * circles])
[r * cos(a), r * sin(a), h / (360 / fa) * (a / fa)]
];
polyline3d(points, thickness = 1);
![polyline3d](images/lib-polyline3d-4.JPG)

35
src/polyline3d.scad Normal file
View File

@@ -0,0 +1,35 @@
/**
* polyline3d.scad
*
* Creates a 3D polyline from a list of `[x, y, z]` coordinates.
* It depends on the line3d module so you have to include line3d.scad.
*
* @copyright Justin Lin, 2017
* @license https://opensource.org/licenses/lgpl-3.0.html
*
* @see https://openhome.cc/eGossip/OpenSCAD/lib-polyline3d.html
*
**/
module polyline3d(points, thickness, startingStyle = CAP_CIRCLE, endingStyle = CAP_CIRCLE, fn = 24) {
module line_segment(index) {
styles = index == 1 ? [startingStyle, CAP_BUTT] : (
index == len(points) - 1 ? [CAP_SPHERE, endingStyle] : [
CAP_SPHERE, CAP_BUTT
]
);
line3d(points[index - 1], points[index], thickness,
p1Style = styles[0], p2Style = styles[1],
fn = fn);
}
module polyline3d_inner(points, index) {
if(index < len(points)) {
line_segment(index);
polyline3d_inner(points, index + 1);
}
}
polyline3d_inner(points, 1);
}