作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我需要在 WPF 中创建这个形状。首先,我以为是一条路径,但里面的线条显示的是一个 3D 形状。
如何绘制包含线条的形状?
非常感谢。
最佳答案
可以使用 Path 和 Ellipse 对象非常简单地绘制形状的外部/轮廓。圆柱体的顶面也可以用网格中的多条线(作为 Path 对象)绘制。您可以只绘制它们,使它们都延伸到顶部椭圆之外,并使用顶部椭圆作为 mask 来修剪它们。
圆柱体内的竖线稍微复杂一些。它们的坐标可以通过以下公式确定,假设圆柱体的左边缘在x=0,圆柱体的左边缘与椭圆的左边缘相交的点为y=0:
For i = 0 to NumberOfDivisions
HorizontalPosition = CircleRadius - (cos(pi/NumberOfDivisions * i) * CircleRadius)
TopOfLine = sin(pi/NumberOfDivisions * i) * CircleRadius * 0.5 //The 0.5 assumes that the ellipse will only be half as tall as it is wide.
BottomOfLine = TopOfLine + HeightOfCylinder
//draw vertical line where:
//X1=HorizontalPosition, Y1=TopOfLine
//X2=HorizontalPosition, Y2=BottomOfLine
Next
其中 NumberOfDivisions + 1
等于您要在圆柱体上显示的行数。
MSDN 有一些很好的例子来开始使用 Path class .
如果您只需要一种表示 3D 外观圆柱体的方法,没有网格线,线性渐变画笔和 2 个路径对象就可以了:
<Canvas >
<Path Width="111" Height="113.5" Canvas.Left="0" Canvas.Top="12.5" Stretch="Fill" StrokeLineJoin="Round" Stroke="#FF000000" Data="F1 M 177,190C 176.999,196.903 152.375,202.5 122,202.5C 91.6246,202.5 67.0006,196.903 67,189.979L 67,90L 177,90L 177,190 Z ">
<Path.Fill>
<LinearGradientBrush StartPoint="-0.00454615,0.5" EndPoint="1.00455,0.5">
<LinearGradientBrush.GradientStops>
<GradientStop Color="#FF28A528" Offset="0"/>
<GradientStop Color="#FF63B963" Offset="0.152943"/>
<GradientStop Color="#FF9FCE9F" Offset="0.362069"/>
<GradientStop Color="#FF006C00" Offset="0.991379"/>
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
</Path.Fill>
</Path>
<Path Width="111" Height="26" Canvas.Left="0" Canvas.Top="0" Stretch="Fill" StrokeLineJoin="Round" Stroke="#FF000000" Fill="#FF2CF72C" Data="F1 M 122,77.4999C 152.376,77.4999 177,83.0964 177,89.9999C 177,96.9035 152.376,102.5 122,102.5C 91.6244,102.5 67.0001,96.9035 67.0001,89.9999C 67.0001,83.0964 91.6245,77.4999 122,77.4999 Z "/>
</Canvas>
编辑好吧,这个问题让我很感兴趣,以至于我不厌其烦地在 CodePoject 上为它写了一篇完整的文章。 ,连同用于绘制解决方案的简单项目的源代码。通常情况下,我不会遇到那么多麻烦,但这对我来说是一个不错的简单项目,可以帮助我开始学习 C#。
关于c# - 如何在WPF中绘制这条路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9022782/
我是一名优秀的程序员,十分优秀!