IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenGL Discussion :

Découpage dun string dans l'espace


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Octobre 2004
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 616
    Par défaut Découpage dun string dans l'espace
    Coucou a tous !
    Je vais de ce pas expliciter ce texte peu clair !

    Mon but ? J'ai une chaine de caractére composé de texte et de balise ( type html~ ); je veut juste afficher mon texte formaté a l'ecran . Pour ca , j'ai trouvé une fonction qui remplie semble-til correctement son rôle ( bon j'en suis au tout début, donc c'est trés rudimentaire et il manque pas mal de fonction .

    Pour l'instant je me contente de formater le exte sur UNE seule ligne et avec une seule balise .

    Mon probléme réside dans le fait que mon texte ne se place pas ou je le souhaite dans l'espace ( le premir mot est toujour ou il faut, mais les suivant ne sont pas a une distance normale des autre mots .)
    Je sais a quoi c'est du, mais je ne vois pas trop comment le résoudre
    ( c'est du a la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TraiterTexte(reste2,x+(12*pos),y);
    voici le code de la fonction en entier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    void cTexteDialogue::TraiterTexte(std::string temp, int x, int y)
    {
    	std::string::size_type pos;
    	std::string::size_type pos2;
    	std::string balise ;
    	std::string reste ;
    	std::string reste2 ;
     
    	pos = temp.find('[');
     
    	if (pos == std::string::npos )
    	 {
           cTexteManager::GetInstance().glPrint(x,y,temp.c_str());
    	 }
    	if (pos == 0 )
    	{
    		pos2 = temp.find(']');
    		balise.insert(0,temp, 1 , pos2-1 );
    		TraiterBalise(balise);
     
    		reste.insert(0,temp,pos2+1, std::string::npos);
    		TraiterTexte(reste,x,y);
    	}
    	if ( pos > 0 && (  pos != std::string::npos ) )
    	{
    		reste.insert(0,temp,0,pos);
    		TraiterTexte(reste,x,y);
     
    		reste2.insert(0,temp,pos,std::string::npos);
    		TraiterTexte(reste2,x+(12*pos),y);	
    	}
     
    }
    Je peut expliquer certain passage si ce n'est pas trés clair !
    Enfait il me juste savoir OU et de combien je doit me deplacer selon x .
    ( le *12 est une valeur arbitraire, car je ne connais la taille exacte d'un font en largeur ; mais au pire, par tatonnement je devrai trouver la constante qui me convient, une fois la bonne formule ( en fonction de TAILLE_FONT ) trouvée !
    merci d'avance !
    edit: mon texte est de la forme :
    "AAAaaaaaaaaa [Color 255;0;0]HeHe[/Color] lol lol[Color 255;0;0] non Mais ohoo[/Color]"
    ps: si je me trompe de forum, n'hésitez pas a déplacer !

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Si ta police est à pas fixe alors le calcul est simple : c'est simplement pas * nb_caractères.
    Sinon, il n'y a pas d'autre solution que de stocker la taille de chaque caractère pour calculer correctement la taille d'un mot.

    Dommage que je n'ai pas encore fini mon tuto n°6 (le 5 non plus d'ailleurs), ça traite très exactement de tout ça.

    Pour ce qui est du traitement des balises, pourquoi ne pas utiliser un analyseur lexical / syntaxique ou plus simplement une bibliothèque d'expressions régulières ?

  3. #3
    Membre éclairé
    Inscrit en
    Octobre 2004
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 616
    Par défaut
    Coucou, une réponses bréve car je manque de tps:

    -pour les balises .. ca ne m'a pas l'air trop dur a la main ... surtout qu'il n'y aura pas tant de balise que ca ...
    -OOO je n'avais pas pensé du tout au fait que la largeur de mes caractére n'était sans doute pas fixe lol ca complique grandement la tache
    -Sinon j'ai réfléchi a quelques détail qui clochait dans ma fonction ( je vais mettre x/ y en var menbre et ne pas mettre de param x/y dans ma fonction ; et je vais changer ces valeur aprés l'affichage effectif d'un morceau de texte . ( ma facons de faire actuelle ne va pas je pense )

    Enfin je teste tout ca d'ici une /deux heure et je revient
    merci

  4. #4
    Membre éclairé
    Inscrit en
    Octobre 2004
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 616
    Par défaut
    Aprés quelques rapides teste :
    Quelques changement dans ma fonction mais rien de bien méchant ( xpos / ypos sont des donnée menebre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    void cTexteDialogue::TraiterTexte(std::string temp)
    {
    	std::string::size_type pos;
    	std::string::size_type pos2;
    	std::string balise ;
    	std::string reste ;
    	std::string reste2 ;
     
    	pos = temp.find('[');
     
    	if (pos == std::string::npos )
    	 {
           cTexteManager::GetInstance().glPrint(xpos,ypos,temp.c_str());
    	   xpos = xpos + 7*(temp.length());
    	 }
    	if (pos == 0 )
    	{
    		pos2 = temp.find(']');
    		balise.insert(0,temp, 1 , pos2-1 );
    		TraiterBalise(balise);
     
    		reste.insert(0,temp,pos2+1, std::string::npos);
    		TraiterTexte(reste);
    	}
    	if ( pos > 0 && (  pos != std::string::npos ) )
    	{
    		reste.insert(0,temp,0,pos);
    		TraiterTexte(reste);
     
    		reste2.insert(0,temp,pos,std::string::npos);
    		TraiterTexte(reste2);	
    	}
     
    }
    Je pense que c'est au bon moment ou je decale ma position d'écriture, ca marche bien avec un seul caractére ... ou ( je supose ) avec un police de largeur fixe, ce qui n'est pas le cas de la mienne :/

    Quelqu'un connait-til le moyen de trouver la largeur de chacun des caractére d'une police donnée ?
    Hum, même en la conniassant, ma fonction va devenir bien plus lourde ( necessité de connaitre chaque caractére affiché un par un, et de trouver sa taille, faire la somme ect ...)

    Enfin si quelq'un a une methode un poil moins couteuse, je suis preneur ( mais je doute qu'il y ai guére mieux :/)

    Heu ce topic devrai peut-etre être déplacé vers le 'rum c++ ou openGL non? avis au modo' .
    merci

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Je déplace sur le forum OpenGL, ce sera effectivement peut-être plus approprié.

Discussions similaires

  1. [String] supprimer un espace dans un String
    Par Zanton dans le forum Langage
    Réponses: 5
    Dernier message: 13/07/2006, 15h33
  2. Integer ou string dans une DBGRID
    Par Yepazix dans le forum Bases de données
    Réponses: 4
    Dernier message: 02/08/2004, 13h42
  3. problème our passer des string dans tableau d'int
    Par Battosaiii dans le forum C++
    Réponses: 9
    Dernier message: 15/07/2004, 17h42
  4. Réponses: 6
    Dernier message: 24/07/2003, 12h39
  5. Recherche d'un String dans un String ?
    Par apen2k2 dans le forum Langage
    Réponses: 9
    Dernier message: 14/04/2003, 11h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo