Как я могу нарисовать круг с помощью InkStroke?

У меня есть Инкканвас. Мне нужно нарисовать круг как InkStroke.

Я знаю, что могу нарисовать круг или эллипс с помощью InkAnalyzer, но мне нужен этот круг как InkStroke в InkCanvas, а не в Canvas, и я не хочу использовать транспортир.

Мне нужно каким-то правильным образом нарисовать круг.

Для прямой линии разработан этот код;

private void StrokeInput_StrokeEnded(InkStrokeInput sender, PointerEventArgs args)
{
    List<InkPoint> points = new List<InkPoint>();
    InkStrokeBuilder builder = new InkStrokeBuilder();


    InkPoint pointOne = new InkPoint(new Point(line.X1, line.Y1), 0.5f);
    points.Add(pointOne);
    InkPoint pointTwo = new InkPoint(new Point(line.X2, line.Y2), 0.5f);
    points.Add(pointTwo);

    InkStroke stroke = builder.CreateStrokeFromInkPoints(points, System.Numerics.Matrix3x2.Identity);
    InkDrawingAttributes ida = inkCanvas.InkPresenter.CopyDefaultDrawingAttributes();
    stroke.DrawingAttributes = ida;
    inkCanvas.InkPresenter.StrokeContainer.AddStroke(stroke);

}

private void StrokeInput_StrokeContinued(InkStrokeInput sender, PointerEventArgs args)
{
    line.X2 = args.CurrentPoint.RawPosition.X;
    line.Y2 = args.CurrentPoint.RawPosition.Y;
}

private void StrokeInput_StrokeStarted(InkStrokeInput sender, PointerEventArgs args)
{
    line = new Line();
    line.X1 = args.CurrentPoint.RawPosition.X;
    line.Y1 = args.CurrentPoint.RawPosition.Y;
    line.X2 = args.CurrentPoint.RawPosition.X;
    line.Y2 = args.CurrentPoint.RawPosition.Y;

    line.Stroke = new SolidColorBrush(Colors.Purple);
    line.StrokeThickness = 4;
} 

Как я могу настроить этот код для круга? Или как я могу нарисовать круг?

Спасибо,


person Beyru    schedule 24.11.2017    source источник


Ответы (2)


Если я правильно понял ваш вопрос, вы просто хотите использовать InkStroke для рисования эллипса и добавить эти штрихи эллипса в InkCanvas. Затем вы можете использовать эти штрихи для других целей (например, сохранить эти штрихи и использовать их для следующего использования). Если так, я могу только сказать вам, что это невозможно. Потому что, когда вы рисуете подобный эллипс в InkCanvas, вы можете использовать InkAnalyzer для преобразования его в эллипс, но на самом деле он возвращает вам только четыре точки. Джейден также упомянул об этом в этой теме: Добавить многоугольник/эллипс в inkcanvas в uwp< /а>

Но, как я уже сказал, если цель использования мазка тушью для рисования эллипса состоит в том, чтобы сохранить штрихи для других целей, я могу предложить вам другой способ. Вы можете использовать соответствующие API win2D-UWP, чтобы нарисовать эллипс в CanvasControl и сохранить его как CanvasSvgDocument. Затем вы можете сохранить его как файл svg xml. Для использования в сети вы можете загрузить этот файл svg xml с помощью CanvasSvgDocument.LoadAsync в CanvasControl.

Если вас интересует CanvasSvgDocument, вы можете обратиться к SvgExample для более подробной информации.

введите здесь описание изображения

person Xie Steven    schedule 27.11.2017

float stepsize = 0.05f;
float radius = 10f;

for (float i = 0; i <= 2*Math.PI; i+= stepsize )

  var x = position.x + radius * Math.cos(i);
  var y = position.y + radius * Math.sin(i);
  // draw dot here at x,y
}

Если вам нужны линии вместо точек, нарисуйте линию от предыдущего xy до текущего xy. (кэшировать xy в xy_old)

person KYL3R    schedule 27.11.2017