2009-05-09 21 views
1

Je PERSONNALISATION QuantumGIS qui utilise QPainter de Qt pour dessiner et peindre ...question Qpainter.rotate() - qgis

Je suis en train de dessiner une polyligne sur la toile qui vient comme une mise à jour par les files d'attente de messages. .le dessin est très fin ... mais dans les objets de polyligne ou de polygone que j'obtiens en tant que mise à jour comprennent également un champ d'angle qui doit être utilisé pour la rotation d'un objet. Le problème est que lorsque j'essaie de faire pivoter la ligne juste avant que la polyligne ne soit dessiné par qpainter en utilisant la méthode painter.rotate(), la ligne est bien tournée mais la position de la ligne tracée change ... et change à chaque zoom et pan de la toile Qgis .. Avant de configurer painter.rotate(), je sauve l'état de peintre et après avoir dessiné - en restaurant à nouveau son état qui, je crois, est analogue aux fonctions push/popMatrix d'OpenGL. Les fonctions de sauvegarde de Qpainter fonctionnent-elles de la même manière que les fonctions push/popMatrix de opengl?

est ici un extrait de code:

p->save(); 
    //p->rotate(45); 
    p->scale(1.0/rasterScaleFactor, 1.0/rasterScaleFactor); 
    p->drawPolyline(pa); 
    p->restore(); 

aide est appréciée. Merci.

Répondre

1

Lire la documentation et vous voyez que QPainter :: save() que « Enregistre l'état actuel du peintre ». Il ne réinitialise pas la transformation. Votre problème était dû au fait que la matrice de transformation originale est mélangée à votre propre échelle ou pivotée. Votre extrait de code est trop minime pour comprendre le contexte de la peinture, mais je suppose que vous devez réinitialiser ou modifier la transformation convenablement avant votre peinture polyligne, en utilisant peut-être QPainter::setTransform().

Je recommande également de lire la section Transformations de coordonnées dans QPainter documentation, ainsi que d'essayer le related example.