Laden...

Probleme bei der Skalierung des Pen

Erstellt von Galileo vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.206 Views
G
Galileo Themenstarter:in
78 Beiträge seit 2006
vor 16 Jahren
Probleme bei der Skalierung des Pen

Hallo community,
ich habe ein Problem beim Zeichnen mit einem Pen Objekt bezüglich der "width" Property.
Ich zeichne mit Drawlines eine Kurve auf ein panel. Wird die Breite der pen Linie zu groß eingestellt, erscheint das ganze panel in der Farbe des pen. Gibt es hier irgend nen Trick das Problem los zu werden.

Galileo

Zu Beginn tritt ein Problem auf, dann verkompliziert sich das Problem und schließlich wird es kinderleicht!!

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo Galileo,

Wird die Breite der pen Linie zu groß eingestellt, erscheint das ganze panel in der Farbe des pen.

klar, wenn man die Width größer als die Panelbreite setzt. 🙂

herbivore

G
Galileo Themenstarter:in
78 Beiträge seit 2006
vor 16 Jahren

Hallo Herbivore,

dachte ich auch zu erst.
Wenn ich in untenstehendem Code die penwidth von 5.5 auf 6 ändere wird das Panel schlagartig schwarz, obwohl die Stärke des Pen bei width=5.5 noch schmall war. Man könnte meinen, die Einstellung der penwidth hat überhaupt keine Auswirkung auf die Linienstärke, bis ein bestimmter Grenzwert überschritten wird (hier etwa 6).


if (origdatapoints != null)
            {
                pan = p;
                Graphics gr = pan.CreateGraphics();
                Pen pe = new Pen(origcol, (float)5.5);
                gr.TranslateTransform(0, pan.ClientSize.Height/2);
                gr.ScaleTransform((float)pan.ClientSize.Width / origdatapoints.Length, (float)pan.ClientSize.Height/2);
                gr.DrawLines(pe, origdatapoints);
                
            }

Danke für Deine schnelle Antwort

Galileo

Zu Beginn tritt ein Problem auf, dann verkompliziert sich das Problem und schließlich wird es kinderleicht!!

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo Galileo,

ich habe deinen Code ausprobiert. Da ScaleTransform auch auf die Strichbreite wirkt, ist bei mir schon bei einer kleinen, initialen Strichbreite und eine kurzen Linie fast das ganze Panel ausgefüllt. Es ist also wohl wirklich, was ich in meiner ersten Antwort schrieb.

herbivore

G
Galileo Themenstarter:in
78 Beiträge seit 2006
vor 16 Jahren

Bin auch grad dahintergekommen.
Habt ihr irgendwelche Tipps für mich, wie ich das umgehen kann?
Ich möchte eigentlich nur bestimmte Ausschnitte einer Kurve vergrößern (zoomen), ohne dabei die penwidth zu ändern.

Galileo

P.s.: Vielleicht indem ich die Stärke des Pen durch sqrt(scaleX2+scaleY2) (Hypotenuse der Skalierungen) teile?

Zu Beginn tritt ein Problem auf, dann verkompliziert sich das Problem und schließlich wird es kinderleicht!!

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo Galileo,

dann darfst du nicht Scale.Transform verwenden, sondern musst die Koordinaten der Punkte mit dem Zoomfaktor multiplizieren.

herbivore

139 Beiträge seit 2006
vor 16 Jahren

oder du scalst um die Kurve zu zeichnen, danach setzt du scale wieder auf die normale grösse und malst dann deine Linie

Gruss Ari
Wer lesen kann ist klar im vorteil!
MSDN
Dein Feund in allen fragen