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 :

Qt Graphics View et coordonnées [Graphics View]


Sujet :

Qt

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 6
    Par défaut Qt Graphics View et coordonnées
    Bonjour à tous !

    Voici ma question : j'aimerais savoir si le système graphics view gère automatiquement la normalisation entre coordonnées réelles et coordonnées pixelles.
    Par exemple, si en entrée j'ai des points qui sont en métre, dois-je faire la normalisation en coordonnées écran moi-même ? Ou alors, existe-t-il des fonctions de mapping proposées par Qt ?

    Merci d'avance pour vos réponses.
    (Et dites moi si je ne suis pas assez claire)

  2. #2
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 88
    Par défaut
    Salut,
    Je ne sais pas ce que tu entends pas coordonnées réelles.
    Mais en tout cas si tu met une image , il va gérer les coordonnées des pixels d'une manière automatique .
    Enfin ça revient aux coordonnées de la scene

  3. #3
    Membre chevronné
    Avatar de haraelendil
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2004
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2004
    Messages : 283
    Par défaut
    Je penses qu'il veut savoir si on peut faire un peu comme avec QPainter::scale quand on fait du dessin à la mimine, c'est ça? (Après je connais pas la réponse, connais pas trop les Graphics^^)

  4. #4
    Membre expérimenté

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2006
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 281
    Par défaut
    Bonjour,

    A priori ça le gère.
    Les fonctions mapTo* et mapFrom* sont faites pour ça.
    http://qt.developpez.com/doc/latest/...l#mapFromScene

  5. #5
    Membre émérite

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Par défaut
    Les coordonées de QGraphicsScene sont exprimées en pixel. Après, tu peux ajouter un effet d'échelle sur la QGraphicsView en utilisant la méthode setMatrix().

    G.

  6. #6
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 035
    Par défaut
    Citation Envoyé par Gulish Voir le message
    Les coordonées de QGraphicsScene sont exprimées en pixel.
    C'est à dire

  7. #7
    Membre émérite

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Par défaut
    Citation Envoyé par yan Voir le message
    C'est à dire
    Quand tu dessines un rectangle de largeur 10, le rectangle a une largeur de 10 pixels, et non pas 10 cm, ni 10 m, ni 10 miles... Et tu ne peux pas le changer.

    G.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 6
    Par défaut
    Ok merci à tous pour vos réponses.
    Maintenant j'ai une meilleure vision du fonctionnement de QGraphicsScene.

    Pour ceux qui n'avaient pas compris ma question à la base:
    Imaginons que l'on souhaite dessiner un terrain qui fait 2000m de largeur et 3000m de longueur. Sur ce terrain on souhaite placer des arbres. Les arbres ont pour coordonnées des valeurs en mètres.
    Ma question était donc de savoir si on pouvait raisoner en métre lors de l'insertion d'item dans le QGraphicsScene. Ensuite je voulais savoir si on pouvait définir un QGraphicsView en pixel, et s'il s'occupait tout seul de faire la transformation des coordonnées en mètre de la scène vers son espace pixel à lui.

    Voila c'est tout.
    Quoi ? J'explique mal ? Bon d'accord désolé.
    En tout cas merci encore pour vos réponses, je sais comment ca marche maintenant.

    A plus pour une question tordue.

  9. #9
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 035
    Par défaut
    Citation Envoyé par Gulish Voir le message
    Quand tu dessines un rectangle de largeur 10, le rectangle a une largeur de 10 pixels, et non pas 10 cm, ni 10 m, ni 10 miles...

    G.
    En faite, tu peut faire un rectangle de 10.5 dans la scène.
    Que ce soit un pixel, un cm, m ou autres c'est autre chose. L'unité c'est toi qui doit savoir ce que c'est.

  10. #10
    Membre émérite

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Par défaut
    Que ce soit un pixel, un cm, m ou autres c'est autre chose. L'unité c'est toi qui doit savoir ce que c'est.
    Non, pour un écran, l'unité par défaut dans la QGraphicsScene est le pixel, et rien d'autres.

    Tiré de "The Coordinate System" de Qt
    The default unit is one pixel on pixel-based devices and one point (1/72 of an inch) on printers.
    Après, comme je l'ai dit plus tôt tu peux appliquer des effets d'échelles en utilisant des matrices (sur la view ou le painter). Ca ne changera pas l'unité de ta scene.

    G.

  11. #11
    Inactif  


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

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    A priori, tu inverse scene et vue gulish.
    La scène est la partie "abstraite", en coordonnées réelles (QPointF) sans unité.
    La vue est la partie "visuelle" affiché à l'écran, en pixel (QPoint).

  12. #12
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 035
    Par défaut
    Citation Envoyé par gbdivers Voir le message
    A priori, tu inverse scene et vue gulish.
    La scène est la partie "abstraite", en coordonnées réelles (QPointF) sans unité.
    La vue est la partie "visuelle" affiché à l'écran, en pixel (QPoint).
    C'est tous l'intérêt de la scène d'ailleurs. On est bien sûr de la description de scène et les cordonnées ne sont pas discrétisées (float vs int).
    C'est la vue qui fait le rendu dans son repère "pixel". Que l'unité de la scène corresponde à la taille d'un pixel de la vue lors de l'affichage est un cas particulier.

    Par exemple, tu fait un logiciel d'architecture de maison. Tu ne peut pas dire que 1 dans la scène correspond à 1 pixel, mais tu va plutôt dire que c'est 1 m. Sinon tu supprime tous l'intérêt de la scène et de la vue. Et tu devrais reimplémenter toutes les fonctions mapTo et mapFrom.


    Par contre, je ne sais pas comment est gèré un pixmap par rapport à sa taille .

  13. #13
    Membre très actif
    Profil pro
    professeur des universités à la retraite
    Inscrit en
    Août 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : professeur des universités à la retraite

    Informations forums :
    Inscription : Août 2008
    Messages : 364
    Par défaut
    Je ne suis pas très sûr que tu aies raison. Il me semble qu'on peut envisager de "penser" la relation scene/view de différentes façons, toutes "correctes" à leur manière, et dépendantes du psychisme du programmeur utilisateur, qui peut être à l'aise avec une manière de voir ou une autre.

    Toutefois, pour ma part je préfère considérer que la Scene, est une sorte de "réel", mesuré en pixels. Et que la vue peut déformer ou pas ce réel, dans un sens ou dans un autre, tout comme le fait une lentille passée sur tout ou partie d'une image.

    Il est à noter que Qt encourage à penser ainsi les choses par l'existence d'un "facteur de zoom", levelOfDetail dans QStyleOptionGraphicsItem. En effet, le facteur de zoom de 1 est traditionnellement celui qui ne modifie pas les dimensions réelles ! Et la valeur 1 de levelOfDetail est précisément celle qui rend une unité de la scène par 1 pixel affiché sur l'écran, suggérant ainsi fortement que l'unité de la scène est à penser comme un pixel ! Sachant que ce réel-scène pourra être traduit autrement par la view, à la façon de ce qui se passe quand une lentille modifie les dimensions perçues d'une image réelle...

    Maintenant, dans la scène elle-même l'unité (le pixel, pour moi) peut elle-même représenter toute sorte d'autres unités (ou paquets d'unités) de notre monde à nous (mètre, cm, degré Celsius, dollars....), ça c'est encore un autre niveau de référence...

  14. #14
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 035
    Par défaut
    Citation Envoyé par ptyxs Voir le message
    Je ne suis pas très sûr que tu aies raison.
    Je ne dit pas que j'ai forcement la meilleur manière de voir la chose Ce que tu explique est aussi très correcte.
    Mais c'est comme beaucoup de chose, tous dépend de la problématique de dépard.

    Dans ton explication, tu oblige que la taille de 1 pixel est la même pour tous les items. Alors que pas toujours. Par exemple tu as deux images satellite de deux zone côte à côte de même surface au sol mais une fait 1000*1000 et l'autre 4000*4000. Si tu veux faire correspondre leur dimensions réelle pour les afficher, tu ne peut plus trop penser en pixel. Ou du moins ça complique pas mal de chose.

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

Discussions similaires

  1. Positionner une view par coordonnées X/Y
    Par loudo dans le forum Composants graphiques
    Réponses: 8
    Dernier message: 17/05/2010, 13h46
  2. la recharge d'un svg dans le système graphics view
    Par lansher1985 dans le forum Qt
    Réponses: 2
    Dernier message: 21/07/2009, 15h09
  3. [Graphics View Framework] Intégration dans un layout
    Par black is beautiful dans le forum Qt
    Réponses: 15
    Dernier message: 27/02/2009, 12h07
  4. Polygone dans un Graphics View
    Par rambc dans le forum PyQt
    Réponses: 1
    Dernier message: 26/08/2008, 17h08

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