controlP5
Class Knob

java.lang.Object
  extended by controlP5.Controller
      extended by controlP5.Knob
All Implemented Interfaces:
CDrawable, ControllerInterface, ControlP5Constants

public class Knob
extends Controller

A knob is a circular slider which can be used with a limited and unlimited range. Knobs come in 3 designs LINE, ARC and ELIPSE and can be controller with both the mouse and the mouse wheel.

+Example
/**
* ControlP5 Knob
*
*
* find a list of public methods available for the Knob Controller
* at the bottom of this sketch.
*
* by Andreas Schlegel, 2012
* www.sojamo.de/libraries/controlp5
*
*/

import controlP5.*;


ControlP5 cp5;

int myColorBackground = color(0,0,0);
int knobValue = 100;

Knob myKnobA;
Knob myKnobB;

void setup() {
  size(700,400);
  smooth();
  noStroke();
  
  cp5 = new ControlP5(this);
  
  myKnobA = cp5.addKnob("knob")
               .setRange(0,255)
               .setValue(50)
               .setPosition(100,70)
               .setRadius(50)
               .setDragDirection(Knob.VERTICAL)
               ;
                     
  myKnobB = cp5.addKnob("knobValue")
               .setRange(0,255)
               .setValue(220)
               .setPosition(100,210)
               .setRadius(50)
               .setNumberOfTickMarks(10)
               .setTickMarkLength(4)
               .snapToTickMarks(true)
               .setColorForeground(color(255))
               .setColorBackground(color(0, 160, 100))
               .setColorActive(color(255,255,0))
               .setDragDirection(Knob.HORIZONTAL)
               ;
}

void draw() {
  background(myColorBackground);
  fill(knobValue);
  rect(0,height/2,width,height/2);
  fill(0,100);
  rect(80,40,140,320);
}


void knob(int theValue) {
  myColorBackground = color(theValue);
  println("a knob event. setting background to "+theValue);
}


void keyPressed() {
  switch(key) {
    case('1'):myKnobA.setValue(180);break;
    case('2'):myKnobB.setConstrained(false).hideTickMarks().snapToTickMarks(false);break;
    case('3'):myKnobA.shuffle();myKnobB.shuffle();break;
  }
  
}

