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

add convexity param

This commit is contained in:
Justin Lin
2021-08-20 21:28:17 +08:00
parent 13ca93e9db
commit a37c6030e9
10 changed files with 37 additions and 30 deletions

View File

@@ -12,7 +12,7 @@ use <_impl/_sf_square_surfaces.scad>;
use <sf_solidify.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;
surface = _sf_square_surfaces(levels, thickness, dp, invert);
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)
]
]
],
convexity = convexity
);
}

View File

@@ -12,7 +12,7 @@ use <_impl/_sf_square_surfaces.scad>;
use <sf_solidify.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);
columns = len(levels[0]);
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);
}

View File

@@ -12,7 +12,7 @@ use <_impl/_sf_square_surfaces.scad>;
use <sf_solidify.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;
surface = _sf_square_surfaces(levels, thickness, dp, invert);
rows = len(levels);
@@ -37,8 +37,8 @@ module sf_ring(levels, radius, thickness, depth, angle = 360, twist = 0, invert
for(p = row)
ptf_ring(size, [p[0], p[1], -p[2]], radius, angle, twist)
]
]
],
convexity = convexity
);
} else {
sf_solidify(
@@ -55,7 +55,8 @@ module sf_ring(levels, radius, thickness, depth, angle = 360, twist = 0, invert
for(p = row)
ptf_ring(size, p - centered, radius, angle, twist)
]
]
],
convexity = convexity
);
}
}

View File

@@ -11,7 +11,7 @@
use <../util/reverse.scad>;
use <../util/flat.scad>;
module sf_solidify(surface1, surface2, slicing = "SLASH") {
module sf_solidify(surface1, surface2, slicing = "SLASH", convexity = 1) {
rows = len(surface1);
columns = len(surface1[0]);
@@ -143,7 +143,8 @@ module sf_solidify(surface1, surface2, slicing = "SLASH") {
polyhedron(
points = pts,
faces = face_idxs
faces = face_idxs,
convexity = convexity
);
// hook for testing

View File

@@ -14,7 +14,7 @@ use <../util/set/hashset_add.scad>;
use <../util/set/hashset_del.scad>;
use <../util/set/hashset_elems.scad>;
module sf_solidifyT(points1, points2, triangles) {
module sf_solidifyT(points1, points2, triangles, convexity = 1) {
// triangles : counter-clockwise
leng = len(points1);
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,
[for(tri = triangles) tri + [leng, leng, leng]],
side_faces
)
),
convexity = convexity
);
}

View File

@@ -12,7 +12,7 @@ use <_impl/_sf_square_surfaces.scad>;
use <sf_solidify.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;
faces = _sf_square_surfaces(levels, thickness, dp, invert);
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)
]
]
],
convexity = convexity
);
}

View File

@@ -13,7 +13,7 @@ use <../ptf/ptf_y_twist.scad>;
use <_impl/_sf_square_surfaces.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)];
dp = is_undef(depth) ? thickness / 2 : depth;
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
)
]
]
],
convexity = convexity
);
}

View File

@@ -11,7 +11,7 @@
use <../util/sum.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) =
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]]);
if(nv * dir_v > 0) {
sf_solidify(surface_another, points);
sf_solidify(surface_another, points, convexity = convexity);
}
else {
sf_solidify(points, surface_another);
sf_solidify(points, surface_another, convexity = convexity);
}
}
else {
@@ -70,17 +70,17 @@ module sf_thicken(points, thickness, direction = "BOTH") {
half_thickness = thickness / 2;
surface_top = 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") {
surface_top = points + thickness * vertex_normals;
surface_bottom = points;
sf_solidify(surface_top, surface_bottom);
sf_solidify(surface_top, surface_bottom, convexity = convexity);
}
else {
surface_top = points;
surface_bottom = points - thickness * vertex_normals;
sf_solidify(surface_top, surface_bottom);
sf_solidify(surface_top, surface_bottom, convexity = convexity);
}
}
}

View File

@@ -15,7 +15,7 @@ use <../util/sum.scad>;
use <../surface/sf_solidifyT.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
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];
if(nv * dir_v > 0) {
sf_solidifyT(pts, points, real_triangles);
sf_solidifyT(pts, points, real_triangles, convexity = convexity);
}
else {
sf_solidifyT(points, pts, real_triangles);
sf_solidifyT(points, pts, real_triangles, convexity = convexity);
}
}
else {
@@ -78,17 +78,17 @@ module sf_thickenT(points, thickness, triangles = undef, direction = "BOTH") {
half_thickness = thickness / 2;
pts1 = 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") {
pts1 = points + vertex_normals * thickness;
pts2 = points;
sf_solidifyT(pts1, pts2, real_triangles);
sf_solidifyT(pts1, pts2, real_triangles, convexity = convexity);
}
else {
pts1 = points;
pts2 = points - vertex_normals * thickness;
sf_solidifyT(pts1, pts2, real_triangles);
sf_solidifyT(pts1, pts2, real_triangles, convexity = convexity);
}
}
}

View File

@@ -12,7 +12,7 @@ use <_impl/_sf_square_surfaces.scad>;
use <sf_solidify.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;
surface = _sf_square_surfaces(levels, thickness, dp, invert);
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)
]
]
],
convexity = convexity
);
}