Quantcast
Channel: Library Questions - Processing 2.x and 3.x Forum
Viewing all articles
Browse latest Browse all 2896

How to change a loop using the G4P_button ?

$
0
0

Good morning everyone.

It is the first time I come in this place. Also, because my mother tongue is not english, I will try to explain my problem as clearly as possible.

I have difficulties to understand how the G4P button is working. My program has a loop "for" which create a curve. Now, I must create a button using the G4P library which change the formula of my curve, as soon as the user click on it. I am thinking about using a if(condition){}, like :

if(button == Clicked){
  formula1;
}else{
 formula2;
}

Something like that... But it does not work and I have no idea how to call the button into my "if condition". Is that clear ?

Here is my code, I let you try it out :

// fdm_2016_trans-geometrique_tp2

// Exemple similaire sur Processing : https://processing.org/examples/sinewave.html
// possibilité de dessiner avec "line" ou "point"

import g4p_controls.*; // importation de la librarie g4p
GSlider sAmpli;
GSlider sPhase;
GSlider sFreq;
GButton sincos;

float temps; // (ou période) En pixel et non en sec. Combien de pixel avant que la vague se répète ?
float ampli; // hauteur de la "vague"
float w; // vitesse angulaire : détermine le nombre de cycles/période dans le temps
float phase; // dans lequel figurera l'angle
float x, y;
float xc, yc;
boolean b;

void setup(){
  size(600, 400);

  sAmpli = new GSlider(this, 120, 265, 200, 20, 12); // slider : emplacement, coord X, coord Y, taille X, taille Y, épaisseur
  sAmpli.setLimits(50, 0, 100); // plage de valeur : valeur par défaut, minimum, maximum
  sAmpli.addEventHandler(this, "slider_change"); // écouteur d’événement : emplacement, fonction

  sPhase = new GSlider(this, 120, 305, 200, 20, 12); // slider : emplacement, coord X, coord Y, taille X, taille Y, épaisseur
  sPhase.setLimits(0, 0, 360); // plage de valeur : valeur par défaut, minimum, maximum
  sPhase.addEventHandler(this, "slider_change"); // écouteur d’événement : emplacement, fonction

  sFreq = new GSlider(this, 120, 345, 200, 20, 12); // slider : emplacement, coord X, coord Y, taille X, taille Y, épaisseur
  sFreq.setLimits(width/2, 0, width); // plage de valeur : valeur par défaut, minimum, maximum
  sFreq.addEventHandler(this, "slider_change"); // écouteur d’événement : emplacement, fonction
}

void draw(){
  background(240);

  strokeWeight(1);
  line(0, 100, width, 100);

  temps = sFreq.getValueI(); // fréquence
  ampli = sAmpli.getValueI();
  w = (2*(PI))/temps;
  phase = (radians(sPhase.getValueI()));
  x = 0; // incrémentation
  y = 0; // formule
  yc = 0;

  for(x = 0 ; x <= width ; x++){
    y = ampli*sin(w*x+phase); // a*sin(w.t+ph);
    yc = ampli*cos(w*x+phase); // a*cos(w.t+ph);
    // point(x, y);
    stroke(0, 0, 0);
    ellipse(x, 100+y, 1, 1); // utilisation de l'ellipse pour gérer la position Y de la courbe
    stroke(255, 0, 0);
    ellipse(x, 100+yc, 1, 1); // utilisation de l'ellipse pour gérer la position Y de la courbe
  }

  // Ligne de séparation
  stroke(0);
  strokeWeight(4);
  line(0, height/2, width, height/2);

  // Texte Commande + Formule
  fill(0);
  textSize(16);
  text("Commandes", 40, height/2 + 40);
  text("Formule : y(t) = a.sin(w.t+ph)", width/2 + 40, height/2 + 40);

  // Texte Slider
  textSize(12); // taille du texte
  text("Amplitude", 40, 279); // text("valeur", coord X, coord Y);
  text("Phase", 40, 319); // text("valeur", coord X, coord Y);
  text("Fréquence", 40, 359); // text("valeur", coord X, coord Y);

  // Texte valeur slider
  text(sAmpli.getValueI()+"px", 335, 279);
  text(sPhase.getValueI()+"°", 335, 319);
  text(sFreq.getValueI()+"px", 335, 359);

  sincos = new GButton(this, 440, 300, 90, 30, "Sin / Cos"); // slider : emplacement, coord X, coord Y, taille X, taille Y, épaisseur
  sincos.addEventHandler(this, "button_change");

}

void mouseClicked(){

}

public void slider_change(GSlider s, GEvent e) {
  // les paramètres présent ici changeront lorsque les valeurs du slider sont modifiées
  // GSlider s lit les données de tous les sliders présent dans le code
}

public void button_change(GButton b, GEvent e) {

}

Important : I tried the following code... but the change is only temporary. It only last when the user click on the button.

public void button_change(GButton b, GEvent e) {
  // les paramètres présent ici changeront lorsque le bouton est appelé
   if(b == sincos && e == GEvent.CLICKED){
       for(x = 0 ; x <= width ; x++){
          yc = ampli*cos(w*x+phase); // a*cos(w.t+ph);
          // point(x, y);
          stroke(0, 0, 0);
          ellipse(x, 100+yc, 1, 1); // utilisation de l'ellipse pour gérer la position Y de la courbe

        }
   }else{
     for(x = 0 ; x <= width ; x++){
        y = ampli*sin(w*x+phase); // a*sin(w.t+ph);
        // point(x, y);
        stroke(0, 0, 0);
        ellipse(x, 100+y, 1, 1); // utilisation de l'ellipse pour gérer la position Y de la courbe
      }
  }
}

Viewing all articles
Browse latest Browse all 2896

Trending Articles