Silverlight 雷达图和一种特殊泡泡画法
来源:互联网 发布:骑马与砍杀数据 编辑:程序博客网 时间:2024/04/29 05:21
自上次发了雷达图,也没怎么说一下。
这次又做了一种图,继续共享一下,就是以一个点为中心,周围绕着几个点,用一个箭头与中心相连并带有某些信息。圆 和中心都可以响应鼠标事件。
我一向不会讲解所做的东西。所以大部分我直接上源码的。
简单讲解一下:
代码结构分为4部分,
1.
首先是画布,其实就是一个canvas因为现在只有二种图,
一个雷达画布 RadarCanvas(比较特殊),和一个二维坐标画布 CoorCanvas,都派生自ChartCanvas;
2.就是轴
坐标轴CoorAxis 和RadarAxis 都派生自IAxis,其实里面什么也没有。就是一个存一些值,比较这个轴的颜色,它的起始与终结坐标。雷达轴的角度偏移等,。
3.model
存值的类了,暂时有 clm泡泡图的点击事件参数 CLMArrowClickEventArg,DataPoint图坐标点,图点点击事件参数ItemClickEventArg,字段映射ItemMapping
4.图形
现有CLMBubbleSeries,它是一个特殊的泡泡图,我们项目中用到的。这里就不说它有什么用。只讲实现。
RadarSeries,它就是雷达图形
它们都继承自ISeries
核心就是讲Series怎么画的
首先看它们的基类:
View Code
嗯。没有很多东西,都是一些基础操作,和几个接口。
下面就可以看泡泡图CLMBubbleSeries:
其构造函数:
public CLMBubbleSeries(CoorCanvas canvas) : base(canvas) { this.Stroke = new SolidColorBrush(Color.FromArgb(255, 51, 153, 255)); this.Fill = new SolidColorBrush(Color.FromArgb(255, 188, 222, 255)); }
初始化它的颜色。
最重要的是二个函数
View Code
画一个中心圆 ,和用InitPoint来画周围的小圆。
View Code
最后是画坐标图代码:
/// <summary> /// 画坐标图 /// </summary> private void DrawCoor() { if (!IsDrawBaseLine) return; coorGeometry.Figures.Clear(); var xaxis = new Axis.CoorAxis(); xaxis.AxisShap = coorPath; xaxis.AType = Axis.AxisType.XValue; var yaxis = new Axis.CoorAxis(); yaxis.AType = Axis.AxisType.YValue; yaxis.AxisShap = coorPath; this.Axises.Add(xaxis); this.Axises.Add(yaxis); var coorfigure = new PathFigure(); coorGeometry.Figures.Add(coorfigure); //画上箭头 yaxis.StartPoint = coorfigure.StartPoint = new Point(Margin.Left, Margin.Top - arrowMargin); var tlp = new Point() { X = Margin.Left - arrowMargin, Y = Margin.Top + arrowMargin }; coorfigure.Segments.Add(new LineSegment() { Point = tlp }); coorfigure.Segments.Add(new LineSegment() { Point = tlp }); coorfigure.Segments.Add(new LineSegment() { Point = coorfigure.StartPoint }); var trp = new Point() { X = Margin.Left + arrowMargin, Y = Margin.Top + arrowMargin }; coorfigure.Segments.Add(new LineSegment() { Point = trp }); coorfigure.Segments.Add(new LineSegment() { Point = trp }); coorfigure.Segments.Add(new LineSegment() { Point = coorfigure.StartPoint }); //左侧Y轴 yaxis.EndPoint = xaxis.StartPoint = new Point() { X = Margin.Left, Y = this.Height - Margin.Bottom }; coorfigure.Segments.Add(new LineSegment() { Point = xaxis.StartPoint }); //x轴 xaxis.EndPoint = new Point() { X = this.Width - Margin.Right + arrowMargin, Y = xaxis.StartPoint.Y }; coorfigure.Segments.Add(new LineSegment() { Point = xaxis.EndPoint }); //画右箭头 var brtp = new Point() { X = this.Width - Margin.Right - arrowMargin, Y = xaxis.EndPoint.Y - arrowMargin }; var brbp = new Point() { X = brtp.X, Y = xaxis.EndPoint.Y + arrowMargin }; coorfigure.Segments.Add(new LineSegment() { Point = brtp }); coorfigure.Segments.Add(new LineSegment() { Point = brtp }); coorfigure.Segments.Add(new LineSegment() { Point = xaxis.EndPoint }); coorfigure.Segments.Add(new LineSegment() { Point = brbp }); coorfigure.Segments.Add(new LineSegment() { Point = brbp }); AddChild(coorPath); DrawLine();//画虚线 } /// <summary> /// 画虚线 /// </summary> private void DrawLine() { var w = this.Width - Margin.Left - Margin.Right; var h = this.Height - Margin.Top - Margin.Bottom; var vstep = h / HorizontalCount; for (var i = 1; i <= HorizontalCount; i++) { var l = new Line(); l.StrokeLineJoin = PenLineJoin.Round; l.StrokeDashArray.Add(4); l.Stroke = DashColor; l.StrokeThickness = 1; l.X1 = Margin.Left; l.Y1 = this.Height - Margin.Bottom - (vstep * i); l.X2 = this.Width - Margin.Right; l.Y2 = l.Y1; AddChild(l); } var xstep = w / VerticalCount; for (var i = 1; i <= VerticalCount; i++) { var l = new Line(); l.Stroke = DashColor; l.StrokeDashArray.Add(4); l.StrokeThickness = 1; l.X1 = Margin.Left + xstep * i; l.Y1 = Margin.Top; l.X2 = l.X1; l.Y2 = this.Height - Margin.Bottom; AddChild(l); }
啊。我是正的不太会讲解。直接上源码算了
源码地址:源码
- Silverlight 雷达图和一种特殊泡泡画法
- 饼图的一种画法
- 饼图的一种画法
- 饼图的一种画法
- 饼图的一种画法
- 用Silverlight做雷达图
- 饼图的一种画法(转载自aspcool)
- 序列图中的分支和循环画法
- 论文eps图的画法和问题
- 雷达图
- Silverlight中上标和下标等特殊脚注字符实现
- 小岛和雷达
- 数据流图DFD画法
- 数据流图的画法
- 数据流图的画法
- 数据流图的画法
- ER图的画法
- 数据流图的画法
- (转)实用Word使用技巧大全
- java关于迭代器的分析...设计更通用的容器遍历方法
- Android.mk文件的语法规范(http://www.srombauts.fr/android-ndk-r5b/docs/ANDROID-MK.html
- c++中的关联容器
- 弱弱的实现了广度优先,以前图方便很少用邻接表的。
- Silverlight 雷达图和一种特殊泡泡画法
- Android存储设备(U盘,SD卡)状态监测(《Android 2.3 SD卡挂载流程浅析1234567)
- Windows7 win+E “未指定错误”
- 简单oracle存储过程,使用游标
- 最小生成树
- Struts2 零配置注解
- centos 5.2编译mysql时犯错
- 查看Linux内核版本的命令
- Android ROM分析(1):刷机原理及方法