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
#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