1
0
mirror of https://github.com/JustinSDK/dotSCAD.git synced 2025-08-21 14:04:53 +02:00

added polysections

This commit is contained in:
Justin Lin
2017-04-30 20:05:17 +08:00
parent 9e2408c318
commit 1084cedcde
12 changed files with 160 additions and 0 deletions

View File

@@ -40,6 +40,7 @@ Some modules may depend on other modules. For example, the `polyline2d` module d
- [polyline3d](https://openhome.cc/eGossip/OpenSCAD/lib-polyline3d.html) - [polyline3d](https://openhome.cc/eGossip/OpenSCAD/lib-polyline3d.html)
- [hull_polyline3d](https://openhome.cc/eGossip/OpenSCAD/lib-hull_polyline3d.html) - [hull_polyline3d](https://openhome.cc/eGossip/OpenSCAD/lib-hull_polyline3d.html)
- [function_grapher](https://openhome.cc/eGossip/OpenSCAD/lib-function_grapher.html) - [function_grapher](https://openhome.cc/eGossip/OpenSCAD/lib-function_grapher.html)
- [polysections](https://openhome.cc/eGossip/OpenSCAD/lib-polysections.html)
- Transformation - Transformation
- [along_with](https://openhome.cc/eGossip/OpenSCAD/lib-along_with.html) - [along_with](https://openhome.cc/eGossip/OpenSCAD/lib-along_with.html)

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

145
docs/lib-polysections.md Normal file
View File

@@ -0,0 +1,145 @@
# polysections
Crosscutting a tube-like shape at different points gets several cross-sections. This module can operate reversely. It uses cross-sections to construct a tube-like shape. For example, imagine that you have the following cross-sections:
![polysections](images/lib-polysections-1.JPG)
This module can use them to construct the following model:
![polysections](images/lib-polysections-2.JPG)
Looks like extruding along the path? Yes, it can perform the task; however, it's more flexible.
You can also view it as a better polyline3d module if you want. If you have only the points of a path, using `polyline3d` or `hull_polyline3d` is a simple solution. If you know the cross-sections along a path, you can use `polysections` to do more.
When using this module, you should use points to represent each cross-section. You need to provide indexes of triangles, too. This module provides two prepared triangles indexes. One is `"RADIAL"`. For example, if you have a cross-section such as:
![polysections](images/lib-polysections-3.JPG)
When using `"RADIAL"` (default), the module will cut them into triangles from the first point to each remaining point:
![polysections](images/lib-polysections-4.JPG)
If your cross-sections are hollow, you may use `"HOLLOW"`. For example:
![polysections](images/lib-polysections-5.JPG)
When using `"HOLLOW"`, the above shape will be cut into triangles such as:
![polysections](images/lib-polysections-6.JPG)
You can cut triangles by yourself, for example, the indexes of the above triangles is:
[
[0, 3, 4],
[0, 4, 1],
[1, 4, 5],
[1, 5, 2],
[2, 5, 3],
[2, 3, 0]
]
Triangles may be defined in any order.
## Parameters
- `sections` : A list of cross-sections. Each cross-section is represented by a list of points. See the example below.
- `triangles` : `"RADIAL"` (default), `"HOLLOW"` or user-defined indexes. See example below.
## Examples
include <rotate_p.scad>;
include <polysections.scad>;
section1 = [
[10, 0, 0],
[15, 10, 0],
[18, 9, 0],
[20, 0, 0]
];
// spin section1
sections = [
for(i = [0:55])
[
for(p = section1)
let(pt = rotate_p(p, [90, 0, -10 * i]))
[pt[0], pt[1] , pt[2] + i]
]
];
polysections(sections);
![polysections](images/lib-polysections-7.JPG)
include <rotate_p.scad>;
include <polysections.scad>;
section1 = [
// outer
[10, 0, 0],
[15, 10, 0],
[18, 9, 0],
[20, 0, 0],
// inner
[12, 2, 0],
[15, 7, 0],
[17, 7, 0],
[18, 2, 0]
];
// spin section1
sections = [
for(i = [0:55])
[
for(p = section1)
let(pt = rotate_p(p, [90, 0, -10 * i]))
[pt[0], pt[1] , pt[2] + i]
]
];
polysections(sections, "HOLLOW");
![polysections](images/lib-polysections-8.JPG)
include <rotate_p.scad>;
include <polysections.scad>;
section1 = [
// outer
[10, 0, 0],
[15, 10, 0],
[30, 0, 0],
// inner
[12, 1, 0],
[15, 8, 0],
[26, 1, 0],
];
// spin section1
sections = [
for(i = [0:55])
[
for(p = section1)
let(pt = rotate_p(p, [90, 0, -10 * i]))
[pt[0], pt[1] , pt[2] + i]
]
];
polysections(
sections = sections,
triangles = [
[0, 3, 4],
[0, 4, 1],
[1, 4, 5],
[1, 5, 2],
[2, 5, 3],
[2, 3, 0]
]
);
![polysections](images/lib-polysections-9.JPG)

View File

@@ -1,3 +1,16 @@
/**
* polysections.scad
*
* Crosscutting a tube-like shape at different points gets several cross-sections.
* This module can operate reversely. It uses cross-sections to construct a tube-like shape.
*
* @copyright Justin Lin, 2017
* @license https://opensource.org/licenses/lgpl-3.0.html
*
* @see https://openhome.cc/eGossip/OpenSCAD/lib-polysections.html
*
**/
module polysections(sections, triangles = "RADIAL") { module polysections(sections, triangles = "RADIAL") {
module tri_sections(tri1, tri2) { module tri_sections(tri1, tri2) {
polyhedron( polyhedron(
@@ -40,6 +53,7 @@ module polysections(sections, triangles = "RADIAL") {
module two_sections(section1, section2) { module two_sections(section1, section2) {
for(idx = tris()) { for(idx = tris()) {
// hull is for preventing from WARNING: Object may not be a valid 2-manifold
hull() tri_sections( hull() tri_sections(
[ [
section1[idx[0]], section1[idx[0]],