InkCanvas を使用して WPF で基本的なグラフィック エディターを作成しています。いくつかのカスタム シェイプを作成しました (Stroke から継承)。InkCanvas で線を引くときは、最初と最後の点を取って線を引きます。それはうまくいきますが、デフォルトの「ペンストローク」が気に入らないので、リアルタイムで線をレンダリングするように DynamicRenderer を書き直すことにしました。
問題は、DynamicRenderer が原点からストロークのすべての点まで線を描画することです。線の代わりに「ファン」が作成されるため、明らかにそれは望ましくありません。
私のカスタムコードがあり、可能であれば、原点から最後の点まで線を引くための解決策を探しています。
class LineRenderer : DynamicRenderer
{
private Point firstPoint;
private Pen pen = new Pen(new SolidColorBrush(Colors.Gray),1);
public LineRenderer()
{
firstPoint = new Point(double.PositiveInfinity, double.PositiveInfinity);
}
protected override void OnStylusDown(RawStylusInput rawStylusInput)
{
firstPoint = new Point(rawStylusInput.GetStylusPoints().First().ToPoint().X, rawStylusInput.GetStylusPoints().First().ToPoint().Y);
base.OnStylusDown(rawStylusInput);
}
protected override void OnDraw(DrawingContext drawingContext,
StylusPointCollection stylusPoints,
Geometry geometry, Brush fillBrush)
{
drawingContext.DrawLine(pen, firstPoint, stylusPoints.First().ToPoint());
}
protected override void OnStylusUp(RawStylusInput rawStylusInput)
{
firstPoint = new Point(double.PositiveInfinity, double.PositiveInfinity);
base.OnStylusUp(rawStylusInput);
}
}