Freigeben über


Ink.NearestPoint-Methode (Point, Single%)

Gibt das einem angegebenen Punkt nächstgelegene Stroke-Objekt zurück, und gibt den Punkt auf dem Stroke-Objekt zurück, der dem angegebenen Punkt am nächsten liegt.

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

Syntax

'Declaration
Public Function NearestPoint ( _
    point As Point, _
    <OutAttribute> ByRef pointOnStroke As Single _
) As Stroke
'Usage
Dim instance As Ink
Dim point As Point
Dim pointOnStroke As Single
Dim returnValue As Stroke

returnValue = instance.NearestPoint(point, _
    pointOnStroke)
public Stroke NearestPoint(
    Point point,
    out float pointOnStroke
)
public:
Stroke^ NearestPoint(
    Point point, 
    [OutAttribute] float% pointOnStroke
)
public Stroke NearestPoint(
    Point point,
    /** @attribute OutAttribute */ /** @ref */float pointOnStroke
)
public function NearestPoint(
    point : Point, 
    pointOnStroke : float
) : Stroke

Parameter

  • pointOnStroke
    Typ: System.Single%
    Der Punkt auf dem Stroke-Objekt, der dem angegebenen Punkt im Ink-Objekt am nächsten liegt.

Rückgabewert

Typ: Microsoft.Ink.Stroke
Gibt das Stroke-Objekt zurück, das einen Point enthält, der dem angegebenen point im Ink-Objekt am nächsten liegt. Wenn mehr als ein Strich einen Point enthält, der im gleichen Abstand vom bekannten Point liegt, ist der Wert dieses Ergebnisses willkürlich.

Hinweise

Der pointOnStroke-Parameter ist als Gleitkommazahl definiert, weil der Punkt auf dem Stroke-Objekt zwischen zwei physischen Koordinatenpunkten liegen kann. Beispielsweise gibt der Wert 1,5 an, dass der Punkt genau in der Mitte zwischen dem ersten und dem zweiten Paket des Strichs liegt. Verwenden Sie diesen Wert, um das Stroke-Objekt durch einen Aufruf der Split-Methode aufzuteilen, oder runden Sie den Wert auf oder ab, um einen Index für ein Paket im Stroke-Objekt zu erhalten.

Beispiele

In diesem Beispiel wird die Farbe des Stroke-Objekts, das dem Mittelpunkt der Freihandeingabe am nächsten liegt, in Rot geändert. Zudem wird ein neues Stroke-Objekt erstellt, das von dem Punkt des erkannten Stroke-Objekts, der dem Mittelpunkt des Freihandeingabesteuerelements am nächsten liegt, zum Mittelpunkt des Freihandeingabesteuerelements verläuft.

Dim inkControl As Control = mInkOverlay.AttachedControl
' get the center of the ink control
Dim centerPt As Point = New Point(inkControl.Width / 2, inkControl.Height / 2)
Using g As Graphics = inkControl.CreateGraphics()
    ' convert center point to ink space coordinates
    mInkOverlay.Renderer.PixelToInkSpace(g, centerPt)
End Using
' get the nearest stroke
Dim pointOnStroke As Single
Dim nStroke As Stroke = mInkOverlay.Ink.NearestPoint(centerPt, pointOnStroke)
' nStroke will be null if there aren't any strokes
If Not IsNothing(nStroke) Then
    ' change the color of the nearest stroke to red
    nStroke.DrawingAttributes.Color = Color.Red
    Dim ptIdx As Integer = CType(Math.Round(pointOnStroke, MidpointRounding.ToEven), Integer)
    ' create points from the center to the nearest point on the stroke
    Dim connectPts() As Point = _
            { _
                centerPt, _
                nStroke.GetPoint(ptIdx) _
            }
    ' create the stroke
    mInkOverlay.Ink.CreateStroke(connectPts)
    inkControl.Invalidate()
End If
Control inkControl = mInkOverlay.AttachedControl;
// get the center of the ink control
Point centerPt = new Point(inkControl.Width / 2, inkControl.Height / 2);
using (Graphics g = inkControl.CreateGraphics())
{
    // convert center point to ink space coordinates
    mInkOverlay.Renderer.PixelToInkSpace(g, ref centerPt);
}

// get the nearest stroke
float pointOnStroke;
Stroke nStroke = mInkOverlay.Ink.NearestPoint(centerPt, out pointOnStroke);

// nStroke will be null if there aren't any strokes
if (nStroke != null)
{
    // change the color of the nearest stroke to red
    nStroke.DrawingAttributes.Color = Color.Red;
    int ptIdx = (int)Math.Round(pointOnStroke, MidpointRounding.ToEven);
    // create points from the center to the nearest point on the stroke
    Point[] connectPts = new Point[2] 
    {
        centerPt, 
        nStroke.GetPoint(ptIdx)
    };
    // create the stroke
    mInkOverlay.Ink.CreateStroke(connectPts);
    inkControl.Invalidate();
}

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

Ink-Klasse

Ink-Member

NearestPoint-Überladung

Microsoft.Ink-Namespace

Stroke

Stroke.Split