## Find traces that intersect the graph marquee

Average rating
(1 vote)

This snippet shows a function that will examing the named graph and return a list of all traces that have points that fall within the graph marquee. Note that the traces must have points in the marquee, it's not enough that they intersect the marquee. The snippet handles the standard additive offset. I have not tried it on log axes. As written, it handles only the left and bottom axes.

```#include <Graph Utility Procs>

// Make a list of all traces that have points that fall within the marquee
Function/S ListTracesInMarquee(graphname)
String graphname

String tlist = TraceNameList(graphname, ";", 1)
Variable ntraces = ItemsInList(tlist)

Make/O/D/N=4/FREE marqueeX, marqueeY

GetMarquee/W=\$graphname left, bottom
marqueeY = {V_top, V_top, V_bottom, V_bottom}
MarqueeX = {V_left, V_right, V_right, V_left}

String theList = ""
Variable i
for (i = 0; i < ntraces; i += 1)
String onetrace = StringFromList(i, tlist)
Wave ywave = TraceNameToWaveRef(graphname, onetrace)
Wave/Z xwave = XWaveRefFromTrace(graphname, onetrace)
if (!WaveExists(xwave))
Duplicate/O/FREE ywave, xwave
xwave = pnt2x(ywave, p)
endif
String offsetinfo = WMGetRECREATIONInfoByKey("offset(x)", traceinfo(graphname, onetrace, 0))
offsetinfo = offsetinfo[1, strlen(offsetinfo)-2]
Variable xoffset = str2num(stringfromlist(0, offsetinfo, ","))
Variable yoffset = str2num(stringfromlist(1, offsetinfo, ","))
marqueeY -= yoffset
marqueeX -= xoffset
FindPointsInPoly xwave, ywave, marqueeX, marqueeY
marqueeY += yoffset
marqueeX += xoffset
Wave W_inPoly
if (sum(W_inPoly) > 0)
theList += onetrace+";"
endif
endfor

return theList
end

// Example of using ListTracesInMarquee: change the color of all traces that intersect the marquee
Function ColorTracesInMarquee(graphname, red, green, blue)
String graphname
Variable red, green, blue

String tlist = ListTracesInMarquee(graphname)
Variable ntraces = ItemsInList(tlist)

Variable i
for (i = 0; i < ntraces; i += 1)
String onetrace = StringFromList(i, tlist)
ModifyGraph/W=\$graphname rgb(\$onetrace)=(red, green, blue)
endfor
end```