controlp5/examples/extra/ControlP5controllerOnTop3D/ControlP5controllerOnTop3D.pde

149 lines
4.1 KiB
Plaintext
Raw Normal View History

/**
* ControlP5 Controller on top of 3D
* demonstrates how to use controlP5 controllers on top of a
* OpenGL 3D scene.
*
* by Andreas Schlegel, 2011
* www.sojamo.de/libraries/controlP5
*
*/
import controlP5.*;
import processing.opengl.*;
ControlP5 cp5;
ControlGroup messageBox;
int messageBoxResult = -1;
String messageBoxString = "";
float t;
void setup() {
size(640,480,P3D);
cp5 = new ControlP5(this);
noStroke();
createMessageBox();
Button b = cp5.addButton("toggleBox",1,20,20,100,20);
b.setLabel("Toggle Box");
textFont(createFont("",30));
}
void draw() {
hint(ENABLE_DEPTH_TEST);
pushMatrix();
if(messageBox.isVisible()) {
background(128);
} else {
background(0);
fill(255);
text(messageBoxString,20,height-40);
}
translate(width/2,height/2,mouseX);
rotateY(t+=0.1);
fill(255);
rect(-50,-50,100,100);
popMatrix();
hint(DISABLE_DEPTH_TEST);
// in case yo uare using the camera or you have
// changed the default camera setting, reset the camera
// to default by uncommenting the following line.
// camera();
}
void toggleBox(int theValue) {
if(messageBox.isVisible()) {
messageBox.hide();
} else {
messageBox.show();
}
}
void createMessageBox() {
// create a group to store the messageBox elements
messageBox = cp5.addGroup("messageBox",width/2 - 150,100,300);
messageBox.setBackgroundHeight(120);
messageBox.setBackgroundColor(color(0,100));
messageBox.hideBar();
// add a TextLabel to the messageBox.
Textlabel l = cp5.addTextlabel("messageBoxLabel","Some MessageBox text goes here.",20,20);
l.moveTo(messageBox);
// add a textfield-controller with named-id inputbox
// this controller will be linked to function inputbox() below.
Textfield f = cp5.addTextfield("inputbox",20,36,260,20);
f.getCaptionLabel().setVisible(false);
f.moveTo(messageBox);
f.setColorForeground(color(20));
f.setColorBackground(color(20));
f.setColorActive(color(100));
// add the OK button to the messageBox.
// the name of the button corresponds to function buttonOK
// below and will be triggered when pressing the button.
Button b1 = cp5.addButton("buttonOK",0,65,80,80,24);
b1.moveTo(messageBox);
b1.setColorBackground(color(40));
b1.setColorActive(color(20));
// by default setValue would trigger function buttonOK,
// therefore we disable the broadcasting before setting
// the value and enable broadcasting again afterwards.
// same applies to the cancel button below.
b1.setBroadcast(false);
b1.setValue(1);
b1.setBroadcast(true);
b1.setCaptionLabel("OK");
// centering of a label needs to be done manually
// with marginTop and marginLeft
//b1.captionLabel().style().marginTop = -2;
//b1.captionLabel().style().marginLeft = 26;
// add the Cancel button to the messageBox.
// the name of the button corresponds to function buttonCancel
// below and will be triggered when pressing the button.
Button b2 = cp5.addButton("buttonCancel",0,155,80,80,24);
b2.moveTo(messageBox);
b2.setBroadcast(false);
b2.setValue(0);
b2.setBroadcast(true);
b2.setCaptionLabel("Cancel");
b2.setColorBackground(color(40));
b2.setColorActive(color(20));
//b2.captionLabel().toUpperCase(false);
// centering of a label needs to be done manually
// with marginTop and marginLeft
//b2.captionLabel().style().marginTop = -2;
//b2.captionLabel().style().marginLeft = 16;
}
// function buttonOK will be triggered when pressing
// the OK button of the messageBox.
void buttonOK(int theValue) {
println("a button event from button OK.");
messageBoxString = ((Textfield)cp5.getController("inputbox")).getText();
messageBoxResult = theValue;
messageBox.hide();
}
// function buttonCancel will be triggered when pressing
// the Cancel button of the messageBox.
void buttonCancel(int theValue) {
println("a button event from button Cancel.");
messageBoxResult = theValue;
messageBox.hide();
}
// inputbox is called whenever RETURN has been pressed
// in textfield-controller inputbox
void inputbox(String theString) {
println("got something from the inputbox : "+theString);
messageBoxString = theString;
messageBox.hide();
}