C# 如何绘制这样的静态或动态图形?

C# 如何绘制这样的静态或动态图形?,c#,graph,draw,C#,Graph,Draw,我在这个网站上学习了很长时间,但这实际上是我第一次出现在这里,这是我的第一个问题,我是一名土木工程师,我正在编写一个挡土墙设计软件,我需要绘制如下所示的静态或动态图,(我的意思是动态的,我可以通过上下数字工具更改图形的尺寸,并且这些更改在图形上可见,),这些应该是一个现成的表单,可以帮助用户输入降级。我在哪里可以找到了解这一点的来源? 我知道我可能在编程中与最聪明的人打交道,所以请注意,编程不是我的专业,我不太好,把我当成初学者。非常感谢 以下是向程序中添加图形所需的简单介绍: 0-决定平台:W

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


以下是向程序中添加图形所需的简单介绍:

0-决定平台:
Winforms
WPF
?对于您的图形类型
Winforms
可以;对于3D和动画
WFP
将是更好的选择,但代价是学习曲线更陡

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

  • 在控件上绘制的所有内容必须在
    绘制事件中绘制或从中触发

  • 当外部事件(如覆盖)发生时,Windows将负责刷新图形

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

2-添加一个控件以在窗体上绘制,并根据需要锚定或停靠它。使用
面板
进行绘制,给它一个好的名称,说sketchPanel并创建它的
绘制
事件(在事件属性窗格中双击它)

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

4-使用的方法如下:

  • 绘制线
    用于创建线
  • drawing string
    用于写入测量标签
  • FillPolygon
    用于绘制彩色墙或地球或水体
  • DrawPolygon
    用于绘制墙的轮廓
所有这些都将采用相对于sketchPanel的像素单位坐标;由于用户输入的单位为米或毫米,因此必须转换这些数字。计算外墙尺寸并将其缩放到面板的尺寸

Draw-/fillpolygon方法还需要一个
点数组

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

当您的列表完成后,您可以在例如FillPolygon方法中使用以下方法:

e.Graphics.FillPolygon(Brushes.Orange, wallpoints.ToArray() );
由于您根据输入测量值计算所有点,因此图形将完全是动态的

首先,您可能希望省去标签等。此外,您可能希望在计算的点上添加偏移,以将图形移动到面板上大致居中的位置


我希望这能有所帮助。

这里面有一个古老的问题:制造还是购买?这里面有很多工具,学习使用它们本身就是一件令人畏惧的事情。写这些东西不是一个人的事,更不用说初学者了。TaW,首先感谢你的关注和回复,那么你建议我怎么做?我该怎么做?要得到这些答案我的软件中的图形和绘图?告诉我一点你的程序到目前为止做了些什么!以及在制作任何软件时应该遵循哪些步骤,就像我听说过它应该调整的显示设置一样,我想我缺少信息,我想我需要一个指南来遵循,以便知道如何编写一个完整的和完整的e从A到Z都是有效的软件,没错,我可以声明值,使用循环,使用语句,我有一种深入思考的能力,即使使用这些基本步骤,我也能编写任何想要的目标,但问题是我正在寻找一个有组织的小指南,或者至少有一个有效的软件,谢谢你,我明白了在图像中,首先想到的是它们在细节和质量上有多大的不同。制作3D插图,隐藏线和平面检测、着色等等都是一项相当艰巨的任务。Oto,一幅像中底一样的画,只显示带有一些标签的墙壁侧面,真的没有那么难,我会带你去看hr通过或给你足够的提示让你开始……对不起,我不同意所有这一切。OP显示的图像显示类似CAD的3D图形,既没有winforms(完全无用),也没有WPF(不提供此所需的高性能3D功能)这应该是用纯硬核C++和DirectX或OpenGL来完成的。这只是因为你没有读过(所有这些)注释。从我的第一个(!)开始。如果你不能在WiFrices中这样做,那么,对不起,我可以……甚至提到C++是可笑的。“如果你不能在WiFrm中这样做”-由于缺乏硬件加速,winforms无法在最基本的绘图中不显示大量可怕的持续闪烁。更不用说了