Я пишу базовый графический редактор в WPF, используя InkCanvas. Я сделал несколько пользовательских форм (унаследованных от Stroke). Когда я рисую линию на InkCanvas, я беру первую и последнюю точки и строю линию. Это прекрасно работает, но теперь мне не нравится «росчерк пера» по умолчанию, поэтому я решил переписать DynamicRenderer для рендеринга линий в реальном времени.
Проблема в том, что DynamicRenderer рисует линию от исходной точки до каждой точки обводки, и я, очевидно, этого не хочу, потому что это делает "fan" вместо строки.
Есть мой собственный код, и я ищу решение для рисования линии только от исходной точки до последней точки, если это возможно.
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);
}
}