Freigeben über


StrokeIntersection.BeginIndex-Eigenschaft

Ruft den Anfangspunkt der StrokeIntersection-Struktur ab oder legt diesen fest.

Namespace:  Microsoft.Ink
Assembly:  Microsoft.Ink (in Microsoft.Ink.dll)

Syntax

'Declaration
Public Property BeginIndex As Single
'Usage
Dim instance As StrokeIntersection
Dim value As Single

value = instance.BeginIndex

instance.BeginIndex = value
public float BeginIndex { get; set; }
public:
property float BeginIndex {
    float get ();
    void set (float value);
}
/** @property */
public float get_BeginIndex()
/** @property */
public  void set_BeginIndex(float value)
public function get BeginIndex () : float
public function set BeginIndex (value : float)

Eigenschaftenwert

Typ: System.Single
Der Gleitkommaindex, an dem die Schnittmenge beginnt.

Hinweise

Wenn der Strich innerhalb des Schnittmengenbereichs beginnt, ist dieser Wert -1.

Ein Gleitkommaindex ist ein Gleitkommawert, der eine beliebige Position zwischen zwei Punkten im Strich darstellt. Beispiele: Wenn 0,0 der erste Punkt im Strich und 1,0 der zweite Punkt im Strich ist, liegt 0,5 genau in der Mitte zwischen dem ersten und dem zweiten Punkt. Ebenso stellt ein Gleitkommaindexwert von 37,25 eine Position dar, die sich 25 Prozent entlang der Zeile zwischen den Punkten 37 und 38 des Strichs befindet.

Beispiele

In diesem Beispiel werden alle Segmente eines übergebenen Stroke-Objekts gelöscht, die sich in der angegebenen Rectangle-Struktur befinden. Dies geschieht, indem durch Überprüfen der StrokeIntersection-Strukturen bestimmt wird, wo das übergebene Stroke-Objekt geteilt werden soll und welche Segmente gelöscht werden sollen.

Private Sub DeleteInsideRectangle(ByVal S As Stroke, ByVal R As Rectangle)
    ' get the StrokeIntersection array
    Dim SI() As StrokeIntersection = S.GetRectangleIntersections(R)
    ' examine each StrokeIntersection
    ' must work backwards through the array so that when splitting, 
    ' the remaining intersections are still valid for S
    For k As Integer = SI.Length - 1 To 0 Step -1

        Dim enterRect As Single = SI(k).BeginIndex
        Dim exitRect As Single = SI(k).EndIndex

        ' check if the whole stroke is inside the rectangle
        ' if so, delete the stroke
        If enterRect = -1 And exitRect = -1 Then
            S.Ink.DeleteStroke(S)
            Continue For
        End If

        ' check if a segment enters and exits the rectangle
        ' if so, split and delete the segment inside the rectangle
        If enterRect > 0 And exitRect > 0 Then
            ' the stroke resulting from split() is outside, keep it
            S.Split(exitRect)
            ' the stroke from this split() is inside, delete it
            Dim temp As Stroke = S.Split(enterRect)
            temp.Ink.DeleteStroke(temp)
            Continue For
        End If

        ' check if stroke starts inside the rectangle and goes outside
        ' if so, split and delete the segment inside the rectangle
        If enterRect = -1 And exitRect > 0 Then
            ' the stroke resulting from split() is outside, keep it
            S.Split(exitRect)
            ' delete the remaining segment of the stroke
            S.Ink.DeleteStroke(S)
            Continue For
        End If

        ' check if stroke starts outside the rectangle and ends inside
        ' if so, split and delete the segment inside the rectangle
        If enterRect > 0 And exitRect = -1 Then
            Dim temp2 As Stroke = S.Split(enterRect)
            temp2.Ink.DeleteStroke(temp2)
        End If
    Next
End Sub
private void DeleteInsideRectangle(Stroke S, Rectangle R)
{
    // get the StrokeIntersection array
    StrokeIntersection[] SI = S.GetRectangleIntersections(R);

    // examine each StrokeIntersection
    // must work backwards through the array so that when splitting, 
    // the remaining intersections are still valid for S
    for (int k = SI.Length - 1; k >= 0; k--)
    {
        float enterRect = SI[k].BeginIndex;
        float exitRect = SI[k].EndIndex;

        // check if the whole stroke is inside the rectangle
        // if so, delete the stroke
        if (enterRect == -1 && exitRect == -1)
        {
            S.Ink.DeleteStroke(S);
            continue;
        }

        // check if a segment enters and exits the rectangle
        // if so, split and delete the segment inside the rectangle
        if (enterRect > 0 && exitRect > 0)
        {
            // the stroke resulting from split() is outside, keep it
            S.Split(exitRect);
            // the stroke from this split() is inside, delete it
            Stroke temp = S.Split(enterRect);
            temp.Ink.DeleteStroke(temp);
            continue;
        }

        // check if stroke starts inside the rectangle and goes outside
        // if so, split and delete the segment inside the rectangle
        if (enterRect == -1 && exitRect > 0)
        {
            // the stroke resulting from split() is outside, keep it
            S.Split(exitRect);
            // delete the remaining segment of the stroke
            S.Ink.DeleteStroke(S);
            continue;
        }

        // check if stroke starts outside the rectangle and ends inside
        // if so, split and delete the segment inside the rectangle
        if (enterRect > 0 && exitRect == -1)
        {
            Stroke temp2 = S.Split(enterRect);
            temp2.Ink.DeleteStroke(temp2);
        }
    }
}

Plattformen

Windows Vista

.NET Framework und .NET Compact Framework unterstützen nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

Versionsinformationen

.NET Framework

Unterstützt in: 3.0

Siehe auch

Referenz

StrokeIntersection-Struktur

StrokeIntersection-Member

Microsoft.Ink-Namespace

StrokeIntersection.EndIndex