如何绘制那些静态或动态图形?

时间:2014-05-16 17:24:06

标签: c# graph draw

我已经在这个网站上学习了很长时间,但这实际上是我第一次出现在这里,这是我的第一个问题,我是土木工程师,我正在编写一个用于挡土墙设计的软件,我需要将下图所示的数字绘制成静态或动态的(我的意思是通过动态我可以通过上下数字工具更改图形的尺寸,并且更改在图形中可见),这些应该是准备好的表单,以帮助用户进入demotions.where我可以找到一个来源来学习这个? 我知道我可能正在与最聪明的人打交道,所以请注意编程不是我的专业,我不是那么好,我认为我是初学者..非常感谢你

enter image description here

1 个答案:

答案 0 :(得分:1)

以下简要介绍了将图纸添加到程序中所需的内容:

0 - 决定平台:Winforms还是WPF?对于你的图形WinForms会做; 3D和动画WFP将是更好的选择,但代价是更陡峭的学习曲线。

1 - 了解Winforms中的基本图形模型:

  • 所有绘制的内容到控件上必须paint event中绘制或从那里触发

  • 当外部事件发生时,Windows将负责刷新绘图。覆盖它。

  • 用户应该能够通过在控件更改数据时使控件无效来触发绘制事件。添加一个以sketchPanel.Invalidate();为代码的刷新按钮。

2 - 添加一个控件以绘制到表单,并根据需要anchordock。使用panel进行绘制,给它一个好名字,说 sketchPanel 并创建其Paint事件(通过在事件属性窗格中双击它)

3 - 所有绘图操作都发生在Graphics对象上。在Paint事件中,它以e.Graphics的形式提供。如果您希望绘制自己的函数,例如public drawMyWall(Graphics G),您可以在Paint事件中调用它并传入e.Graphics对象。

4 - 使用的方法是

  • DrawLine用于创建行
  • DrawString用于撰写测量标签
  • FillPolygon用于绘制彩色墙壁或地球或水体
  • DrawPolygon用于绘制墙的轮廓

所有将采用相对于 sketchPanel 的像素单位的坐标;因为您的用户输入将以米或毫米为单位,您必须转换数字。计算外墙尺寸并将其缩放到面板尺寸!

Draw- / FillPloygon方法也需要array of Points

要创建它,您应首先声明List<Point> wallpoints = new List<Point>();,然后添加所需的每个点:wallpoints.Add(new Point(someX, someY) ); 这里必须遵循顺序(CW CCW),并且必须从每个点的输入测量值计算每个的坐标。一个简单的重力墙只有4个点,但更复杂的墙将有十几个或更多..

当您的列表完成后,您可以使用例如像这样的FillPolygon方法:

e.Graphics.FillPolygon(Brushes.Orange, wallpoints.ToArray() );

由于您从输入测量计算所有点,因此绘图将完全动态。

您可能希望首先遗漏标签等。此外,您可能希望为计算的点添加偏移量,以将绘图移动到面板上或多或少居中的位置。

我希望有帮助..