Autor Beitrag
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mi 18.08.10 19:34 
user profile iconCoja hat folgendes geschrieben Zum zitierten Posting springen:
Leider kann ich die PictureBox Eigenschaften nicht in meiner Funktion aufrufen, was muss ich da ändern (welche Rechte,..)
Am besten gar nichts, mach das lieber vor dem Konstruktor-Aufruf im Form-Code.

_________________
>λ=
Coja Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: Fr 20.08.10 11:00 
Hallo,
so hab das Problem jetzt mit eine globalen Definition gelöst, danke Kha.
Das Koordinatensystem liegt jetzt in der linken unteren Ecke:
ausblenden C#-Quelltext
1:
2:
3:
  PicBoxHoehe = pictureBox1.Size.Height;
            e.Graphics.TranslateTransform(0, PicBoxHoehe);
            e.Graphics.ScaleTransform(1, -1);

Ich hab zwei Achsen einzecihnen lassen und mit x und y beschriftet. Leider ist der TExt gedraht (also beim y fällts auf).
Außerdem wird die x-Achse jetzt nicht mehr angezeigt. Die Bildfläche der PictureBox scheint kleiner zu sein, denn wenn ich mit Maus mich an den unteren Rand bewege, bleibt der Y-Wert bei 5 Pixel stehen und geht nicht auf Null. Woran kann das liegen?
Bevor das Koordinatensytem gedreht wurde hat es noch funktioniert. Den Mauswert berechne ich nun mit:
ausblenden C#-Quelltext
1:
NeuPoint P = new NeuPoint(e.X,PicBoxHoehe- e.Y);					

vg
Coja
Coja Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: Fr 20.08.10 11:20 
Hallo,
ich habe gerade festgestellt, das ich die Umraandung auf FIxed3D gestellt habe. Bei None ist es nur noch 1 Pixel, aber ich kann einfach keinen Punkt mit dem y-Wert=0 anklicken... Bei der x-Achse funktioniert das (also müsste es an der Drehung oder Verschiebung des Koordinatensystems liegen.
vg
Coja
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Sa 21.08.10 10:03 
Zieh einfach 1 ab, dann passt das :mrgreen: .
Das war wirklich ernst gemeint, schließlich hat das unterste Pixel die Ordinate PicBoxHoehe - 1 ;) .

_________________
>λ=
Coja Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: Mo 23.08.10 11:48 
Hallo,
ja hab es jetzt korrigiert und jetzt stimmt es auch. Bei Fixed3D muss ich also 5 Pixel abziehen, sonst 1 Pixel.

Ein Problem muss ich noch lösen:
Ich möchte gerne eine Bildlaufleiste bzw. einen Scrollbalken für die (positive) x- und y-Richtung meiner PictureBox hinzufügen.
Ist das möglich -unter der Randbedingung-, dass die maximale x- bzw. y-Koordinate das Ende des Bereiches angibt?

schönen Gruß
Coja
Coja Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: Sa 28.08.10 21:34 
So, die Bildlaufleisten hab ich jetzt auch so grob hinbekommen. Eine Sach quält mich jedoch noch, die eieentlich einfach klingt:
In meinem Panel muss ich zum Zeichnen die Y-Werte noch Spiegeln. dass heißt:
y_neu=Panelhöhe-y_alt
Die x-Werte bleiben erhalten. Also muss ich dies beim Zeichnenbefehl noch angeben:
ausblenden C#-Quelltext
1:
e.Graphics.DrawLines(new Pen(Color.FromArgb(255,240,250,0)), PunkteListe.Select(p => (Point)p).ToArray());					

Ich brauch also nur zu wissen, wie ich in meine PunkteListe
ausblenden C#-Quelltext
1:
 BindingList<Point> PunkteListe;					

alle y-Werte neusetzen kann und zwar mit der o.g. Vorschrift.
vg
Coja
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Sa 28.08.10 22:09 
Vielleicht gibt es einen einfacheren Weg direkt mit BindingList (ich hab damit noch nicht gearbeitet), aber das hier müsste klappen:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
Point[] points = PunkteListe.Select(p => (Point)p).ToArray();
for (int i = 0; i < points.Length; i++) {
  points[i] = new Point(points[i].X, Panelhöhe - points[i].Y;
}

e.Graphics.DrawLines(new Pen(Color.FromArgb(255,240,250,0)), points);
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: So 29.08.10 12:19 
@user profile iconCoja: Ich weiß nicht, ob du mit LINQ überhaupt schon etwas anfangen kannst, aber wenn es schon drin ist...
ausblenden C#-Quelltext
1:
PunkteListe.Select(p => new Point(p.X, p.Y)).ToArray()					

_________________
>λ=
Coja Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: Mo 30.08.10 10:15 
Hallo,
danke an euch beide.
Es funktionieren beide Varianten sehr gut, die von Kha ist aber bestimmt etwas schneller (was sich bei meinem Programm aber nicht bemerkbar macht).
vg
Coja