mirror of
https://github.com/JustinSDK/dotSCAD.git
synced 2025-08-12 17:54:18 +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 <../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
|
||||
);
|
||||
}
|
@@ -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);
|
||||
}
|
@@ -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
|
||||
);
|
||||
}
|
||||
}
|
@@ -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
|
||||
|
@@ -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
|
||||
);
|
||||
}
|
@@ -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
|
||||
);
|
||||
}
|
@@ -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
|
||||
);
|
||||
}
|
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
@@ -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
|
||||
);
|
||||
}
|
Reference in New Issue
Block a user