Mercurial > hg > tweakathon2ios
view UI code/3Dbox.h @ 38:fea11c3d1d94
tweaking endlessly
author | Robert Tubb <rt300@eecs.qmul.ac.uk> |
---|---|
date | Thu, 04 Dec 2014 17:03:01 +0000 |
parents | 953db6518738 |
children |
line wrap: on
line source
// // 3Dbox.h // tweakathlon // // Created by Robert Tubb on 13/02/2014. // // #ifndef __tweakathlon___Dbox__ #define __tweakathlon___Dbox__ #include <iostream> #include "UIElement.h" #include "ofMain.h" class Leap3DBox : public UIElement { public: Leap3DBox(float ax, float ay, float awidth, float aheight, float azx, float azy, const UIProps& props); void init(const UIProps& props); virtual void setValueAndScale(int which, int val){ if(which == 0) xVal = (val - minVal)/(maxVal - minVal); if(which == 1) yVal = (val - minVal)/(maxVal - minVal); if(which == 2) zVal = (val - minVal)/(maxVal - minVal); //cout << zVal << endl; } virtual void setHintValue(int which, int val){ if(which == 0) hintX = (val - minVal)/(maxVal - minVal); if(which == 1) hintY = (val - minVal)/(maxVal - minVal); if(which == 2) hintZ = (val - minVal)/(maxVal - minVal); }; virtual void draw(){ if(hidden)return; if(on){ ofSetColor(foregroundHi); }else{ ofSetColor(foregroundLo); } if(inactive){ ofSetColor(fgInactive); } // draw rear face zy+ ofLine(zx+x,zy+y,zx+x,zy+y+height); // left ofLine(zx+x,zy+y,zx+x+width,zy+y); // top ofLine(zx+x+width,zy+y,zx+x+width,zy+y+height); //right ofLine(zx+x+width,zy+y+height,zx+x,zy+y+height); // bottom // draw indicators drawIndicator(); ofSetColor(foregroundHi); // draw connectors ofLine(x,y,zx+x,zy+y); // top left ofLine(x+width,y,zx+x+width,zy+y); // top right ofLine(x,y+height,zx+x,zy+y+height); // bot left ofLine(x+width,y+height,zx+x+width,zy+y+height); // bot right // draw front face ofLine(x,y,x,y+height); // left ofLine(x,y,x+width,y); // top ofLine(x+width,y,x+width,y+height); //right ofLine(x+width,y+height,x,y+height); // bottom //drawLabels(); }; void drawLabels(){ ofColor fg,bg; if(on){ fg = foregroundHi; bg = backgroundHi; }else{ fg = foregroundLo; bg = backgroundLo; } if(inactive){ fg = fgInactive; } ofSetColor(fg); verdana16.drawString(labelNameX + " (L/R)", ofGetWidth()/2 - 120, y + height + 50 ); verdana16.drawString(labelNameY + " (Up/Dn)", ofGetWidth()/2 - width + 50, y + height/2 ); verdana16.drawString(labelNameZ + " Fwd/Bck)", ofGetWidth()/2 + width - 20, y+height); // TODO up down etc }; void setLabels(string ax, string ay, string az){ labelNameX = ax; labelNameY = ay; labelNameZ = az; } bool handleMyTouch(int x, int y, touchType ttype, int touchID){ return false; }; void showHint(bool show){ hintShowing = show; } void setHintColor(ofColor c){ hintColor = c; }; protected: virtual void drawIndicator(){ ofSetColor(foregroundHi); float px,py; px = x + xVal*width + zx*zVal; py = y + (1-yVal)*height + zy*zVal; // line to left wall (no x) ofLine(px , py , x+zx*zVal, py); ofEllipse(px,py,thickness,thickness); // line to bottom wall (no y) ofLine(px , py , px, y+height+zy*zVal); // line to front wall ( no z) ofLine(px , py , x+ width*xVal, y + height*(1-yVal)); if(hintShowing) drawHintIndicator(); }; virtual void drawHintIndicator(){ ofSetColor(hintColor); float px,py; px = x + hintX*width + zx*hintZ; py = y + (1-hintY)*height + zy*hintZ; // line to left wall (no x) ofLine(px , py , x+zx*hintZ, py); ofEllipse(px,py,thickness,thickness); // line to bottom wall (no y) ofLine(px , py , px, y+height+zy*hintZ); // line to front wall ( no z) ofLine(px , py , x+ width*hintX, y + height*(1-hintY)); }; float xVal,yVal,zVal; ofVec3f posVals; float zx,zy; // how much of z and x shows up in diagonal x and y float minVal; float maxVal; float hintX; float hintY; float hintZ; bool hintShowing; string labelNameX; string labelNameY; string labelNameZ; float thickness; // width of border and indicator ofColor foregroundHi; ofColor backgroundHi; ofColor foregroundLo; ofColor backgroundLo; ofColor fgInactive; ofColor hintColor; }; #endif /* defined(__tweakathlon___Dbox__) */