开发者社区> 橘子红了呐> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

C#绘制立体三维饼状图

简介:
+关注继续查看

内容原文地址:LINK

[翻译]
Julijan Sribar著3D Pie Chart

一个用于绘制立体三维饼状图的C#类库


[简介]

本文的想法就是创建一个独立的能够用于绘制立体三维饼状图的类库。首先,它看起来非常简单,因为,在Graphics 类中已经有了一个叫DrawPie 的方法。这个方法接收开始角度和展开角度作为参数,因此,看上去不再有什么其它的问题了。不过它实现的是一个平面的圆饼图,我需要的是一个三维的透视图;如果你也正需要这样的一个控件,这篇文章将再适合不过了。

三维饼状图
[代码使用]

本文中的PieChart 解决方案包括三个类:PieSlice, PieChart3D 和 PieChartControl (继承于System.Windows.Forms.Panel 控件)。PieSlice 类提供了所以绘制3-D饼状图的功能,你可以设置它的起始、展开角度,颜色,高度及阴影类型。

PieChart3D 类代表整个图,有几个构造函数值得注意,它们可以接收下面的值:

颜色值数组
切片displacement(位移)数组
切片的厚度

因为位移是通过切片的"深度"比率和椭圆半径表示的;最小值0意味着没有位移,最大值1代表这个形状占用了整个椭圆。

切片的厚度,也代表着一个比率(相对于椭圆垂直距离),最大允许的值是0.5。

当然,也可以通过公有的函数,来设置上面的值。注意:如果设置的颜色数量少于切片的数量,颜色会被重用。同样,如果displacement没有了,最后一个值也会被复用。

可设置的公有属性如下:
* Texts,
* Font,
* ForeColor,
* ShadowStyle,
* EdgeColorType,
* EdgeLineWidth,
* InitialAngle,
* FitToBoundingRectangle. 

通过文章的演示程序,可以很容易明白各个属性是什么含义。

PieChart3D 类还可以用于打印,初始化对象,然后调用它的Draw 方法(提供一个对应的Graphics 对象)。

public void Draw(Graphics graphics) { ... }


如果需要在屏幕上显示,可以使用PieChartControl;它封装了图形到面板的功能。用户只需要把它放在Form上,然后设置需要的属性就OK了。例如:

private System.Drawing.PieChart.PieChartControl panelDrawing =
new System.Drawing.PieChart.PieChartControl();
panelDrawing.Values = new decimal[] { 10, 15, 5, 35};
int alpha = 80;
panelDrawing.Colors = new Color[] { Color.FromArgb(alpha, Color.Red),
Color.FromArgb(alpha, Color.Green),
Color.FromArgb(alpha, Color.Yellow),
Color.FromArgb(alpha, Color.Blue) };
panelDrawing.SliceRelativeDisplacements = new float[] { 0.1F, 0.2F, 0.2F, 0.2F };
panelDrawing.Texts = new string[] { "red",
"green",
"blue",
"yellow" };
panelDrawing.ToolTips = new string[] { "Peter",
"Paul",
"Mary",
"Brian" };
panelDrawing.Font = new Font("Arial", 10F);
panelDrawing.ForeColor = SystemColors.WindowText
panelDrawing.LeftMargin = 10F;
panelDrawing.RightMargin = 10F;
panelDrawing.TopMargin = 10F;
panelDrawing.BottomMargin = 10F;
panelDrawing.SliceRelativeHeight = 0.25F;
panelDrawing.InitialAngle = -90F;


PieChartControl 类重写了OnPaint 和OnResize 事件,这两个事件将允许正确的饼图重绘任务。

提醒:PieChartControl 类还有一个ToolTips 属性,它用于当你的鼠标移到某个切片上的时候,给出对应的Tip,如果没有设置这个数组,那么切片对应的值会被显示。
3DPieChart_And_demo.rar

 

没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。



   本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/6207544.html,如需转载请自行联系原作者


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
110.绘制彩色抛物线
110.绘制彩色抛物线
0 0
C#编程-135:Graphics绘制三维饼状图
C#编程-135:Graphics绘制三维饼状图
0 0
基础平面地图——地图数据(散点、呼吸气泡、飞线等)不显示问题
地图数据(散点、呼吸气泡、飞线等)不显示问题:经纬度放反、API返回结果或者SQL查询结果与组件所需数据格式不匹配、数据过滤器、跨域问题。
5389 0
为什么3D模型的网格由很多三角形来组成
因为二点确定一条线,三点确定一个面   网格就是由很多面组成的,四个点也能组成面 但是三个点就足够了
571 0
地图上绘制多边形
根据输入的一组点的坐标,生成对应的封闭多边形。 实现代码 <!doctype html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"&g
765 0
不规则图形的碰撞检测
public static class CheckHit { public static bool CheckCollision(FrameworkElement control1, FrameworkElement controlElem1, FrameworkElement c...
510 0
文章
问答
文章排行榜
最热
最新
相关电子书
更多
3D动画的菜谱式灯光与云渲染
立即下载
360°全景视频播放器的实现原理
立即下载
低代码开发师(初级)实战教程
立即下载