2009-05-09 6 views
1

ich QuantumGIS bin Customizing, die QPainter Qt verwendet, um zu zeichnen und zu malen ...Qpainter.rotate() Frage - qgis

Ich versuche, eine Polylinie auf der Leinwand zu zeichnen, die als Update über Nachrichtenwarteschlangen kommen. .Die Zeichnung ist sehr gut ... aber in den Polylinien- oder Polygon-Objekten, die ich als Update bekomme, gibt es auch ein Winkelfeld, das für die Drehung eines Objekts verwendet werden soll. Das Problem ist, dass, wenn ich versuche, die Linie zu drehen, bevor die Polylinie von der Qpainter mit painter.rotate() -Methode gezeichnet wird, wird die Linie fein gedreht, aber die Position der gezeichneten Linie ändert sich..und es ändert sich bei jedem Zoom und pan des Qgis canvas .. Bevor ich painter.rotate() setze, speichere ich den Maler Zustand und nach dem Zeichnen - wieder den Zustand wiederherzustellen, was meiner Meinung nach analog zu den push/popMatrix Funktionen von OpenGL ist. Funktioniert die Qpainter-Funktion zum Wiederherstellen von Speichern ähnlich wie Push/PopMatrix-Funktionen von OpenGL?

hier ist ein Code-Schnipsel:

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

Hilfe sehr geschätzt wird. Danke.

Antwort

1

die documentation Lesen und sehen Sie, dass QPainter :: save() nur „Speichert den aktuellen Maler Zustand“. Die Transformation wird nicht zurückgesetzt. Ihr Problem bestand darin, dass die ursprüngliche Transformationsmatrix mit Ihrer eigenen Skalierung gemischt oder gedreht wird. Ihr Code-Snippet ist zu minimal, um den Kontext des Gemäldes zu verstehen, aber ich denke, dass Sie die Transformation vor dem Polylinien-Mal zurücksetzen oder ändern müssen, möglicherweise unter Verwendung von QPainter::setTransform().

Ich empfehle auch lesen Coordinate Transformationen Abschnitt in QPainter documentation, sowie versuchen, die related example.