Laden...

GDI + Matrixtransformationen + Text

Erstellt von derfrecheDachs vor 17 Jahren Letzter Beitrag vor 16 Jahren 1.788 Views
D
derfrecheDachs Themenstarter:in
34 Beiträge seit 2006
vor 17 Jahren
GDI + Matrixtransformationen + Text

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 ??

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo derfrecheDachs,

Graphics.Transform.Reset () vor dem Zeichen des Texts.

herbivore

D
derfrecheDachs Themenstarter:in
34 Beiträge seit 2006
vor 17 Jahren
Textpositionierung

geht dabei dann nicht die Textpositionierung verloren d.h. ich müsste mir die Position des Textes dann selber ausrechnen ??

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo derfrecheDachs,

dabei gehen natürlich alle Transformationen verloren. Du kannst anschließend aber neue Transformationen durchführen.

herbivore

D
derfrecheDachs Themenstarter:in
34 Beiträge seit 2006
vor 17 Jahren

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

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo derfrecheDachs,

ja, schon klar, die Transformationen wirken nun mal alle auf den Text. Damit musst du leben.

herbivore

D
derfrecheDachs Themenstarter:in
34 Beiträge seit 2006
vor 16 Jahren

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