mirror of
https://github.com/JustinSDK/dotSCAD.git
synced 2025-08-12 09:44:16 +02:00
add convexity param
This commit is contained in:
@@ -12,7 +12,7 @@ use <_impl/_sf_square_surfaces.scad>;
|
|||||||
use <sf_solidify.scad>;
|
use <sf_solidify.scad>;
|
||||||
use <../ptf/ptf_bend.scad>;
|
use <../ptf/ptf_bend.scad>;
|
||||||
|
|
||||||
module sf_bend(levels, radius, thickness, depth, angle = 180, invert = false) {
|
module sf_bend(levels, radius, thickness, depth, angle = 180, invert = false, convexity = 1) {
|
||||||
dp = is_undef(depth) ? thickness / 2 : depth;
|
dp = is_undef(depth) ? thickness / 2 : depth;
|
||||||
surface = _sf_square_surfaces(levels, thickness, dp, invert);
|
surface = _sf_square_surfaces(levels, thickness, dp, invert);
|
||||||
rows = len(levels);
|
rows = len(levels);
|
||||||
@@ -33,6 +33,7 @@ module sf_bend(levels, radius, thickness, depth, angle = 180, invert = false) {
|
|||||||
[
|
[
|
||||||
for(p = row) ptf_bend(size, p, radius, angle)
|
for(p = row) ptf_bend(size, p, radius, angle)
|
||||||
]
|
]
|
||||||
]
|
],
|
||||||
|
convexity = convexity
|
||||||
);
|
);
|
||||||
}
|
}
|
@@ -12,7 +12,7 @@ use <_impl/_sf_square_surfaces.scad>;
|
|||||||
use <sf_solidify.scad>;
|
use <sf_solidify.scad>;
|
||||||
use <../ptf/ptf_rotate.scad>;
|
use <../ptf/ptf_rotate.scad>;
|
||||||
|
|
||||||
module sf_curve(levels, curve_path, thickness, depth, invert = false) {
|
module sf_curve(levels, curve_path, thickness, depth, invert = false, convexity = 1) {
|
||||||
rows = len(levels);
|
rows = len(levels);
|
||||||
columns = len(levels[0]);
|
columns = len(levels[0]);
|
||||||
leng_curve_path = len(curve_path);
|
leng_curve_path = len(curve_path);
|
||||||
@@ -47,5 +47,5 @@ module sf_curve(levels, curve_path, thickness, depth, invert = false) {
|
|||||||
]
|
]
|
||||||
];
|
];
|
||||||
|
|
||||||
sf_solidify(_curve(surfaces[0]), _curve(surfaces[1]));
|
sf_solidify(_curve(surfaces[0]), _curve(surfaces[1]), convexity = convexity);
|
||||||
}
|
}
|
@@ -12,7 +12,7 @@ use <_impl/_sf_square_surfaces.scad>;
|
|||||||
use <sf_solidify.scad>;
|
use <sf_solidify.scad>;
|
||||||
use <../ptf/ptf_ring.scad>;
|
use <../ptf/ptf_ring.scad>;
|
||||||
|
|
||||||
module sf_ring(levels, radius, thickness, depth, angle = 360, twist = 0, invert = false) {
|
module sf_ring(levels, radius, thickness, depth, angle = 360, twist = 0, invert = false, convexity = 1) {
|
||||||
dp = is_undef(depth) ? thickness / 2 : depth;
|
dp = is_undef(depth) ? thickness / 2 : depth;
|
||||||
surface = _sf_square_surfaces(levels, thickness, dp, invert);
|
surface = _sf_square_surfaces(levels, thickness, dp, invert);
|
||||||
rows = len(levels);
|
rows = len(levels);
|
||||||
@@ -37,8 +37,8 @@ module sf_ring(levels, radius, thickness, depth, angle = 360, twist = 0, invert
|
|||||||
for(p = row)
|
for(p = row)
|
||||||
ptf_ring(size, [p[0], p[1], -p[2]], radius, angle, twist)
|
ptf_ring(size, [p[0], p[1], -p[2]], radius, angle, twist)
|
||||||
]
|
]
|
||||||
]
|
],
|
||||||
|
convexity = convexity
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
sf_solidify(
|
sf_solidify(
|
||||||
@@ -55,7 +55,8 @@ module sf_ring(levels, radius, thickness, depth, angle = 360, twist = 0, invert
|
|||||||
for(p = row)
|
for(p = row)
|
||||||
ptf_ring(size, p - centered, radius, angle, twist)
|
ptf_ring(size, p - centered, radius, angle, twist)
|
||||||
]
|
]
|
||||||
]
|
],
|
||||||
|
convexity = convexity
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -11,7 +11,7 @@
|
|||||||
use <../util/reverse.scad>;
|
use <../util/reverse.scad>;
|
||||||
use <../util/flat.scad>;
|
use <../util/flat.scad>;
|
||||||
|
|
||||||
module sf_solidify(surface1, surface2, slicing = "SLASH") {
|
module sf_solidify(surface1, surface2, slicing = "SLASH", convexity = 1) {
|
||||||
rows = len(surface1);
|
rows = len(surface1);
|
||||||
columns = len(surface1[0]);
|
columns = len(surface1[0]);
|
||||||
|
|
||||||
@@ -143,7 +143,8 @@ module sf_solidify(surface1, surface2, slicing = "SLASH") {
|
|||||||
|
|
||||||
polyhedron(
|
polyhedron(
|
||||||
points = pts,
|
points = pts,
|
||||||
faces = face_idxs
|
faces = face_idxs,
|
||||||
|
convexity = convexity
|
||||||
);
|
);
|
||||||
|
|
||||||
// hook for testing
|
// hook for testing
|
||||||
|
@@ -14,7 +14,7 @@ use <../util/set/hashset_add.scad>;
|
|||||||
use <../util/set/hashset_del.scad>;
|
use <../util/set/hashset_del.scad>;
|
||||||
use <../util/set/hashset_elems.scad>;
|
use <../util/set/hashset_elems.scad>;
|
||||||
|
|
||||||
module sf_solidifyT(points1, points2, triangles) {
|
module sf_solidifyT(points1, points2, triangles, convexity = 1) {
|
||||||
// triangles : counter-clockwise
|
// triangles : counter-clockwise
|
||||||
leng = len(points1);
|
leng = len(points1);
|
||||||
assert(leng == len(points2), "The length of points1 must equal to the length of points2");
|
assert(leng == len(points2), "The length of points1 must equal to the length of points2");
|
||||||
@@ -60,6 +60,7 @@ module sf_solidifyT(points1, points2, triangles) {
|
|||||||
tris,
|
tris,
|
||||||
[for(tri = triangles) tri + [leng, leng, leng]],
|
[for(tri = triangles) tri + [leng, leng, leng]],
|
||||||
side_faces
|
side_faces
|
||||||
)
|
),
|
||||||
|
convexity = convexity
|
||||||
);
|
);
|
||||||
}
|
}
|
@@ -12,7 +12,7 @@ use <_impl/_sf_square_surfaces.scad>;
|
|||||||
use <sf_solidify.scad>;
|
use <sf_solidify.scad>;
|
||||||
use <../ptf/ptf_sphere.scad>;
|
use <../ptf/ptf_sphere.scad>;
|
||||||
|
|
||||||
module sf_sphere(levels, radius, thickness, depth, angle = [180, 360], invert = false) {
|
module sf_sphere(levels, radius, thickness, depth, angle = [180, 360], invert = false, convexity = 1) {
|
||||||
dp = is_undef(depth) ? thickness / 2 : depth;
|
dp = is_undef(depth) ? thickness / 2 : depth;
|
||||||
faces = _sf_square_surfaces(levels, thickness, dp, invert);
|
faces = _sf_square_surfaces(levels, thickness, dp, invert);
|
||||||
rows = len(levels);
|
rows = len(levels);
|
||||||
@@ -34,6 +34,7 @@ module sf_sphere(levels, radius, thickness, depth, angle = [180, 360], invert =
|
|||||||
[
|
[
|
||||||
for(p = row) ptf_sphere(size, p, radius, angle)
|
for(p = row) ptf_sphere(size, p, radius, angle)
|
||||||
]
|
]
|
||||||
]
|
],
|
||||||
|
convexity = convexity
|
||||||
);
|
);
|
||||||
}
|
}
|
@@ -13,7 +13,7 @@ use <../ptf/ptf_y_twist.scad>;
|
|||||||
use <_impl/_sf_square_surfaces.scad>;
|
use <_impl/_sf_square_surfaces.scad>;
|
||||||
use <sf_solidify.scad>;
|
use <sf_solidify.scad>;
|
||||||
|
|
||||||
module sf_square(levels, thickness, depth, x_twist = 0, y_twist = 0, invert = false) {
|
module sf_square(levels, thickness, depth, x_twist = 0, y_twist = 0, invert = false, convexity = 1) {
|
||||||
size = [len(levels[0]), len(levels)];
|
size = [len(levels[0]), len(levels)];
|
||||||
dp = is_undef(depth) ? thickness / 2 : depth;
|
dp = is_undef(depth) ? thickness / 2 : depth;
|
||||||
surface = _sf_square_surfaces(levels, thickness, dp, invert);
|
surface = _sf_square_surfaces(levels, thickness, dp, invert);
|
||||||
@@ -37,6 +37,7 @@ module sf_square(levels, thickness, depth, x_twist = 0, y_twist = 0, invert = fa
|
|||||||
y_twist
|
y_twist
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
]
|
],
|
||||||
|
convexity = convexity
|
||||||
);
|
);
|
||||||
}
|
}
|
@@ -11,7 +11,7 @@
|
|||||||
use <../util/sum.scad>;
|
use <../util/sum.scad>;
|
||||||
use <sf_solidify.scad>;
|
use <sf_solidify.scad>;
|
||||||
|
|
||||||
module sf_thicken(points, thickness, direction = "BOTH") {
|
module sf_thicken(points, thickness, direction = "BOTH", convexity = 1) {
|
||||||
function tri_normal(tri) =
|
function tri_normal(tri) =
|
||||||
let(v = cross(tri[2] - tri[0], tri[1] - tri[0])) v / norm(v);
|
let(v = cross(tri[2] - tri[0], tri[1] - tri[0])) v / norm(v);
|
||||||
|
|
||||||
@@ -51,10 +51,10 @@ module sf_thicken(points, thickness, direction = "BOTH") {
|
|||||||
nv = tri_normal([points[midy][midx], points[midy + 1][midx], points[midy][midx + 1]]);
|
nv = tri_normal([points[midy][midx], points[midy + 1][midx], points[midy][midx + 1]]);
|
||||||
|
|
||||||
if(nv * dir_v > 0) {
|
if(nv * dir_v > 0) {
|
||||||
sf_solidify(surface_another, points);
|
sf_solidify(surface_another, points, convexity = convexity);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
sf_solidify(points, surface_another);
|
sf_solidify(points, surface_another, convexity = convexity);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -70,17 +70,17 @@ module sf_thicken(points, thickness, direction = "BOTH") {
|
|||||||
half_thickness = thickness / 2;
|
half_thickness = thickness / 2;
|
||||||
surface_top = points + half_thickness * vertex_normals;
|
surface_top = points + half_thickness * vertex_normals;
|
||||||
surface_bottom = points - half_thickness * vertex_normals;
|
surface_bottom = points - half_thickness * vertex_normals;
|
||||||
sf_solidify(surface_top, surface_bottom);
|
sf_solidify(surface_top, surface_bottom, convexity = convexity);
|
||||||
}
|
}
|
||||||
else if(direction == "FORWARD") {
|
else if(direction == "FORWARD") {
|
||||||
surface_top = points + thickness * vertex_normals;
|
surface_top = points + thickness * vertex_normals;
|
||||||
surface_bottom = points;
|
surface_bottom = points;
|
||||||
sf_solidify(surface_top, surface_bottom);
|
sf_solidify(surface_top, surface_bottom, convexity = convexity);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
surface_top = points;
|
surface_top = points;
|
||||||
surface_bottom = points - thickness * vertex_normals;
|
surface_bottom = points - thickness * vertex_normals;
|
||||||
sf_solidify(surface_top, surface_bottom);
|
sf_solidify(surface_top, surface_bottom, convexity = convexity);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -15,7 +15,7 @@ use <../util/sum.scad>;
|
|||||||
use <../surface/sf_solidifyT.scad>;
|
use <../surface/sf_solidifyT.scad>;
|
||||||
use <../triangle/tri_delaunay.scad>;
|
use <../triangle/tri_delaunay.scad>;
|
||||||
|
|
||||||
module sf_thickenT(points, thickness, triangles = undef, direction = "BOTH") {
|
module sf_thickenT(points, thickness, triangles = undef, direction = "BOTH", convexity = 1) {
|
||||||
// triangles : counter-clockwise
|
// triangles : counter-clockwise
|
||||||
real_triangles = is_undef(triangles) ? tri_delaunay([for(p = points) [p[0], p[1]]]) : triangles;
|
real_triangles = is_undef(triangles) ? tri_delaunay([for(p = points) [p[0], p[1]]]) : triangles;
|
||||||
|
|
||||||
@@ -52,10 +52,10 @@ module sf_thickenT(points, thickness, triangles = undef, direction = "BOTH") {
|
|||||||
pts = [for(p = points) p + dir_v * thickness];
|
pts = [for(p = points) p + dir_v * thickness];
|
||||||
|
|
||||||
if(nv * dir_v > 0) {
|
if(nv * dir_v > 0) {
|
||||||
sf_solidifyT(pts, points, real_triangles);
|
sf_solidifyT(pts, points, real_triangles, convexity = convexity);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
sf_solidifyT(points, pts, real_triangles);
|
sf_solidifyT(points, pts, real_triangles, convexity = convexity);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -78,17 +78,17 @@ module sf_thickenT(points, thickness, triangles = undef, direction = "BOTH") {
|
|||||||
half_thickness = thickness / 2;
|
half_thickness = thickness / 2;
|
||||||
pts1 = points + vertex_normals * half_thickness;
|
pts1 = points + vertex_normals * half_thickness;
|
||||||
pts2 = points - vertex_normals * half_thickness;
|
pts2 = points - vertex_normals * half_thickness;
|
||||||
sf_solidifyT(pts1, pts2, real_triangles);
|
sf_solidifyT(pts1, pts2, real_triangles, convexity = convexity);
|
||||||
}
|
}
|
||||||
else if(direction == "FORWARD") {
|
else if(direction == "FORWARD") {
|
||||||
pts1 = points + vertex_normals * thickness;
|
pts1 = points + vertex_normals * thickness;
|
||||||
pts2 = points;
|
pts2 = points;
|
||||||
sf_solidifyT(pts1, pts2, real_triangles);
|
sf_solidifyT(pts1, pts2, real_triangles, convexity = convexity);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
pts1 = points;
|
pts1 = points;
|
||||||
pts2 = points - vertex_normals * thickness;
|
pts2 = points - vertex_normals * thickness;
|
||||||
sf_solidifyT(pts1, pts2, real_triangles);
|
sf_solidifyT(pts1, pts2, real_triangles, convexity = convexity);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -12,7 +12,7 @@ use <_impl/_sf_square_surfaces.scad>;
|
|||||||
use <sf_solidify.scad>;
|
use <sf_solidify.scad>;
|
||||||
use <../ptf/ptf_torus.scad>;
|
use <../ptf/ptf_torus.scad>;
|
||||||
|
|
||||||
module sf_torus(levels, radius, thickness, depth, angle = [360, 360], twist = 0, invert = false) {
|
module sf_torus(levels, radius, thickness, depth, angle = [360, 360], twist = 0, invert = false, convexity = 1) {
|
||||||
dp = is_undef(depth) ? thickness / 2 : depth;
|
dp = is_undef(depth) ? thickness / 2 : depth;
|
||||||
surface = _sf_square_surfaces(levels, thickness, dp, invert);
|
surface = _sf_square_surfaces(levels, thickness, dp, invert);
|
||||||
rows = len(levels);
|
rows = len(levels);
|
||||||
@@ -39,6 +39,7 @@ module sf_torus(levels, radius, thickness, depth, angle = [360, 360], twist = 0,
|
|||||||
[
|
[
|
||||||
for(p = row) ptf_torus(size, p, tr2, angle, twist)
|
for(p = row) ptf_torus(size, p, tr2, angle, twist)
|
||||||
]
|
]
|
||||||
]
|
],
|
||||||
|
convexity = convexity
|
||||||
);
|
);
|
||||||
}
|
}
|
Reference in New Issue
Block a user