我已经在这个网站上学习了很长时间,但这实际上是我第一次出现在这里,这是我的第一个问题,我是土木工程师,我正在编写一个用于挡土墙设计的软件,我需要将下图所示的数字绘制成静态或动态的(我的意思是通过动态我可以通过上下数字工具更改图形的尺寸,并且更改在图形中可见),这些应该是准备好的表单,以帮助用户进入demotions.where我可以找到一个来源来学习这个? 我知道我可能正在与最聪明的人打交道,所以请注意编程不是我的专业,我不是那么好,我认为我是初学者..非常感谢你
答案 0 :(得分:1)
以下简要介绍了将图纸添加到程序中所需的内容:
0 - 决定平台:Winforms
还是WPF
?对于你的图形WinForms
会做; 3D和动画WFP
将是更好的选择,但代价是更陡峭的学习曲线。
1 - 了解Winforms中的基本图形模型:
所有绘制的内容到控件上必须在paint event
中绘制或从那里触发
当外部事件发生时,Windows将负责刷新绘图。覆盖它。
用户应该能够通过在控件更改数据时使控件无效来触发绘制事件。添加一个以sketchPanel.Invalidate();
为代码的刷新按钮。
2 - 添加一个控件以绘制到表单,并根据需要anchor
或dock
。使用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() );
由于您从输入测量计算所有点,因此绘图将完全动态。
您可能希望首先遗漏标签等。此外,您可能希望为计算的点添加偏移量,以将绘图移动到面板上或多或少居中的位置。
我希望有帮助..