Mercurial > hg > tweakathon2ios
diff UI code/3Dbox.h @ 0:a223551fdc1f
First commit - copy from tweakathlon.
author | Robert Tubb <rt300@eecs.qmul.ac.uk> |
---|---|
date | Fri, 10 Oct 2014 11:46:42 +0100 |
parents | |
children | 8d7ae43b2edd |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/UI code/3Dbox.h Fri Oct 10 11:46:42 2014 +0100 @@ -0,0 +1,185 @@ +// +// 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); + + 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; + } + + 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); + + }; + + 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: + 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(); + }; + 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; + 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__) */