Waveformgraph for MeasurementStudioVS2003 系列

Waveformgraph Sample:
这个控件的使用真是奇怪,官方给的帮助性文档很少,进来有一个项目要用到此控件,在此小议,如同所有做NET项目的人一样,我上网大肆搜罗一盘,包括他的论坛里所有的相关代码,那个累啊~,现在还没有大的进展,因为对控件本身还没有充分了解。
1、光标随鼠标移动
MeasurementStudioVS2003本身不提供API,要通过一系列函数和事件的操作才能达到这个效果 如下代码
private void waveformGraph1_PlotAreaMouseMove ( object sender, MouseEventArgs e )
        {
            
double xValue, yValue ;
            InverseMap ( waveformGraph1.PlotAreaBounds, e.X, e.Y, xAxis1, yAxis1, 
out xValue, out yValue ) ;
            xyCursor1.XPosition 
= xValue ;
            xyCursor1.YPosition 
= yValue ;
        }

        
private Range GetScaledLogRange ( Range range, double logBase )
        {
            Range scaledRange 
= range ;
            
if ( scaledRange.Minimum <= 0 )
                scaledRange 
= new Range ( Math.Pow ( logBase, -1 ), scaledRange.Maximum ) ;

            scaledRange 
= new Range ( Math.Log ( scaledRange.Minimum, logBase ), Math.Log ( scaledRange.Maximum, logBase ) ) ;
            
return scaledRange ;
        }

        
private void InverseMap ( Rectangle plotAreaBounds, int x, int y, XAxis xAxis, YAxis yAxis,
                                  
out double xValue, out double yValue )
        {
            
if ( xAxis.ScaleType == ScaleType.Logarithmic )
            {
                Range scaledRange 
= GetScaledLogRange ( xAxis.Range, xAxis.LogBase ) ;
                xValue 
= Math.Pow ( xAxis.LogBase, ( ( scaledRange.Maximum - scaledRange.Minimum ) *
                    ( ( x 
- plotAreaBounds.Left ) / ( double ) ( plotAreaBounds.Right - plotAreaBounds.Left ) ) ) + scaledRange.Minimum ) ;
            }
            
else
            {
                xValue 
= ( ( xAxis.Range.Maximum - xAxis.Range.Minimum ) *
                    ( ( x 
- plotAreaBounds.Left ) / ( double ) ( plotAreaBounds.Right - plotAreaBounds.Left ) ) ) + xAxis.Range.Minimum ;
            }

            
if ( yAxis.ScaleType == ScaleType.Logarithmic )
            {
                Range scaledRange 
= GetScaledLogRange ( yAxis.Range, yAxis.LogBase ) ;
                yValue 
= Math.Pow ( yAxis.LogBase, ( ( scaledRange.Maximum - scaledRange.Minimum ) *
                    ( ( plotAreaBounds.Bottom 
- y ) / ( double ) ( plotAreaBounds.Bottom - plotAreaBounds.Top ) ) ) + scaledRange.Minimum ) ;
            }
            
else
            {
                yValue 
= ( ( yAxis.Range.Maximum - yAxis.Range.Minimum ) *
                    ( ( plotAreaBounds.Bottom 
- y ) / ( double ) ( plotAreaBounds.Bottom - plotAreaBounds.Top ) ) ) + yAxis.Range.Minimum ;
            }
        }

此代码来自官方论坛采集
/Files/slave2/TrackCursorTest.zip
posted @ 2008-04-30 02:37 拒绝潜水的鱼 阅读(50) 评论(0)  编辑 收藏 所属分类: ASP.NET应用

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
博客园首页

新闻频道

社区

小组

博问

网摘

闪存

  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
成果网帮您增加网站收入


相关链接: