我想做的是创造这个旋转圆锥体的视觉效果。
我以前使用过DirectX。
到目前为止,我已经尝试过:
即使我将厚度更改为50
或更大,Arc仍未填充。
public partial class Form1 : Form
{
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
var g = e.Graphics;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
var center = new Point(pictureBox1.Width / 2, pictureBox1.Height / 2);
var innerR = 30;
var thickness = 20;
var startAngle = 0;
var arcLength = 360;
var outerR = innerR + thickness;
var outerRect = new Rectangle
(center.X - outerR, center.Y - outerR, 2 * outerR, 2 * outerR);
var innerRect = new Rectangle
(center.X - innerR, center.Y - innerR, 2 * innerR, 2 * innerR);
using (var p = new GraphicsPath())
{
p.AddArc(outerRect, startAngle, arcLength);
p.AddArc(innerRect, startAngle + arcLength, -arcLength);
p.CloseFigure();
e.Graphics.FillPath(Brushes.Green, p);
e.Graphics.DrawPath(Pens.Green, p);
}
}
}
我希望即使厚度为20或更小时也能填充圆弧。
或者当半径innerR
的值改变时。
目标是在任何情况下都能够填充圆弧。
1条答案
按热度按时间t40tm48m1#
这里有一种绘制圆锥体的方法。
它看起来像雷达扫描,因此您可能需要定义扫描Angular 和旋转速度(根据计时器的间隔,当前旋转Angular 增加了多少)。
使用标准的System.Windows.Forms.Timer使包含图像的画布无效。
它是用
LinearGradientBrush
填充的,靠近中心的部分比靠近边界的部分透明度低;按需调整每次旋转Angular 达到
360°
时,都会重置为0
。这将委托给计时器的
Tick
事件处理程序=〉使用.Net 7构建,但如果您需要将其适配到.Net Framework,则只需更改
using
块的语法,从此处删除空值宽容运算符:canvas!.ClientRectangle
和可空引用类型(例如,将object?
更改为object
)它是这样工作的: