在 Silverlight 中繪製扇形
/// <summary>
/// 獲得扇形的 Path 對象。
/// </summary>
/// <param name="x">圖形左上角的座標之 x。</param>
/// <param name="y">圖形左上角的座標之 y。</param>
/// <param name="rotationAngle">扇形的角度。</param>
/// <param name="radius">扇形的半徑大小,更改其值會影響扇形大小。</param>
/// <param name="angle">扇形張開的角度,支持0 - 360 度,使用弧度。</param>
/// <returns></returns>
public static Path GetSectorPath(double x, double y, double rotationAngle, double radius, double angle, Color col)
{
// 對整圓的特殊處理
if (angle > Math.PI * 1.9999)
angle = Math.PI * 1.9999;
var path = new Path
{
Fill = new SolidColorBrush(col),
RenderTransformOrigin = new Point(radius, radius),
Stretch = Stretch.None,
UseLayoutRounding = false
};
//繪製起始直線
var startLine = new LineSegment()
{
Point = new Point(radius * 2, radius)
};
//繪製弧線
var arcLine = new ArcSegment()
{
IsLargeArc = angle > Math.PI ? true : false,
Size = new Size(radius, radius),
Point = new Point(radius * Math.Cos(angle) + radius, radius * Math.Sin(angle) + radius),
SweepDirection = SweepDirection.Clockwise
};
//繪製結束直線
var endLine = new LineSegment()
{
Point = new Point(radius, radius)
};
//把三條線段集合在一起。
var segments = new PathSegmentCollection { startLine, arcLine, endLine };
//為直線的Data賦值,由三段封閉的線段繪製成一個扇形
path.Data = new PathGeometry()
{
Figures = new PathFigureCollection() { new PathFigure()
{
StartPoint = new Point(radius, radius),
Segments = segments
}}
};
//設置扇形對稱軸偏轉角度。
path.RenderTransform = new CompositeTransform()
{
Rotation = rotationAngle,
CenterX = radius, // 很重要,設置旋轉中心。在 Path.RenderTransformOrigen 設置無效。
CenterY = radius
};
path.SetValue(Canvas.LeftProperty, x);
path.SetValue(Canvas.TopProperty, y);
return path;
}
這段代碼的主要思路如下:
- 使用
Path
對象,組合兩條邊和一個弧來形成扇形。 - 弧線和邊均以 X 軸正方向為基準繪製。(一條邊為與 X 軸正方向重合的邊,其他線條以此為起點順時針方向繪製)
- 繪製完成後,使用
Path
的RenderTransform
屬性,將其旋轉到合適的開始角度。 - 使用
Sin
和Cos
函數計算相關座標。
© 轉載需附帶本文連結,依 CC BY-NC-SA 4.0 釋出。