Compare commits

...

13 commits

Author SHA1 Message Date
adrianVmariano
674c0279ef
Merge 6d9d5a8e5a into 53af9121e7 2024-09-01 11:33:09 +00:00
Adrian Mariano
6d9d5a8e5a fix function return from regular_prism() 2024-09-01 07:32:46 -04:00
Revar Desmera
53af9121e7
Merge pull request #1464 from adrianVmariano/master
doc fix & screws fix
2024-08-11 22:48:27 -07:00
Revar Desmera
736fad321b
Merge pull request #1459 from adrianVmariano/master 2024-07-27 14:01:30 -07:00
Revar Desmera
cc08eb3323
Merge pull request #1458 from adrianVmariano/master
Fix new examples
2024-07-27 02:21:31 -07:00
Revar Desmera
78ea8e4770
Merge pull request #1457 from adrianVmariano/master
vnf_sheet & bezier_sheet
2024-07-25 23:01:31 -07:00
Revar Desmera
8383d360cc
Merge pull request #1454 from adrianVmariano/master
various fixes
2024-07-19 21:35:00 -07:00
Revar Desmera
9145c0961f
Merge pull request #1450 from BelfrySCAD/revarbat_dev
Remove redundant collinear points from bezpath_curve() output.
2024-07-07 00:34:15 -07:00
Revar Desmera
ebb98b47d2 Remove redundant collinear points from bezpath_curve() output. 2024-07-07 00:11:23 -07:00
Revar Desmera
8ea8ebf341
Merge pull request #1447 from adrianVmariano/master
su/product optimization
2024-06-29 15:41:11 -07:00
Revar Desmera
17e307fdb4
Merge pull request #1446 from adrianVmariano/master
projection doc fix
2024-06-22 20:58:13 -07:00
Revar Desmera
67f0004773
Merge pull request #1445 from adrianVmariano/master
add projection()
2024-06-22 18:10:12 -07:00
Revar Desmera
76d09271c1
Merge pull request #1441 from adrianVmariano/master
spiral sweep bugfix
2024-06-12 22:57:08 -07:00
2 changed files with 45 additions and 40 deletions

View file

@ -466,12 +466,15 @@ function bezpath_curve(bezpath, splinesteps=16, N=3, endpoint=true) =
assert(len(bezpath)%N == 1, str("A degree ",N," bezier path should have a multiple of ",N," points in it, plus 1.")) assert(len(bezpath)%N == 1, str("A degree ",N," bezier path should have a multiple of ",N," points in it, plus 1."))
let( let(
segs = (len(bezpath)-1) / N, segs = (len(bezpath)-1) / N,
step = 1 / splinesteps step = 1 / splinesteps,
) [ path = [
for (seg = [0:1:segs-1]) for (seg = [0:1:segs-1])
each bezier_points(select(bezpath, seg*N, (seg+1)*N), [0:step:1-step/2]), each bezier_points(select(bezpath, seg*N, (seg+1)*N), [0:step:1-step/2]),
if (endpoint) last(bezpath) if (endpoint) last(bezpath)
]; ],
is_closed = approx(path[0], last(path)),
out = path_merge_collinear(path, closed=is_closed)
) out;
// Function: bezpath_closest_point() // Function: bezpath_closest_point()

View file

@ -977,7 +977,8 @@ module regular_prism(n,
texture=texture, tex_size=tex_size, tex_reps=tex_reps, texture=texture, tex_size=tex_size, tex_reps=tex_reps,
tex_inset=tex_inset, tex_rot=tex_rot, tex_inset=tex_inset, tex_rot=tex_rot,
tex_depth=tex_depth, tex_samples=tex_samples, tex_depth=tex_depth, tex_samples=tex_samples,
tex_taper=tex_taper, style=style); tex_taper=tex_taper, style=style,
_return_anchors=true);
attachable(anchor=anchor, orient=orient, spin=spin, vnf=vnf_anchors_ovr[0], anchors=vnf_anchors_ovr[1],override=vnf_anchors_ovr[2]){ attachable(anchor=anchor, orient=orient, spin=spin, vnf=vnf_anchors_ovr[0], anchors=vnf_anchors_ovr[1],override=vnf_anchors_ovr[2]){
vnf_polyhedron(vnf_anchors_ovr[0],convexity=is_def(texture)?10:2); vnf_polyhedron(vnf_anchors_ovr[0],convexity=is_def(texture)?10:2);
children(); children();
@ -1003,7 +1004,7 @@ function regular_prism(n,
tex_inset=false, tex_rot=0, tex_inset=false, tex_rot=0,
tex_depth, tex_samples, length, height, tex_depth, tex_samples, length, height,
tex_taper, style, tex_taper, style,
anchor, spin=0, orient=UP anchor, spin=0, orient=UP,_return_anchors=false
) = ) =
assert(is_integer(n) && n>2, "n must be an integer 3 or greater") assert(is_integer(n) && n>2, "n must be an integer 3 or greater")
let( let(
@ -1132,32 +1133,33 @@ function regular_prism(n,
anchors = approx(shift,[0,0]) ? anchors = approx(shift,[0,0]) ?
[for(i=[0:n-1], j=[0:1]) [for(i=[0:n-1], j=[0:1])
let( let(
M = zrot(-(i+j/2-(realign?1/2:0))*360/n), M = zrot(-(i+j/2-(realign?1/2:0))*360/n),
edge = apply(M,edge_face[j]), edge = apply(M,edge_face[j]),
dir = apply(M,[height,0,-edge_face[j].x]), dir = apply(M,[height,0,-edge_face[j].x]),
spin = sign(dir.x)*vector_angle(edge - (edge*dir)*dir, rot(from=UP,to=dir,p=BACK)) spin = sign(dir.x)*vector_angle(edge - (edge*dir)*dir, rot(from=UP,to=dir,p=BACK))
) )
each each [
[ named_anchor(str(names[j],i), apply(M,[(r1+r2)/2/(j==0?1:sc),0,0]), dir, spin),
named_anchor(str(names[j],i), apply(M,[(r1+r2)/2/(j==0?1:sc),0,0]), dir, spin), named_anchor(str(j==0?"top_corner":"top_edge",i), apply(M,[r2/(j==0?1:sc),0,height/2]), dir, spin),
named_anchor(str(j==0?"top_corner":"top_edge",i), apply(M,[r2/(j==0?1:sc),0,height/2]), dir, spin), named_anchor(str(j==0?"bot_corner":"bot_edge",i), apply(M,[r1/(j==0?1:sc),0,-height/2]), dir, spin),
named_anchor(str(j==0?"bot_corner":"bot_edge",i), apply(M,[r1/(j==0?1:sc),0,-height/2]), dir, spin), ]
] ]
]:let( :
faces = [ let(
for(i=[0:n-1]) faces = [
let( for(i=[0:n-1])
M1 = skmat*zrot(-i*360/n), let(
M2 = skmat*zrot(-(i+1)*360/n), M1 = skmat*zrot(-i*360/n),
edge1 = apply(M1,[[r2,0,height/2], [r1,0,-height/2]]), M2 = skmat*zrot(-(i+1)*360/n),
edge2 = apply(M2,[[r2,0,height/2], [r1,0,-height/2]]), edge1 = apply(M1,[[r2,0,height/2], [r1,0,-height/2]]),
face_edge = (edge1+edge2)/2, edge2 = apply(M2,[[r2,0,height/2], [r1,0,-height/2]]),
facenormal = unit(cross(edge1[0]-edge1[1], edge2[1]-edge1[0])) face_edge = (edge1+edge2)/2,
) facenormal = unit(cross(edge1[0]-edge1[1], edge2[1]-edge1[0]))
[facenormal,face_edge[0]-face_edge[1],edge1[0]-edge1[1]] // [normal to face, edge through face center, actual edge] )
] [facenormal,face_edge[0]-face_edge[1],edge1[0]-edge1[1]] // [normal to face, edge through face center, actual edge]
) ]
[for(i=[0:n-1]) )
[for(i=[0:n-1])
let( let(
Mface = skmat*zrot(-(i+1/2)*360/n), Mface = skmat*zrot(-(i+1/2)*360/n),
faceedge = faces[i][1], faceedge = faces[i][1],
@ -1177,12 +1179,12 @@ function regular_prism(n,
named_anchor(str("bot_edge",i), apply(Mface,[r1/sc,0,-height/2]), facenormal, facespin), named_anchor(str("bot_edge",i), apply(Mface,[r1/sc,0,-height/2]), facenormal, facespin),
named_anchor(str("bot_corner",i), apply(Medge,[r1,0,-height/2]), edgenormal, edgespin) named_anchor(str("bot_corner",i), apply(Medge,[r1,0,-height/2]), edgenormal, edgespin)
] ]
], ],
override = approx(shift,[0,0]) ? undef : [[UP, [point3d(shift,height/2), UP]]] override = approx(shift,[0,0]) ? undef : [[UP, [point3d(shift,height/2), UP]]],
final_vnf = reorient(anchor,spin,orient, vnf=ovnf, p=ovnf,anchors=anchors, override=override)
) )
[reorient(anchor,spin,orient, vnf=ovnf, p=ovnf,anchors=anchors, override=override),anchors,override]; _return_anchors ? [final_vnf,anchors,override]
: final_vnf;
// Module: rect_tube() // Module: rect_tube()