Laden...

Wie bei System.Drawing.Rectangle ein Leave-Event implementieren?

Erstellt von Razora vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.983 Views
Thema geschlossen
R
Razora Themenstarter:in
6 Beiträge seit 2011
vor 10 Jahren
Wie bei System.Drawing.Rectangle ein Leave-Event implementieren?

Hallo,

also ich habe folgendes Problem. Ich baue gerade mit der Kinect eine Gestensteuerung. Dabei lasse ich auf einer Picturebox mit Hilfe von graphics.DrawRectangle() mehrere Rechtecke malen (gleichzeitig ist auf der selben Picturebox das Skelett des Akteurs zu sehen). Nun würde ich gerne wissen, wie ich herausbkommen kann, wann meine Hand (die von der Kinect getrackt wird und ich deren Position kenne) das Rechteck in der Szene verlässt. Also eine Art von Leave-Event. Ist das überhaupt möglich?

Grüße
Razora

771 Beiträge seit 2009
vor 10 Jahren

Hi,

direkt ist das nicht möglich, aber orientiere dich mal an [Tutorial] Gezeichnete Objekte mit der Maus verschieben
Dort steht wie man erkennt, wann der Mauszeiger über einem geom. Objekt ist - und du brauchst dann ja das Gegenteil, d.h. merke dir das aktuelle Element und frage dann im MouseMove ab, ob es immer noch dasselbe Objekt ist oder nicht.

49.485 Beiträge seit 2005
vor 10 Jahren

Hallo Razora,

... und feuere dann dein eigenes Leave-Event. Dann hast du tatsächlich (und ich finde auch sehr direkt) das Gewünschte, siehe [FAQ] Eigenen Event definieren.

Du solltest PictureBoxen nur verwenden, wenn du PictureBox.Image auf ein Bild setzt. Wenn das nicht der Fall ist, zeichne besser auf ein Panel oder direkt in das Form, siehe auch [Tutorial] Zeichnen in Windows-Forms-Programmen (Paint/OnPaint, PictureBox).

herbivore

R
Razora Themenstarter:in
6 Beiträge seit 2011
vor 10 Jahren

Hallo,

danke schon mal für die Beiträge. Ich werde mir das jetzt mal in Ruhe zu gemüte führen und sollte ich verzweifeln, dann schreie ich 😃

Grüße
Razora

R
Razora Themenstarter:in
6 Beiträge seit 2011
vor 10 Jahren

So, ich muss doch nochmal mich hier melden. Bin doch nicht dahin gekommen wo ich hin will.

Also hol ich mal ein wenig weiter aus.
Ich entwickel gerade eine Gestensteuerung für eine Drohne mit Hilfe der Kinect. Da die Kinect leider nicht Fingererkennung liefern kann wie ich sie benötige, bin ich auf die Idee gekommen Rechtecke auf den Bildschirm zu zeichnen. Das Kommando dahinter wird ausgelöst, wenn der Akteur sein gezeichnetes Skelett (bzw. die rechte Hand) über das Rechteck bewegt. Da der Platz nicht unendlich groß ist wollte ich nun einige Kommandos zusammenfassen (z.B. das Starten und Landen).

Also das Programm geht an, der Nutzer wird von der Kinect erkannt und neben dem Skelett ist ein Rechteck gezeichnet, welches für das Starten zuständig ist. Nun ist mein Ziel, dass der Nutzer die rechte Hand des Skeletts über das Rechteck bewegt und anstatt des Start-Rechtecks wird das Lande-Rechteck gezeichnet. Das soll aber erst geschehen, wenn der Nutzer die Hand wieder aus dem Rechteck raus bewegt hat (also das Leave-Event was ich gerne haben würde). Es ist nun also an der selben Position statt des Start-Rechtecks das Lande-Rechteck gezeichnet. Bewegt der Nutzer nun die Hand wieder rein landet die Drohne. Solange nun die Hand im Rechteck bleibt, wird immernoch das Lande-Rechteck gezeichnet. Erst beim verlassen wird wieder getauscht.
Ich hoffe das war halbwegs verständlich.

Den Intersect zwischen der Hand und den Rechtecken löse ich im Moment so, dass ich die Position der Hand in ein Rectangle-Objekt umwandel und dann mit der Methode "IntersectsWith" kontrolliere, ob z.B. das Lande-Rechteck mit der Hand übereinstimmt.

Wie kann ich nun also diesen Wechsel am besten lösen? Ich konnte leider mit den bisher gegebenen Vorschlägen keine Lösung findne. Vielleicht brauche ich auch nur einen Schubser in die richtige Richtung 😃

Grüße
Razora

D
216 Beiträge seit 2009
vor 10 Jahren

Du speicherst einfach in einer Variable ob beim letzten Prüfen die Hand im Rechteck war, wenn die Hand außerhalb ist, beim letzen mal aber noch innerhalb, dann kannst du dein Leave-Event auslösen.

Hinweis von herbivore vor 10 Jahren

Eigentlich stand das schon oben, aber spätesten nach der Wiederholung sollte es klar geworden sein. Klar kann es sein, dass man mal den Wald vor Bäumen nicht erkennt, aber eigentlich ist das recht einfach. Bitte beachte [Hinweis] Wie poste ich richtig? Punkt 1.1.1.

Thema geschlossen