Mercurial > hg > soniczoomios
diff grid.mm @ 44:a1e75b94c505
Snap to eval points. Double tap to go to preset (doesn't quite work yet). Coloured locks. Changed Question 2. Fixed some leaks.
author | Robert Tubb <rt300@eecs.qmul.ac.uk> |
---|---|
date | Mon, 22 Apr 2013 18:32:34 +0100 |
parents | b91a1859829a |
children | c2fffc8ea84d |
line wrap: on
line diff
--- a/grid.mm Fri Apr 19 18:50:04 2013 +0100 +++ b/grid.mm Mon Apr 22 18:32:34 2013 +0100 @@ -25,6 +25,7 @@ } void Grid::init(){ + presetWasTapped = false; maxValue = pow(2.0,paramsPerDim*paramBitDepth)-1; interpolateMode = NO_INTERPOLATION; @@ -222,21 +223,21 @@ if(colCycle == 0){ ofSetColor(255,255,255,alpha); }else if(colCycle == 1){ - ofSetColor(255,0,0,alpha); + ofSetColor(75,0,130,alpha); }else if(colCycle == 2){ ofSetColor(0,0,255,alpha); }else if(colCycle == 3){ ofSetColor(0,255,0,alpha); }else if(colCycle == 4){ - ofSetColor(255,0,255,alpha); + ofSetColor(255,255,0,alpha); }else if(colCycle == 5){ - ofSetColor(0,255,255,alpha); + ofSetColor(255,127,0,alpha); }else if(colCycle == 6){ - ofSetColor(255,255,0,alpha); + ofSetColor(255,0,0,alpha); }else if(colCycle == 7){ - ofSetColor(255,255,255,alpha); + ofSetColor(255,255,255,255); }else{ - ofSetColor(255,255,255,alpha); + ofSetColor(255,255,255,255); cout << "colour cycle > 7\n"; } @@ -364,14 +365,23 @@ return pix; } +//----------------------------------------------------------------------- +TwoVector Grid::pixelToCoord(TwoVector pixel){ + return pixel*scale + topLeft; + +} //----------------------------------------------------------------------- void Grid::drawPresets(){ presetManager.drawPresetsInRange(topLeft, topLeft + size); // draw snapped preset info - if(snapped && closestPreset != NULL){ - ofDrawBitmapString( closestPreset->displayTextDescription(), pixSize.x/2+10, pixSize.y/2+10 ); + if(tappedPreset && tappedPreset != NULL){ + TwoVector presetPos = coordToPixel(tappedPreset->coordinates); + ofDrawBitmapString( tappedPreset->displayTextDescription(), presetPos.x, presetPos.y ); + }else if( (snapped) && closestPreset != NULL){ + ofDrawBitmapString( closestPreset->displayTextDescription(), pixSize.x/2 +10, pixSize.y/2+10 ); } + } @@ -421,6 +431,36 @@ } +//-------------------------------------------------------------- +void Grid::tap(TwoVector pixel){ + static Preset * lastTappedPreset; + + // search nearby for preset + TwoVector tapCoord = pixelToCoord(pixel); + + vector<Preset *> closePresets = presetManager.getPresetsInRange(tapCoord - snapDist*2*scale, tapCoord + snapDist*2*scale); + if(closePresets.size() > 0){ + tappedPreset = getClosestPresetOf(closePresets); + //interpolateTo(coordinates); + cout << "tapped preset: " << tappedPreset->name << "\n"; + presetWasTapped = true; + + if(lastTappedPreset == tappedPreset){ + cout << "DOUBLE tapped preset: " << tappedPreset->name << "\n"; + + //TODO interpolate to this! exciting! + setCoord(tappedPreset->coordinates); // should just go there and do all the calcs + ((testApp *)ofGetAppPtr())->setAllGUISliders(getParams()); + eventLogger.logEvent(PRESET_DOUBLE_TAPPED, getCoord(), scale); + + + } + + lastTappedPreset = tappedPreset; + }else{ + // nothing ? + } +} //-------------------------------------------------------------- @@ -478,8 +518,23 @@ } //-------------------------------------------------------------- +Preset * Grid::getClosestPresetOf(vector<Preset *> somepresets){ + double dist, mindist = maxValue; + Preset * cPreset = somepresets[0]; + + for(vector<Preset *>::iterator piter = somepresets.begin(); piter < somepresets.end(); piter++){ + dist = (*piter)->coordinates.distanceTo(centre); + + if(dist < mindist){ + mindist = dist; + cPreset = (*piter); + } + } + return cPreset; +} +//-------------------------------------------------------------- void Grid::snapCheck(){ - + lEvent *closestEvalPt; if(interpolateMode == INTERPOLATE_GRID){ snapped = false; closestPreset = NULL; @@ -488,31 +543,50 @@ } // no presets visible // check environs for presets. + vector<Preset *> closePresets = presetManager.getPresetsInRange(centre - snapDist*scale, centre + snapDist*scale); if(closePresets.size() > 0){ snapped = true; - // find closest - double dist, mindist = maxValue; - closestPreset = closePresets[0]; - - for(vector<Preset *>::iterator piter = closePresets.begin(); piter < closePresets.end(); piter++){ - dist = (*piter)->coordinates.distanceTo(centre); - - if(dist < mindist){ - mindist = dist; - closestPreset = *piter; - } - } + presetWasTapped = false; + closestPreset = getClosestPresetOf(closePresets); snapCentre = closestPreset->coordinates; eventLogger.logEvent(SNAPPED_TO_PRESET, getCoord(),closestPreset->creationTime ); - //cout << "SNAPPED CHECK\n"; - - // causes too many problems just move it + }else{ - snapped = false; - closestPreset = NULL; - snapCentre = centre; + // do an evaluation snap check . duplicate code >:[ + + vector<lEvent *> closeEvalPoints = eventLogger.getEvaluationPointsInRange(centre - snapDist*scale, centre + snapDist*scale); + if(closeEvalPoints.size() > 0){ + snapped = true; + + double dist, mindist = maxValue; + closestEvalPt = closeEvalPoints[0]; + + for(vector<lEvent *>::iterator eiter = closeEvalPoints.begin(); eiter < closeEvalPoints.end(); eiter++){ + TwoVector coord = TwoVector((*eiter)->val1,(*eiter)->val2); + dist = coord.distanceTo(centre); + + if(dist < mindist){ + mindist = dist; + closestEvalPt = (*eiter); + snapCentre = coord; + } + + } + + eventLogger.logEvent(SNAPPED_TO_EVALPT, getCoord() ); + + }else{ + snapped = false; + closestPreset = NULL; + closestEvalPt = NULL; + tappedPreset = NULL; + snapCentre = centre; + } + + + }