Benutze Matrixtransformationen um eine Grafik zu drehen, zu skalieren oder zu verschieben.
Nun hab ich um die Grafik ein Koordinatensystem mit entsprechender Skalierung gezeichnet. Problem : der text des Koordinatensstems wird entsprechend der verwendeten Matrizenoperationen gestaucht und damit unlesbar. Wie kann ich das verhindern ??
Hallo derfrecheDachs,
Graphics.Transform.Reset () vor dem Zeichen des Texts.
herbivore
geht dabei dann nicht die Textpositionierung verloren d.h. ich müsste mir die Position des Textes dann selber ausrechnen ??
Hallo derfrecheDachs,
dabei gehen natürlich alle Transformationen verloren. Du kannst anschließend aber neue Transformationen durchführen.
herbivore
Hallo herbivore ,
ja schon, aber an und für sich brauch ich ja meine Transformationen, um zum Einen meinen Koordinatensystem-Urspung richtig zu setzen (nicht links oben , sondern links unten) und zum Anderen die Werte der Achsen anzugeben d.h. beim Zeichnen findet ja durch eine Skalierungsmatrix eine Transformation meines fiktiven Koordinatensystems, welches immer diesselben Max-Werte in x/y-Richtung aufweisst, auf die tatsächlich vorhandene Fenstergröße statt.
Problem ist hier eben nur der Text, der ja mit transformiert wird und das soll er eben nicht.
Gruß derfrecheDachs
Hallo derfrecheDachs,
ja, schon klar, die Transformationen wirken nun mal alle auf den Text. Damit musst du leben.
herbivore
durch etwas Handarbeit hab ich es jetzt folgendermaßen gelöst:
Die Grafik wird ganz normal transfomiert.
Beim Text mach ich es aber so, dass ich mir erst die ursprüngliche Transformation merke, dann einen Reset mache, die Transformationen nur auf den Ursprungspunkt des Textes anwende , ihn dann zeichne und danach wieder die ursprüngliche Transformatin einstelle .
Das ganze sieht dann Code-mässig ungefähr so aus:
PointF[] pointarray = new PointF[1];
pointarray[0] = Text.Linksunten;
oldmatrix.TransformPoints(pointarray);
Text.Zeichne(Oberfläche);
Oberfläche.Transform = oldmatrix;
Etwas kompliziert, aber es scheint mir keine einfachere Lösung zu geben