diff --git a/src/voxel/_impl/_vx_bezier_impl.scad b/src/voxel/_impl/_vx_bezier_impl.scad index 08eda6a8..347477cf 100644 --- a/src/voxel/_impl/_vx_bezier_impl.scad +++ b/src/voxel/_impl/_vx_bezier_impl.scad @@ -11,7 +11,7 @@ function _vx_bezier_pt3(p1, p2, p3, p4, pts) = _vx_bezier3(c, b2, a3, p4, _vx_bezier3(p1, a1, b1, c, concat(pts, [p]))); function _vx_bezier3(p1, p2, p3, p4, pts) = - (abs(p1[0] - p4[0]) < 1 && abs(p1[1] - p4[1]) < 1 && abs(p1[2] - p4[2]) < 1) ? + (abs(p1[0] - p4[0]) < 0.5 && abs(p1[1] - p4[1]) < 0.5 && abs(p1[2] - p4[2]) < 0.5) ? pts : _vx_bezier_pt3(p1, p2, p3, p4, pts); @@ -28,6 +28,6 @@ function _vx_bezier_pt2(p1, p2, p3, p4, pts) = _vx_bezier2(c, b2, a3, p4, _vx_bezier2(p1, a1, b1, c, concat(pts, [p]))); function _vx_bezier2(p1, p2, p3, p4, pts) = - (abs(p1[0] - p4[0]) < 1 && abs(p1[1] - p4[1]) < 1) ? + (abs(p1[0] - p4[0]) < 0.5 && abs(p1[1] - p4[1]) < 0.5) ? pts : _vx_bezier_pt2(p1, p2, p3, p4, pts); \ No newline at end of file diff --git a/src/voxel/vx_bezier.scad b/src/voxel/vx_bezier.scad index c66c7d3d..eb973ec1 100644 --- a/src/voxel/vx_bezier.scad +++ b/src/voxel/vx_bezier.scad @@ -1,11 +1,14 @@ use <__comm__/__to2d.scad>; use <__comm__/__to3d.scad>; use <_impl/_vx_bezier_impl.scad>; +use <../util/sort.scad>; +use <../util/dedup.scad>; function vx_bezier(p1, p2, p3, p4) = let( is2d = len(p1) == 2, pts = is2d ? _vx_bezier2(__to3d(p1), __to3d(p2), __to3d(p3), __to3d(p4), []) : - _vx_bezier3(p1, p2, p3, p4, []) + _vx_bezier3(p1, p2, p3, p4, []), + sorted = dedup(sort(pts, by = "vt"), sorted = true) ) - is2d ? [for(p = pts) __to2d(p)] : pts; \ No newline at end of file + is2d ? [for(p = sorted) __to2d(p)] : sorted; \ No newline at end of file