@@ -2,13 +2,26 @@ | |||
function get_anim_keys() = [ | |||
0, // initial | |||
0.1, // resting | |||
0.3, // holodisk inserted | |||
0.25, // holodisk free-inserted | |||
0.3, // holodisk click-inserted | |||
0.4, // laser raised | |||
0.5, // start playing | |||
0.7, // stop playing | |||
0.7, // stop playing, start lowering laser | |||
0.8, // laser lowered, holodisk removing | |||
1 // final | |||
0.85, // holodisk click-removed | |||
1 // final, holodisk free-removed | |||
]; | |||
function ANIM_START()=0; | |||
function ANIM_RESTING()=0; | |||
function ANIM_INSERTING()=1; | |||
function ANIM_OPENING()=2; | |||
function ANIM_RAISING()=3; | |||
function ANIM_PLAYING()=4; | |||
function ANIM_LOWERING()=5; | |||
function ANIM_CLOSING()=6; | |||
function ANIM_REMOVING()=7; | |||
function ANIM_END()=8; | |||
function anim(key_from, key_to, KEYS=get_anim_keys()) | |||
= max(0, min(($t - KEYS[key_from]) / (KEYS[key_to] - KEYS[key_from]), 1)); |
@@ -46,6 +46,7 @@ module holodisk_mechanism() { | |||
tape_z=plate+spool_plate_height; | |||
module main_spool() { | |||
zrot(200*anim(ANIM_PLAYING(), ANIM_PLAYING()+1)) | |||
spool(r_in=spool_inner_radius, | |||
r_out=spool_outer_radius, | |||
in_rim=spool_plate_hole_inner_rim, | |||
@@ -54,6 +55,7 @@ module holodisk_mechanism() { | |||
spindle_traction=true); | |||
} | |||
module aux_spool() { | |||
zrot(500*anim(ANIM_PLAYING(), ANIM_PLAYING()+1)) | |||
spool(r_in=middle_spool_in_r, r_out=middle_spool_out_r, | |||
in_rim=aux_spool_plate_hole_inner_rim, | |||
out_rim=aux_spool_plate_hole_outer_rim, | |||
@@ -109,6 +111,6 @@ module holodisk() { | |||
// test | |||
retraction=get_holodisk_size().y+10; | |||
back((1-anim(1, 2)) * retraction) // anim insert | |||
back((anim(len(get_anim_keys())-2, len(get_anim_keys())-1)) * retraction) // anim remove | |||
back((1-anim(ANIM_INSERTING(), ANIM_RAISING())) * retraction) // anim insert | |||
back(anim(ANIM_CLOSING(), ANIM_END()) * retraction) // anim remove | |||
holodisk(); |
@@ -174,8 +174,8 @@ module holodisk_frame() { | |||
} | |||
module slider_anim() { | |||
back(anim(1,2)*get_holodisk_slide_slider_travel()) // anim insert | |||
fwd(anim(5,6)*get_holodisk_slide_slider_travel()) // anim remove | |||
back(anim(ANIM_OPENING(),ANIM_OPENING()+1)*get_holodisk_slide_slider_travel()) // anim insert | |||
fwd(anim(ANIM_CLOSING(),ANIM_CLOSING()+1)*get_holodisk_slide_slider_travel()) // anim remove | |||
slider(); | |||
} | |||
@@ -219,8 +219,8 @@ module holodisk_frame() { | |||
} | |||
module sliding_cover_anim() { | |||
back(anim(1,2)*get_holodisk_slide_slider_travel()) // anim insert | |||
fwd(anim(5,6)*get_holodisk_slide_slider_travel()) // anim remove | |||
back(anim(ANIM_OPENING(),ANIM_OPENING()+1)*get_holodisk_slide_slider_travel()) // anim insert | |||
fwd(anim(ANIM_CLOSING(),ANIM_CLOSING()+1)*get_holodisk_slide_slider_travel()) // anim remove | |||
sliding_cover(); | |||
} | |||
@@ -236,7 +236,7 @@ module holodisk_frame() { | |||
get_holodisk_laserwindow_pos_center().z | |||
]; | |||
translate(door_pos) scale(0.98) down(door_size.z/2) xrot(anim(1,2)*-90) xrot(anim(6,7)*90) up(door_size.z/2) cube(door_size, center=true); | |||
translate(door_pos) scale(0.98) down(door_size.z/2) xrot(anim(ANIM_OPENING(),ANIM_OPENING()+1)*-90) xrot(anim(ANIM_CLOSING(),ANIM_CLOSING()+1)*90) up(door_size.z/2) cube(door_size, center=true); | |||
} | |||
module bottom_cover() { | |||
@@ -285,8 +285,8 @@ module holodisk_frame() { | |||
cover_top=[cover_size.x - overlap, cover_size.y, cover_size.z - overlap]; | |||
/*cover_pos=[rails_pos.x+overlap, rails_pos.y + rails_size.y, rails_pos.z];*/ | |||
cover_pos=[get_holodisk_laserwindow_pos().x, rails_pos.y + rails_size.y, rails_pos.z]; | |||
left(anim(0,1)*get_holodisk_laserwindow_size().x) | |||
right(anim(len(get_anim_keys())-2,len(get_anim_keys())-1)*get_holodisk_laserwindow_size().x) | |||
left(anim(ANIM_RESTING(),ANIM_RESTING()+1)*get_holodisk_laserwindow_size().x) | |||
right(anim(ANIM_REMOVING(), ANIM_REMOVING()+1)*get_holodisk_laserwindow_size().x) | |||
translate(cover_pos) | |||
hull() { | |||
fwd(cover_plate.y) cube(cover_plate); | |||
@@ -27,7 +27,7 @@ module spool( | |||
tape_height=in_height; | |||
module spool_plate() { | |||
$fn = ($preview ? 18 : 100); | |||
if (/*!$preview &&*/ spokes > 0 && r_out - r_in > out_rim) { | |||
if (spokes > 0 && r_out - r_in > out_rim) { | |||
union() { | |||
cylinder(h=plate_height, r=r_in + in_rim); | |||
intersection() { | |||
@@ -42,7 +42,7 @@ module spool( | |||
} | |||
difference() { | |||
cylinder(h=plate_height, r=r_out); | |||
cylinder(h=plate_height, r=r_out - out_rim); | |||
scale(1.01) cylinder(h=plate_height, r=r_out - out_rim); | |||
} | |||
} | |||
} else { | |||