mirror of
https://github.com/BelfrySCAD/BOSL2.git
synced 2025-01-01 09:49:45 +00:00
Textured linear_sweep() scale and twist bugfixes.
This commit is contained in:
parent
aab04247a8
commit
4c25633893
2 changed files with 59 additions and 44 deletions
|
@ -1629,7 +1629,8 @@ function cyl(
|
||||||
texture=texture, tex_reps=tex_reps, tex_size=tex_size,
|
texture=texture, tex_reps=tex_reps, tex_size=tex_size,
|
||||||
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, closed=false
|
tex_taper=tex_taper, style=style, closed=false,
|
||||||
|
_tex_inhibit_y_slicing=true
|
||||||
),
|
),
|
||||||
skmat = down(l/2) *
|
skmat = down(l/2) *
|
||||||
skew(sxz=shift.x/l, syz=shift.y/l) *
|
skew(sxz=shift.x/l, syz=shift.y/l) *
|
||||||
|
|
68
skin.scad
68
skin.scad
|
@ -966,7 +966,8 @@ function rotate_sweep(
|
||||||
tex_taper, shift=[0,0], closed=true,
|
tex_taper, shift=[0,0], closed=true,
|
||||||
style="min_edge", cp="centroid",
|
style="min_edge", cp="centroid",
|
||||||
atype="hull", anchor="origin",
|
atype="hull", anchor="origin",
|
||||||
spin=0, orient=UP
|
spin=0, orient=UP,
|
||||||
|
_tex_inhibit_y_slicing=false
|
||||||
) =
|
) =
|
||||||
assert(num_defined([tex_reps,tex_counts])<2, "In rotate_sweep() the 'tex_counts' parameters has been replaced by 'tex_reps'. You cannot give both.")
|
assert(num_defined([tex_reps,tex_counts])<2, "In rotate_sweep() the 'tex_counts' parameters has been replaced by 'tex_reps'. You cannot give both.")
|
||||||
assert(num_defined([tex_scale,tex_depth])<2, "In linear_sweep() the 'tex_scale' parameter has been replaced by 'tex_depth'. You cannot give both.")
|
assert(num_defined([tex_scale,tex_depth])<2, "In linear_sweep() the 'tex_scale' parameter has been replaced by 'tex_depth'. You cannot give both.")
|
||||||
|
@ -995,6 +996,7 @@ function rotate_sweep(
|
||||||
inset=tex_inset,
|
inset=tex_inset,
|
||||||
rot=tex_rot,
|
rot=tex_rot,
|
||||||
samples=tex_samples,
|
samples=tex_samples,
|
||||||
|
inhibit_y_slicing=_tex_inhibit_y_slicing,
|
||||||
taper=tex_taper,
|
taper=tex_taper,
|
||||||
shift=shift,
|
shift=shift,
|
||||||
closed=closed,
|
closed=closed,
|
||||||
|
@ -1032,7 +1034,8 @@ module rotate_sweep(
|
||||||
atype="hull",
|
atype="hull",
|
||||||
anchor="origin",
|
anchor="origin",
|
||||||
spin=0,
|
spin=0,
|
||||||
orient=UP
|
orient=UP,
|
||||||
|
_tex_inhibit_y_slicing=false
|
||||||
) {
|
) {
|
||||||
dummy =
|
dummy =
|
||||||
assert(num_defined([tex_reps,tex_counts])<2, "In rotate_sweep() the 'tex_counts' parameters has been replaced by 'tex_reps'. You cannot give both.")
|
assert(num_defined([tex_reps,tex_counts])<2, "In rotate_sweep() the 'tex_counts' parameters has been replaced by 'tex_reps'. You cannot give both.")
|
||||||
|
@ -1063,6 +1066,7 @@ module rotate_sweep(
|
||||||
taper=tex_taper,
|
taper=tex_taper,
|
||||||
shift=shift,
|
shift=shift,
|
||||||
closed=closed,
|
closed=closed,
|
||||||
|
inhibit_y_slicing=_tex_inhibit_y_slicing,
|
||||||
angle=angle,
|
angle=angle,
|
||||||
style=style,
|
style=style,
|
||||||
atype=atype, anchor=anchor,
|
atype=atype, anchor=anchor,
|
||||||
|
@ -3676,7 +3680,9 @@ function _textured_linear_sweep(
|
||||||
s = 1 / max(1, samples),
|
s = 1 / max(1, samples),
|
||||||
vnf = samples<=1? texture :
|
vnf = samples<=1? texture :
|
||||||
let(
|
let(
|
||||||
vnft = vnf_slice(texture, "X", list([s:s:1-s/2])),
|
slice_us = list([s:s:1-s/2]),
|
||||||
|
vnft1 = vnf_slice(texture, "X", slice_us),
|
||||||
|
vnft = twist? vnf_slice(vnft1, "Y", slice_us) : vnft1,
|
||||||
zvnf = [
|
zvnf = [
|
||||||
[
|
[
|
||||||
for (p=vnft[0]) [
|
for (p=vnft[0]) [
|
||||||
|
@ -3713,9 +3719,10 @@ function _textured_linear_sweep(
|
||||||
bases = list_wrap(obases),
|
bases = list_wrap(obases),
|
||||||
norms = list_wrap(onorms),
|
norms = list_wrap(onorms),
|
||||||
vnf = is_vnf(texture)
|
vnf = is_vnf(texture)
|
||||||
? let( // VNF tile texture
|
? vnf_join( // VNF tile texture
|
||||||
|
let(
|
||||||
row_vnf = vnf_join([
|
row_vnf = vnf_join([
|
||||||
for (j = [0:1:counts.x-1]) [
|
for (i = [0:1:(scale==1?0:counts.y-1)], j = [0:1:counts.x-1]) [
|
||||||
[
|
[
|
||||||
for (group = vertzs)
|
for (group = vertzs)
|
||||||
each [
|
each [
|
||||||
|
@ -3726,31 +3733,35 @@ function _textured_linear_sweep(
|
||||||
: (vert.z - inset) * tex_scale,
|
: (vert.z - inset) * tex_scale,
|
||||||
base = lerp(bases[u], select(bases,u+1), uu),
|
base = lerp(bases[u], select(bases,u+1), uu),
|
||||||
norm = unit(lerp(norms[u], select(norms,u+1), uu)),
|
norm = unit(lerp(norms[u], select(norms,u+1), uu)),
|
||||||
xy = base + norm * texh
|
xy = base + norm * texh,
|
||||||
) point3d(xy,vert.y)
|
pt = point3d(xy,vert.y),
|
||||||
|
v = vert.y / counts.y,
|
||||||
|
vv = i / counts.y,
|
||||||
|
sc = lerp([1,1,1], scale, vv+v),
|
||||||
|
mat =
|
||||||
|
up((vv-0.5)*h) *
|
||||||
|
scale(sc) *
|
||||||
|
zrot(twist*(v+vv)) *
|
||||||
|
zscale(h/counts.y)
|
||||||
|
) apply(mat, pt)
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
sorted_tile[1]
|
sorted_tile[1]
|
||||||
]
|
]
|
||||||
]),
|
|
||||||
sorted_row = _vnf_sort_vertices(row_vnf, idx=[1,0]),
|
|
||||||
rvertzs = group_sort(sorted_row[0], idx=1),
|
|
||||||
vnf1 = vnf_join([
|
|
||||||
for (i = [0:1:counts.y-1]) [
|
|
||||||
[
|
|
||||||
for (group = rvertzs) let(
|
|
||||||
v = (i + group[0].z) / counts.y,
|
|
||||||
sc = lerp([1,1,1], scale, v),
|
|
||||||
mat = scale(sc) *
|
|
||||||
zrot(twist*v) *
|
|
||||||
up(((i/counts.y)-0.5)*h) *
|
|
||||||
zscale(h/counts.y)
|
|
||||||
) each apply(mat, group)
|
|
||||||
],
|
|
||||||
sorted_row[1]
|
|
||||||
]
|
|
||||||
])
|
])
|
||||||
) vnf1
|
) [
|
||||||
|
for (i = [0:1:0*(scale!=1?0:counts.y-1)])
|
||||||
|
let(
|
||||||
|
v = i / (scale==1?counts.y:1),
|
||||||
|
sc = lerp([1,1,1], scale, v),
|
||||||
|
mat =
|
||||||
|
up((v)*h) *
|
||||||
|
scale(sc) *
|
||||||
|
zrot(twist*v)
|
||||||
|
)
|
||||||
|
apply(mat, row_vnf)
|
||||||
|
]
|
||||||
|
)
|
||||||
: let( // Heightfield texture
|
: let( // Heightfield texture
|
||||||
texcnt = [len(texture[0]), len(texture)],
|
texcnt = [len(texture[0]), len(texture)],
|
||||||
tile_rows = [
|
tile_rows = [
|
||||||
|
@ -3898,6 +3909,7 @@ function _textured_revolution(
|
||||||
shape, texture, tex_size, tex_scale=1,
|
shape, texture, tex_size, tex_scale=1,
|
||||||
inset=false, rot=false, shift=[0,0],
|
inset=false, rot=false, shift=[0,0],
|
||||||
taper, closed=true, angle=360,
|
taper, closed=true, angle=360,
|
||||||
|
inhibit_y_slicing=false,
|
||||||
counts, samples,
|
counts, samples,
|
||||||
style="min_edge", atype="intersect",
|
style="min_edge", atype="intersect",
|
||||||
anchor=CENTER, spin=0, orient=UP
|
anchor=CENTER, spin=0, orient=UP
|
||||||
|
@ -3953,7 +3965,7 @@ function _textured_revolution(
|
||||||
s = 1 / samples,
|
s = 1 / samples,
|
||||||
slices = list([s : s : 1-s/2]),
|
slices = list([s : s : 1-s/2]),
|
||||||
vnfx = vnf_slice(texture, "X", slices),
|
vnfx = vnf_slice(texture, "X", slices),
|
||||||
vnfy = vnf_slice(vnfx, "Y", slices),
|
vnfy = inhibit_y_slicing? vnfx : vnf_slice(vnfx, "Y", slices),
|
||||||
vnft = vnf_triangulate(vnfy),
|
vnft = vnf_triangulate(vnfy),
|
||||||
zvnf = [
|
zvnf = [
|
||||||
[
|
[
|
||||||
|
@ -4171,6 +4183,7 @@ module _textured_revolution(
|
||||||
inset=false, rot=false, shift=[0,0],
|
inset=false, rot=false, shift=[0,0],
|
||||||
taper, closed=true, angle=360,
|
taper, closed=true, angle=360,
|
||||||
style="min_edge", atype="intersect",
|
style="min_edge", atype="intersect",
|
||||||
|
inhibit_y_slicing=false,
|
||||||
convexity=10, counts, samples,
|
convexity=10, counts, samples,
|
||||||
anchor=CENTER, spin=0, orient=UP
|
anchor=CENTER, spin=0, orient=UP
|
||||||
) {
|
) {
|
||||||
|
@ -4180,7 +4193,8 @@ module _textured_revolution(
|
||||||
tex_scale=tex_scale, inset=inset, rot=rot,
|
tex_scale=tex_scale, inset=inset, rot=rot,
|
||||||
taper=taper, closed=closed, style=style,
|
taper=taper, closed=closed, style=style,
|
||||||
shift=shift, angle=angle,
|
shift=shift, angle=angle,
|
||||||
samples=samples, counts=counts
|
samples=samples, counts=counts,
|
||||||
|
inhibit_y_slicing=inhibit_y_slicing
|
||||||
);
|
);
|
||||||
geom = atype=="intersect"
|
geom = atype=="intersect"
|
||||||
? attach_geom(vnf=vnf, extent=false)
|
? attach_geom(vnf=vnf, extent=false)
|
||||||
|
|
Loading…
Reference in a new issue