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

Qt Discussion :

Problème de rotation avec QPainter


Sujet :

Qt

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 2
    Points : 4
    Points
    4
    Par défaut Problème de rotation avec QPainter
    Bonjour à vous !

    Dans le cadre d'un projet tuteuré, je dois créer divers instruments de géométrie à l'aide de Qt, règle, équerre, crayon et compas. Chaque instruments possède divers options réglable comme la rotation translation, transparence... J'utilise donc un QPainter pour pouvoir les dessiner, et tout s'est bien passé avec la règle, équerre et crayon.
    Je suis donc arrivé au compas, et il est venu la question de la représentation de l'écartement des branches. Après avoir pensé la chose en long et en large j'en suis venu à ce code (je passe les initialisations des variables) :

    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
     
    //Rotation principale
    	dessin.translate(x,y);
    	dessin.rotate(rotation);
    	dessin.translate(-x,-y);
    //Dessin de la tige avec pointe
    	double teta = angleEcartement(ecartement, hauteurBranche+hauteurPointe); //Angle entre la droite coupant le compas en deux et la branche
    	dessin.save();
    	//Rotation de la tige
    	dessin.translate(x,y);
    	dessin.rotate(-teta);
    	dessin.translate(-x,-y);
    	//Dessin
    	dessin.setPen(Qt::black);
    	QPointF pointe[3] = {QPointF(x,y), QPointF(x, y+hauteurPointe), QPointF(x-largeurBranche, y+hauteurPointe)}; //Points de la pointe
    	dessin.drawConvexPolygon(pointe, 3); //Dessin de la pointe
    	dessin.setBrush(Qt::gray);
    	dessin.drawRect(x-largeurBranche, y+hauteurPointe, largeurBranche, hauteurBranche); //Branche avec pointe
    	dessin.restore();
     
    //Dessin de la tige avec mine
    	dessin.save();
    	//Rotation de la tige
    	dessin.translate(x,y);
    	dessin.rotate(teta);
    	dessin.translate(-x,-y);
    	//Dessin
    	dessin.setBrush(Qt::black);
    	QPointF mine[3] = {QPointF(x+ecartement,y), QPointF(x+ecartement, y+hauteurPointe),  QPointF(x+largeurBranche+ecartement, y+hauteurPointe)}; //Points de la mine
    	dessin.drawConvexPolygon(mine, 3); //Dessin de la mine
    	dessin.setBrush(Qt::gray);
    	dessin.drawRect(x+ecartement, y+hauteurPointe, largeurBranche, hauteurBranche); //Branche avec mine
    	dessin.restore();
    Avec ce code et un écartement de 100 j'arrive à ce résultat :
    http://tinyurl.com/pvalmvw

    le compas n'est pas terminé, c'est pour ca qu'il est pas beau
    Comme vous pouvez le voir, la deuxième branche s'en vas, plus l'écartement est grand. Après avoir passer un bon bout de temps dessus, je pense que cela vient du fait que je fais une première rotation pour la première branche, puis une pour la deuxième pour la seconde du coup ca me l'applique aussi sur la première déjà dessinée.

    Quelqu'un aurait-il des pistes pour m'orienter ou alors est-il possible de faire des rotations "indépendantes" pour chaque partie d'un dessin ?

    Merci à vous et bonne fin de journée !

  2. #2
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 2
    Points : 4
    Points
    4
    Par défaut
    Après de avoir tracé des traits de partout et analyser une ènième fois, je me suis rendu compte que l'erreur était toute bête et ne venait pas de la rotation mais de la translation, j'ai oublié de rajouter l'écart du compas à celle ci...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    dessin.translate(x+ecartement,y);  
    dessin.rotate(teta);  
    dessin.translate(-x-ecartement,-y);
    C'est mieux comme ca pour la deuxième branche ! C'est pas ma première erreur bête, et c'est loin d'être la dernière ! C'est une des joies du code

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Rotation de bitmap : problème de trigo avec PlgBlt
    Par Laskar dans le forum Langage
    Réponses: 5
    Dernier message: 26/11/2014, 14h29
  2. Problème avec QPainter
    Par lisco dans le forum Qt
    Réponses: 2
    Dernier message: 25/10/2010, 20h06
  3. Réponses: 6
    Dernier message: 18/09/2008, 12h35
  4. Problèmes de versions avec Xalan, Xerces et Java
    Par honeyz dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 05/06/2003, 10h18

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