
Do something to waves in marquee

AlanSaul
This code permits the user to select a subset of waves in a graph by drawing a marquee around them, then choosing a command from the marquee menu that is executed on that subset of waves. The example here highlights the selected waves, but lots of other possibilities exist, such as deleting the waves, averaging them, hiding them, ....
#pragma rtGlobals=1 // Use modern global access method. #include <Execute Cmd On List> Menu "GraphMarquee" "Do something to Waves in Marquee" "Do something else to Waves in Marquee" End Function pointInBox(px,py,bl,bt,br,bb) // determine if point is in box variable px,py,bl,bt,br,bb return((px>bl && br>px) && (py>bb && bt>py)) End Function waveThroughBox(w,bl,bt,br,bb) // determine if wave w goes through box wave w variable bl,bt,br,bb variable pt,px for(pt=0;numpnts(w)>pt;pt+=1) px=DimOffset(w,0)+DimDelta(w,0)*pt if(pointInBox(px,w[pt],bl,bt,br,bb)) return 1 endif endfor return 0 End Function/S WavesinBox(bl,bt,br,bb) // get list of waves passing through box variable bl,bt,br,bb string retlst,aWv,wvl=WaveList("*",";","WIN:") retlst="" variable i for(i=0;ItemsinList(wvl)>i;i+=1) aWv=StringFromList(i,wvl) wave wv=$aWv if(waveThroughBox(wv,bl,bt,br,bb)) retlst+=aWv+";" endif endfor return retlst End Function DoSomethingToWavesInMarquee() // here, just highlighting traces GetMarquee/K left,bottom string waves2highlight=WavesinBox(V_left,V_top,V_right,V_bottom) ExecuteCmdOnList("ModifyGraph lsize(%s)=3",waves2highlight) End Function DoSomethingElseToWavesInMarquee() // here, just reversing highlighting of traces GetMarquee/K left,bottom string waves2highlight=WavesinBox(V_left,V_top,V_right,V_bottom) ExecuteCmdOnList("ModifyGraph lsize(%s)=1",waves2highlight) End Function TestMarqueeWaves() // just puts some waves into a graph onto which one can draw a marquee and highlight some of the waves variable nwaves=10 variable i string awv Display/W=(200,200,600,600) for(i=0;nwaves>i;i+=1) awv="w"+Num2Str(i) Make/O/N=100 $awv=gnoise(1) Smooth 11,$awv AppendtoGraph $awv ModifyGraph rgb($awv)=(65535*i/nwaves,65535*(1-i/nwaves),332767) endfor ModifyGraph mode=0 End

Forum

Support

Gallery
Igor Pro 9
Learn More
Igor XOP Toolkit
Learn More
Igor NIDAQ Tools MX
Learn More