다음을 통해 공유


Stroke.GetRectangleIntersections 메서드

업데이트: 2007년 11월

Stroke 개체가 지정된 Rectangle과 교차하는 위치를 나타내는 StrokeIntersection 구조체의 배열을 반환합니다.

네임스페이스:  Microsoft.Ink
어셈블리:  Microsoft.Ink(Microsoft.Ink.dll)

구문

‘선언
Public Function GetRectangleIntersections ( _
    intersectRectangle As Rectangle _
) As StrokeIntersection()
‘사용 방법
Dim instance As Stroke
Dim intersectRectangle As Rectangle
Dim returnValue As StrokeIntersection()

returnValue = instance.GetRectangleIntersections(intersectRectangle)
public StrokeIntersection[] GetRectangleIntersections(
    Rectangle intersectRectangle
)
public:
array<StrokeIntersection>^ GetRectangleIntersections(
    Rectangle intersectRectangle
)
public StrokeIntersection[] GetRectangleIntersections(
    Rectangle intersectRectangle
)
public function GetRectangleIntersections(
    intersectRectangle : Rectangle
) : StrokeIntersection[]

매개 변수

반환 값

형식: array<Microsoft.Ink.StrokeIntersection[]
Stroke 개체가 intersectRectangle 매개 변수와 교차하는 위치를 나타내는 StrokeIntersection 구조체의 배열을 반환합니다.

설명

이 메서드는 사각형을 교차하는 스트로크 세그먼트의 시작 및 끝 부분을 나타내는 0 또는 여러 인덱스 집합을 반환합니다. 스트로크가 사각형을 직선으로 통과하여 두 위치에서 경계와 교차하는 경우 각 교차에 대한 부동 소수점 인덱스 값으로 인덱스 집합이 만들어집니다. 스트로크가 사각형과 두 번 이상 교차하는 경우에는 교차 횟수만큼 인덱스 수가 늘어납니다.

스트로크가 테스트 사각형 내에서 시작되는 경우 첫 번째 StrokeIntersection 요소의 BeginIndex 속성은 -1로 설정됩니다. 스트로크가 테스트 사각형 내에서 끝나는 경우 마지막 StrokeIntersection 요소의 EndIndex 속성은 -1로 설정됩니다. 스트로크가 사각형 내에 완전히 포함되어 있는 경우 반환되는 배열에는 BeginIndex 속성과 EndIndex 속성이 모두 -1로 설정된 단일 StrokeIntersection 구조체가 포함됩니다. 스트로크가 테스트 사각형을 완전히 벗어난 경우에는 빈 StrokeIntersection 배열이 반환됩니다.

예를 들어 스트로크가 테스트 사각형 내에서 시작되어 사각형의 경계를 벗어나고 내부에서 반환된 후 다시 벗어나는 경우 GetRectangleIntersections 메서드에서는 {{-1, 1.4}, {5.5, 10.1}}을 반환하여 스트로크의 두 세그먼트가 사각형 내에 있음을 설명할 수 있습니다.

이 메서드에서 반환하는 StrokeIntersection 구조체에는 교차가 발생하는 위치를 나타내는 쌍을 이룬 부동 소수점 인덱스 값이 포함됩니다. 부동 소수점 인덱스는 Stroke 개체의 두 점 사이에 있는 위치를 나타내는 부동 소수점 값입니다. 예를 들어 스트로크에서 첫 번째 점이 0.0이고 두 번째 점이 1.0인 경우 0.5는 첫 번째 점과 두 번째 점 사이의 중간 지점입니다. 마찬가지로 부동 소수점 인덱스 값 37.25는 스트로크의 37번과 38번 점 사이의 선에서 25% 위치를 나타냅니다.

예제

이 예제에서는 전달된 Stroke 개체의 세그먼트 중 지정된 Rectangle 구조체 안에 있는 모든 세그먼트가 삭제됩니다. 이를 위해 StrokeIntersection 구조체를 조사하여 전달된 Stroke 개체를 분할할 위치 및 삭제할 세그먼트를 확인합니다.

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

플랫폼

Windows Vista

.NET Framework 및 .NET Compact Framework에서 모든 플랫폼의 전체 버전을 지원하지는 않습니다. 지원되는 버전의 목록을 보려면 .NET Framework 시스템 요구 사항을 참조하십시오.

버전 정보

.NET Framework

3.0에서 지원

참고 항목

참조

Stroke 클래스

Stroke 멤버

Microsoft.Ink 네임스페이스

Stroke.FindIntersections

StrokeIntersection