找回密码
 立即注册

QQ登录

只需一步,快速开始

profile5

银牌会员

1

主题

5

帖子

2315

积分

银牌会员

积分
2315

活字格认证

最新发帖
profile5
银牌会员   /  发表于:2015-3-12 16:21  /   查看:12391  /  回复:10
各位好:
    小弟刚刚接触这个,因项目需要实现从界面曲线上读取数据。目前我在x-y坐标中添加几个点,控件自动帮我连成了一条完整的曲线,我希望能读取曲线上的值,应该如何处理呢? 有没有类似我给一个x值的参数,从而获取曲线上对应y值 的方法呢?

环境:win7+vs2010

10 个回复

倒序浏览
Alice
社区贡献组   /  发表于:2015-3-12 19:11:00
沙发
回复 1楼profile5的帖子

你好。
你的需求都是可以实现的。
作为初接触产品,建议阅读产品文档和随机安装示例。
安装产品后,在随机安装示例中会有详细的源代码。
请参考如下路径的示例:
C:\Users\【用户名】\Documents\ComponentOne Samples\Studio for WinForms\C1Chart\CS

中文产品文档地址:
http://www.gcpowertools.com.cn/docs/ComponentOne/WinFormChart/

具体请阅读输入和修改图表数据章节,有各种和图表数据获取方法:
http://www.gcpowertools.com.cn/d ... !Documents/_101.htm
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
profile5
银牌会员   /  发表于:2015-3-13 09:58:00
板凳
回复 2楼Alice的帖子

谢谢你的帮助,可能是我太菜了,还是没有找到方法。。。
我看了文档,其中提到了copydataout,但是这只能获取到已经很明确的点的值。。。。


场景描述:
      如上图所示,我绑定了数据源,数据源中已经添加了 上图中类似于A、B、C 一样的九个点的数据, 程序运行后,c1chart替我自动生成了一条完整的曲线,我现在想获取图中其他点(除去已经预设的点)的值,即方框中的数据。
      请问有方法解决么?谢谢

附:
      项目的原始功能是: 随机添加几个点,然后任意调整点的位置,从而改变曲线图形,最后采样360个对应的x-y键值对。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-3-13 18:16:00
地板
回复 3楼profile5的帖子

红色圈里标记的这些点的数据是可以获取到的。
C1Chart有提供CoordToDataCoord方法将鼠标位置转换为数据值。
具体参考文档:
http://www.gcpowertools.com.cn/docs/ComponentOne/WinFormChart/#!Documents/_198.htm

因此你只是需要知道C1Chart的X,Y的鼠标坐标,就可以获得转换成对应的数据点。
获取鼠标的相关事件可以在C1Chart的MouseMove,MouseDown等获取。

不过值得提醒的是,我看你需要根据任意调整点的位置来改变曲线。
那么除非你在鼠标操作的时候,修改原始输入的点的数据,或是增加新点,否则该曲线不会发生变动,因为它是自动根据数据点生成的。只有数据的变动才能影响到曲线的变动。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
profile5
银牌会员   /  发表于:2015-3-16 18:17:00
5#
回复 4楼Alice的帖子

你好,麻烦再问下。
如果通过鼠标事件驱动的话可能存在几个问题:
1、如果鼠标没有聚焦在线上,那得到的数据就不正确
2、前台操作可能比较复杂,如果要获取360个x-y键值对,需要移动鼠标360次,或者需要把鼠标沿着曲线轨迹,划一遍从而过滤出对应数据,是么?
如果想做一个按钮,点击了后就直接后台遍历360个已经确定的x值,从而获取到对应的y值,组成键值对保存,这样的方案可以实现么?

我上传了demo代码,麻烦帮我看一下。。。谢谢

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-3-17 09:24:00
6#
回复 5楼profile5的帖子

1.CoordToDataCoord方法是将鼠标位置转换成对应于坐标轴的数据值,和曲线无关。
如果你需要始终得到的点是曲线上的,可以使用其他方法,具体参考文档:
http://www.gcpowertools.com.cn/d ... !Documents/_195.htm
但是这些方法的前提都是需要知道鼠标位置的。

2.这个问题又回到2楼给出的回答。
如果是想后台获取曲线的数据,可以通过CopyDataOut方法从数据组对象中提取数据。这个方法返回一个对象数据类型,包含数据组。
代码参考:
  1. object xpo;
  2. ChartDataSeries cds;
  3. cds = c1Chart1.ChartGroups.ChartGroupsCollection[0].ChartData.SeriesList[0];
  4. xpo = cds.X.CopyDataOut();
复制代码


这只能获取到已经添加到图表中的数据点。

综上,我需要和你明确下需求。
你根据几个数据点自动生成一条曲线。现在你的需求是,已知X=100,或X=200,这些X轴的坐标轴的上的值,期望读出曲线上相应的Y轴的值?并且希望从后台去读取这些值。对么?
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
profile5
银牌会员   /  发表于:2015-3-17 10:28:00
7#
"已知X=100,或X=200,这些X轴的坐标轴的上的值,期望读出曲线上相应的Y轴的值?并且希望从后台去读取这些值。对么?"   嗯,是的,现在我到这儿就卡住了,不晓得如何读取,求帮助。。。
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-3-17 13:42:00
8#
回复 7楼profile5的帖子

你的需求已经收到了。
我可以根据你的需求帮助你去看看实现的方法。根据目前的调查进度,最晚明天给你反馈。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-3-18 10:57:00
9#
回复 7楼profile5的帖子

我帮你写了一个方法,计算出曲线上实际的X,Y数据值。
假设坐标轴的数据点从X=0开始,然后是X=100,200.....,,取了10个点,计算出曲线上实际的数据值。

主要还是通过之前发过的坐标之间的转换方法计算的,文档在6楼可以获取。
代码参考;
  1.      for (int i = 0; i < 10; i++)
  2.             {
  3.                 //假设坐标轴的数据点从X=0开始,然后是X=100,200.....
  4.                 double dataX = 100*i, dataY = 0;

  5.                 int CoordX = 0, CoordY = 0;//定义鼠标坐标变量
  6.                 //将(X=100*i, Y=0)的数据点转成鼠标坐标
  7.                 chartXY.ChartGroups[0].DataCoordToCoord(dataX, dataY, ref CoordX, ref CoordY);

  8.                 //换算在X轴的这个鼠标坐标到曲线上点的Y轴距离
  9.                 int p = 0, d = 0;
  10.                 chartXY.ChartGroups[0].CoordToPointIndex(CoordX, CoordY, PlotElementEnum.Series, 0, ref p, ref d);

  11.                 //通过(CoordY - d)得到实际的曲线Y点上的鼠标坐标,并将曲线上的X,Y鼠标坐标转成曲线的数据值。
  12.                 CoordY = CoordY - d;
  13.                 chartXY.ChartGroups[0].CoordToDataCoord(CoordX, CoordY, ref dataX, ref dataY);
  14.                 Console.WriteLine("X data: " + dataX.ToString());
  15.                 Console.WriteLine("Y data: " + dataY.ToString());//dataY即为曲线上的数据Y值
  16.             }
复制代码


请注意:因为数据值是double类型,所以不会是整数,最后得到的会有误差。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
profile5
银牌会员   /  发表于:2015-3-19 11:19:00
10#
回复 9楼Alice的帖子

好的,谢谢。。非常感谢alice的耐心帮助,祝愿葡萄城控件越来越好。。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部