지난시간에 Ink Canvas를 사용한 Gesture Recognition방법에 대해서 소개해 드린바 있습니다. 간단히 Mouse나 Stylus Pen을 이용한 Gesture Recognition에는 무리 없이 사용가능한 방법이지만, Mouse나 Stylus를 사용하지 않고는 제스쳐를 인식할 수 있는 방법이 없어서 현재 개발중인 MultiTouch 기반의 System에서는 적용이 힘들다는 결론을 내렸습니다.
뭐 OneTouch였다면 눌렀을때 MouseEvent를 발생시켜서 구현은 가능하겠지만.. 다중사용자를 고려해야하다보니 어쩔 수 없이 다른 방법을 찾아야 했죠.. 한참을 찾다보니 WPF 에서는 친절하게도 GestureRecognizer라는 녀석을 제공해주고있다는 사실을 알았습니다.
GestureRecognizer는 Application Gesture의 전체 또는 하위 집합을 인식하도록 하기 위해 구현된 Class로서 파라미터로 StrokeCollection를 입력하면 해당 하는 제스쳐의 결과를 반환 해주는 역할을 합니다. 마우스가 다녀간 포인트 좌표만 가지고도 사용자가 취한 Gesture가 무엇인지 알아 낼수 있다는 말이죠,
나머지는 코드를 보고 설명하도록 하겠습니다.
일단 GestureRecognizer를 사용하기 위해서는 StrokeCollection이 필요합니다. StrokeCollection을 만들기 위해서는 Stroke가 필요하고.. Stroke를 만들기 위해서는 StylusPointCollection이 필요하고..StylusPointCollection을 만들기 위해서는 StylusPointDescription가 필요하죠, 마지막으로 StylusPointDescription를 만들기 위해서는 StylusPointPropertyInfos가 필요한데... (엄청나게 복잡해보입니다만 거꾸러 타고 올라가다보면 결국에 중요한건 몇개 안되네요..) 어쨋든 이부분이 맨 윗줄 멤버변수를 선언한 부분과 생성자 부분이 이에 해당합니다.
그리고 public ApplicationGesture Recognize(StrokeCollection Strokes) 를 보시면 전시간에 소개해 드렸었던 방식과 매우 비슷하게 동작하는것을 확인 하실 수 있습니다. 이를 활용해서 아래쪽에 StylusPointCollection를 사용하는 Recognize함수와 처음 목표로 했었던 IEnumerable<Point>를 사용하는 Recognizer함수를 구현 했습니다. (짝짝짝)
그리고 사용하실때는 아래와 같이 사용하실 수 있습니다.
이제 MultiTouch에 적용하기 위해서 각 Point만다 Handler를 생성해주고 Point가 사라짐과 동시에 인식하도록 구현하면 MultiTouch에 적용할 수 있는 Gesture 인식기가 완성되네요 ^^ 질문은 리플이나 메일 주세요 +_+ 그럼 이만 저는 꿈나라로 무브무브~
아래는 프로젝트 파일을 포함한 전체 소스코드입니다.
아래 URL을 참고 해주세요^^
MSDN : http://msdn.microsoft.com/ko-kr/library/ms697513(en-us).aspx

GestureManual.zip
