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  拒绝潜水的鱼  阅读(946)  评论(0编辑  收藏  举报