Experimental functionality

Signed-off-by: Tony Tkacik <tonydamage@gmail.com>
This commit is contained in:
Tony Tkáčik 2019-02-23 20:26:37 +01:00
parent 34fb5c964c
commit 549011c078
2 changed files with 101 additions and 0 deletions

53
unwrap.scad Normal file
View file

@ -0,0 +1,53 @@
use <./vector.scad>
function _unwrap_x_half(original,unwrapped=[],offset=0)=
let(length=len(original))
let(half=(length-2)/2+1)
let(i=len(unwrapped))
let(prev=original[i-1])
let(cur=original[i])
let(dx=cur[0]-prev[0])
let(dz=cur[2]-prev[2])
let(new=[offset+sqrt(pow(dx,2)+pow(dz,2)),cur[1],0])
i < half ? _unwrap_x_half(original,concat(unwrapped,[new]),new[0]) : concat(unwrapped,[new]) ;
;
function _unwrap_x(p)=
let(length=len(p))
let(half=(length-2)/2+1)
let(first=_unwrap_x_half(p,[[p[0][0],p[0][1],0]],p[0][0]))
let(second=[
for( i = [len(first):length-1])
[p[length-i][0],p[i][1],0]
])
flatten_vec([first,second])
;
function _unwrap_y_half(original,unwrapped,offset,s)=
let(length=len(original))
let(half=(length-2)/2+1)
let(i=len(unwrapped))
let(prev=original[i-1])
let(cur=original[i])
let(dx=cur[0]-prev[0])
let(dy=cur[1]-prev[1])
let(dz=cur[2]-prev[2])
let(new=[cur[0],offset+s*sqrt(pow(dy,2)+pow(dz,2)),0])
i < half ? _unwrap_y_half(original,concat(unwrapped,[new]),new[1],s) : concat(unwrapped,[new]) ;
;
function _unwrap_y(p,s=1)=
let(length=len(p))
let(half=(length-2)/2+1)
let(first=_unwrap_y_half(p,[[p[0][0],p[0][1],0]],p[0][1],s))
let(second=[
for( i = [len(first):length-1])
[p[i][0],first[length-i][1],0]
])
flatten_vec([first,second])
;

48
wireframe.scad Normal file
View file

@ -0,0 +1,48 @@
module _rod(a, b, r) {
translate(a) sphere(r=r);
translate(b) sphere(r=r);
dir = b-a;
h = norm(dir);
if(dir[0] == 0 && dir[1] == 0) {
// no transformation necessary
cylinder(r=r, h=h);
}
else {
w = dir / h;
u0 = cross(w, [0,0,1]);
u = u0 / norm(u0);
v0 = cross(w, u);
v = v0 / norm(v0);
multmatrix(m=[[u[0], v[0], w[0], a[0]],
[u[1], v[1], w[1], a[1]],
[u[2], v[2], w[2], a[2]],
[0, 0, 0, 1]])
cylinder(r=r, h=h);
}
}
module outline(points3,r=0.5) {
p=len(points3);
for(start = [0:1:p-1]) {
stop=(start+1)%p;
a = points3[start];
b = points3[stop];
// FIXME: Do not repeat points
echo(a,b);
_rod(a,b,r);
}
}
module wireframe(points3,polygons,r=0.5) {
for(p=polygons) {
for(set = [0:1:len(p)-1]) {
a = points3[p[set]];
b = points3[p[(set+1)%len(p)]];
// FIXME: Do not repeat points
echo(p[set],p[(set+1)%len(p)],a,b);
_rod(a,b,r);
}
}
}