Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab //// une carte des membres//// (apéros) codelab


#1 2013-05-07 09:39:45 Créer une surface de 3x4 dalles...

Marty
membre
Date d'inscription: 2012-04-27
Messages: 143

Créer une surface de 3x4 dalles...



Bonjour,

Mon petit problème du jour se situe au niveau du design d'une interface graphique. Ce n'est pas tant un problème de code mais plus de logique ou mathématiques...

Dans cette interface graphique, j'ai une colonne principale à gauche et un espace à droite dans lequel je peux rajouter des "controleurs" sous forme de "pavés". La surface me permet en théorie de placer 12 controleurs soit 3 controleurs par ligne x 4 lignes.

Pour info j'utilise la librairie ofxUI mais cela n'a pas grande importance si ce n'est la manière de récupérer les dimensions des éléments graphiques. dans ofxUI les conteneurs sont des "canvas". J'ai donc ici la possibilité d'ajouter 3x4 canvas.

Ce qui marche :

Quand j'ajoute un canvas, celui ci se place bien après le canvas précédemment placé, autrement dit à sa droite.

Le problème :

Il intervient quand je suis à plus de 3 canvas (controleur). En effet dans l'idée à chaque fin de ligne (donc tous les 3 canvas) il faut "revenir à la ligne" et recommencer une ligne. Dans l'idée j'imagine que l'utilisation d'un modulo ici serait la solution. Cela fonctionne évidement pour le 4eme élément, mais ne fonctionne plus à partir de 5eme...

Bon cela n'est pas censé être compliqué, mais j'avoue que je suis un peu malade aujourd'hui et j'ai la tête dans le brouillard !

Le code actuel permettant le placement des dalles :

commandGUI = est un vector pour l'ensemble des dalles.
gui = une dalle

	ofxUICanvas *gui = new ofxUICanvas(300,0,length-xInit,150);
	if(commandGUI.size() > 0)
    {
		if(commandGUI.size()%3 != 0)
		{
			ofxUICanvas *previous = commandGUI[commandGUI.size()-1];
			gui->getRect()->setX(previous->getRect()->getX()+previous->getRect()->getWidth()+1);

		}
		else
		{
			ofxUICanvas *previous = commandGUI[commandGUI.size()-3];
			//gui->getRect()->setX(previous->getRect()->getX());
			gui->getRect()->setY(previous->getRect()->getY()+previous->getRect()->getHeight()+1);
		}
	}

petite idée du résultat :

http://codelab.fr/up/Capture-d-ecran-2013-05-07-a-09.28.55.png

Hors ligne

 

#2 2013-05-07 10:55:50 Re : Créer une surface de 3x4 dalles...

talaron
membre
Date d'inscription: 2010-11-27
Messages: 23

Re: Créer une surface de 3x4 dalles...



Salut,
C'est parce que tu n'incrémentes pas le Y de tes canvas, donc les canvas s'empilent infiniment sur la première ligne et la sur la première case de la 2e

Il suffirait je pense de rajouter un  gui->getRect()->setY(previous->getRect()->getY()); dans ton IF, ca donnerait:

if(commandGUI.size()%3 != 0)
		{
			ofxUICanvas *previous = commandGUI[commandGUI.size()-1];
			gui->getRect()->setX(previous->getRect()->getX()+previous->getRect()->getWidth()+1);
                        gui->getRect()->setY(previous->getRect()->getY());

		}

Hors ligne

 

#3 2013-05-07 13:05:02 Re : Créer une surface de 3x4 dalles...

Marty
membre
Date d'inscription: 2012-04-27
Messages: 143

Re: Créer une surface de 3x4 dalles...



Elémentaire !!!

(J'avais prévenu, je suis dans le gaz wink )

Merci beaucoup

Dernière modification par Marty (2013-05-07 13:05:15)

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024