/*
a list of all methods available for the Knob Controller
use ControlP5.printPublicMethodsFor(Knob.class);
to print the following list into the console.

You can find further details about class Knob in the javadoc.

Format:
ClassName : returnType methodName(parameter type)
 
controlP5.Knob : Knob setConstrained(boolean) 
controlP5.Knob : Knob setDragDirection(int) 
controlP5.Knob : Knob setMax(float) 
controlP5.Knob : Knob setMin(float) 
controlP5.Knob : Knob setNumberOfTickMarks(int) 
controlP5.Knob : Knob setRadius(float) 
controlP5.Knob : Knob setRange(float) 
controlP5.Knob : Knob setResolution(float) 
controlP5.Knob : Knob setScrollSensitivity(float) 
controlP5.Knob : Knob setSensitivity(float) 
controlP5.Knob : Knob setShowRange(boolean) 
controlP5.Knob : Knob setStartAngle(float) 
controlP5.Knob : Knob setTickMarkLength(int) 
controlP5.Knob : Knob setTickMarkWeight(float) 
controlP5.Knob : Knob setValue(float) 
controlP5.Knob : Knob setViewStyle(int) 
controlP5.Knob : Knob showTickMarks(boolean) 
controlP5.Knob : Knob shuffle() 
controlP5.Knob : Knob snapToTickMarks(boolean) 
controlP5.Knob : Knob update() 
controlP5.Knob : boolean isConstrained() 
controlP5.Knob : boolean isShowRange() 
controlP5.Knob : boolean isShowTickMarks() 
controlP5.Knob : float getAngle() 
controlP5.Knob : float getRadius() 
controlP5.Knob : float getRange() 
controlP5.Knob : float getResolution() 
controlP5.Knob : float getStartAngle() 
controlP5.Knob : float getTickMarkWeight() 
controlP5.Knob : float getValue() 
controlP5.Knob : int getDragDirection() 
controlP5.Knob : int getNumberOfTickMarks() 
controlP5.Knob : int getTickMarkLength() 
controlP5.Knob : int getViewStyle() 
controlP5.Controller : CColor getColor() 
controlP5.Controller : ControlBehavior getBehavior() 
controlP5.Controller : ControlWindow getControlWindow() 
controlP5.Controller : ControlWindow getWindow() 
controlP5.Controller : ControllerProperty getProperty(String) 
controlP5.Controller : ControllerProperty getProperty(String, String) 
controlP5.Controller : Knob addCallback(CallbackListener) 
controlP5.Controller : Knob addListener(ControlListener) 
controlP5.Controller : Knob bringToFront() 
controlP5.Controller : Knob bringToFront(ControllerInterface) 
controlP5.Controller : Knob hide() 
controlP5.Controller : Knob linebreak() 
controlP5.Controller : Knob listen(boolean) 
controlP5.Controller : Knob lock() 
controlP5.Controller : Knob plugTo(Object) 
controlP5.Controller : Knob plugTo(Object, String) 
controlP5.Controller : Knob plugTo(Object[]) 
controlP5.Controller : Knob plugTo(Object[], String) 
controlP5.Controller : Knob registerProperty(String) 
controlP5.Controller : Knob registerProperty(String, String) 
controlP5.Controller : Knob registerTooltip(String) 
controlP5.Controller : Knob removeBehavior() 
controlP5.Controller : Knob removeCallback() 
controlP5.Controller : Knob removeCallback(CallbackListener) 
controlP5.Controller : Knob removeListener(ControlListener) 
controlP5.Controller : Knob removeProperty(String) 
controlP5.Controller : Knob removeProperty(String, String) 
controlP5.Controller : Knob setArrayValue(float[]) 
controlP5.Controller : Knob setArrayValue(int, float) 
controlP5.Controller : Knob setBehavior(ControlBehavior) 
controlP5.Controller : Knob setBroadcast(boolean) 
controlP5.Controller : Knob setCaptionLabel(String) 
controlP5.Controller : Knob setColor(CColor) 
controlP5.Controller : Knob setColorActive(int) 
controlP5.Controller : Knob setColorBackground(int) 
controlP5.Controller : Knob setColorCaptionLabel(int) 
controlP5.Controller : Knob setColorForeground(int) 
controlP5.Controller : Knob setColorValueLabel(int) 
controlP5.Controller : Knob setDecimalPrecision(int) 
controlP5.Controller : Knob setDefaultValue(float) 
controlP5.Controller : Knob setHeight(int) 
controlP5.Controller : Knob setId(int) 
controlP5.Controller : Knob setImages(PImage, PImage, PImage) 
controlP5.Controller : Knob setImages(PImage, PImage, PImage, PImage) 
controlP5.Controller : Knob setLabelVisible(boolean) 
controlP5.Controller : Knob setLock(boolean) 
controlP5.Controller : Knob setMax(float) 
controlP5.Controller : Knob setMin(float) 
controlP5.Controller : Knob setMouseOver(boolean) 
controlP5.Controller : Knob setMoveable(boolean) 
controlP5.Controller : Knob setPosition(PVector) 
controlP5.Controller : Knob setPosition(float, float) 
controlP5.Controller : Knob setSize(PImage) 
controlP5.Controller : Knob setSize(int, int) 
controlP5.Controller : Knob setStringValue(String) 
controlP5.Controller : Knob setUpdate(boolean) 
controlP5.Controller : Knob setValueLabel(String) 
controlP5.Controller : Knob setView(ControllerView) 
controlP5.Controller : Knob setVisible(boolean) 
controlP5.Controller : Knob setWidth(int) 
controlP5.Controller : Knob show() 
controlP5.Controller : Knob unlock() 
controlP5.Controller : Knob unplugFrom(Object) 
controlP5.Controller : Knob unplugFrom(Object[]) 
controlP5.Controller : Knob unregisterTooltip() 
controlP5.Controller : Knob update() 
controlP5.Controller : Knob updateSize() 
controlP5.Controller : Label getCaptionLabel() 
controlP5.Controller : Label getValueLabel() 
controlP5.Controller : List getControllerPlugList() 
controlP5.Controller : PImage setImage(PImage) 
controlP5.Controller : PImage setImage(PImage, int) 
controlP5.Controller : PVector getAbsolutePosition() 
controlP5.Controller : PVector getPosition() 
controlP5.Controller : String getAddress() 
controlP5.Controller : String getInfo() 
controlP5.Controller : String getName() 
controlP5.Controller : String getStringValue() 
controlP5.Controller : String toString() 
controlP5.Controller : Tab getTab() 
controlP5.Controller : boolean isActive() 
controlP5.Controller : boolean isBroadcast() 
controlP5.Controller : boolean isInside() 
controlP5.Controller : boolean isLabelVisible() 
controlP5.Controller : boolean isListening() 
controlP5.Controller : boolean isLock() 
controlP5.Controller : boolean isMouseOver() 
controlP5.Controller : boolean isMousePressed() 
controlP5.Controller : boolean isMoveable() 
controlP5.Controller : boolean isUpdate() 
controlP5.Controller : boolean isVisible() 
controlP5.Controller : float getArrayValue(int) 
controlP5.Controller : float getDefaultValue() 
controlP5.Controller : float getMax() 
controlP5.Controller : float getMin() 
controlP5.Controller : float getValue() 
controlP5.Controller : float[] getArrayValue() 
controlP5.Controller : int getDecimalPrecision() 
controlP5.Controller : int getHeight() 
controlP5.Controller : int getId() 
controlP5.Controller : int getWidth() 
controlP5.Controller : int listenerSize() 
controlP5.Controller : void remove() 
controlP5.Controller : void setView(ControllerView, int) 
java.lang.Object : String toString() 
java.lang.Object : boolean equals(Object) 


*/




