簡體   English   中英

如何使用 InkStroke 繪制圓?

[英]How can I draw a Circle with InkStroke?

我有一個 InkCanvas。 我需要將圓形繪制為 InkStroke。

我知道,我可以使用 InkAnalyzer 繪制圓形或橢圓形,但我需要該圓形作為 InkCanvas 中的 InkStroke,而不是 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;
} 

我如何將此代碼調整為圓? 或者我怎樣才能畫一個圓圈?

謝謝,

如果我正確理解您的問題,您只想使用 InkStroke 繪制一個橢圓並將這些橢圓的筆觸添加到 InkCanvas 中。 然后,您可以將這些筆畫用於其他目的(例如,保存這些筆畫並在下次使用時使用)。 如果是這樣,我只能告訴你這是不可能的。 因為當你在 InkCanvas 上畫一個類似的橢圓時,你可以用 InkAnalyzer 把它轉換成橢圓,但它實際上只返回四個點給你。 Jayden 在此線程中也提到了它: 在 uwp 中將多邊形/橢圓添加到inkcanvas

但是正如我所說,如果使用inkstroke繪制橢圓的原因是為了節省筆觸用於其他目的,我可以給你另一種方式。 您可以使用win2D-UWP相關 API 在 CanvasControl 上繪制橢圓並將其保存為 CanvasSvgDocument。 然后,您可以將其另存為 svg xml 文件。 對於網絡使用,您可以通過CanvasSvgDocument.LoadAsync將此 svg xml 文件CanvasSvgDocument.LoadAsync到 CanvasControl 中。

如果您對 CanvasSvgDocument 感興趣,可以參考SvgExample了解更多詳細信息。

在此處輸入圖片說明

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_old 中緩存 xy)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM