Experimental functionality
Signed-off-by: Tony Tkacik <tonydamage@gmail.com>
This commit is contained in:
parent
34fb5c964c
commit
549011c078
2 changed files with 101 additions and 0 deletions
53
unwrap.scad
Normal file
53
unwrap.scad
Normal 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
48
wireframe.scad
Normal 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);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue