Introduction
With Smile's graphic library, you can make a PDF drawing in a graphic window, or in a graphic view. The Overlay drawing contextual menu item of the graphic views is the simplest way to go to add comments or a graphic over a plot.

to define an overlay drawing to draw over the plot in a graphic view, pull down its contextual menu (ctrlclic or rightclick in the plot) then select Overlay drawing.

this opens a new window with the script of the graphic view, and installs a handler named on OverlayDrawing(v) which contains an example script, commented out. To program your graphic in the OverlayDrawing handler, you use directly the drawing commands, without encapsulating them with BeginFigure()...EndFigure().

the v parameter in the on OverlayDrawing(v) handler carries a reference to the graphic view. The graphic view contains data visualization objects  such as curves  which in turn contain data  for instance the xdata and ydata properties of a curve. To get the coordinates of the pixel for a given data point (given in user coordinates), use convert coordinates. The script provided as the example centers a text in the graphic view. To activate the example and have it draw over the graphic view, remove the (* and *), then save the window.
Example
Here is a more sophisticated example, which performs computations with a curve's data in order to number its vertices. The script calls a handler to compute the vertices (in user coordinates), then it uses convert coordinates to draw a circle around each vertex and to write a number close to it.

Define a curve:
set y to randomarray 20 range {0, 100}
set c to QuickCurve(0, y, "randomized values")

In the graphic view's contexutal menu, select Overlay drawing. Replace the default script with the following.
on getmaxs(x, y)
set n to (count y)
set {xl, yl} to {extractarray x at 1 for (n  2), extractarray y at 1 for (n  2)}
set {xc, yc} to {extractarray x at 2 for (n  2), extractarray y at 2 for (n  2)}
set {xr, yr} to {extractarray x at 3 for (n  2), extractarray y at 3 for (n  2)}
set m to evalformula "(yc > yl) & (yc > yr)" with {yl:yl, yc:yc, yr:yr}
set {xx, yy} to maskarray {xc, yc} with m
return {xx as list of real, yy as list of real}
end getmaxs
on OverlayDrawing(v)
try
set c to curve 1 of v
set {xx, yy} to getmaxs(xdata of c, ydata of c)
repeat with k from 1 to (count yy)
set xi to (get item k of xx)
set yi to (get item k of yy)
set {i, j} to convert coordinates {xi, yi} in v
SetPenColor({1, 0, 0, 0.9})
SetPenWidth(3)
MoveTo({i + 6, j})
ArcPath({i, j}, 6, 0, 2 * pi, true)
DrawPath(2)
TextMoveTo({i, j})
SetTextSize(15)
DrawString("[br]" & k)
end repeat
TextMoveTo({200, 50})
SetTextSize(12)
SetFillColor({0, 0, 0, 1})
DrawString("(" & (count yy) & " maximums)")
on error strErr
postit strErr
end try
end OverlayDrawing
Import script

An overlay drawing over a curve
