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 :

Rotation d'un QGraphicsItem autour de son centre


Sujet :

Qt

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 23
    Points : 16
    Points
    16
    Par défaut Rotation d'un QGraphicsItem autour de son centre
    bonjour !!

    après maints essais infructueux en essayant de comprendre les forums, docs et compagnie, suivis de nombreux essais plus idiots les uns que les autres, je m'en remet à vous (encore)

    donc j'ai un Qgraphicsitem quelconque (ici un morceau d'image découpée avec copy() ) et j'aimerais qu'il tourne sur lui-même.

  2. #2
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Points : 969
    Points
    969
    Par défaut
    Si tu as une version antérieure, la méthode s'appelle rotate().

    Ensuite, le problème est bel et bien de le faire tourner sur lui même. Pour cela (cela rejoint tes autres questions sur les coordonnées), il faut que le point d'origine soit le centre de ton image, et non pas le coin supérieur gauche comme ça doit être le cas.

    Pour cela, il faut que ton drawImage() que tu fais dans ton paint() soit fait au point (-largeurImage/2, -longueurImage/2).

    G.
    Un problème avec Qt ? Vous trouverez votre réponse ici : http://doc.trolltech.com/4.6/overviews.html
    En français (traduction réalisée par l'équipe Qt de DVP) : http://qt.developpez.com/doc/4.6/vues-d-ensemble/

  4. #4
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Salut.
    En faite, il te faut positionner et orienté le debut du dessin.
    Je sais que j'avais aussi galéré la première fois. Je voulais faire comme les matrices en OpenGl...
    Normalement c'est dans cette ordre:
    1. tu applique une rotation
    2. tu applique une translation (-W/2 , -H/2)

    .
    Il ne faut pas oublier de réinitialiser la transformation à chaque rotation.
    Si ca marche pas, je regarderais. Je doit avoir un code d'exemple.

  5. #5
    Membre confirmé

    Inscrit en
    Décembre 2009
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 164
    Points : 490
    Points
    490
    Par défaut
    Si tout ce qui a été mentionné plus haut ne marche pas ou ne te convient pas, j'ai une solution encore plus compliquée à te proposer.
    Tu peux réimplémeter le paint dans ton QGraphicsItem. Dans ce paint, tu peux calculer les nouvelles coordonnées globales de ton item (un peu de géométrie ne fera pas de mal). En gros, les nouvelles coordonnées sont trouvées par l'application d'une rotation (dans le repère centré sur l'item) et une translation (pour revenir au repère global).

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    Merci pour vos réponses

    finalement c'est avec setRotation que j'ai le plus de succès, mais il faut modifier le point d'origine.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    setTransformOriginPoint (mArea/2);
    setRotation(this->rotation()+10);
    mArea étant le QPointF(width,height)

  7. #7
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 033
    Points : 13 968
    Points
    13 968
    Par défaut
    je ne connaissais pas cette fonction(apparu avec 4.6) mon projet était en 4.5

    pour l'info

    ?

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    ha c'est tout nouveau !
    je suis tombé dessus par hasard, c'était pas loin de setRotation dans la doc ^^
    j'ai essayé avec une spirale et ça marche nickel apparement.

    du coup je me demande si ça vaut pas le coup d'appliquer la transformation du point d'origine directement dans le constructeur


    je met le sujet en résolu, encore merci pour vos réponses

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

Discussions similaires

  1. rotation d'une sinusoide autour de son axe, three.js
    Par stephane78l dans le forum WebGL
    Réponses: 4
    Dernier message: 06/07/2015, 16h55
  2. Réponses: 0
    Dernier message: 12/12/2011, 13h47
  3. Rotation d'une cible autour du centre de l'écran
    Par kurul1 dans le forum C++Builder
    Réponses: 7
    Dernier message: 11/06/2005, 21h32
  4. Réponses: 2
    Dernier message: 13/10/2004, 14h52
  5. Rotation d'un rectangle autour du centre de gravité
    Par bucheron dans le forum Algorithmes et structures de données
    Réponses: 13
    Dernier message: 22/06/2004, 11h01

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