Field Summary
static int autoHeight
           
static int autoWidth
           
 
Fields inherited from interface controlP5.ControlP5Constants
acceptClassList, ACTION_BROADCAST, ACTION_ENTER, ACTION_LEAVE, ACTION_PRESSED, ACTION_RELEASED, ACTION_RELEASEDOUTSIDE, ACTIVE, ALL, ALT, ARC, ARRAY, BACKSPACE, BASELINE, BITFONT, BOOLEAN, BOTTOM, BOTTOM_OUTSIDE, CAPTIONLABEL, CENTER, COMMANDKEY, CONTROL, controlEventClass, CUSTOM, DECREASE, DEFAULT, DELETE, DONE, DOWN, ELLIPSE, ENTER, ESCAPE, EVENT, eventMethod, FADEIN, FADEOUT, FIELD, FLOAT, HALF_PI, HIDE, HIGHLIGHT, HORIZONTAL, IDLE, IMAGE, INACTIVE, INCREASE, INTEGER, INVALID, KEYCONTROL, LEFT, LEFT_OUTSIDE, LINE, LOAD, MENU, METHOD, MOVE, MULTI, MULTIPLES, OVER, PI, PRESSED, PRINT, RELEASE, RESET, RIGHT, RIGHT_OUTSIDE, SAVE, SHIFT, SINGLE, SINGLE_COLUMN, SINGLE_ROW, SPRITE, STRING, SWITCH, SWITCH_BACK, SWITCH_FORE, TAB, TOP, TOP_OUTSIDE, TRANSITION_WAIT_FADEIN, TWO_PI, UP, VALUELABEL, VERBOSE, VERTICAL, WAIT
 
Constructor Summary
Knob(ControlP5 theControlP5, java.lang.String theName)
          Convenience constructor to extend Knob.
 
