From d2065f5410710efccd5c3c9b4f6570d560ac211c Mon Sep 17 00:00:00 2001 From: Justin Lin Date: Fri, 4 Dec 2020 09:13:39 +0800 Subject: [PATCH] support 3D points --- src/voxel/_impl/_vx_bezier_impl.scad | 7 ++++--- src/voxel/vx_bezier.scad | 10 +++++++++- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/voxel/_impl/_vx_bezier_impl.scad b/src/voxel/_impl/_vx_bezier_impl.scad index 7f6eb9e7..0392de9f 100644 --- a/src/voxel/_impl/_vx_bezier_impl.scad +++ b/src/voxel/_impl/_vx_bezier_impl.scad @@ -5,11 +5,12 @@ function _vx_bezier_pt(p1, p2, p3, p4, pts) = a3 = (p3 + p4) * 0.5, b1 = (a1 + a2) * 0.5, b2 = (a2 + a3) * 0.5, - c = (b1 + b2) * 0.5 + c = (b1 + b2) * 0.5, + p = [round(c[0]), round(c[1]), round(c[0])] ) - _vx_bezier(c, b2, a3, p4, _vx_bezier(p1, a1, b1, c, concat(pts, [[round(c[0]), round(c[1])]]))); + _vx_bezier(c, b2, a3, p4, _vx_bezier(p1, a1, b1, c, concat(pts, [p]))); function _vx_bezier(p1, p2, p3, p4, pts) = - (abs(p1[0] - p4[0]) < 1 && abs(p1[1] - p4[1]) < 1) ? + (abs(p1[0] - p4[0]) < 1 && abs(p1[1] - p4[1]) < 1 && abs(p1[2] - p4[2]) < 1) ? pts : _vx_bezier_pt(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 d5695d11..ddda5aff 100644 --- a/src/voxel/vx_bezier.scad +++ b/src/voxel/vx_bezier.scad @@ -1,3 +1,11 @@ +use <__comm__/__to2d.scad>; +use <__comm__/__to3d.scad>; use <_impl/_vx_bezier_impl.scad>; -function vx_bezier(p1, p2, p3, p4) = _vx_bezier(p1, p2, p3, p4, []); \ No newline at end of file +function vx_bezier(p1, p2, p3, p4) = + let( + is2d = len(p1) == 2, + pts = is2d ? _vx_bezier(__to3d(p1), __to3d(p2), __to3d(p3), __to3d(p4), []) : + _vx_bezier(p1, p2, p3, p4, []) + ) + is2d ? [for(p = pts) __to2d(p)] : pts; \ No newline at end of file