1
0
mirror of https://github.com/JustinSDK/dotSCAD.git synced 2025-08-23 23:03:23 +02:00

improved solid sections performance

This commit is contained in:
Justin Lin
2017-05-10 16:05:43 +08:00
parent a7a93b8d0a
commit 96861fb862

View File

@@ -14,7 +14,42 @@
include <__private__/__triangles_radial.scad>; include <__private__/__triangles_radial.scad>;
include <__private__/__triangles_tape.scad>; include <__private__/__triangles_tape.scad>;
module polysections(sections, triangles = "RADIAL") { module polysections(sections, triangles) {
module solid_sections() {
leng_sections = len(sections);
leng_pts_section = len(sections[0]);
side_idxes = [
for(j = [0:leng_pts_section:(leng_sections - 2) * leng_pts_section])
for(i = [0:leng_pts_section - 1])
[
j + i,
j + (i + 1) % leng_pts_section,
j + (i + 1) % leng_pts_section + leng_pts_section ,
j + i + leng_pts_section
]
];
first_idxes = [for(i = [0:leng_pts_section - 1]) i];
last_idxes = [
for(i = [0:leng_pts_section - 1])
i + leng_pts_section * (leng_sections - 1)
];
v_pts = [
for(section = sections)
for(pt = section)
pt
];
polyhedron(
v_pts,
concat([first_idxes], side_idxes, [last_idxes])
);
}
module triangles_defined_sections() {
module tri_sections(tri1, tri2) { module tri_sections(tri1, tri2) {
polyhedron( polyhedron(
points = concat(tri1, tri2), points = concat(tri1, tri2),
@@ -77,3 +112,11 @@ module polysections(sections, triangles = "RADIAL") {
); );
} }
} }
//
if(triangles == undef) {
solid_sections();
} else {
triangles_defined_sections();
}
}