From a37c6030e955abe4dbba301507ad265c8634d0bf Mon Sep 17 00:00:00 2001 From: Justin Lin Date: Fri, 20 Aug 2021 21:28:17 +0800 Subject: [PATCH] add convexity param --- src/surface/sf_bend.scad | 5 +++-- src/surface/sf_curve.scad | 4 ++-- src/surface/sf_ring.scad | 9 +++++---- src/surface/sf_solidify.scad | 5 +++-- src/surface/sf_solidifyT.scad | 5 +++-- src/surface/sf_sphere.scad | 5 +++-- src/surface/sf_square.scad | 5 +++-- src/surface/sf_thicken.scad | 12 ++++++------ src/surface/sf_thickenT.scad | 12 ++++++------ src/surface/sf_torus.scad | 5 +++-- 10 files changed, 37 insertions(+), 30 deletions(-) diff --git a/src/surface/sf_bend.scad b/src/surface/sf_bend.scad index 3b92e790..c0dfbc8e 100644 --- a/src/surface/sf_bend.scad +++ b/src/surface/sf_bend.scad @@ -12,7 +12,7 @@ use <_impl/_sf_square_surfaces.scad>; use ; 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 ); } \ No newline at end of file diff --git a/src/surface/sf_curve.scad b/src/surface/sf_curve.scad index 4d876b52..436929cf 100644 --- a/src/surface/sf_curve.scad +++ b/src/surface/sf_curve.scad @@ -12,7 +12,7 @@ use <_impl/_sf_square_surfaces.scad>; use ; 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); } \ No newline at end of file diff --git a/src/surface/sf_ring.scad b/src/surface/sf_ring.scad index 4b4d4820..94518363 100644 --- a/src/surface/sf_ring.scad +++ b/src/surface/sf_ring.scad @@ -12,7 +12,7 @@ use <_impl/_sf_square_surfaces.scad>; use ; 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 ); } } \ No newline at end of file diff --git a/src/surface/sf_solidify.scad b/src/surface/sf_solidify.scad index 80620df9..0262446d 100644 --- a/src/surface/sf_solidify.scad +++ b/src/surface/sf_solidify.scad @@ -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 diff --git a/src/surface/sf_solidifyT.scad b/src/surface/sf_solidifyT.scad index 81946b66..1584ba9e 100644 --- a/src/surface/sf_solidifyT.scad +++ b/src/surface/sf_solidifyT.scad @@ -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 ); } \ No newline at end of file diff --git a/src/surface/sf_sphere.scad b/src/surface/sf_sphere.scad index fff902e1..21ed12b2 100644 --- a/src/surface/sf_sphere.scad +++ b/src/surface/sf_sphere.scad @@ -12,7 +12,7 @@ use <_impl/_sf_square_surfaces.scad>; use ; 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 ); } \ No newline at end of file diff --git a/src/surface/sf_square.scad b/src/surface/sf_square.scad index a7b9d643..6cadfe85 100644 --- a/src/surface/sf_square.scad +++ b/src/surface/sf_square.scad @@ -13,7 +13,7 @@ use <../ptf/ptf_y_twist.scad>; use <_impl/_sf_square_surfaces.scad>; use ; -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 ); } \ No newline at end of file diff --git a/src/surface/sf_thicken.scad b/src/surface/sf_thicken.scad index 10d384df..05fb4d46 100644 --- a/src/surface/sf_thicken.scad +++ b/src/surface/sf_thicken.scad @@ -11,7 +11,7 @@ use <../util/sum.scad>; use ; -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); } } } \ No newline at end of file diff --git a/src/surface/sf_thickenT.scad b/src/surface/sf_thickenT.scad index fa207f8d..c690c289 100644 --- a/src/surface/sf_thickenT.scad +++ b/src/surface/sf_thickenT.scad @@ -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); } } } \ No newline at end of file diff --git a/src/surface/sf_torus.scad b/src/surface/sf_torus.scad index a33bfd38..df20073a 100644 --- a/src/surface/sf_torus.scad +++ b/src/surface/sf_torus.scad @@ -12,7 +12,7 @@ use <_impl/_sf_square_surfaces.scad>; use ; 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 ); } \ No newline at end of file