From 742e27767fd4208afe99ac42f243b88eef0ed7b3 Mon Sep 17 00:00:00 2001 From: Tim Redfern Date: Thu, 31 Aug 2017 10:08:40 +0100 Subject: bezier movement --- gui/src/chainImage.cpp | 63 +++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 57 insertions(+), 6 deletions(-) (limited to 'gui/src/chainImage.cpp') diff --git a/gui/src/chainImage.cpp b/gui/src/chainImage.cpp index 643bb2e..032b54c 100644 --- a/gui/src/chainImage.cpp +++ b/gui/src/chainImage.cpp @@ -19,14 +19,43 @@ void chainImage::start(){ time=ofGetElapsedTimef(); setUseTexture(true); scale=linkScale; + + path.clear(); + + path.addVertex(linkPos); + //path.addVertex(linkPos+(link->linkPos*linkScale)); + + ofPoint destination=linkPos+(link->linkPos*linkScale); + ofPoint previous=linkPos+(link->linkPos*linkScale*(1.0f-BEZIER_IN)); + + path.bezierTo( + linkPos.x*(1.0f+BEZIER_OUT),linkPos.y*(1.0f+BEZIER_OUT), + previous.x,previous.y, + destination.x,destination.y); + + //totalframes=log(1.0f/256)/log(decayRatio); + //framecount=0; } bool chainImage::update(float decayRatio){ scale*=decayRatio; + //framecount++; + + //find n such that decayRatio^n=1/256 + //logarithm of x base b = log(x)/log(b) + + //log(decayRatio,decayRatio^n) + + //n = log(decayRatio,1/256) + + transition=-(scale-linkScale)/(linkScale-(linkScale*link->linkScale)); + //transition=min(1.0f,((float)framecount)/totalframes); + + if (scale>linkScale*link->linkScale) return false; else { transition = 1.0f; @@ -35,9 +64,13 @@ bool chainImage::update(float decayRatio){ } ofVec3f chainImage::getTransform(){ - ofVec3f _scaledTarget = link->linkPos * linkScale; + //ofVec3f _scaledTarget = link->linkPos * linkScale; - return linkPos + ( _scaledTarget * transition ); + //return linkPos + ( _scaledTarget * transition ); + + //ofPoint + + return path.getPointAtPercent(transition); } float chainImage::getScale(){ @@ -328,6 +361,24 @@ void chainImageSet::keyPressed(ofKeyEventArgs &keyargs){ case OF_KEY_RIGHT: selected->linkPos.x++; break; + case OF_KEY_BACKSPACE:{ + images.clear(); + /* + auto previous=selected; + previous--; + if (previous==images.end()){ + previous=images.end()--; + } + previous->link=selected->link; + printf("DELETED: %s \n",selected->filename.c_str()); + images.erase(selected); + selected=previous++; + if (selected==images.end()){ + selected=images.begin(); + } + break; + */ + } case 's': case 83: { //printf("Saving... keyargs modifiers:%i\n",keyargs.modifiers); @@ -455,13 +506,13 @@ bool chainImageSet::loadJson(std::string _filename){ } void chainImageSet::update(){ - float decay_factor=0.995; - if (images.size()){ - if (currentImage->update(decay_factor)){ //if returns true, switch images + + if (images.size()){ + if (currentImage->update(decayFactor)){ //if returns true, switch images currentImage=currentImage->link; currentImage->start(); ofLogNotice() << "Switched images"; - currentImage->update(decay_factor); + currentImage->update(decayFactor); } } } -- cgit v1.2.3