Re: Shapes markieren



Lars Amsel schrieb:
Hi Henning,

Henning Bredel wrote:
Mir ist nicht ganz klar, wie ich das bewerkstelligen kann. Die Mauspo-
sition zu ermitteln ist kein Problem (egal ob user oder device Koordi-
naten). Ich weiß also, wo sich meine Maus befindet, aber nicht, was ich
anstellen muss, um mit einem Klick das nächstgelegenste Shape (oder noch
besser die entsprechende Geometrie) zu markieren.

Zunächst weiß die Graphics2D nichts von Mausklicks und Shapepositionen. Das musst Du schon selbst machen.

Nehmen wir man an, Du hast die Shapes in einer Liste und malst sie so:

for ( Shape shape : shapeList ) {
graphics.draw ( shape );
}

Genauso mache ich es :-).


Dann hast Du damit automatisch ein z-Order. Elemente, die sich weiter hinten in der Liste befinden überdecken u.U. Elemente. die sich weiter vorn befinden. Aus Anwendersicht erwartet man natürlich, das das Element selektiert wird, das 'oben' liegt. Also mußt Du die Liste von hinten durchsuchen. Das erste Element, das

shape.contains ( mousePoint )

erfüllt, ist es dann. Wenn Du ein netter Programmierer bist, ermöglichst
Du Deinem Anwender auch hinten liegende Elemente zu markieren, fängst also immer am aktuell selektierten Element an zu suchen (bis zum Listenanfang und dann nochmal von hinten bis zum aktuell selektierten Element).


Das aktuelle selektierte? Um sowas zu haben, muss ich ja bereits etwas
ausgewählt haben. Ich glaube, mir bleibt nichts anderes übrig, als über
meine komplette Liste ein

Shape.contain (Point)

auszuführen, alle Ergebnisse in eine weitere temporäre Liste zu spei-
chern, um in dieser detailliertere Berechnungen durchzuführen. Denn
eindeutig ist die contain-Methode ja nicht.

Wenn Du so kleine Vierecke haben willst, an denen man erkennen kann, welches Element gerade ausgewählt ist - die musst Du selbst malen. getBounds2D() von Shape gibt Dir das umgebende Rechteck.

Alle Klarheiten beseitigt?

Gruß

Lars

Gruß

Henning

--
.



Relevant Pages

  • Re: Shapes markieren
    ... graphics.draw (shape); ... die sich weiter hinten in der Liste befinden überdecken u.U. Elemente. ... Aus Anwendersicht erwartet man natürlich, das das Element selektiert wird, das 'oben' liegt. ... Wenn Du ein netter Programmierer bist, ermöglichst Du Deinem Anwender auch hinten liegende Elemente zu markieren, fängst also immer am aktuell selektierten Element an zu suchen. ...
    (de.comp.lang.java)
  • Stringlist bedingt =?ISO-8859-15?Q?k=FCrzen?=
    ... Ist das letzte Element NICHT leer, kürze die Liste um das letzte Element. ... von hinten das erste Element das nicht leer ist und kürze die auf incl. ...
    (de.comp.lang.delphi.misc)
  • Re: Beschleunigung Pivot Makro (v. T. Ramel)
    ... Stehen in dieser Liste denn immer alle Pivot-Items die in diesem PivotFeld ... Dazu könnte man statt die Items im Pivot-Feld zu durchlaufen ... dass versucht wird dieses letzte sichtbare Element ... For Each pItem In ActiveSheet.PivotTables. ...
    (microsoft.public.de.excel)
  • Re: VM-Haenger bei Shutdown
    ... removeLast() ist ziemlich verschachtelt, aber es sieht für mich so aus, ... als ob zwei nebenläufige Aufrufe von removeLast dazu führen kann, ... wenn die Liste nur ein Element enthält, ...
    (de.comp.lang.java)
  • Re: Welche Collection nehmen
    ... zeichen (um das element zu finden) wesentlich langsamer ist, ... einer Liste finden. ... Dim TestClasses(9) As TestClass ...
    (microsoft.public.de.german.entwickler.dotnet.vb)