65.9K
CodeProject 正在变化。 阅读更多。
Home

3D 条形图

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.38/5 (21投票s)

2003年5月20日

2分钟阅读

viewsIcon

120089

downloadIcon

1884

将 2D 图表转换为 3D 图表

Sample screenshot

引言

目前,我在弗吉尼亚州。蜷缩在这间狭小的房间里,用着我的旧笔记本电脑。我只敢在上面安装 Windows 98 - 这意味着我只能使用 .Net Framework。一周前在工作中,我注意到我的 3D 饼图已经发布,于是我开始探索制作 3D 条形图的难度。

我做了一些测试项目,上面有可用的下载。我拿了一个旧的 VS.NET 项目,并将其简化,以便我可以轻松地将其用作模板。在我的高性能笔记本电脑上(开玩笑),项目的图像或图表看起来很棒。我希望在好的显示器上看起来还可以。(我只是做了一份临时工作,所以被困在我的笔记本电脑上。)我只能使用古老的命令行和记事本。

在将 .NET 目录添加到 PATH 后,我运行了 MAKE 批处理文件来构建模板 - 这基本上由一个窗体和一个按钮组成。

创建图表

我本可以使用 Image 或 Picture 控件,并在内存中构建图表(Bitmap),就像我在 3D 饼图文章中所做的那样。这只是一个演示,所以我只需要一个设备上下文 (DC)。条形图的 3D 插图不如饼图那么有效。也许这是我决定放弃白色背景的结果。

无论如何,要创建用于使用窗体 DC 的 Graphics 对象,您需要使用 FromHwnd 方法,而不是 FromHdc。HWnd 是一个窗口句柄,作为窗体的一个属性提供。

Graphics.FillPolygon 方法接受一个 Point 对象数组和一个画笔。请记住,(X,Y) 位置或坐标 (0,0) 是窗口客户端区域的左上角。

此演示绘制了十个条形,每个条形的深度或高度都是随机的。演示中没有设计图例信息。

3D 插图可以通过绘制一系列多边形(称为切片)和阴影画笔来实现。每个切片彼此相隔一个像素。每个条形彼此相隔 5 个像素。

一旦我有了多边形(菱形)的四个所需点,我就绘制了底部的切片,减小了数组中每个 Point 的 Y 值(这反过来,以向上的方式绘制了切片),并用纯色画笔绘制了最终切片。在代码中,我在每个切片上创建一个新的阴影画笔 - 这不是必需的,但我不想修复它。

再次按下“运行”按钮,将清除之前的绘制并重新开始。请注意,如果您最小化窗口,绘制也会被擦除。

© . All rights reserved.