Bonjour à tous,
je suis un petit newbee dans le forum de processing, donc débutant sur ce logiciel (malgré 2 mois de geekage intensif dessus...).
J'ai besoin que l'on m'aide pour la librairie controlP5. Je m'explique, je suis en train de faire une application qui est une sorte de guide numérique. J'explique le principe, tout d'abord je suis sur une interface avec un choix de bar / pub / restaurants etc... puis si on clique sur un des retaurant l'interface change et on est sur une map (Unfolding modifiée avec TileMill). Voilà grosso modo le topo de l'appli que je veux faire.
Et sur le côté de la fenêtre (sur l'interface de choix du restaurant / pub) j'ai donc voulu créer des Toggle pour faire apparaître des infos supplémentaires comme "Infos supplémentaires", "Accès", "Horraires" etc...
Donc si je clique sur un des toggle je voudrais qu'une fenêtre s'ouvre et qu'il y ai un texte défilant avec un slider zoom (ou pas en fonction de la difficulté, je veux surtout faire un programme que je comprend bien pour me familiariser avec Processing).
Alors le problème le voilà :
void controlEvent(ControlEvent theEvent) {
if (theEvent.isController()) {
print("control event from : "+theEvent.controller().name());
println(", value : "+theEvent.controller().value());
}
if (theEvent.controller().name()=="Infos +") {
if (theEvent.controller().value()==1) {
c = color(105);
fill(255);
PFont font;
font = loadFont("ArialNarrow-48.vlw");
textFont(font, 12);
text("Test texte dans le cadre", 35, 35, 200, 400);
}
quand je lance l'appli, je clique sur le toggle, aucun soucis la fenêtre s'ouvre mais le texte ne s'ouvre que durant une demi seconde puis plus rien... Ma question est peut-on activer plusieurs choses quand le toggle est à 1? (c'est a dire faire un carré avec du texte) ou c'est bien plus compliqué que ça?
Idem j'ai deux toggle pour mes deux interfaces mais je n'arrive pas à attribuer un toggle pour lancer la carte et pour revenir sur l'applet principale...
Si quelqu'un arrive à m'aider ce serait super.
Merci à vous!
Hors ligne
peux tu poster ton code entier, ça serait plus simple pour tester
Hors ligne
Voici le code :
import controlP5.*; // importation de la librairie controlP5
import geomerative.*;
ControlP5 cp5;
color c;
int counter = 1;
RFont font;
RPoint[] myPoints;
String myText = "Guide Numérique ENSAM";
String [] top50 = {
"Blarney Stones", "House Of The Parlement", "La Comptesse", "Le Fiacre", "115 New York", "El Chicho", "Medoquine", "Ciam", "Maison Eco-Citoyenne", "Krakatoa",
"Le Cuvier", "Gare", "Arc En Rêve", "Le Tnt", "Centre Culturel Du Vin", "I-Boat", "Projet Culturel Ginko", "Agapi", "NODE", "Espace 29",
"Garage Moderne", "Hangar 14", "Docks", "TBC Quinconces", "Hôtel de la Gare", "Stations Vcub", "ENSAM", "Campus de Talence", "ENSAP Bordeaux", "Galerie Suty",
"KFC", "Grand Café", "Torito", "Azuli", "Apolo", "Le Comptoir du Jazz", "Théâtre Nationnal Bordeaux Aquitaine", "Place du Parlement", "Place Caju", "Place des Grand Hommes",
"Place de la commédie", "Place de la Victoire", "Hall des Chartrons", "Place Paul Doumer", "Place Saint Pierre", "Saint Michel", "Rock School Barbey", "Cap Sciences",
"Place Saint Projet", "Place Pey Berlan"
};
void setup()
{
size(1600, 900);
smooth();
controlP5 = new ControlP5(this);
initControls(); //fait appel à la Tab Controls
}
void draw()
{
background(0); // couleur du fond
circle();
counts();
//Création d'une fenêtre pour texte du toggle Infos +
fill(c);
// Fenêtre infos + (x,y,largeur,hauteur)
rect(70, 30, 200, 400);
}
ControlP5 controlP5; //ici j'étais sur un autre onglet
void initControls()
{
controlP5 = new ControlP5(this);
// paramètres du toggle : nom, valeure par défaut (boolean), x, y, largeur, hauteur
controlP5.addToggle("Infos +", false, 30, 30, 32, 20);
controlP5.addToggle("Acces", false, 30, 70, 32, 20);
controlP5.addToggle("Horaires", false, 30, 110, 32, 20);
controlP5.addToggle("Map", false, 30, 150, 32, 20);
}
void controlEvent(ControlEvent theEvent) {
if (theEvent.isController()) {
print("control event from : "+theEvent.controller().name());
println(", value : "+theEvent.controller().value());
}
if (theEvent.controller().name()=="Infos +") {
if (theEvent.controller().value()==1)
c = color(105);
else c = color(0);
}
if (theEvent.controller().name()=="Acces") {
if (theEvent.controller().value()==1)
c = color(105);
else c = color(0);
}
if (theEvent.controller().name()=="Horaires") {
if (theEvent.controller().value()==1)
c = color(105);
else c = color(0);
}
if (theEvent.controller().name()=="Map") {
if (theEvent.controller().value()==1)
c = color(105);
else c = color(0);
}
}
void counts()
{
textAlign (CENTER); //Texte Central
textSize(40);
fill(0, 255, 255);
text(counter, width/2, height/2);
}
void mouseClicked()
{
counter++;
if (counter > 50) {
counter =1;
}
}
void circle()
{
noStroke();
for (int i = 0; i<top50.length; i++)
{
float value = 5;
float m = map(value, 0, 400, 0, 10); //Réglage de la fluidité du strat
//float m = map(value, 0, width, 0, 10); //Réglage de la fluidité du strat : ici en mode plus éclaté
pushMatrix();
translate(width*.5, height*.5); //Placement du strat sur l'interface
rotate(radians(180+(i*7.2))); //Angle incident des mots sur les cercles
textSize(14);//taille texte (unique)
//textSize(26-(i*.5)); // Taille du texte (grand->petit)
fill(0*(i+1), 100*(i+25), 100*(i+1)); // intensité des couleurs des strats
ellipseMode(CENTER);
textAlign(LEFT);
translate(-600*.25, 0); //Taille du strat général
rotate(radians(180));
ellipse(-30+(m*mouseX), -5+(m*mouseY), top50[i].length(), top50[i].length());
fill(255, 255, 255); // couleur des mots en attentes
if (counter-1 == i)
{
fill(0, 255, 255); //couleur du mot sélectionné
text(top50[counter-1], m*mouseX, m*mouseY);
}
text(top50[i], m*mouseX, m*mouseY);
popMatrix();
}
}
Voici pour l'interface de choix (je vais remplacer le string par une liste Excel beaucoup plus simple à gérer), je me suis inspiré d'un Applet existant que j'ai modifié (d'où le compteur qui ne sert à rien mais je ne sais pas encore comment l'enlever).
Je n'ai pas mis la partie Map unfolding car il est sur une autre applet (qui marche) je comptait la faire intervenir avec la libraries "napplet" (je ne sais pas trop encore comment). Merci cgiles en tout cas!
Hors ligne
le controlEvent est éxécuté une fois, lorsque le controlleur change d'état, donc pendant une seul image.
Il faut que lorsque un controlleur est modifié tu places en true ou false une variable booléenne, qui déclencherai via un if le fait de dessiner ou non quelque chose au sein du draw.
Hors ligne
donc ça ressemblerais à
boolean a = false;
if (!a) {
c = color(0);
}
a = true;
if (a) {
text("quelque chose" x,y,...);
fill (valeure);
rect(...);
}
c'est ça? mais est-ce que on peut rentrer plusieurs infos entre les accolades du " if (theEvent.isController())" parce que visiblement quand je lance le script seule la première ligne se lance... (je dois me tromper du coup)
Hors ligne
il y a qu'un truc qui se déclenche car tu places pas d'accolade {} dérrière ton if (theEvent.controller().value()==1) et avant et après le else. Mais c'est pas vraiment fait pour placer du code, plutôt pour être informé d'un changement d'état
Hors ligne
Si je place les accolades avant et après le elese c'est simple j'ai le message d'erreur "expecting RCURLY, found 'else' ". Du coup l'accolade derrière if (theEvent.controller().value()==1) est inutile. Par contre je n'arrive pas à utiliser la variable boléenne, je ne sais pas où l'appliquer...
Hors ligne
donc voici le code qui marche chez moi :
tout d'abord avant le setup je crée une booléenne : boolean infoBool=false;
dans le draw j'ajoute ceci =
if (infoBool) { fill(c); rect(70, 30, 200, 400); textAlign(LEFT); fill(255); text("Helloworld", 70, 50); }
et enfin mon control event prend cette forme :
if (theEvent.controller().name()=="Infos +") { if (theEvent.controller().value()==1) { c = color(105); infoBool=true; } else { infoBool=false; c = color(0); } }
Hors ligne
Je vais essayer ça! effectivement ça m'a l'air cohérent, je n'ai pas du tout pensé au Boléen. Et sinon j'ai une petite question que j'ai rarement vue sur les forums ou du moins les réponses étaient un peu ambigües, peut-on faire appel à une applet Processing extérieure? par exemple à un moment dans le programme je veux démarer une autre applet en même temps, est-ce possible? (j'ai vu que certains utilisent la librarie napplet est-ce la bonne solution?)
En tout cas je te dis un grand merci cgiles!
Hors ligne
Hors ligne
Pages: 1