From 9eac93893c2ca2640396d8b105aca81c74d2f1c5 Mon Sep 17 00:00:00 2001 From: Dejvino Date: Fri, 25 Dec 2020 01:41:12 +0100 Subject: [PATCH] Reworked animation keyframes --- anim.scad | 19 ++++++++++++++++--- holodisk.scad | 6 ++++-- holodisk_frame.scad | 14 +++++++------- tape_spool.scad | 4 ++-- 4 files changed, 29 insertions(+), 14 deletions(-) diff --git a/anim.scad b/anim.scad index d6a6055..df75af4 100644 --- a/anim.scad +++ b/anim.scad @@ -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)); diff --git a/holodisk.scad b/holodisk.scad index b7c8e0f..2464078 100755 --- a/holodisk.scad +++ b/holodisk.scad @@ -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(); diff --git a/holodisk_frame.scad b/holodisk_frame.scad index fb9251a..64ca975 100644 --- a/holodisk_frame.scad +++ b/holodisk_frame.scad @@ -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); diff --git a/tape_spool.scad b/tape_spool.scad index 09a4af8..0ab69be 100644 --- a/tape_spool.scad +++ b/tape_spool.scad @@ -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 {