Reworked animation keyframes

This commit is contained in:
Dejvino 2020-12-25 01:41:12 +01:00
parent c25bf961e5
commit 9eac93893c
4 changed files with 29 additions and 14 deletions

View File

@ -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));

View File

@ -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();

View File

@ -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);

View File

@ -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 {