Seite 1 von 1

[QWT] Zoomen...modifiziertes Rechteck auf Stack?

Verfasst: 4. April 2008 16:49
von TheMetalManiac
Hallo.

Wenn man mit dem Zoomer aus dem PlotZoomer Beispielen von QWT arbeitet, wie kann man dann ein bestehendes Rechteck des ZoomStacks modifizieren (in meinem Fall möchte ich die Y- Achse autoskalieren lassen)?
Das aktuelle Rechteck vom Stack holen, autoskalieren und replot:

Code: Alles auswählen

    plotZoomer->zoom(-1);
    setAxisAutoScale(yLeft);
    replot();
und dann?

Wie kann ich dann ein modifiziertes Rechteck zurück auf den Stack packen? Also OHNE die vorhandenen Rechtecke zu überschreiben (setZoomBase würde ja nur ein neuen Stack aufbauen).

Danke schon mal für die Hilfe,

Gruß,

TheMetalManiac

Verfasst: 7. April 2008 09:03
von Uwe
Die y Achse nach jedem Zoomen "autozuskalieren" ist doch eigentlich dasselbe wie die Achsen vorab einmal zu skalieren und dann nur die x-Achse zu zoomen.

Wenn Du nur eine y-Achse benötigst, kannst Du das ganz einfach erreichen, indem Du dem Zoomer die andere y Achse gibst ( z.B. zoomer->setAxis(QwtPlot::xBottom, QwtPlot::yRight).
Falls Du beide Achsen benötigst würde ich QwtPlotZoomer::rescale oder QwtPlotZoomer::zoom überladen. Vermutlich genügt es schon in zoom die y-Koordinaten des Rechtecks auf die aktuellen Achsenwerte zu setzen und dann die Basisklasse zu rufen.

Uwe

Verfasst: 7. April 2008 20:07
von TheMetalManiac
Danke mal wieder für die gewohnt schnelle Antwort :).

Also, ich möchte es dem Benutzer ermöglichen in einen Abschnitt weit reinzuzoomen (also ohne die Autoskalierungsfunktion zu arbeiten) und dann per Buttonklick eine Autoskalierung durchzuführen, wobei dann eben das alte Rechteck vom Stack gepoppt werden soll und das modifizierte Rechteck auf den Stack gepackt wird. Derzeit springt - beim scrollen mit der Scrollbar zum Beispiel - der Plot wieder auf das "alte" Rechteck zurück.

Also die eigentliche Frage ist: Wie bekomme ich das "neue" Rechteck auf den Stack. (Wahrscheinlich sehe ich den Wald vor lauter Bäumen nicht?).

Versuche mal weiter, wenn du noch ein Tipp hast, wäre ich natürlich sehr glücklich =).

Nochmals herzlichen Dank für deine Hilfe,

TheMetalManiac

Verfasst: 8. April 2008 10:37
von Uwe
Solange Du die Rechtecke auf dem Zoomstack nur verändern willst ( also keine hinzufügen oder wegnehmen ) geht das ganz einfach:

Code: Alles auswählen

QStack<QwtDoubleRect> &stack = const_cast<QStack<QwtDoubleRect> &> zoomer->zoomStack();
stack.last() = ...;
Uwe