Method Summary
 float getAngle()
           
 float getAngleRange()
           
 int getDragDirection()
          Gets the drag direction which is either Controller.HORIZONTAL or Controller.VERTICAL.
 int getNumberOfTickMarks()
           
 float getRadius()
           
 float getResolution()
           
 float getStartAngle()
          get the start angle, 0 is at 3 o'clock.
 int getTickMarkLength()
           
 float getTickMarkWeight()
           
 float getValue()
           
 int getViewStyle()
           
 Knob hideTickMarks()
           
 boolean isConstrained()
           
 boolean isShowAngleRange()
           
 boolean isShowTickMarks()
           
 Knob scrolled(int theRotationValue)
          Changes the value of the knob when hovering and using the mouse wheel or the scroll function of a multi-touch track pad.
 Knob setAngleRange(float theRange)
          set the range in between which the know operates.
 Knob setConstrained(boolean theValue)
           
 Knob setDragDirection(int theValue)
          Sets the drag direction, when controlling a knob, parameter is either Controller.HORIZONTAL or Controller.VERTICAL.
 Knob setMax(float theValue)
          sets the maximum value of the Controller.
 Knob setMin(float theValue)
          sets the minimum value of the Controller.
 Knob setNumberOfTickMarks(int theNumber)
           
 Knob setRadius(float theValue)
           
 Knob setRange(float theMin, float theMax)
           
 Knob setResolution(float theValue)
          resolution is a sensitivity value when dragging a knob.
 Knob setScrollSensitivity(float theValue)
          Sets the sensitivity for the scroll behavior when using the mouse wheel or the scroll function of a multi-touch track pad.
 Knob setShowAngleRange(boolean theValue)
           
 Knob setSize(int theWidth, int theHeight)
           
 Knob setStartAngle(float theAngle)
          The start angle is a value between 0 and TWO_PI.
 Knob setTickMarkLength(int theLength)
           
 Knob setTickMarkWeight(float theWeight)
           
 Knob setValue(float theValue)
           
 Knob setViewStyle(int theStyle)
          set the display style of a knob.
 Knob showTickMarks()
           
 Knob shuffle()
          Assigns a random value to the controller.
 Knob snapToTickMarks(boolean theFlag)
           
 
Methods inherited from class controlP5.Controller
add, addCallback, addListener, align, bringToFront, bringToFront, changeValue, getAbsolutePosition, getAddress, getArrayValue, getArrayValue, getBehavior, getCaptionLabel, getColor, getControllerPlugList, getControlWindow, getDecimalPrecision, getDefaultValue, getHeight, getId, getLabel, getMax, getMin, getName, getParent, getPickingColor, getPointer, getPosition, getProperty, getProperty, getStringValue, getTab, getValueLabel, getWidth, getWindow, hide, init, isActive, isBroadcast, isInside, isLabelVisible, isListening, isLock, isMouseOver, isMousePressed, isMoveable, isUpdate, isVisible, keyEvent, linebreak, listen, listenerSize, lock, moveTo, moveTo, moveTo, moveTo, moveTo, moveTo, moveTo, moveTo, moveTo, plugTo, plugTo, plugTo, plugTo, registerProperty, registerProperty, registerTooltip, remove, remove, removeBehavior, removeCallback, removeCallback, removeListener, removeProperty, removeProperty, setAbsolutePosition, setAddress, setArrayValue, setArrayValue, setBehavior, setBroadcast, setCaptionLabel, setColor, setColorActive, setColorBackground, setColorCaptionLabel, setColorForeground, setColorValueLabel, setDecimalPrecision, setDefaultValue, setGroup, setGroup, setHeight, setId, setImage, setImage, setImages, setImages, setImages, setLabelVisible, setLock, setMouseOver, setMousePressed, setMoveable, setParent, setPosition, setPosition, setSize, setStringValue, setTab, setTab, setUpdate, setValueLabel, setView, setView, setVisible, setWidth, show, unlock, unplugFrom, unplugFrom, unregisterTooltip, update, updateAbsolutePosition, updateEvents, updateInternalEvents, updateSize
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface controlP5.ControllerInterface
continuousUpdateEvents, draw, parent, setColorLabel, setColorValue, setLabel
 
Methods inherited from interface controlP5.CDrawable
draw
 

Field Detail

autoHeight

public static int autoHeight

autoWidth

public static int autoWidth
Constructor Detail

Knob

public Knob(ControlP5 theControlP5,
            java.lang.String theName)
Convenience constructor to extend Knob.

