【发布时间】:2012-08-24 04:57:22
【问题描述】:
我正在用 C# 开发类似 CAD 的应用程序(表单,没有外部框架)。我已经实现了平移、缩放、选择;但它很慢,因为每次鼠标移动都会重绘所有线条。
如何构建更快、更高效的应用程序?如何只重绘一行?
绘图代码(在标准面板上):
void pan_Paint(object sender, PaintEventArgs e)
{
foreach (Entitie o in sketch.Entities)
{
if (o is Line)
{
Line l = (Line)o;
Point p1 = pointScreen(l.P1.X.CurrentValue, l.P1.Y.CurrentValue);
Point p2 = pointScreen(l.P2.X.CurrentValue, l.P2.Y.CurrentValue);
e.Graphics.DrawLine(Pens.Black, p1, p2);
}
}
}
用于绘制新线:
void pan_MouseMove(object sender, MouseEventArgs e)
{
if (tmpEntitie != null)
{
Line l = (Line)tmpEntitie;
l.P2 = e.Location;
pan.Invalidate();
}
}
【问题讨论】:
-
不使用 C#?考虑到即使是最基本的应用程序所涉及的库,您对绘图所做的大多数事情都将是潜在的。另外,如果您还没有,我建议您查看 OpenTK 之类的内容
-
你能展示你的代码吗?此外,.NET 对图形的处理非常好,所以即使每次鼠标移动都重绘,如果每次只重绘变化的区域也不会有问题。
-
.NET 对于大多数图形应用程序来说是非常快的,如果你使用得当的话。提示:一遍又一遍地调用 SetPixel 不是你想要的方式:-)
-
将您的问题标记为 C# 并不足以解释您在做什么。我们至少需要知道您是否在使用 Forms、WPF 或其他一些框架,以便能够提出有意义的建议。
标签: c# performance cad