2009-09-14 5 views
1

InkCanvas에서 사용자 지정 브러시를 사용하고 싶습니다.사용자 지정 InkCanvas (MSDN 코드 샘플이 제대로 작동하지 않음)

MSDN 코드 스 니펫입니다. 내가 그 코드를 사용하고 난 브러시 사이의 공간 (타원) 얻을 매우 빠른 내 마우스를 이동하면 (http://msdn.microsoft.com/en-us/library/ms747347.aspx)

: Screenshot http://i27.tinypic.com/zsrdwi.jpg

을 그리고 내 질문은 물론 방법이 문제를 해결하려면 그러나 나는 또한 궁금 왜 이런 일이 일어나고 있는지 (나는 그것으로부터 배우고 싶다) 내가 어쩌면 내가 잘못한 일을했을지 모르지만 나는 그 일이 일어나고있는 예를 잘라내거나 붙여 넣을지라도 생각했다. 코드를 읽을 때 내가 발견

하나 개의 작은 것은 그것이뿐만 아니라 지점에서 지점 사이의 타원을 그린다처럼 CustomStroke 클래스

// Draw linear gradient ellipses between 
// all the StylusPoints in the Stroke 

이 댓글이 날 것으로 보인다이었다.

저는 C# .NET을 사용하고 있습니다. 짧은에서 다시

다음 WPF InkCanvas 컨트롤은 초당 입력 제한된 수 있습니다

  • 왜 이런 일이 왜

답변

1

예에서 사용자 정의 InkCanvas를 일어나고있는 이유는 모든 수집 StrokePoint에서 타원을 그립니다하지만 그들 사이의 선을 그릴하는 것이 아니다. 표준 InkCanvas 컨트롤은 지정된 점 사이에 선을 그어 구현됩니다. 이것이 예제의 사용자 정의 InkCanvas 구현이 갭을 남기고 내장 된 InkCanvas 구현이 갭을 남기는 이유입니다.

는 사용자 정의 코드가 쉽게 격차를 두지하도록 확장 할 수있다 "해결"하는 방법 : 또한 각 지점에서 타원 그리기, 그것은 점의 각 쌍 사이의 선을 그릴 수 있습니다. 연결하는 선을 그릴 수

코드는 다음과 같이 타원을 그리는 코드 앞에 추가 될 수 있습니다

// Draw connecting lines 
var geo = new StreamGeometry(); 
using(geoContext = geo.Open()) 
{ 
    geoContext.StartFigure(stylusPoints[0], false, false); 
    geoContext.PolyLineTo(stylusPoints.Skip(1).Cast<Point>(), true, false); 
} 
drawingContext.DrawGeometry(null, connectingLinePen, geo); 

// Draw ellipses 
for(int i = 1; i < stylusPoints.Count; i++) 
{ 
    ... etc ... 

이 코드는 폴리 라인 StreamGeometry를 구성하고 상황에 그리는 방식으로 작동합니다. 이 컨텍스트에서 StreamGeometry를 사용하는 것은 일반적으로 Polyline을 사용하여 PathGeometry를 작성하거나 drawingCanvas에서 직접 많은 DrawLine 호출을 수행하는 것보다 효율적입니다.

참고 : 더 나은 디지타이저를 사용해도 근본적인 문제는 해결되지 않습니다. 즉, 사용자 지정 InkCanvas가 샘플링 된 점에서만 데이터를 표시하도록 실제로 설계되었습니다.

+0

감사합니다. 작동 중입니다. 방금 점을 연결하는 선을 추가해야했습니다. –

0

그것을 :) 해결 도움말이 일어나고있다 마우스를 사용할 때; 이는 스타일러스 입력이 마우스를 더 빠르고 더 빠르게 움직일 때 스타일러스 입력이 점점 더 멀리 떨어져 있음을 의미합니다. 샘플 자체는 포인트 사이가 아닌 모든 스타일러스 입력 포인트에서 도형을 그립니다.

해결 방법 : Tablet PC 사용 - Tablet PC와 같은 디지타이저는 초당 입력 수가 훨씬 많으므로 만나는 것이 어려워 지거나 공백을 채우기가 어렵습니다. 포인트, 아마도 베 지어 곡선.

+0

좋아하지만 사용자 정의 InkCanvas를 사용하고 때 왜는 무슨 일이 일어나고? 일반 InkCanvas가 예상대로 작동합니다. –