다음을 통해 공유


StylusInput API의 아키텍처

StylusInput API를 사용하면 태블릿 펜 데이터 스트림과 상호 작용할 수 있습니다. 데이터 스트림과 상호 작용하려면 애플리케이션에 RealTimeStylus 개체를 추가하고 RealTimeStylus 개체에 플러그 인을 추가합니다.

StylusInput API에는 두 개의 플러그 인이 제공됩니다. DynamicRenderer 개체는 IStylusSyncPlugin 인터페이스를 구현합니다. DynamicRenderer 개체는 잉크를 그릴 때 실시간으로 렌더링합니다. GestureRecognizer 개체는 IStylusSyncPluginIStylusAsyncPlugin 인터페이스를 구현합니다. GestureRecognizer 개체는 애플리케이션 제스처를 인식합니다.

정의

다음 용어는 StylusInput API를 설명하는 섹션에서 사용됩니다.

동기 플러그 인

IStylusSyncPlugin 인터페이스를 구현하는 클래스입니다. 동기 플러그 인은 일반적으로 RealTimeStylus 개체에 의해 직접 호출됩니다.

비동기 플러그 인

IStylusAsyncPlugin 인터페이스를 구현하는 클래스입니다. 비동기 플러그 인은 일반적으로 애플리케이션의 UI(사용자 인터페이스) 스레드에서 호출됩니다.

동기 플러그 인 컬렉션

IStylusSyncPlugin 개체의 정렬된 컬렉션인 StylusSyncPluginCollection 컬렉션입니다. 동기 플러그 인 컬렉션은 일반적으로 RealTimeStylus 개체의 SyncPluginCollection 속성에 할당된 컬렉션을 나타냅니다. 동기 플러그 인만 동기 플러그 인 컬렉션에 추가할 수 있습니다.

비동기 플러그 인 컬렉션

IStylusAsyncPlugin 개체의 정렬된 컬렉션인 StylusAsyncPluginCollection 컬렉션입니다. 비동기 플러그 인 컬렉션은 일반적으로 RealTimeStylus 개체의 AsyncPluginCollection 속성에 할당된 컬렉션을 나타냅니다. 비동기 플러그 인만 비동기 플러그 인 컬렉션에 추가할 수 있습니다.

동기 및 비동기 플러그 인

RealTimeStylus 개체는 태블릿 펜에서 데이터 스트림에 대한 실시간 액세스를 제공하도록 설계되었습니다. 데이터 스트림에 대한 실시간 액세스가 필요하고 패킷 필터링과 같이 계산이 필요 없는 작업에 동기 플러그 인을 만들거나 사용합니다. InkDisp 개체에 스트로크를 만들고 저장하는 것과 같이 데이터 스트림에 실시간으로 액세스할 필요가 없는 작업에 비동기 플러그 인을 만들거나 사용합니다.

특정 작업은 계산이 필요하지만 다중 입력 제스처 인식과 같은 데이터 스트림에 대한 실시간 액세스가 필요할 수 있습니다. 이러한 요구 사항을 해결하기 위해 StylusInput API는 각각 자체 스레드에서 실행되는 두 개의 RealTimeStylus 개체를 사용할 수 있는 연속된 RealTimeStylus 모델을 제공합니다. 계단식 RealTimeStylus 모델에 대한 자세한 내용은 Cascaded RealTimeStylus 모델을 참조하세요.

플러그 인을 사용하고 만드는 방법에 대한 자세한 내용은 StylusInput API 작업을 참조하세요.

태블릿 펜 데이터 스트림

RealTimeStylus 개체에는 태블릿 펜 데이터, 입력 큐 및 출력 큐를 전달하는 두 개의 내부 큐가 있습니다. 펜 데이터는 Microsoft.StylusInput.PluginData 네임스페이스의 클래스 인스턴스로 변환됩니다. 다음 목록에서는 RealTimeStylus 개체가 태블릿 펜 데이터를 처리하는 방법을 설명합니다.

RealTimeStylus 개체는 먼저 입력 큐에서 플러그 인 데이터 개체를 확인한 다음 태블릿 펜 데이터 스트림에서 확인합니다.

RealTimeStylus 개체는 하나의 플러그 인 데이터 개체를 동기 플러그 인 컬렉션의 개체로 보냅니다. 각 동기 플러그 인은 입력 또는 출력 큐에 데이터를 추가할 수 있습니다.

플러그 인 데이터 개체가 동기 플러그 인 컬렉션의 모든 멤버에게 전송된 후 플러그 인 데이터 개체는 RealTimeStylus 개체의 출력 큐에 배치됩니다.

그런 다음 RealTimeStylus 개체는 처리할 다음 플러그 인 데이터 개체를 확인합니다.

RealTimeStylus 개체의 출력 큐에 데이터가 포함되어 있지만 RealTimeStylus 개체는 출력 큐에서 비동기 플러그 인 컬렉션의 개체로 하나의 플러그 인 데이터 개체를 보냅니다. 각 비동기 플러그 인은 입력 또는 출력 큐에 데이터를 추가할 수 있습니다. 그러나 비동기 플러그 인은 UI 스레드에서 실행되므로 비동기 플러그 인이 처리하는 데이터와 관련이 없는 RealTimeStylus 개체가 처리하는 현재 펜 데이터와 관련하여 데이터가 큐에 추가됩니다.

다음 다이어그램에서는 RealTimeStylus 개체 및 플러그 인 컬렉션을 통해 태블릿 펜 데이터의 흐름을 보여 줍니다.

realtimestylus 개체 및 플러그 인 컬렉션을 통한 태블릿 펜 데이터 흐름

이 다이어그램에서 "A" 및 "B"라는 레이블이 지정된 원은 RealTimeStylus 개체의 출력 큐에 이미 추가되었으며 아직 비동기 플러그 인 컬렉션으로 전송되지 않은 태블릿 펜 데이터를 나타냅니다. "C"라는 레이블이 지정된 원은 RealTimeStylus 개체가 현재 처리 중인 태블릿 펜 데이터를 나타냅니다. 동기 플러그 인 컬렉션으로 전송되고 출력 큐에 배치됩니다. 빈 원은 이후 태블릿 펜 데이터가 추가되는 출력 큐의 위치를 나타냅니다.

특정 데이터가 큐에 추가되고 처리되는 방법에 대한 자세한 내용은 플러그 인 데이터 및 RealTimeStylus 클래스를 참조하세요.

StylusInput API

StylusInput API는 주로 Microsoft.StylusInputMicrosoft.StylusInput.PluginData 네임스페이스에 있습니다. 그러나 StylusInput API는 Tablet 클래스, TabletPropertyDescriptionCollection 컬렉션, ApplicationGestureSystemGesture 열거형과 같은 Microsoft.Ink 네임스페이스의 일부 클래스도 참조합니다.

DynamicRenderer

GestureRecognizer

RealTimeStylus

IStylusAsyncPlugin

IStylusSyncPlugin

StylusInput API 작업

Cascaded RealTimeStylus 모델