欢迎来到天天文库
浏览记录
ID:38202140
大小:60.55 KB
页数:9页
时间:2019-06-07
《NI控件之-CWGraph数据捕捉》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、前面介绍了NI控件和它的绘图控件CWGraph绘图功能,由于COM版本的只能显示,不能在控件上做其他操作,所以一些常用的功能如获取距离鼠标最近点的数据点就需要自己实现。以捕捉最近点为例:分析:在绘图的时候一般传入X、Y轴数据,X、Y数据都是同等长度的一维数组,捕捉功能也是再这些数据上做文章,数据有了,只需要对数据进行分析就可以了。根据传入的捕捉点和数组进行分析后,适当的移动鼠标光标当前位置,就可以实现捕捉功能了。这只是一般情况,当然还有特殊情况,比如,在用PlotY()添加数据,这时候只有Y轴数据
2、而没有X轴数据,如何捕捉呢?仔细想想---由于数据都绘图都是一句坐标系绘制的,而我们知道X轴的起始终止坐标值,这样把X轴依据Y轴数据长度等份分成一个数组,这样就可以得到X轴数据,同样可以得到最近值-----实现:其主要部分就在于计算。下面是一个写好的捕捉类/**自动捕捉类,捕捉附近点*只有XY坐标**/publicclassSnapNearPoint{#region字段privateListm_XData=null;//X轴数据privateListm_YData=
3、null;//Y轴数据privatedoublem_XRadio=0.0;//X方向捕捉半径长度privatedoublem_YRadio=0.0;//Y方向捕捉半径长度privateint_SelectIndex=-1;//捕捉到最近点的索引privateSnapMode_Mode=SnapMode.XAndY;//捕捉方式#endregion#region属性////设置获取绑定X数据//publicListBindXData{set{m_
4、XData=value;}get{returnm_XData;}}//////设置获取绑定Y数据///publicListBindYData{set{m_YData=value;}get{returnm_YData;}}//////获取捕捉到数据索引///publicintSelectIndex{get{return_SelectIndex;}}//////获取或设置捕捉点方式///5、ummary>publicSnapModeMode{set{_Mode=value;}get{return_Mode;}}#endregion#region构造函数、捕捉方法//////构造函数//////X捕捉长度///Y捕捉长度publicSnapNearPoint(doubleXRadio,doubleYRadio){m_XRadio=XRad6、io;m_YRadio=YRadio;}//////获取最近点//////用于捕捉最近点的鼠标点X///鼠标点Y///返回捕捉到的点X轴坐标值///返回捕捉到的点Y轴坐标值publicvoidGetNearPoint(doubleS7、earchx,doubleSearchy,refdoubleReturnx,refdoubleReturny){try{if(m_XData!=null&&m_YData!=null){switch(_Mode){caseSnapMode.JustX:m_XData.Add(m_XData[m_XData.Count-1]+1);//Graph在绘图时候会从数组索引为1的位置开始绘制,如果不再前面+1数据,则结果会出现少一组(第一位)数据for(inti=0;i8、++){if(Searchx>=(m_XData[i]-(m_XData[i+1]-m_XData[i])/2.0)&&Searchx<=(m_XData[i+1]-(m_XData[i+1]-m_XData[i])/2.0)){_SelectIndex=i;Returnx=m_XData[i];}}m_XData.RemoveAt(m_XData.Count-1);break;caseSnapMode.JustY:m_YData.Add(m_YData[m_YData.Count
5、ummary>publicSnapModeMode{set{_Mode=value;}get{return_Mode;}}#endregion#region构造函数、捕捉方法//////构造函数//////X捕捉长度///Y捕捉长度publicSnapNearPoint(doubleXRadio,doubleYRadio){m_XRadio=XRad
6、io;m_YRadio=YRadio;}//////获取最近点//////用于捕捉最近点的鼠标点X///鼠标点Y///返回捕捉到的点X轴坐标值///返回捕捉到的点Y轴坐标值publicvoidGetNearPoint(doubleS
7、earchx,doubleSearchy,refdoubleReturnx,refdoubleReturny){try{if(m_XData!=null&&m_YData!=null){switch(_Mode){caseSnapMode.JustX:m_XData.Add(m_XData[m_XData.Count-1]+1);//Graph在绘图时候会从数组索引为1的位置开始绘制,如果不再前面+1数据,则结果会出现少一组(第一位)数据for(inti=0;i8、++){if(Searchx>=(m_XData[i]-(m_XData[i+1]-m_XData[i])/2.0)&&Searchx<=(m_XData[i+1]-(m_XData[i+1]-m_XData[i])/2.0)){_SelectIndex=i;Returnx=m_XData[i];}}m_XData.RemoveAt(m_XData.Count-1);break;caseSnapMode.JustY:m_YData.Add(m_YData[m_YData.Count
8、++){if(Searchx>=(m_XData[i]-(m_XData[i+1]-m_XData[i])/2.0)&&Searchx<=(m_XData[i+1]-(m_XData[i+1]-m_XData[i])/2.0)){_SelectIndex=i;Returnx=m_XData[i];}}m_XData.RemoveAt(m_XData.Count-1);break;caseSnapMode.JustY:m_YData.Add(m_YData[m_YData.Count
此文档下载收益归作者所有