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

Discussion :

Rotation de QGraphicscene

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 310
    Par défaut Rotation de QGraphicscene
    Bonsoir,

    J'ai des soucis pour faire 1 rotation d'une QGraphicsScene.

    J'ai une QGraphicsPixmapitem, 1 QGraphicsRectitem, et 2 QGraphicsLine.

    Mon QGraphicsRectItem est déclaré comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    QGraphicsRectItem* ajout_rectangle = new QGraphicsRectItem(0,0,100,100);
    ajout_rectangle->setPos(50,50);
    ajout_rectangle->setBrush(QBrush(Qt::black)); ajout_rectangle->setFlags(QGraphicsItem::ItemIsSelectable|QGraphicsItem::ItemIsMovable);
    scene->addItem(ajout_rectangle);
    Même principe pour mes QGraphicsLineItem.

    J'arrive à effectuer 1 rotation du QGraphicsPixmapItem comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    img=item->pixmap().toImage();
    QTransform t;
    QImage img2 = img.transformed(t.rotate(rot));
    item->setPixmap(QPixmap::fromImage(img2));
    Pour le QGraphicsRectItem et les QGraphicsLineItem je fais ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    item->setTransformOriginPoint(item->pos());
    item->setRotation(90);
    Je ne vois plus les items ( hors view je pense ), si je ne met pas setTransformpoint, je vois toujours le rectangle

    Merci pour votre aide.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 156
    Billets dans le blog
    151
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    item->setTransformOriginPoint(item->pos());
    item->setRotation(90);
    Ça fait une rotation par rapport au coin supérieur gauche ? Mais, cela n'explique pas nécessairement pourquoi vous ne voyez plus l'objet

    Toutefois, attention, la fonction agit en coordonnées de l'élément : http://qt.developpez.com/doc/4.7/qgr...moriginpoint-2
    ce qui ne correspond par à pos().
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 310
    Par défaut
    Pour le fait que je ne voit plus les éléments, ça me parait logique, mes QGraphicsLineTitems et QRectItems sont par dessus une QPixMapItem.

    Comme il ne semble pas y avoir de fonctions permettant la rotation de tous les éléments de la GraphicsView/scene, je les traite 1 par 1. Le 1er traité est le QGraphicsPixmapItem.

    L'image est déformée car la rotation ne lui permet plus de tenir dans la vue, vu que j'ai fait une fitsInView, et j'ai une partie blanche sur la droite. Je pense que comme j'utilise mal le système de coordonnées, je me retrouve avec les QGraphicsLineItems hors vue, enfin c'est comme ça que je comprend le truc.

    Je vais peut être commencer par voir si il y a une fonction du genre unfitsInView ou peut-être recréer une vue, ce qui permettra d'avoir une vue de mes yeux vues d’où se placent les éléments.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  4. #4
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 310
    Par défaut toujours pas trouvé
    Pour retourner les éléments de ma scene

    Je réussis correctement à retourner mon image de fond mais pas les autres éléments. Mes QLineItems effectuent bien une rotation, mais ne se replacent pas au bon endroit. Je joint les photos du résultat.
    Je

    Voici mon code :

    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
    35
    36
     
      QList<QGraphicsItem*> mesitems=scene->items();
      for (int boucle=mesitems.count()-1;boucle>=0;--boucle)
      {
        if (mesitems.at(boucle)->type()==_qgraphicspixmapitem)
        {
          int longueur_source=scene->sceneRect().width();
          int largeur_source=scene->sceneRect().height();
          scene->setSceneRect(0,0,longueur_source*10,largeur_source*10);
          item=qgraphicsitem_cast<QGraphicsPixmapItem*>(mesitems.at(boucle));
          img=item->pixmap().toImage();
          QTransform t;
          QImage img2 = img.transformed(t.rotate(rot));
          QGraphicsPixmapItem *item2=new QGraphicsPixmapItem();
          item2->setPixmap(QPixmap::fromImage(img2));
          delete item;
          scene->addPixmap(QPixmap::fromImage(img2));
          int longueur_destination=largeur_source;
          int largeur_destination=longueur_source;
          scene->setSceneRect(0,0,longueur_destination,largeur_destination);
          view->setSceneRect(scene->sceneRect());
          view->fitInView(scene->sceneRect(),Qt::KeepAspectRatio);
        }
        if (mesitems.at(boucle)->type()==_qgraphicslineitem)
        {
          item_line=qgraphicsitem_cast<QGraphicsLineItem*>(mesitems.at(boucle));
     //     item_line->setTransformOriginPoint(item->pos());
          item_line->rotate(rot);
        }
        if (mesitems.at(boucle)->type()==_qgraphicsrectitem)
        {
          item_rect=qgraphicsitem_cast<QGraphicsRectItem*>(mesitems.at(boucle));
    //      item_rect->setTransformOriginPoint(item->pos());
          item_rect->rotate(rot);
        }
    }
    Le settransformorigin ( conseillé LittleWhite ) ne change rien.
    Je précises qu'aucun animal n'a été torturé pendant la séquence.
    Images attachées Images attachées   
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 156
    Billets dans le blog
    151
    Par défaut
    Ouep, il y a un problème dans les coordonnées.
    Je pense que vous devriez tourner l'image et les éléments en un seul bloc au lieu de faire un par un.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  6. #6
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 310
    Par défaut
    Il aurait été pratique de pouvoir appliquer la rotation à la scène complète.

    J'ai essayé en effectuant un grabwigdet sur ma vue, le problème, c'est que mon img n'a plus les dimensions d'origine. Et je ne peux pas faire un grabwidget sur la scene.

    Mon image d'origine est 3296x2472
    Mon image avec img=QPixmap::grabWidget(view).toImage(); retourne 835x440.

    Je fait un fitinview sur ma scene.

    Si j'ajoute un trait dans mon image via QGraphislineItem, je veux ceux-ci se greffent par dessus mon image sans déformation. Est-ce possible après un fitinview. Peut-être en utilisant un painter ?
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

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

Discussions similaires

  1. Problème de rotation
    Par Francky033 dans le forum DirectX
    Réponses: 1
    Dernier message: 17/07/2003, 16h38
  2. Rotation de Bitmap -> ScanLine
    Par jujuesteban dans le forum Langage
    Réponses: 7
    Dernier message: 03/07/2003, 15h11
  3. Rotation d'un bouton ?
    Par ken_survivant dans le forum Composants
    Réponses: 3
    Dernier message: 01/04/2003, 18h16
  4. matrice et rotation
    Par charly dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 07/12/2002, 17h59
  5. algo : rotation d'objet 3d
    Par numeror dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 19/08/2002, 22h58

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