次の方法で共有


Ink.NearestPoint メソッド (Point, Single%)

指定されたポイントに最も近い Stroke オブジェクト、および指定されたポイントに最も近い Stroke オブジェクトのポイントを返します。

名前空間 :  Microsoft.Ink
アセンブリ :  Microsoft.Ink (Microsoft.Ink.dll 内)

構文

'宣言
Public Function NearestPoint ( _
    point As Point, _
    <OutAttribute> ByRef pointOnStroke As Single _
) As Stroke
'使用
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

パラメータ

  • point
    型 : System.Drawing.Point
    インク空間座標内で指定された Ink オブジェクト内にある指定されたポイント。
  • pointOnStroke
    型 : System.Single%
    Ink オブジェクト内で指定されたポイントに最も近い Stroke オブジェクトのポイント。

戻り値

型 : Microsoft.Ink.Stroke
Ink オブジェクト内の指定された point に最も近い Point を含む Stroke を返します。既知の Point からの距離が同じである Point が 1 つ以上のストロークに含まれている場合、この結果値は任意になります。

解説

Stroke オブジェクトのポイントは 2 つの物理座標ポイントの間になるため、pointOnStroke パラメータは浮動小数点数として定義されます。たとえば値 1.5 は、ポイントがストロークの最初のパケットと 2 番目のパケットの中間になることを示します。この値を使用し、Split メソッドを呼び出して Stroke オブジェクトを分割するか、値を切り上げまたは切り捨てて Stroke オブジェクト内のパケットにインデックスを付けます。

この例では、インク コントロールの中心に最も近い Stroke オブジェクトの色が赤に変更されます。さらに、見つかった、インク コントロールの中心に最も近い Stroke オブジェクトのポイントとインク コントロールの中心とを結ぶ新しい Stroke オブジェクトが作成されます。

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();
}

プラットフォーム

Windows Vista

.NET Framework および .NET Compact Framework では、各プラットフォームのすべてのバージョンはサポートしていません。サポートされているバージョンについては、「.NET Framework システム要件」を参照してください。

バージョン情報

.NET Framework

サポート対象 : 3.0

参照

参照

Ink クラス

Ink メンバ

NearestPoint オーバーロード

Microsoft.Ink 名前空間

Stroke

Stroke.Split