Code Mon Apr 27

//Main Tab
//Make objects, objects call methods

//Global Variables
ButtonGroup btnGroup;  //will hold 4 pattern buttons
Button clearButton;//declare the variable as global - btn is null
color backgroundColor;
color patternFillColor;  //global
color patternStrokeColor; //
//TODO ADD global patternFillColor

Pattern currentPattern; //pointer variable keeps track of active Pattern
Pattern eraserPattern;  //has a PShape circle and background fillColor

//SLIDERS
Slider lengthSlider, hueSlider, satSlider, brightSlider;

void setup() {
  size( 800, 800);
  colorMode(HSB, 360, 100, 100, 100);
  backgroundColor = color( 300); //light gray
  background( backgroundColor);
 // Button( float x, float y, float w, float h, String label  )
  clearButton = new Button( 10, 450, 100, 100, "Clear");  //initialize - move to bottom
  Button[] btnArray = new Button[4]; //declare and initialize button array
  btnArray[0] = new Button( 10, 10, 100, 100, "Eraser");
  
  PImage img1 = loadImage( "pattern1Btn.png"); //file name with extension
  btnArray[1] = new PImageButton( 10, 120, 100, 100, img1);
  btnArray[2] = new Button( 10, 230, 100, 100, "Pattern2");
  PImage img3 = loadImage( "pattern3.png");
  btnArray[3] = new PImageButton( 10, 340, 100, 100,img3);
  btnGroup = new ButtonGroup( btnArray );
  
  //Logic for patterns
  PShape s0 = createShape( ELLIPSE, 0,0, 50, 50);
  eraserPattern = new Pattern( s0 ); 
  eraserPattern.fillColor = color(backgroundColor);//start with Purple
  eraserPattern.strokeColor = color(backgroundColor);
  currentPattern = eraserPattern;
  
  //Slider(float x, float y, float w, float h, float min, float max, String label ){
  lengthSlider = new Slider( 40,height - 40, 100, 30, 10, 200, "Length");
  hueSlider = new HueSlider( 300, height - 40, 100, 30, 100, 300);
  checkSliders();
  setPatternColor( );
} // end setup

void draw(   ) {
  if( mousePressed){
    checkSliders( );
    translate( mouseX, mouseY );
    displayPattern( ); //draw currentPattern
    resetMatrix();
  }
  displayButtons(); //do after drawing patterns
  displaySliders();
} //end draw

void mouseClicked(   ) {
  boolean isChanged = btnGroup.clicked( mouseX, mouseY);
  if( isChanged){ //only change Pattern if activeButton has changed
    changePattern();
  }
  clearButton.clicked( mouseX, mouseY);
  if( clearButton.selected ){
    clearCanvas();
    clearButton.reset();
  }
} //end mouseClicked

void displaySliders(){
  fill(0);
  rect( 0, height-100, width, 100);
  lengthSlider.display();
  hueSlider.display();
}//end displaySliders

boolean checkSliders(){
   boolean isChanged = false;
   boolean hueChanged = hueSlider.checkPressed( mouseX, mouseY);
   if(hueChanged){
      isChanged = true;
   }
   
   if( isChanged ){
     setPatternColor( );
   }
   
   if( lengthSlider.checkPressed( mouseX, mouseY)){
     changePattern( );
     isChanged = true;
   }
   return isChanged;
} //end checkSliders

void setPatternColor( ){
   float hue = hueSlider.sliderVal;
   float sat = 100;
   float bright = 100; 
   patternFillColor = color( hue, sat, bright); //set this value here
}

void changePattern(){
   //TODO add logic to connect buttons to patterns
   //activeBtnIndex will let us determine which pattern should be the currentPattern
   //Switch Case Statement
   float len = 100;  //scale slider will set / modify this value
   len = lengthSlider.sliderVal; //use slider to set len
   switch( btnGroup.activeBtnIndex){
      case 0:
          currentPattern = eraserPattern;
      break;
      
      case 1:
          PShape s1 = createShape( RECT, 0,0,len *.8 , len);
          currentPattern = new Pattern( s1);
      break;
      
      case 2:
          PShape s2 = createShape( RECT, 0,0,len , len);
          currentPattern = new Pattern( s2);
      break;
      
      case 3:
          PShape s3 = vertexShape1( len );
          currentPattern = new Pattern( s3 );
      break;
     
     default:
         println("No match on switch case");
     break;
   }  //end switch-case statement
} //end changePattern

//called every frame
void displayPattern(){
  if( currentPattern  != eraserPattern){
    //patternFillColor is changed whenever a slider changes value
    
    patternStrokeColor = color( 0, 50); //might be eraser stroke might need reset
    currentPattern.fillColor = patternFillColor; //set in setPatternColor( ) 
    currentPattern.strokeColor = patternStrokeColor;
  }
  currentPattern.display();  //sliders will set colors for other patterns
} //end displayPattern

void clearCanvas(){
   //TODO add code to draw a rectangle over the full canvas using background color
  fill( backgroundColor);
  rect( 0,0, width,height);
}//end clearCanvas

void displayButtons(){
  fill(0); //black
  rect( 0,0, 120, height);//background of menu
  btnGroup.display();
  clearButton.display();
} //end displayButtons

//Modify to remove color parameter and color logic
PShape vertexShape1( float len){
  PShape s2 = createShape();
  s2.beginShape( );
  s2.vertex( 0, 0);
  s2.vertex( len * .5, len * .5);
  s2.vertex( len, .7 * len);
  s2.vertex( len * .5, len);
  s2.vertex( 0, len);
  s2.vertex( 0,0);
  s2.beginContour();
  
  s2.vertex( .2 * len, .35 * len);
  s2.vertex( .25 * len, .75 * len);
  s2.vertex( .35 * len, .45 * len);
  s2.vertex( .5 * len, .25 * len);
  
  s2.endContour();
  s2.endShape( CLOSE);
  return s2;
}

Last updated