Parameters:
theControlP5 -
theName -
+Example
/**
 * ControlP5 extending Controllers
 *
 * the following example shows how to extend the Controller class to 
 * create customizable Controllers. You can either extend the Controller class itself,
 * or any class that extends Controller itself like the Slider, Button, DropdownList, etc. 
 * 
 * How to:
 *
 * 1) do a super call to the convenience constructor requiring 
 * 2 parameter (ControlP5 instance, name)  
 *
 * 2) the Controller class has a set of empty methods that allow you to capture
 * inputs from the mouse including 
 * onEnter(), onLeave(), onPress(), onRelease(), onClick(), onScroll(int), onDrag()
 * These you can override and include functionality as needed.
 *
 * 3) use method getPointer() to return the local (relative) 
 * xy-coordinates of the controller
 *  
 * 4) after instantiation custom controllers are treated the same 
 * as default controlP5 controllers.
 *  
 * by Andreas Schlegel, 2012
 * www.sojamo.de/libraries/controlp5
 *
 */

import controlP5.*;

ControlP5 cp5;
PApplet p;

void setup() {
  size(400, 400);
  cp5 = new ControlP5(this);
  
  // create 2 groups to show nesting of custom controllers and
  //   
  Group g1 = cp5.addGroup("a").setPosition(0,100).setWidth(180);
  Group g2 = cp5.addGroup("b").setPosition(0,10).setWidth(180);
  g2.moveTo(g1);
  
  // create 2 custom Controllers from class MyButton
  // MyButton extends Controller and inherits all methods accordingly.
  new MyButton(cp5, "b1").setPosition(0, 0).setSize(180, 200).moveTo(g2);
  new MyButton(cp5, "b2").setPosition(205, 15).setSize(180, 200);
  
}


void draw() {
  background(0);
}

// b1 will be called from Controller b1
public void b1(float theValue) {
  println("yay button "+theValue);
}

public void controlEvent(ControlEvent theEvent) {
  println("controlEvent : "+theEvent);
}


// Create a custom Controller, please not that 
// MyButton extends Controller, 
// is an indicator for the super class about the type of 
// custom controller to be created.

class MyButton extends Controller {

  int current = 0xffff0000;

  float a = 128;
  
  float na;
  
  int y;
  
  // use the convenience constructor of super class Controller
  // MyButton will automatically registered and move to the 
  // default controlP5 tab.
  
  MyButton(ControlP5 cp5, String theName) {
    super(cp5, theName);
    
    // replace the default view with a custom view.
    setView(new ControllerView() {
      public void display(PApplet p, Object b) {
        // draw button background
        na += (a-na) * 0.1; 
        p.fill(current,na);
        p.rect(0, 0, getWidth(), getHeight());
        
        // draw horizontal line which can be moved on the x-axis 
        // using the scroll wheel. 
        p.fill(0,255,0);
        p.rect(0,y,width,10);
        
        // draw the custom label 
        p.fill(128);
        translate(0,getHeight()+14);
        p.text(getName(),0,0);
        p.text(getName(),0,0);
        
      }
    }
    );
  }

  // override various input methods for mouse input control
  void onEnter() {
    cursor(HAND);
    println("enter");
    a = 255;
  }
  
  void onScroll(int n) {
    println("scrolling");
    y -= n;
    y = constrain(y,0,getHeight()-10);
  }
  
  void onPress() {
    println("press");
    current = 0xffffff00;
  }
  
  void onClick() {
    Pointer p1 = getPointer();
    println("clicked at "+p1.x()+", "+p1.y());
    current = 0xffffff00;
    setValue(y);
  }

  void onRelease() {
    println("release");
    current = 0xffffffff;
  }
  
  void onMove() {
    println("moving "+this+" "+_myControlWindow.getMouseOverList());
  }

  void onDrag() {
    current = 0xff0000ff;
    Pointer p1 = getPointer();
    float dif = dist(p1.px(),p1.py(),p1.x(),p1.y());
    println("dragging at "+p1.x()+", "+p1.y()+" "+dif);
  }
  
  void onReleaseOutside() {
    onLeave();
  }

  void onLeave() {
    println("leave");
    cursor(ARROW);
    a = 128;
  }
}

