diff options
| -rw-r--r-- | gui/.DS_Store | bin | 6148 -> 8196 bytes | |||
| -rw-r--r-- | gui/src/chainImage.cpp | 63 | ||||
| -rw-r--r-- | gui/src/chainImage.h | 11 |
3 files changed, 66 insertions, 8 deletions
diff --git a/gui/.DS_Store b/gui/.DS_Store Binary files differindex 126c3ea..c14ff44 100644 --- a/gui/.DS_Store +++ b/gui/.DS_Store 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); } } } diff --git a/gui/src/chainImage.h b/gui/src/chainImage.h index 2ac3566..8eec4bf 100644 --- a/gui/src/chainImage.h +++ b/gui/src/chainImage.h @@ -5,7 +5,9 @@ #define THUMB_BORDER_RATIO 0.8 #define THUMB_SIZE 160 -#define DEFAULT_FADEIN 0.3 +#define DEFAULT_FADEIN 1.0 +#define BEZIER_OUT 0.2 +#define BEZIER_IN 0.5 class chainImage : public ofImage{ //todo: threaded image loader @@ -57,7 +59,9 @@ class chainImage : public ofImage{ float time; float scale; - + ofPolyline path; + + //int totalframes,framecount; }; @@ -67,6 +71,7 @@ class chainImageSet{ currentDefaultImageRatio=0.3; filename=""; outputSize=ofPoint(1024,576); + decayFactor=.999; } void drawGui(); void drawOutput(); @@ -94,4 +99,6 @@ class chainImageSet{ std::string filename; chainImage *currentImage; + + float decayFactor; };
\ No newline at end of file |
