InkCanvas - Strokes in Rechteck ermitteln?

  • WPF

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von VisualBasic-Frager.

    InkCanvas - Strokes in Rechteck ermitteln?

    Hallo zusammen,

    ich bin gerade dabei, den Select-Modus des InkCanvas zu ändern.
    Im Select-Modus muss man standardmäßig umranden, um Strokes auszuwählen.
    Da aber jeder erkennt, dass hier ein Auswahlrechteck wesentlich mehr
    Performance bietet, bin ich dabei, dieses einzubauen.

    Ich finde jedoch keinen (guten und schnellen) Weg, Strokes im Bereich eines
    Rechtecks zu markieren.

    Bisher benutzte ich folgenden Code:

    VB.NET-Quellcode

    1. For i = y0 To y0 + Rechteck.Height
    2. For h = x0 To x0 + Rechteck.Width
    3. For Each k As Stroke In InkCanvas1.Strokes
    4. If k.HitTest(New Point(h, i)) = True Then
    5. Try
    6. strC.Add(k)
    7. Catch ex As Exception
    8. End Try
    9. End If
    10. Next
    11. Next
    12. Next
    13. InkCanvas1.Select(strC)

    Ich prüfe quasi jeden Punkt des Rechtecks (in XAML definiert und dem InkCanvas untergeordnet (Children-Objekt)!) mit HitTest
    (Überschneidet die Stroke den angegeben Punkt? - Boolean-Wert)
    und mit Verwendung
    zweiter For-Next-Schleifen durch (y0 =Anfangskoordinate y, x0 = Anfangskoordinate x)
    und füge Strokes, auf die dies zutrifft in eine
    übergreifend definierte StrokeCollection (strC)
    ein, die ich daraufhin selektiere.
    Diese Methode funktioniert zwar todsicher, die Anzeige des Rechtecks ist aber wahrscheinlich
    erst in 100 Jahren fertig ^^

    Meine Frage : Kennt jemand einen kürzeren und schnelleren Code?

    VisualBasic-Frager

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VisualBasic-Frager“ ()

    Intellisense ist immer eine gute Hilfe...
    Eine der anderen Überladungen von Stroke.HitTest:
    msdn.microsoft.com/en-us/library/ms590571.aspx

    Returns a value that indicates whether the Stroke is within the bounds of the specified rectangle.

    Man kann da sogar angeben, zu wieviel Prozent ein Stroke in dem Rectangle sein muss, um als "drin" zu gelten...

    Achja, was soll das Try-Catch da, das hat da nichts verloren.

    VB.NET-Quellcode

    1. For Each k As Stroke In InkCanvas1.Strokes
    2. If k.HitTest(deineBounds, 100) = True Then strC.Add(k)
    3. Next




    lg ST
    | Keine Fragen per PN oder Skype.