Method Detail

getAngle

public float getAngle()

getAngleRange

public float getAngleRange()

getDragDirection

public int getDragDirection()
Gets the drag direction which is either Controller.HORIZONTAL or Controller.VERTICAL.

Returns:
int returns Controller.HORIZONTAL or Controller.VERTICAL

getNumberOfTickMarks

public int getNumberOfTickMarks()

getRadius

public float getRadius()

getResolution

public float getResolution()

getStartAngle

public float getStartAngle()
get the start angle, 0 is at 3 o'clock.


getTickMarkLength

public int getTickMarkLength()

getTickMarkWeight

public float getTickMarkWeight()

getValue

public float getValue()
Specified by:
getValue in interface ControllerInterface
Overrides:
getValue in class Controller
Returns:
float
See Also:
Controller.getStringValue(), Controller.getArrayValue()

getViewStyle

public int getViewStyle()

hideTickMarks

public Knob hideTickMarks()

isConstrained

public boolean isConstrained()

isShowAngleRange

public boolean isShowAngleRange()

isShowTickMarks

public boolean isShowTickMarks()

scrolled

public Knob scrolled(int theRotationValue)
Changes the value of the knob when hovering and using the mouse wheel or the scroll function of a multi-touch track pad.


setAngleRange

public Knob setAngleRange(float theRange)
set the range in between which the know operates. By default the range is PI + HALF_PI


setConstrained

public Knob setConstrained(boolean theValue)

setDragDirection

public Knob setDragDirection(int theValue)
Sets the drag direction, when controlling a knob, parameter is either Controller.HORIZONTAL or Controller.VERTICAL.

Parameters:
theValue - must be Controller.HORIZONTAL or Controller.VERTICAL
Returns:
Knob

setMax

public Knob setMax(float theValue)
Description copied from class: Controller
sets the maximum value of the Controller.

Overrides:
setMax in class Controller
Parameters:
theValue - float
Returns:
Controller

setMin

public Knob setMin(float theValue)
Description copied from class: Controller
sets the minimum value of the Controller.

Overrides:
setMin in class Controller
Parameters:
theValue - float
Returns:
Controller

setNumberOfTickMarks

public Knob setNumberOfTickMarks(int theNumber)

setRadius

public Knob setRadius(float theValue)

setRange

public Knob setRange(float theMin,
                     float theMax)

setResolution

public Knob setResolution(float theValue)
resolution is a sensitivity value when dragging a knob. the higher the value, the more sensitive the dragging.


setScrollSensitivity

public Knob setScrollSensitivity(float theValue)
Sets the sensitivity for the scroll behavior when using the mouse wheel or the scroll function of a multi-touch track pad. The smaller the value (closer to 0) the higher the sensitivity.

Parameters:
theValue -
Returns:
Knob

setShowAngleRange

public Knob setShowAngleRange(boolean theValue)

setSize

public Knob setSize(int theWidth,
                    int theHeight)
Overrides:
setSize in class Controller
Returns:
Controller

setStartAngle

public Knob setStartAngle(float theAngle)
The start angle is a value between 0 and TWO_PI. By default the start angle is set to HALF_PI + PI * 0.25f


setTickMarkLength

public Knob setTickMarkLength(int theLength)

setTickMarkWeight

public Knob setTickMarkWeight(float theWeight)

setValue

public Knob setValue(float theValue)
Specified by:
setValue in interface ControllerInterface
Overrides:
setValue in class Controller
Parameters:
theValue - float

setViewStyle

public Knob setViewStyle(int theStyle)
set the display style of a knob. takes parameters Knob.LINE, Knob.ELLIPSE or Knob.ARC. default style is Knob.LINE

Parameters:
theStyle - use Knob.LINE, Knob.ELLIPSE or Knob.ARC
Returns:
Knob

showTickMarks

public Knob showTickMarks()

shuffle

public Knob shuffle()
Assigns a random value to the controller.


snapToTickMarks

public Knob snapToTickMarks(boolean theFlag)


processing library controlP5 by Andreas Schlegel. (c) 2006-2012