[英]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.